1

WEB "WSGI pep 3333" API (教育目的) でこの構造に従いたい:

/home/
 `--app.py
 `--API_module/
    `--__init__.py
    `--api.py
    `--exceptions.py
 `--modules/
     `--default/
        `--__init__.py
         `--default.py

app.pyAPI_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したがって、すべての動的モジュールでそれらを利用して使用する方法を知りたいです。

アイデア、提案、コメントは大歓迎です。

4

1 に答える 1

2

の問題ですsys.path

セットアップでは、API_modulefrom が含まれているためapp.py、アプリケーションのルートが含まれている必要があるため、通常の方法で をsys.path含める必要があります。API_module

from API_module import exceptions

また

from API_module.exceptions import *

使い方次第。

ところで、 modules/` ルート ディレクトリを使用pymod = __import__('modules.default.default', fromlist=[''])して配置することをお勧めします。__init__.py' file in the

于 2013-11-04T14:53:34.373 に答える