aboutsummaryrefslogtreecommitdiffstats
path: root/Bugs-Everywhere-Web/beweb/model.py
diff options
context:
space:
mode:
Diffstat (limited to 'Bugs-Everywhere-Web/beweb/model.py')
-rw-r--r--Bugs-Everywhere-Web/beweb/model.py105
1 files changed, 99 insertions, 6 deletions
diff --git a/Bugs-Everywhere-Web/beweb/model.py b/Bugs-Everywhere-Web/beweb/model.py
index 6a603bb..5537dae 100644
--- a/Bugs-Everywhere-Web/beweb/model.py
+++ b/Bugs-Everywhere-Web/beweb/model.py
@@ -1,15 +1,108 @@
+from datetime import datetime
+
from sqlobject import *
from turbogears.database import PackageHub
-# Uncomment the following line if you wish to use Identity and SO_Provider
-from turbogears.identity.soprovider import TG_User, TG_Group, TG_Permission
from turbogears import identity
hub = PackageHub("beweb")
__connection__ = hub
+class Visit(SQLObject):
+ class sqlmeta:
+ table = "visit"
+
+ visit_key = StringCol(length=40, alternateID=True,
+ alternateMethodName="by_visit_key")
+ created = DateTimeCol(default=datetime.now)
+ expiry = DateTimeCol()
+
+ def lookup_visit(cls, visit_key):
+ try:
+ return cls.by_visit_key(visit_key)
+ except SQLObjectNotFound:
+ return None
+ lookup_visit = classmethod(lookup_visit)
+
+class VisitIdentity(SQLObject):
+ visit_key = StringCol(length=40, alternateID=True,
+ alternateMethodName="by_visit_key")
+ user_id = IntCol()
+
+
+class Group(SQLObject):
+ """
+ An ultra-simple group definition.
+ """
+
+ # names like "Group", "Order" and "User" are reserved words in SQL
+ # so we set the name to something safe for SQL
+ class sqlmeta:
+ table = "tg_group"
+
+ group_name = UnicodeCol(length=16, alternateID=True,
+ alternateMethodName="by_group_name")
+ display_name = UnicodeCol(length=255)
+ created = DateTimeCol(default=datetime.now)
+
+ # collection of all users belonging to this group
+ users = RelatedJoin("User", intermediateTable="user_group",
+ joinColumn="group_id", otherColumn="user_id")
+
+ # collection of all permissions for this group
+ permissions = RelatedJoin("Permission", joinColumn="group_id",
+ intermediateTable="group_permission",
+ otherColumn="permission_id")
+
+
+class User(SQLObject):
+ """
+ Reasonably basic User definition. Probably would want additional attributes.
+ """
+ # names like "Group", "Order" and "User" are reserved words in SQL
+ # so we set the name to something safe for SQL
+ class sqlmeta:
+ table = "tg_user"
+
+ child_name = UnicodeCol(length=255)
+ user_name = UnicodeCol(length=16, alternateID=True,
+ alternateMethodName="by_user_name")
+ email_address = UnicodeCol(length=255, alternateID=True,
+ alternateMethodName="by_email_address")
+ display_name = UnicodeCol(length=255)
+ password = UnicodeCol(length=40)
+ created = DateTimeCol(default=datetime.now)
+
+ # groups this user belongs to
+ groups = RelatedJoin("Group", intermediateTable="user_group",
+ joinColumn="user_id", otherColumn="group_id")
+
+ def _get_permissions(self):
+ perms = set()
+ for g in self.groups:
+ perms = perms | set(g.permissions)
+ return perms
+
+ def _set_password(self, cleartext_password):
+ "Runs cleartext_password through the hash algorithm before saving."
+ hash = identity.encrypt_password(cleartext_password)
+ self._SO_set_password(hash)
+
+ def set_password_raw(self, password):
+ "Saves the password as-is to the database."
+ self._SO_set_password(password)
+
+
+
+class Permission(SQLObject):
+ permission_name = UnicodeCol(length=16, alternateID=True,
+ alternateMethodName="by_permission_name")
+ description = UnicodeCol(length=255)
+
+ groups = RelatedJoin("Group",
+ intermediateTable="group_permission",
+ joinColumn="permission_id",
+ otherColumn="group_id")
+
def people_map():
- return dict([(u.userId, u.displayName) for u in TG_User.select() if
+ return dict([(u.userId, u.displayName) for u in User.select() if
"fixbugs" in identity.current.permissions])
-
-# class YourDataClass(SQLObject):
-# pass