我想为 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()
基于api.py
“HTTP GET 请求”将加载存储在名为 目录的模块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
在所有动态模块中利用和使用它们。
欢迎任何想法,建议评论。