summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--paste/servers/__init__.py1
-rw-r--r--paste/servers/cgi/__init__.py1
-rw-r--r--paste/servers/cgi/cgiserver.py (renamed from paste/cgiserver.py)0
-rw-r--r--paste/servers/scgi/__init__.py1
-rw-r--r--paste/servers/scgi/scgiserver.py (renamed from paste/scgiserver.py)0
-rw-r--r--paste/servers/wsgiutils.py17
-rw-r--r--paste/util/plugin.py54
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()