work in progress - fix deprecation of EntityAction - fix various selectors bugs tls-sprint
authorAdrien Di Mascio <Adrien.DiMascio@logilab.fr>
Tue, 17 Feb 2009 13:48:58 +0100
branchtls-sprint
changeset 657 fd019f41aa2f
parent 656 3f2956c186ef
child 658 b5c73b5cdc68
work in progress - fix deprecation of EntityAction - fix various selectors bugs
selectors.py
web/action.py
--- a/selectors.py	Tue Feb 17 13:44:31 2009 +0100
+++ b/selectors.py	Tue Feb 17 13:48:58 2009 +0100
@@ -556,12 +556,12 @@
         self.action = action
 
     @lltrace
-    def __call__(self, cls, *args, **kwargs):
+    def __call__(self, cls, req, *args, **kwargs):
         rschema = cls.schema.rschema(self.rtype)
         if not (rschema.has_perm(req, self.action)
                 or rschema.has_local_role(self.action)):
             return 0
-        return super(relation_possible, self)(cls, *args, **kwargs)
+        return super(relation_possible, self).__call__(cls, req, *args, **kwargs)
         
     def score_class(self, eclass, req):
         eschema = eclass.e_schema
@@ -906,14 +906,22 @@
         # get the unbound method
         if hasattr(registered, 'im_func'):
             registered = registered.im_func
-        return selector(registered)
         # don't rebind since it will be done automatically during
         # the assignment, inside the destination class body
-        return plugged_selector
+        return selector(registered)
     new_selector.__name__ = selector.__name__
     return new_selector
 
 
+def deprecate(registered, msg):
+    # get the unbound method
+    if hasattr(registered, 'im_func'):
+        registered = registered.im_func
+    def _deprecate(cls, vreg):
+        warn(msg, DeprecationWarning)
+        return registered(cls, vreg)
+    return _deprecate
+    
 @unbind_method
 def require_group_compat(registered):
     def plug_selector(cls, vreg):
--- a/web/action.py	Tue Feb 17 13:44:31 2009 +0100
+++ b/web/action.py	Tue Feb 17 13:48:58 2009 +0100
@@ -10,8 +10,8 @@
 
 from cubicweb import role, target
 from cubicweb.selectors import (relation_possible, match_search_state,
-                                one_line_rset, may_add_relation,
-                                accepts_compat)
+                                one_line_rset, may_add_relation, yes,
+                                accepts_compat, condition_compat, deprecate)
 from cubicweb.common.appobject import AppRsetObject
 from cubicweb.common.registerers import action_registerer
 
@@ -24,7 +24,8 @@
     """
     __registry__ = 'actions'
     __registerer__ = action_registerer
-
+    __selectors__ = (yes,) 
+    
     property_defs = {
         'visible':  dict(type='Boolean', default=True,
                          help=_('display the action or not')),
@@ -93,7 +94,10 @@
                               __redirectpath=current_entity.rest_path(), # should not be url quoted!
                               __redirectvid=self.req.form.get('__redirectvid', ''))
 
-
-EntityAction = class_moved('EntityAction', Action,
-                           'EntityAction is deprecated, use Action with appropriate selectors')
+class EntityAction(Action):
+    """DEPRECATED / BACKWARD COMPAT
+    """
+    registered = deprecate(accepts_compat(condition_compat(Action.registered)),
+                           msg='EntityAction is deprecated, use Action with '
+                           'appropriate selectors')