Lynn Rees avatar Lynn Rees committed f9c7e65

[svn]

Comments (0)

Files changed (2)

branches/0.6/trunk/setup.py

-# Copyright (c) 2006 L. C. Rees.  All rights reserved.
-#
-# Redistribution and use in source and binary forms, with or without
-# modification, are permitted provided that the following conditions are met:
-#
-# 1.  Redistributions of source code must retain the above copyright notice,
-# this list of conditions and the following disclaimer.
-# 2.  Redistributions in binary form must reproduce the above copyright
-# notice, this list of conditions and the following disclaimer in the
-# documentation and/or other materials provided with the distribution.
-# 3.  Neither the name of the Portable Site Information Project nor the names
-# of its contributors may be used to endorse or promote products derived from
-# this software without specific prior written permission.
-#
-# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
-# AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
-# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
-# ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
-# LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
-# CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
-# SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
-# INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
-# CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
-# ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
-# POSSIBILITY OF SUCH DAMAGE.
+# Copyright (c) 2006 L. C. Rees
+# All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions are met:
+#
+#    1. Redistributions of source code must retain the above copyright notice, 
+#       this list of conditions and the following disclaimer.
+#    
+#    2. Redistributions in binary form must reproduce the above copyright 
+#       notice, this list of conditions and the following disclaimer in the
+#       documentation and/or other materials provided with the distribution.
+#
+#    3. Neither the name of Django nor the names of its contributors may be used
+#       to endorse or promote products derived from this software without
+#       specific prior written permission.
+#
+# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+# AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+# DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE
+# FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+# SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
+# CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
+# OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
 
 '''setup - setuptools based setup for urlrelay.'''
 
     from distutils.core import setup
 
 setup(name='urlrelay',
-      version='0.5.7',
+      version='0.6',
       description='''RESTful WSGI URL dispatcher.''',
-      long_description='''Simple RESTful URL dispatcher for passing HTTP
-requests to a WSGI application based on matching a URL path regex
-pattern and a HTTP request method.
+      long_description='''Simple URL dispatcher that passes HTTP
+requests to a WSGI application based on a matching URL path regex
+pattern and an optional HTTP request method.
 
 Usage example:
 
 #!/bin/env python
 
-from urlrelay import register, url
+import urlrelay
 
 # Simple URL to application mapping
-@url('^/$')
+urlrelay.url('^/$')
 def index(environ, start_response):
     start_response('200 OK', [('Content-type', 'text/plain')])
     return ['Home Page']
     
 # "RESTful" URL to application mapping
-@url('^/hello_world$', 'GET')
+urlrelay.url('^/hello_world$', 'GET')
 def hello_world(environ, start_response):
     start_response('200 OK', [('Content-type', 'text/plain')])
     return ['Hello World']
     
 # URL to on-disk application mapping
-# register('^/ondisk$', 'module.on_disk')    
+# urlrelay.register('^/ondisk$', 'module.on_disk')    
 
 if __name__ == '__main__':
     from wsgiref.simple_server import make_server
       author='L. C. Rees',
       author_email='lcrees@gmail.com',
       license='BSD',
-      py_modules=['urlrelay'],
-      test_suite='test_urlrelay',
-      packages = [],
+      py_modules=['urlrelay'],
+      packages = ['tests'],
+      test_suite='tests.test_urlrelay',
       zip_safe = True,
       keywords='WSGI URL dispatch relay route middleware web HTTP',
       classifiers=['Development Status :: 4 - Beta',
-                    'Environment :: Web Environment',
-                    'License :: OSI Approved :: BSD License',
-                    'Natural Language :: English',
-                    'Operating System :: OS Independent',
-                    'Programming Language :: Python',
-                    'Topic :: Internet :: WWW/HTTP :: Dynamic Content',
-                    'Topic :: Internet :: WWW/HTTP :: Site Management',
-                    'Topic :: Internet :: WWW/HTTP :: WSGI :: Middleware'])
+          'Environment :: Web Environment',
+          'License :: OSI Approved :: BSD License',
+          'Natural Language :: English',
+          'Operating System :: OS Independent',
+          'Programming Language :: Python',
+          'Topic :: Internet :: WWW/HTTP :: Dynamic Content',
+          'Topic :: Internet :: WWW/HTTP :: Site Management',
+          'Topic :: Internet :: WWW/HTTP :: WSGI :: Middleware'])

branches/0.6/trunk/urlrelay.py

-# Copyright (c) 2005, the Lawrence Journal-World
 # Copyright (c) 2006 L. C. Rees
 # All rights reserved.
 #
         return iter(self._register)
 
     def add(self, pattern, mapping):
-        '''Add tuple to registry.'''
+        '''Add tuple to registry.
+
+        @param pattern URL pattern
+        @param mapping WSGI application mapping
+        '''
         self._register.append((pattern, mapping))
 
     def get(self):
         _reg.add(pattern, application)
     # Handle URL/method combinations
     else:
-        # Update existing registry entry
+        # Update any existing registry entry
         for entry in _reg:
             if entry[0] == pattern:
                 entry[1][method] = application
                 # Extract any positional or keywords arguments in the path
                 args, kwargs = search.groups(), search.groupdict()
                 # Eliminate keyword values in args
-                args = tuple(i for i in args if i not in kwargs.itervalues())                
+                args = tuple(i for i in args if i not in kwargs.itervalues())
                 # Cache callable, positional and keyword arguments
                 self.cache[key] = (app, args, kwargs)                
                 return app, args, kwargs
             # Return defaults if no matching path and default app is set
             if self.default is not None:
                 default = self.default
+                # Load default app from storage if module name string
                 if isinstance(default, basestring):
                     default = self.getapp(default)
                 return default, self.args, self.kwargs
-            # Raise ImportError
             else:
                 raise ImportError()
Tip: Filter by directory path e.g. /media app.js to search for public/media/app.js.
Tip: Use camelCasing e.g. ProjME to search for ProjectModifiedEvent.java.
Tip: Filter by extension type e.g. /repo .js to search for all .js files in the /repo directory.
Tip: Separate your search with spaces e.g. /ssh pom.xml to search for src/ssh/pom.xml.
Tip: Use ↑ and ↓ arrow keys to navigate and return to view the file.
Tip: You can also navigate files with Ctrl+j (next) and Ctrl+k (previous) and view the file with Ctrl+o.
Tip: You can also navigate files with Alt+j (next) and Alt+k (previous) and view the file with Alt+o.