[Repoze-checkins] r1283 - in repoze.whooze/trunk: . repoze/whooze

Chris McDonough chrism at agendaless.com
Fri Jul 11 11:02:35 EDT 2008


Author: Chris McDonough <chrism at agendaless.com>
Date: Fri Jul 11 11:02:35 2008
New Revision: 1283

Log:
Add group support; support zope 3.6.0 testrunner.


Modified:
   repoze.whooze/trunk/   (props changed)
   repoze.whooze/trunk/repoze/whooze/auth.py
   repoze.whooze/trunk/repoze/whooze/tests.py
   repoze.whooze/trunk/setup.py

Modified: repoze.whooze/trunk/repoze/whooze/auth.py
==============================================================================
--- repoze.whooze/trunk/repoze/whooze/auth.py	(original)
+++ repoze.whooze/trunk/repoze/whooze/auth.py	Fri Jul 11 11:02:35 2008
@@ -1,5 +1,6 @@
 from zope.interface import implements
-from zope.security.interfaces import IPrincipal
+from zope.security.interfaces import IGroupAwarePrincipal
+from zope.security.interfaces import IGroup
 from zope.app.security.interfaces import IAuthentication
 from zope.app.security.interfaces import IUnauthenticatedPrincipal
 
@@ -8,12 +9,20 @@
     id = 'zope.anybody'
     title = description = u'Unauthenticated User'
 
+class WhoGroup(object):
+    implements(IGroup)
+    def __init__(self, id):
+        self.id = id
+        self.title = id
+        self.description = id
+
 class WhoPrincipal(object):
-    implements(IPrincipal)
-    def __init__(self, id, title, description):
+    implements(IGroupAwarePrincipal)
+    def __init__(self, id, title, description, groups):
         self.id = id
         self.title = title
         self.description = description
+        self.groups = [ WhoGroup(group_id) for group_id in groups ]
 
 class WhoAuthentication(object):
     implements(IAuthentication)
@@ -25,7 +34,8 @@
         userid = identity['repoze.who.userid']
         title = identity.get('title')
         description = identity.get('description')
-        principal = WhoPrincipal(userid, title, description)
+        groups = identity.get('groups', ())
+        principal = WhoPrincipal(userid, title, description, groups)
         return principal
 
     def unauthenticatedPrincipal(self):
@@ -36,4 +46,4 @@
 
     def getPrincipal(self, id):
         # Repeat after me: I'm a lame API, I'm a lame API, ...
-        return WhoPrincipal(id, '', '')
+        return WhoPrincipal(id, '', '', ())

Modified: repoze.whooze/trunk/repoze/whooze/tests.py
==============================================================================
--- repoze.whooze/trunk/repoze/whooze/tests.py	(original)
+++ repoze.whooze/trunk/repoze/whooze/tests.py	Fri Jul 11 11:02:35 2008
@@ -14,10 +14,12 @@
         return klass(*arg, **kw)
 
     def test_ctor(self):
-        principal = self._makeOne('id', 'title', 'description')
+        principal = self._makeOne('id', 'title', 'description', ('Foo',))
         self.assertEqual(principal.id, 'id')
         self.assertEqual(principal.title, 'title')
         self.assertEqual(principal.description, 'description')
+        self.assertEqual(len(principal.groups), 1)
+        self.assertEqual(principal.groups[0].id, 'Foo')
 
 integration_zcml = os.path.join(os.path.dirname(__file__), 'integration.zcml')
 
@@ -39,21 +41,29 @@
     def test_public(self):
         env = {'repoze.who.identity': {'repoze.who.userid': 'testing.somedude',
                                        'title': 'Some Dude',
-                                       'description': 'Just some dude'}}
+                                       'description': 'Just some dude',
+                                       'groups':('foo',),
+                                       }
+               }
         response = self.publish('/public.html', env=env)
         self.assertEquals(response.getStatus(), 200)
 
     def test_unauthorized(self):
         env = {'repoze.who.identity': {'repoze.who.userid': 'testing.somedude',
                                        'title': 'Some Dude',
-                                       'description': 'Just some dude'}}
+                                       'description': 'Just some dude',
+                                       'groups':('foo',),
+                                       }}
         response = self.publish('/protected.html', env=env, handle_errors=True)
         self.assertEquals(response.getStatus(), 401)
 
     def test_authorized(self):
         env = {'repoze.who.identity': {'repoze.who.userid': 'testing.somemanager',
                                        'title': 'Some Manager',
-                                       'description': "It's the manager, dude"}}
+                                       'description': "It's the manager, dude",
+                                       'groups':('foo',),
+                                       }
+               }
         response = self.publish('/protected.html', env=env)
         self.assertEquals(response.getStatus(), 200)
 
@@ -64,7 +74,10 @@
     def test_principal(self):
         env = {'repoze.who.identity': {'repoze.who.userid': 'testing.somedude',
                                        'title': 'Some Dude',
-                                       'description': 'Just some dude'}}
+                                       'description': 'Just some dude',
+                                       'groups':('foo',),
+                                       }
+               }
         response = self.publish('/principal.html', env=env)
         self.assertEquals(response.getBody(), 'Some Dude')
 

Modified: repoze.whooze/trunk/setup.py
==============================================================================
--- repoze.whooze/trunk/setup.py	(original)
+++ repoze.whooze/trunk/setup.py	Fri Jul 11 11:02:35 2008
@@ -28,10 +28,19 @@
 def alltests():
     # use the zope.testing testrunner machinery to find all the
     # test suites we've put under ourselves
-    from zope.testing.testrunner import get_options
-    from zope.testing.testrunner import find_suites
-    from zope.testing.testrunner import configure_logging
-    configure_logging()
+    try:
+        from zope.testing.testrunner import get_options
+    except ImportError:
+        from zope.testing.testrunner.options import get_options
+    try:
+        from zope.testing.testrunner import find_suites
+    except ImportError:
+        from zope.testing.testrunner.find import find_suites
+    try:
+        from zope.testing.testrunner import configure_logging
+        configure_logging()
+    except ImportError:
+        pass
     from unittest import TestSuite
     here = os.path.abspath(os.path.dirname(sys.argv[0]))
     args = sys.argv[:]


More information about the Repoze-checkins mailing list