WEB "WSGI pep 3333" API (教育目的) でこの構造に従いたい:
/home/
`--app.py
`--API_module/
`--__init__.py
`--api.py
`--exceptions.py
`--modules/
`--default/
`--__init__.py
`--default.py
app.py
API_module
次のような呼び出し:
app = API_module.api()
「HTTP GET リクエスト」にapi.py
基づく は、 という名前modules
のディレクトリに格納されているモジュールをロードします。今のところ、 という名前のモジュールをロードしているだけですdefault
。
api.py
次のようになります。
import os
import imp
from exceptions import HTTPError, HTTPException
class API(object):
def __call__(self, env, start_response):
self.env = env
self.method = env['REQUEST_METHOD']
try:
body = self.router()
body.dispatch()
except HTTPError, e:
print 'HTTP method not valid %s' % e
except, Exception e:
print 'something went wrong'
start_response(status, headers)
yield body
def router():
module_path = '/home/modules/default/default.py'
if not os.access(module_path, os.R_OK):
raise HTTPException()
else:
py_mod = imp.load_source('default', '/home/modules/default/default.py'
return py_mod.Resource(self)
default.py
次のようなものが含まれています。
class Resoure(object):
def __init__(self, app):
self.app = app
def dispatch(self):
raise HTTPException()
これまでのところ、モジュールを動的にインポートできますが、モジュールから例外を発生させたい場合は、次のようになりdefault.py
ます。
グローバル名「HTTPException」が定義されていません
API_module/exceptions
したがって、すべての動的モジュールでそれらを利用して使用する方法を知りたいです。
アイデア、提案、コメントは大歓迎です。