diff options
| -rw-r--r-- | paste/servers/__init__.py | 1 | ||||
| -rw-r--r-- | paste/servers/cgi/__init__.py | 1 | ||||
| -rw-r--r-- | paste/servers/cgi/cgiserver.py (renamed from paste/cgiserver.py) | 0 | ||||
| -rw-r--r-- | paste/servers/scgi/__init__.py | 1 | ||||
| -rw-r--r-- | paste/servers/scgi/scgiserver.py (renamed from paste/scgiserver.py) | 0 | ||||
| -rw-r--r-- | paste/servers/wsgiutils.py | 17 | ||||
| -rw-r--r-- | paste/util/plugin.py | 54 |
7 files changed, 74 insertions, 0 deletions
diff --git a/paste/servers/__init__.py b/paste/servers/__init__.py new file mode 100644 index 0000000..792d600 --- /dev/null +++ b/paste/servers/__init__.py @@ -0,0 +1 @@ +# diff --git a/paste/servers/cgi/__init__.py b/paste/servers/cgi/__init__.py new file mode 100644 index 0000000..792d600 --- /dev/null +++ b/paste/servers/cgi/__init__.py @@ -0,0 +1 @@ +# diff --git a/paste/cgiserver.py b/paste/servers/cgi/cgiserver.py index 83d257c..83d257c 100644 --- a/paste/cgiserver.py +++ b/paste/servers/cgi/cgiserver.py diff --git a/paste/servers/scgi/__init__.py b/paste/servers/scgi/__init__.py new file mode 100644 index 0000000..792d600 --- /dev/null +++ b/paste/servers/scgi/__init__.py @@ -0,0 +1 @@ +# diff --git a/paste/scgiserver.py b/paste/servers/scgi/scgiserver.py index 15fbef2..15fbef2 100644 --- a/paste/scgiserver.py +++ b/paste/servers/scgi/scgiserver.py diff --git a/paste/servers/wsgiutils.py b/paste/servers/wsgiutils.py new file mode 100644 index 0000000..2c63854 --- /dev/null +++ b/paste/servers/wsgiutils.py @@ -0,0 +1,17 @@ +def serve(conf, app): + thirdparty.add_package('wsgiutils') + from wsgiutils import wsgiServer + server = wsgiServer.WSGIServer( + (conf.get('host', 'localhost'), + int(conf.get('port', 8080))), {'': app}) + server.serve_forever() + +description = """\ +WSGIUtils is a small threaded server using Python's standard +SimpleHTTPServer. +""" + +options = { + 'port': 'Port to serve on (default: 8080)', + 'host': 'Host to serve from (default: localhost, which is only accessible from the local computer; use 0.0.0.0 to make your application public)', + } diff --git a/paste/util/plugin.py b/paste/util/plugin.py new file mode 100644 index 0000000..2e61294 --- /dev/null +++ b/paste/util/plugin.py @@ -0,0 +1,54 @@ +import os +import import_string + +paste_dir = os.path.dirname(os.path.dirname(__file__)) + +def find_plugins(dir): + """ + Looks in directory for plugins, and returns them by name. + A plugin can be a .txt file, .py file, or directory. + """ + plugins = [] + dir = os.path.join(paste_dir, dir)) + for name in os.listdir(dir): + if os.path.isdir(os.path.join(dir, name)): + plugins.append(name) + ext = os.path.splitext(name)[1].lower() + if name in ('.py', '.txt'): + plugins.append(name) + return plugins + +def load_plugin_module(dir, dir_package, name): + """ + Loads a plugin module. Either the module is imported, or if it + is a .txt file then the file is loaded and must contain the name + of another module to be loaded (empty and comment lines ignored). + + dir_package is the package name of the directory. Dotted names + are not supported. + """ + dir = os.path.join(paste_dir, dir) + if os.path.exists(os.path.join(dir, name + '.txt')): + module_name = parse_txt_plugin(os.path.join(dir, name + '.txt')) + else: + module_name = dir_package + '.' + name + return import_string.import_module(module_name) + +def parse_txt_plugin(fn): + f = open(fn) + try: + module_name = None + for line in f: + line = line.strip() + if not line or line.startswith('#'): + continue + if module_name is not None: + raise ValueError( + "Plugin file %s contains more than one line that " + "could be interpreted as a module name" % fn) + if module_name is None: + raise ValueError( + "Plugin file %s does not contain a module name" % fn) + return module_name + finally: + f.close() |
