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