class TG_Group(Document): """An ultra-simple group definition.""" type = TextField(default="Group") group_name = TextField() display_name = TextField() created = DateTimeField(default=datetime.now) # collection of all users belonging to this group #users = RelatedJoin("TG_User", intermediateTable="tg_user_group", # joinColumn="group_id", otherColumn="user_id") # collection of all permissions for this group #permissions = RelatedJoin("TG_Permission", joinColumn="group_id", # intermediateTable="tg_group_permission", # otherColumn="permission_id") @classmethod def by_group_name(cls, group_name): """Look up Group by given group name.""" query = db.Query(cls) query.filter('group_name =', group_name) return query.get() by_name = by_group_name
class TG_User(Document): """Reasonably basic User definition.""" type = TextField(default="User") user_name = TextField() email_address = TextField() display_name = TextField() password = TextField() created = DateTimeField(default=datetime.now) # groups this user belongs to #groups = RelatedJoin("TG_Group", intermediateTable="tg_user_group", # joinColumn="user_id", otherColumn="group_id") @classmethod def by_user_name(cls, user_name): """Look up Group by given group name.""" query = db.Query(cls) query.filter('user_name =', user_name) return query.get() by_name = by_user_name @classmethod def by_email_address(cls, email_address): """Look up User by given email address.""" query = db.Query(cls) query.filter('email_address =', email_address) return query.get() by_name = by_user_name def _get_permissions(self): perms = set() for g in self.groups: perms = perms | set(g.permissions) return perms def _set_password(self, cleartext_password): """Run cleartext_password through the hash algorithm before saving.""" try: hash = identity.current_provider.encrypt_password(cleartext_password) except identity.exceptions.IdentityManagementNotEnabledException: # Creating identity provider just to encrypt password # (so we don't reimplement the encryption step). ip = CouchDbIdentityProvider() hash = ip.encrypt_password(cleartext_password) if hash == cleartext_password: log.info("Identity provider not enabled," " and no encryption algorithm specified in config." " Setting password as plaintext.") self._SO_set_password(hash) def set_password_raw(self, password): """Save the password as-is to the database.""" self._SO_set_password(password)
class TG_VisitIdentity(Document): """A visit to your website.""" type = TextField(default="VisitIdentity") ## visit_key = db.StringProperty(required=True) user_id = TextField() @classmethod def by_visit_key(cls, visit_key): """Look up VisitIdentity by given visit key.""" key = "VISITIDENTITY:%s" % visit_key return cls.load(datastore.db, key)
class TG_Permission(Document): """Permissions for a given group.""" type = TextField(default="Permission") permission_name = TextField() description = TextField() #groups = RelatedJoin("TG_Group", intermediateTable="tg_group_permission", # joinColumn="permission_id", otherColumn="group_id") @classmethod def by_permission_name(cls, permission_name): """Look up Group by given group name.""" query = db.Query(cls) query.filter('permission_name =', permission_name) return query.get() by_name = by_permission_name
class TG_Visit(Document): type = TextField(default="Visit") created = DateTimeField(default=datetime.now) expiry = DateTimeField() @classmethod def lookup_visit(cls, visit_key): key = "VISIT:%s" % visit_key return cls.load(datastore.db, key)
class URL(Document): target = TextField() public = BooleanField() added = DateTimeField(default=datetime.utcnow()) shorty_id = TextField(default=None) db = None @classmethod def load(self, id): return super(URL, self).load(URL.db, id) @classmethod def query(self, code): return URL.db.query(code) def store(self): if getattr(self._data, 'id', None) is None: new_id = self.shorty_id if self.shorty_id else None while 1: id = new_id if new_id else get_random_uid() docid = None try: docid = URL.db.resource.put(content=self._data, path='/%s/' % str(id))['id'] except: continue if docid: break self._data = URL.db.get(docid) else: super(URL, self).store(URL.db) return self @property def short_url(self): return url_for('link', uid=self.id, _external=True) def __repr__(self): return '<URL %r>' % self.id
class TG_GroupPermission(Document): type = TextField(default="GroupPermission") group_id = TextField() permission_id = TextField()
class TG_UserGroup(Document): type = TextField(default="UserGroup") user_id = TextField() group_id = TextField()
def __init__(self, name=None, default=None, verify_exists=True): self.verify_exists = verify_exists TextField.__init__(self, name, default)
def __init__(self, *args, **kwargs): TextField.__init__(self, *args, **kwargs)
class User(Document): _id = TextField() password = TextField() type = TextField(default='User') added = DateTimeField(default=datetime.now)