mgood@110: from datetime import datetime cmlenz@4: mgood@110: from sqlobject import * mgood@110: mgood@110: from turbogears import identity mgood@110: from turbogears.database import PackageHub mgood@110: cmlenz@230: hub = PackageHub("genshitest") mgood@110: __connection__ = hub mgood@110: mgood@110: # class YourDataClass(SQLObject): mgood@110: # pass mgood@110: mgood@110: class Visit(SQLObject): mgood@110: class sqlmeta: mgood@110: table="visit" mgood@110: mgood@110: visit_key= StringCol( length=40, alternateID=True, mgood@110: alternateMethodName="by_visit_key" ) mgood@110: created= DateTimeCol( default=datetime.now ) mgood@110: expiry= DateTimeCol() mgood@110: mgood@110: def lookup_visit( cls, visit_key ): mgood@110: try: mgood@110: return cls.by_visit_key( visit_key ) mgood@110: except SQLObjectNotFound: mgood@110: return None mgood@110: lookup_visit= classmethod(lookup_visit) mgood@110: mgood@110: class VisitIdentity(SQLObject): mgood@110: visit_key = StringCol(length=40, alternateID=True, mgood@110: alternateMethodName="by_visit_key") mgood@110: user_id = IntCol() mgood@110: mgood@110: mgood@110: class Group(SQLObject): mgood@110: """ mgood@110: An ultra-simple group definition. mgood@110: """ mgood@110: mgood@110: # names like "Group", "Order" and "User" are reserved words in SQL mgood@110: # so we set the name to something safe for SQL mgood@110: class sqlmeta: mgood@110: table="tg_group" mgood@110: mgood@110: group_name = UnicodeCol(length=16, alternateID=True, mgood@110: alternateMethodName="by_group_name") mgood@110: display_name = UnicodeCol(length=255) mgood@110: created = DateTimeCol(default=datetime.now) mgood@110: mgood@110: # collection of all users belonging to this group mgood@110: users = RelatedJoin("User", intermediateTable="user_group", mgood@110: joinColumn="group_id", otherColumn="user_id") mgood@110: mgood@110: # collection of all permissions for this group mgood@110: permissions = RelatedJoin("Permission", joinColumn="group_id", mgood@110: intermediateTable="group_permission", mgood@110: otherColumn="permission_id") mgood@110: mgood@110: mgood@110: class User(SQLObject): mgood@110: """ mgood@110: Reasonably basic User definition. Probably would want additional attributes. mgood@110: """ mgood@110: # names like "Group", "Order" and "User" are reserved words in SQL mgood@110: # so we set the name to something safe for SQL mgood@110: class sqlmeta: mgood@110: table="tg_user" mgood@110: mgood@110: user_name = UnicodeCol(length=16, alternateID=True, mgood@110: alternateMethodName="by_user_name") mgood@110: email_address = UnicodeCol(length=255, alternateID=True, mgood@110: alternateMethodName="by_email_address") mgood@110: display_name = UnicodeCol(length=255) mgood@110: password = UnicodeCol(length=40) mgood@110: created = DateTimeCol(default=datetime.now) mgood@110: mgood@110: # groups this user belongs to mgood@110: groups = RelatedJoin("Group", intermediateTable="user_group", mgood@110: joinColumn="user_id", otherColumn="group_id") mgood@110: mgood@110: def _get_permissions(self): mgood@110: perms = set() mgood@110: for g in self.groups: mgood@110: perms = perms | set(g.permissions) mgood@110: return perms mgood@110: mgood@110: def _set_password(self, cleartext_password): mgood@110: "Runs cleartext_password through the hash algorithm before saving." mgood@110: hash = identity.encrypt_password(cleartext_password) mgood@110: self._SO_set_password(hash) mgood@110: mgood@110: def set_password_raw(self, password): mgood@110: "Saves the password as-is to the database." mgood@110: self._SO_set_password(password) mgood@110: mgood@110: mgood@110: mgood@110: class Permission(SQLObject): mgood@110: permission_name = UnicodeCol(length=16, alternateID=True, mgood@110: alternateMethodName="by_permission_name") mgood@110: description = UnicodeCol(length=255) mgood@110: mgood@110: groups = RelatedJoin("Group", mgood@110: intermediateTable="group_permission", mgood@110: joinColumn="permission_id", mgood@110: otherColumn="group_id") mgood@110: mgood@110: