common/view.py
branchtls-sprint
changeset 633 087e3f1e87c8
parent 632 3a394a90b702
child 635 305da8d6aa2d
--- a/common/view.py	Mon Feb 16 19:20:30 2009 +0100
+++ b/common/view.py	Mon Feb 16 19:50:10 2009 +0100
@@ -8,18 +8,41 @@
 __docformat__ = "restructuredtext en"
 
 from cStringIO import StringIO
+from warnings import warn
 
 from logilab.mtconverter import html_escape
 
 from cubicweb import NotAnEntity, NoSelectableObject
 from cubicweb.common.registerers import accepts_registerer, priority_registerer
-from cubicweb.common.selectors import (chainfirst, match_user_group, accept,
-                                       nonempty_rset, empty_rset, none_rset)
+from cubicweb.common.selectors import (yes, match_user_groups, implements,
+                                       nonempty_rset, none_rset)
 from cubicweb.common.appobject import AppRsetObject, ComponentMixIn
 from cubicweb.common.utils import UStringIO, HTMLStream
 
 _ = unicode
 
+
+def require_group_compat(registered):
+    def plug_selector(cls, vreg):
+        cls = registered(cls, vreg)
+        if getattr(cls, 'require_groups', None):
+            warn('use "use match_user_groups(group1, group2)" instead of using require_groups',
+                 DeprecationWarning)
+            cls.__selectors__ += (match_user_groups(cls.require_groups),)
+        return cls
+    return classmethod(plug_selector)
+
+def accepts_compat(registered):
+    def plug_selector(cls, vreg):
+        cls = registered(cls, vreg)
+        if getattr(cls, 'accepts', None):
+            warn('use "use match_user_groups(group1, group2)" instead of using require_groups',
+                 DeprecationWarning)
+            cls.__selectors__ += (implements(*cls.accepts),)
+        return cls
+    return classmethod(plug_selector)
+
+
 # robots control
 NOINDEX = u'<meta name="ROBOTS" content="NOINDEX" />'
 NOFOLLOW = u'<meta name="ROBOTS" content="NOFOLLOW" />'
@@ -302,9 +325,11 @@
     """base class for views applying on an entity (i.e. uniform result set)
     """
     __registerer__ = accepts_registerer
-    __selectors__ = (accept,)
+    __selectors__ = (implements('Any'),)
+    registered = accepts_compat(View.registered.im_func)
+
     category = 'entityview'
-
+    
     def field(self, label, value, row=True, show_label=True, w=None, tr=True):
         """ read-only field """
         if w is None:
@@ -325,10 +350,11 @@
     to be displayed (so they can always be displayed !)
     """
     __registerer__ = priority_registerer
-    __selectors__ = (match_user_group, none_rset)
-    require_groups = ()
+    __selectors__ = (none_rset,)
+    registered = require_group_compat(View.registered.im_func)
+    
     category = 'startupview'
-
+    
     def url(self):
         """return the url associated with this view. We can omit rql here"""
         return self.build_url('view', vid=self.id)
@@ -347,7 +373,7 @@
     result set (usually a default rql is provided by the view class)
     """
     __registerer__ = accepts_registerer
-    __selectors__ = (chainfirst(none_rset, accept),)
+    __selectors__ = ((none_rset | implements('Any')),)
 
     default_rql = None
 
@@ -404,7 +430,7 @@
             labels.append(label)
         return labels
 
-
+    
 # concrete template base classes ##############################################
 
 class Template(View):
@@ -413,9 +439,9 @@
     """
     __registry__ = 'templates'
     __registerer__ = priority_registerer
-    __selectors__ = (match_user_group,)
+    __selectors__ = (yes,)
 
-    require_groups = ()
+    registered = require_group_compat(View.registered.im_func)
 
     def template(self, oid, **kwargs):
         """shortcut to self.registry.render method on the templates registry"""