diff options
author | Aleksey Lim <alsroot@sugarlabs.org> | 2012-03-03 01:20:15 (GMT) |
---|---|---|
committer | Aleksey Lim <alsroot@sugarlabs.org> | 2012-03-03 01:20:15 (GMT) |
commit | a5acb781e13b17147d9859acd49bfd04c61a7748 (patch) | |
tree | e33a8491fb25dac7849980663fc100c9c5434772 | |
parent | c37d03962cd4e0420714fe4827809f3a07f68d1d (diff) |
For cases when User class will be inherited, keep final class in less invasive manner
-rw-r--r-- | restful_document/user.py | 27 |
1 files changed, 16 insertions, 11 deletions
diff --git a/restful_document/user.py b/restful_document/user.py index 6832e65..d7d46d5 100644 --- a/restful_document/user.py +++ b/restful_document/user.py @@ -32,7 +32,18 @@ _logger = logging.getLogger('sugar_stats') class User(Document): - @ad.active_property(slot=1, prefix='N', full_text=True) + _final = None + + @classmethod + def init(cls, index_class): + # Since `verify()` might be called with `restful_method.User` class + # instance, it should know about real final document class + # that will be sotred in `_final`. + User._final = cls + delattr(User, 'init') + cls.init(index_class) + + @ad.active_property(slot=100, prefix='N', full_text=True) def nickname(self, value): return value @@ -40,11 +51,11 @@ class User(Document): def color(self, value): return value - @ad.active_property(slot=2, prefix='S', permissions=ad.ACCESS_CREATE) + @ad.active_property(slot=101, prefix='S', permissions=ad.ACCESS_CREATE) def machine_sn(self, value): return value - @ad.active_property(slot=3, prefix='U', permissions=ad.ACCESS_CREATE) + @ad.active_property(slot=102, prefix='U', permissions=ad.ACCESS_CREATE) def machine_uuid(self, value): return value @@ -59,7 +70,7 @@ class User(Document): enforce('pubkey' in props, _('Property "pubkey" is required for user registeration')) guid, props['pubkey'] = _load_pubkey(props['pubkey'].strip()) - doc = cls(**props) + doc = cls._final(**props) doc.set('guid', guid, raw=True) doc.post() return {'guid': guid} @@ -67,7 +78,7 @@ class User(Document): @classmethod def verify(cls, guid, signature): try: - pubkey = cls(guid).get('pubkey', raw=True) + pubkey = cls._final(guid).get('pubkey', raw=True) except ad.NotFound: raise env.Unauthorized(_('Principal user does not exist')) if env.trust_users.value: @@ -78,12 +89,6 @@ class User(Document): enforce(pubkey.verify_asn1(data, signature.decode('hex')), env.Forbidden, _('Wrong principal credentials')) - @classmethod - def init(cls, index_class, final_class=None): - # `restful_document.User` is the final class - # for all possible user documents - Document.init(index_class, final_class=User) - def _load_pubkey(pubkey): try: |