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): |