selectors.py
branchtls-sprint
changeset 657 fd019f41aa2f
parent 656 3f2956c186ef
child 660 5233a9457f6b
equal deleted inserted replaced
656:3f2956c186ef 657:fd019f41aa2f
   554         self.role = role
   554         self.role = role
   555         self.target_etype = target_etype
   555         self.target_etype = target_etype
   556         self.action = action
   556         self.action = action
   557 
   557 
   558     @lltrace
   558     @lltrace
   559     def __call__(self, cls, *args, **kwargs):
   559     def __call__(self, cls, req, *args, **kwargs):
   560         rschema = cls.schema.rschema(self.rtype)
   560         rschema = cls.schema.rschema(self.rtype)
   561         if not (rschema.has_perm(req, self.action)
   561         if not (rschema.has_perm(req, self.action)
   562                 or rschema.has_local_role(self.action)):
   562                 or rschema.has_local_role(self.action)):
   563             return 0
   563             return 0
   564         return super(relation_possible, self)(cls, *args, **kwargs)
   564         return super(relation_possible, self).__call__(cls, req, *args, **kwargs)
   565         
   565         
   566     def score_class(self, eclass, req):
   566     def score_class(self, eclass, req):
   567         eschema = eclass.e_schema
   567         eschema = eclass.e_schema
   568         try:
   568         try:
   569             if self.role == 'object':
   569             if self.role == 'object':
   904 def unbind_method(selector):
   904 def unbind_method(selector):
   905     def new_selector(registered):
   905     def new_selector(registered):
   906         # get the unbound method
   906         # get the unbound method
   907         if hasattr(registered, 'im_func'):
   907         if hasattr(registered, 'im_func'):
   908             registered = registered.im_func
   908             registered = registered.im_func
   909         return selector(registered)
       
   910         # don't rebind since it will be done automatically during
   909         # don't rebind since it will be done automatically during
   911         # the assignment, inside the destination class body
   910         # the assignment, inside the destination class body
   912         return plugged_selector
   911         return selector(registered)
   913     new_selector.__name__ = selector.__name__
   912     new_selector.__name__ = selector.__name__
   914     return new_selector
   913     return new_selector
   915 
   914 
   916 
   915 
       
   916 def deprecate(registered, msg):
       
   917     # get the unbound method
       
   918     if hasattr(registered, 'im_func'):
       
   919         registered = registered.im_func
       
   920     def _deprecate(cls, vreg):
       
   921         warn(msg, DeprecationWarning)
       
   922         return registered(cls, vreg)
       
   923     return _deprecate
       
   924     
   917 @unbind_method
   925 @unbind_method
   918 def require_group_compat(registered):
   926 def require_group_compat(registered):
   919     def plug_selector(cls, vreg):
   927     def plug_selector(cls, vreg):
   920         cls = registered(cls, vreg)
   928         cls = registered(cls, vreg)
   921         if getattr(cls, 'require_groups', None):
   929         if getattr(cls, 'require_groups', None):