--reloadの恩恵を受けるためにはpserveが必要。だけど、pserveはiniが必要なので、それの作り方。
参考 : http://static.agendaless.com/pytn2014/ini.html
TODO: development.ini
のuse
をcall:$APPFOLDER:__init__
ってするとエラー吐く。egg:
とは投げられる引数が違うっぽい
2つの変数を使用している。
$APPFOLDER
__init__.py
が入るディレクトリ$APPNAME
$ python setup.py develop
で$APPNAME.egg-info
ってディレクトリが生成される
<root>
setup.py
development.ini
$APPFOLDER
__init__.py
setuptoolsを使うらしい
from setuptools import setup
requires = [
'pyramid',
]
setup(name='$APPNAME',
install_requires=requires,
entry_points="""\
[paste.app_factory]
main = $APPFOLDER:main
""",
)
[app:main]
use = egg:$APPNAME
[server:main]
use = egg:pyramid#wsgiref
host = 0.0.0.0
port = 6543
from pyramid.config import Configurator
from pyramid.response import Response
def hello_world(request):
return Response('<body><h1>Hello World!</h1></body>')
def main(global_config, **settings):
config = Configurator(settings=settings)
config.add_route('hello', '/')
config.add_view(hello_world, route_name='hello')
return config.make_wsgi_app()
setup.py
でエントリポイントとして設定された関数が呼ばれる(引数については未検証)
サーバー起動の命令は不要。
make_wsgi_app()
をreturnする必要がある。
- (初回のみ?)
$ python setup.py develop
でsetup.py
のあるディレクトリに$APPNAME.egg-info
ディレクトリができる $ pserve development.ini
多分こんな感じ
$ python setup.py develop
が呼ばれると、setup.py
内のentry_points
に記述されている内容がまるまる$APPNAME.egg-info/entry_points.txt
にコピーされる- ここに記述されているエントリポイントが呼ばれることになる
$ pserve development.ini
でpserve
はdevelopment.ini
の[app:main]
セクションにあるuse = egg:$APPNAME
を見て、$APPNAME.egg-info
を捜索する$APPNAME.egg-info/entry_points.txt
に記述されているエントリポイントを呼ぶ($APPFOLDER/__init__.py
のmain
が呼ばれる)