Par défaut, pyramid est fourni avec une commande qui prend un fichier de configuration comme argument lors de son exécution. (par exemple pserve, proutes ...) Les commandes existantes font plus que simplement lire le contenu du fichier de configuration avec un analyseur.
Je veux faire de même lorsque je crée moi-même une nouvelle commande. Dans ce cas, utilisez la fonction sous pyramid.paster.bootstrap.
pyramid.paster.bootstrap
pyramid.paster.bootstrap prend le chemin du fichier de configuration comme argument et exécute la fonction (généralement main () de l'application) enregistrée au point d'entrée écrit dans le fichier de configuration. Renvoie un dictionnaire avec la valeur de retour app, etc. après l'exécution.
Lorsque development.ini s'écrit comme suit
[app:main]
use = egg:qiita
Parce que le point d'entrée est enregistré dans setup.py.
setup(name='qiita',
...
entry_points="""\
[paste.app_factory]
main = qiita:main
""",
...
)
qiita.main () est appelé.
Comment créer une commande pour lire un fichier de configuration avec la structure de fichiers suivante.
$ tree
.
|-- development.ini
|-- production.ini
|-- qiita
| |-- __init__.py
| |-- scripts.py
| `-- views.py
`-- setup.py
Écrivez l'implémentation de la commande à créer dans qiita / scripts.py. Créé comme suit à l'aide de bootstrap. Cette fois, la commande imprime simplement la valeur de retour de bootstrap.
# -*- coding:utf-8 -*-
from pyramid.paster import bootstrap
import sys
import pprint
def sample(args=sys.argv):
config_path = sys.argv[1]
env = bootstrap(config_path)
pprint.pprint(env)
Ajoutez la description de console_scripts à setup.py. Je vais l'enregistrer avec le nom qiita-sample.
setup(name='qiita',
...
entry_points="""\
[paste.app_factory]
main = qiita:main
[console_scripts]
qiita-sample = qiita.scripts:sample
""",
...
)
Après la réinstallation avec setup.py, vous pouvez utiliser le qiita-sample enregistré. Si vous spécifiez le fichier de paramètres et exécutez qiita-sample, vous pouvez obtenir l'environnement dans lequel l'application est chargée.
$ python setup.py develop
$ qiita-sample development.ini
{'app': <pyramid.router.Router object at 0x10edd2990>,
'closer': <function prepare.<locals>.closer at 0x10f30e440>,
'registry': <Registry qiita>,
'request': <Request at 0x10e140d90 GET http://localhost/>,
'root': <pyramid.traversal.DefaultRootFactory object at 0x10ede9f10>,
'root_factory': <class 'pyramid.traversal.DefaultRootFactory'>}
Recommended Posts