Standardmäßig wird pyramid mit einem Befehl versehen, der bei der Ausführung eine Konfigurationsdatei als Argument verwendet. (z. B. pserve, proutes ...) Die vorhandenen Befehle lesen nicht nur den Inhalt der Konfigurationsdatei mit dem Parser.
Ich möchte dasselbe tun, wenn ich selbst einen neuen Befehl erstelle. Verwenden Sie in diesem Fall die Funktion unter pyramid.paster.bootstrap.
pyramid.paster.bootstrap
pyramid.paster.bootstrap verwendet den Pfad der Konfigurationsdatei als Argument und führt die Funktion (normalerweise main () der App) aus, die an dem in die Konfigurationsdatei geschriebenen Einstiegspunkt registriert ist. Gibt nach der Ausführung ein Wörterbuch mit der Rückgabewert-App usw. zurück.
Wenn development.ini wie folgt geschrieben wird
[app:main]
use = egg:qiita
Weil der Einstiegspunkt in setup.py registriert ist.
setup(name='qiita',
...
entry_points="""\
[paste.app_factory]
main = qiita:main
""",
...
)
qiita.main () heißt.
So erstellen Sie einen Befehl zum Lesen einer Konfigurationsdatei mit der folgenden Dateistruktur.
$ tree
.
|-- development.ini
|-- production.ini
|-- qiita
| |-- __init__.py
| |-- scripts.py
| `-- views.py
`-- setup.py
Schreiben Sie die Implementierung des zu erstellenden Befehls in qiita / scripts.py. Erstellt wie folgt mit Bootstrap. Dieses Mal druckt der Befehl nur den Rückgabewert von 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)
Fügen Sie die Beschreibung von console_scripts zu setup.py hinzu. Ich werde es mit dem Namen Qiita-Probe registrieren.
setup(name='qiita',
...
entry_points="""\
[paste.app_factory]
main = qiita:main
[console_scripts]
qiita-sample = qiita.scripts:sample
""",
...
)
Nach der Neuinstallation mit setup.py können Sie das registrierte Qiita-Beispiel verwenden. Wenn Sie die Einstellungsdatei angeben und qiita-sample ausführen, können Sie die Umgebung abrufen, in der die App geladen wird.
$ 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'>}