[Repoze-checkins] r779 - in repoze.trac/trunk: . repoze/trac

Chris McDonough chrism at agendaless.com
Thu Mar 6 04:08:10 UTC 2008


Author: Chris McDonough <chrism at agendaless.com>
Date: Wed Mar  5 23:08:10 2008
New Revision: 779

Log:
0.5 (2008-03-05)

 - Added 'remote_user_header' config value; if this is present,
   repoze.trac will turn this value in the environment into the
   REMOTE_USER value (if a REMOTE_USER is not already set).

 - Added some tests.




Added:
   repoze.trac/trunk/repoze/trac/tests.py   (contents, props changed)
Modified:
   repoze.trac/trunk/CHANGES.txt
   repoze.trac/trunk/repoze/trac/__init__.py
   repoze.trac/trunk/setup.py

Modified: repoze.trac/trunk/CHANGES.txt
==============================================================================
--- repoze.trac/trunk/CHANGES.txt	(original)
+++ repoze.trac/trunk/CHANGES.txt	Wed Mar  5 23:08:10 2008
@@ -1,3 +1,11 @@
+0.5 (2008-03-05)
+
+ - Added 'remote_user_header' config value; if this is present,
+   repoze.trac will turn this value in the environment into the
+   REMOTE_USER value (if a REMOTE_USER is not already set).
+
+ - Added some tests.
+
 0.4
 
  - Added egg-info directory to ignores (rocky)

Modified: repoze.trac/trunk/repoze/trac/__init__.py
==============================================================================
--- repoze.trac/trunk/repoze/trac/__init__.py	(original)
+++ repoze.trac/trunk/repoze/trac/__init__.py	Wed Mar  5 23:08:10 2008
@@ -7,23 +7,35 @@
 from trac.web.main import dispatch_request
 
 class TracApp:
-    def __init__(self, environkw):
+    def __init__(self, environkw, remote_user_header,
+                 dispatch_request=dispatch_request):
         self.environkw = environkw
+        self.remote_user_header = remote_user_header
+        self.dispatch_request = dispatch_request
 
     def __call__(self, environ, start_response):
+        if (not environ.has_key('REMOTE_USER')) and self.remote_user_header:
+            remote_user = environ.get(self.remote_user_header)
+            if remote_user:
+                environ['REMOTE_USER'] = remote_user
         for k, v in self.environkw.items():
             environ[k] = v
-        return dispatch_request(environ, start_response)
+        return self.dispatch_request(environ, start_response)
 
-def make_trac(global_conig, **kw):
+def make_trac(global_config, **kw):
     path = kw.get('env_path', None)
     if path is None:
         raise ValueError('"env_path=" required for make_trac setup')
 
     environkw = {}
+    remote_user_header = None
     for k, v in kw.items():
-        environkw['trac.'+k] = v
-    return TracApp(environkw)
+        if k == 'remote_user_header':
+            remote_user_header = v
+        else:
+            environkw['trac.'+k] = v
+        
+    return TracApp(environkw, remote_user_header)
 
 here = os.path.abspath(os.path.dirname(__file__))
 

Added: repoze.trac/trunk/repoze/trac/tests.py
==============================================================================
--- (empty file)
+++ repoze.trac/trunk/repoze/trac/tests.py	Wed Mar  5 23:08:10 2008
@@ -0,0 +1,68 @@
+import unittest
+
+class TestMakeTrac(unittest.TestCase):
+    def _getFUT(self):
+        from repoze.trac import make_trac
+        return make_trac
+
+    def test_no_env_path(self):
+        f = self._getFUT()
+        self.assertRaises(ValueError, f, None)
+
+    def test_other(self):
+        f = self._getFUT()
+        result = f(None, env_path='foo', remote_user_header='bar', dummy='yup')
+        self.assertEqual(result.environkw, {'trac.env_path':'foo',
+                                            'trac.dummy':'yup'})
+        self.assertEqual(result.remote_user_header, 'bar')
+
+class TestTracApp(unittest.TestCase):
+    def _getTargetClass(self):
+        from repoze.trac import TracApp
+        return TracApp
+
+    def _makeOne(self, environkw, remote_user_header, dispatch):
+        return self._getTargetClass()(environkw, remote_user_header, dispatch)
+
+    def test_call_with_remoteuser(self):
+        next = DummyApp()
+        app = self._makeOne({}, 'ru_header', next)
+        environ = {'REMOTE_USER':'fred', 'ru_header':'otherguy'}
+        app(environ, None)
+        self.assertEqual(environ['REMOTE_USER'], 'fred')
+
+    def test_call_noremote_user_with_header_in_environ_no_option(self):
+        next = DummyApp()
+        app = self._makeOne({}, None, next)
+        environ = {'ru_header':'otherguy'}
+        app(environ, None)
+        self.failIf('REMOTE_USER' in environ)
+
+    def test_call_remote_user_with_header_in_environ_with_option(self):
+        next = DummyApp()
+        app = self._makeOne({}, 'ru_header', next)
+        environ = {'REMOTE_USER':'fred', 'ru_header':'otherguy'}
+        app(environ, None)
+        self.assertEqual(environ['REMOTE_USER'], 'fred')
+
+    def test_call_noremote_user_with_header_in_environ_with_option(self):
+        next = DummyApp()
+        app = self._makeOne({}, 'ru_header', next)
+        environ = {'ru_header':'otherguy'}
+        app(environ, None)
+        self.assertEqual(environ['REMOTE_USER'], 'otherguy')
+
+    def test_app_called_with_values(self):
+        next = DummyApp()
+        app = self._makeOne({'trac.biz':'baz'}, 'ru_header', next)
+        environ = {}
+        app(environ, None)
+        self.assertEqual(environ['trac.biz'], 'baz')
+
+class DummyApp:
+    def __call__(self, environ, start_response):
+        self.environ = environ
+        self.start_response = start_response
+        
+         
+        

Modified: repoze.trac/trunk/setup.py
==============================================================================
--- repoze.trac/trunk/setup.py	(original)
+++ repoze.trac/trunk/setup.py	Wed Mar  5 23:08:10 2008
@@ -12,7 +12,7 @@
 #
 ##############################################################################
 
-__version__ = '0.4'
+__version__ = '0.5'
 
 import os
 
@@ -47,9 +47,9 @@
       include_package_data=True,
       namespace_packages=['repoze'],
       zip_safe=False,
-      tests_require = [],
+      tests_require = ['setuptools', 'trac', 'pysqlite', 'PasteScript'],
       install_requires=['setuptools', 'trac', 'pysqlite', 'PasteScript'],
-      #test_suite="repoze.",
+      test_suite="repoze.trac.tests",
       entry_points = """\
         [repoze.project]
         initialize = repoze.trac:make_instance


More information about the Repoze-checkins mailing list