Changeset 5169 for projects/tg.devtools
- Timestamp:
- 08/19/08 17:42:53 (3 months ago)
- Files:
Legend:
- Unmodified
- Added
- Removed
- Modified
- Copied
- Moved
projects/tg.devtools/trunk/devtools/templates/turbogears/+package+/model/identity.py_tmpl
r5159 r5169 1 1 {{if identity == "sqlalchemy"}} 2 from tg import config3 from sqlalchemy import *4 from sqlalchemy.orm import mapper, relation5 from {{package}}.model import metadata, DBSession6 7 import datetime8 from sqlalchemy import ForeignKey9 2 import md5 10 3 import sha 4 from datetime import datetime 11 5 12 groups_table = Table('tg_group', metadata, 13 Column('group_id', Integer, primary_key=True), 14 Column('group_name', Unicode(16), unique=True), 15 Column('display_name', Unicode(255)), 16 Column('created', DateTime, default=datetime.datetime.now) 6 from tg import config 7 from sqlalchemy import Table, ForeignKey, Column 8 from sqlalchemy.types import String, Unicode, UnicodeText, Integer, DateTime, \ 9 Boolean, Float 10 from sqlalchemy.orm import relation, backref, synonym 11 12 from {{package}}.model import DeclarativeBase, metadata, DBSession 13 14 15 # This is the association table for the many-to-many relationship between 16 # groups and permissions. 17 group_permission_table = Table('tg_group_permission', metadata, 18 Column('group_id', Integer, ForeignKey('tg_group.group_id', 19 onupdate="CASCADE", ondelete="CASCADE")), 20 Column('permission_id', Integer, ForeignKey('tg_permission.permission_id', 21 onupdate="CASCADE", ondelete="CASCADE")) 17 22 ) 18 23 19 users_table = Table('tg_user', metadata, 20 Column('user_id', Integer, primary_key=True), 21 Column('user_name', Unicode(16), unique=True), 22 Column('email_address', Unicode(255), unique=True), 23 Column('display_name', Unicode(255)), 24 Column('password', Unicode(40)), 25 Column('created', DateTime, default=datetime.datetime.now) 26 ) 27 28 permissions_table = Table('tg_permission', metadata, 29 Column('permission_id', Integer, primary_key=True), 30 Column('permission_name', Unicode(16), unique=True), 31 Column('description', Unicode(255)) 32 ) 33 24 # This is the association table for the many-to-many relationship between 25 # groups and members - this is, the memberships. 34 26 user_group_table = Table('tg_user_group', metadata, 35 27 Column('user_id', Integer, ForeignKey('tg_user.user_id', … … 39 31 ) 40 32 41 group_permission_table = Table('tg_group_permission', metadata, 42 Column('group_id', Integer, ForeignKey('tg_group.group_id', 43 onupdate="CASCADE", ondelete="CASCADE")), 44 Column('permission_id', Integer, ForeignKey('tg_permission.permission_id', 45 onupdate="CASCADE", ondelete="CASCADE")) 46 ) 33 # identity model 47 34 48 # identity model 49 class Group(object): 35 class Group(DeclarativeBase): 50 36 """An ultra-simple group definition. 51 37 """ 38 __tablename__ = 'tg_group' 39 40 group_id = Column(Integer, autoincrement=True, primary_key=True) 41 42 group_name = Column(Unicode(16), unique=True) 43 44 display_name = Column(Unicode(255)) 45 46 created = Column(DateTime, default=datetime.now) 47 48 users = relation('User', secondary=user_group_table, backref='groups') 49 52 50 def __repr__(self): 53 51 return '<Group: name=%s>' % self.group_name 54 52 55 class User(object): 53 54 class User(DeclarativeBase): 56 55 """Reasonably basic User definition. Probably would want additional 57 56 attributes. 58 57 """ 58 __tablename__ = 'tg_user' 59 60 user_id = Column(Integer, autoincrement=True, primary_key=True) 61 62 user_name = Column(Unicode(16), unique=True) 63 64 email_address = Column(Unicode(255), unique=True) 65 66 display_name = Column(Unicode(255)) 67 68 _password = Column('password', Unicode(40)) 69 70 created = Column(DateTime, default=datetime.now) 71 59 72 def __repr__(self): 60 73 return '<User: email="%s", display name="%s">' % ( … … 73 86 based on their email addresses since it is unique. 74 87 """ 75 return cls.query.filter(cls.email_address==email).first()88 return DBSession.query(cls).filter(cls.email_address==email).first() 76 89 77 90 @classmethod … … 80 93 based on their user_name attribute. 81 94 """ 82 return cls.query.filter(cls.user_name==username).first()95 return DBSession.query(cls).filter(cls.user_name==username).first() 83 96 84 97 … … 95 108 return self._password 96 109 97 password = property(_get_password, _set_password) 110 password = synonym('password', descriptor=property(_get_password, 111 _set_password)) 98 112 99 113 def __encrypt_password(self, algorithm, password): … … 146 160 147 161 148 class Permission( object):162 class Permission(DeclarativeBase): 149 163 """A relationship that determines what each Group can do 150 164 """ 151 pass 165 __tablename__ = 'tg_permission' 166 167 permission_id = Column(Integer, autoincrement=True, primary_key=True) 168 169 permission_name = Column(Unicode(16), unique=True) 170 171 description = Column(Unicode(255)) 172 173 groups = relation(Group, secondary=group_permission_table, 174 backref='permissions') 152 175 153 154 DBSession.mapper(User, users_table,155 properties=dict(_password=users_table.c.password))156 157 DBSession.mapper(Group, groups_table,158 properties=dict(users=relation(User,159 secondary=user_group_table, backref='groups')))160 161 DBSession.mapper(Permission, permissions_table,162 properties=dict(groups=relation(Group,163 secondary=group_permission_table, backref='permissions')))164 176 {{endif}} projects/tg.devtools/trunk/devtools/templates/turbogears/+package+/model/__init__.py_tmpl
r5078 r5169 4 4 from zope.sqlalchemy import ZopeTransactionExtension 5 5 from sqlalchemy.orm import scoped_session, sessionmaker 6 from sqlalchemy import MetaData 6 #from sqlalchemy import MetaData 7 from sqlalchemy.ext.declarative import declarative_base 7 8 8 9 … … 13 14 DBSession = scoped_session(maker) 14 15 15 # Global metadata. If you have multiple databases with overlapping table 16 # names, you'll need a metadata for each database. 17 metadata = MetaData() 16 # By default, the data model is defined with SQLAlchemy's declarative 17 # extension, but if you need more control, you can switch to the traditional 18 # method. 19 DeclarativeBase = declarative_base() 20 21 # Global metadata. 22 # The default metadata is the one from the declarative base. 23 metadata = DeclarativeBase.metadata 24 # If you have multiple databases with overlapping table names, you'll need a 25 # metadata for each database. Feel free to rename 'metadata2'. 26 #metadata2 = MetaData() 18 27 19 28 ##### … … 50 59 51 60 {{if identity == "sqlalchemy"}} 52 from identity import User, Group, Permission 53 from identity import users_table, groups_table, permissions_table, \ 54 user_group_table, group_permission_table 61 from identity import User, Group, Permission 55 62 {{endif}} 56 63