Skip to content

Instantly share code, notes, and snippets.

@suitougreentea
Last active August 29, 2015 14:11
Show Gist options
  • Save suitougreentea/ab6ba77051704d9a8037 to your computer and use it in GitHub Desktop.
Save suitougreentea/ab6ba77051704d9a8037 to your computer and use it in GitHub Desktop.

--reloadの恩恵を受けるためにはpserveが必要。だけど、pserveはiniが必要なので、それの作り方。

参考 : http://static.agendaless.com/pytn2014/ini.html

TODO: development.iniusecall:$APPFOLDER:__init__ってするとエラー吐く。egg:とは投げられる引数が違うっぽい

2つの変数を使用している。

  • $APPFOLDER __init__.pyが入るディレクトリ
  • $APPNAME $ python setup.py develop$APPNAME.egg-infoってディレクトリが生成される

pserveを動かすのに(たぶん)最小限必要なファイル構成

  • <root>
    • setup.py
    • development.ini
    • $APPFOLDER
      • __init__.py

setup.py

setuptoolsを使うらしい

from setuptools import setup
 
requires = [
  'pyramid',
]
 
setup(name='$APPNAME',
install_requires=requires,
entry_points="""\
  [paste.app_factory]
  main = $APPFOLDER:main
  """,
)

development.ini

[app:main]
use = egg:$APPNAME

[server:main]
use = egg:pyramid#wsgiref
host = 0.0.0.0
port = 6543

__init__.py

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する必要がある。

ついに Usage

  1. (初回のみ?) $ python setup.py developsetup.pyのあるディレクトリに$APPNAME.egg-infoディレクトリができる
  2. $ pserve development.ini

つまり?

多分こんな感じ

  • $ python setup.py developが呼ばれると、setup.py内のentry_pointsに記述されている内容がまるまる$APPNAME.egg-info/entry_points.txtにコピーされる
    • ここに記述されているエントリポイントが呼ばれることになる
  • $ pserve development.inipservedevelopment.ini[app:main]セクションにあるuse = egg:$APPNAMEを見て、$APPNAME.egg-infoを捜索する
  • $APPNAME.egg-info/entry_points.txtに記述されているエントリポイントを呼ぶ($APPFOLDER/__init__.pymainが呼ばれる)
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment