On Mon, Jan 26, 2009 at 1:55 PM, Florent Aide <florent.a...@gmail.com> wrote:
> Hi,
>
> I'd like to write custom Predicates for an application using
> repoze.what with TurboGears2. My predicate would perform some query on
> the database and check the resulting object against predefined
> criterion.

a here is the patch that would permit to write the kind of predicates
I need... Gustavo, what do you think? Is that ok with you to apply
this on the trunk. You broke compatibility anyway so why not break it
a little more... :)

Florent.
Index: repoze/what/patterns/groups/predicates.py
===================================================================
--- repoze/what/patterns/groups/predicates.py	(révision 3357)
+++ repoze/what/patterns/groups/predicates.py	(copie de travail)
@@ -49,7 +49,7 @@
         super(in_group, self).__init__(**kwargs)
         self.group_name = group_name
 
-    def evaluate(self, environ, credentials):
+    def evaluate(self, environ, credentials, *args, **kwargs):
         if credentials and self.group_name in credentials.get('groups'):
             return
         self.unmet()
@@ -112,7 +112,7 @@
         super(has_permission, self).__init__(**kwargs)
         self.permission_name = permission_name
 
-    def evaluate(self, environ, credentials):
+    def evaluate(self, environ, credentials, *args, **kwargs):
         if credentials and \
            self.permission_name in credentials.get('permissions'):
             return
Index: repoze/what/authorize.py
===================================================================
--- repoze/what/authorize.py	(révision 3357)
+++ repoze/what/authorize.py	(copie de travail)
@@ -27,7 +27,7 @@
     pass
 
 
-def check_authorization(predicate, environ):
+def check_authorization(predicate, environ, *args, **kwargs):
     """
     Verify if the current user really can access the requested source.
     
@@ -39,7 +39,7 @@
     logger = environ.get('repoze.who.logger')
     credentials = environ.get('repoze.what.credentials')
     try:
-        predicate and predicate.evaluate(environ, credentials)
+        predicate and predicate.evaluate(environ, credentials, *args, **kwargs)
     except PredicateError, error:
         logger and logger.info(u'Authorization denied: %s' % error)
         raise NotAuthorizedError(error)
Index: repoze/what/predicates.py
===================================================================
--- repoze/what/predicates.py	(révision 3357)
+++ repoze/what/predicates.py	(copie de travail)
@@ -50,7 +50,7 @@
         if msg:
             self.message = msg
     
-    def evaluate(self, environ, credentials):
+    def evaluate(self, environ, credentials, *args, **kwargs):
         """
         Raise an exception if the predicate is not met.
         
@@ -79,7 +79,7 @@
                     self.right_month = right_month
                     super(is_month, self).__init__(**kwargs)
                 
-                def evaluate(self, environ, credentials):
+                def evaluate(self, environ, credentials, *args, **kwargs):
                     today = date.today()
                     if today.month != self.right_month:
                         # Raise an exception because the predicate is not met.
@@ -163,9 +163,9 @@
         super(Not, self).__init__(**kwargs)
         self.predicate = predicate
     
-    def evaluate(self, environ, credentials):
+    def evaluate(self, environ, credentials, *args, **kwargs):
         try:
-            self.predicate.evaluate(environ, credentials)
+            self.predicate.evaluate(environ, credentials, *args, **kwargs)
         except PredicateError, error:
             return
         self.unmet()
@@ -185,7 +185,7 @@
     
     """
     
-    def evaluate(self, environ, credentials):
+    def evaluate(self, environ, credentials, *args, **kwargs):
         """
         Evaluate all the predicates it contains.
         
@@ -195,7 +195,7 @@
         
         """
         for p in self.predicates:
-            p.evaluate(environ, credentials)
+            p.evaluate(environ, credentials, *args, **kwargs)
 
 
 class Any(CompoundPredicate):
@@ -214,7 +214,7 @@
     message = u"At least one of the following predicates must be met: " \
                "%(failed_predicates)s"
     
-    def evaluate(self, environ, credentials):
+    def evaluate(self, environ, credentials, *args, **kwargs):
         """
         Evaluate all the predicates it contains.
         
@@ -226,7 +226,7 @@
         errors = []
         for p in self.predicates:
             try:
-                p.evaluate(environ, credentials)
+                p.evaluate(environ, credentials, *args, **kwargs)
                 return
             except PredicateError, exc:
                 errors.append(unicode(exc))
@@ -253,7 +253,7 @@
         super(is_user, self).__init__(**kwargs)
         self.user_name = user_name
 
-    def evaluate(self, environ, credentials):
+    def evaluate(self, environ, credentials, *args, **kwargs):
         if credentials and \
            self.user_name == credentials.get('repoze.what.userid'):
             return
@@ -273,7 +273,7 @@
     
     message = u"The current user must have been authenticated"
 
-    def evaluate(self, environ, credentials):
+    def evaluate(self, environ, credentials, *args, **kwargs):
         if not credentials:
             self.unmet()
 
_______________________________________________
Repoze-dev mailing list
Repoze-dev@lists.repoze.org
http://lists.repoze.org/listinfo/repoze-dev

Reply via email to