Show
Ignore:
Timestamp:
08/19/08 17:42:53 (3 months ago)
Author:
Gustavo
Message:

Using SQLAlchemy's declarative method in the quickstarted projects, instead of the traditional method.

Files:

Legend:

Unmodified
Added
Removed
Modified
Copied
Moved
  • projects/tg.devtools/trunk/devtools/templates/turbogears/+package+/model/identity.py_tmpl

    r5159 r5169  
    11{{if identity == "sqlalchemy"}} 
    2 from tg import config 
    3 from sqlalchemy import * 
    4 from sqlalchemy.orm import mapper, relation 
    5 from {{package}}.model import metadata, DBSession 
    6  
    7 import datetime 
    8 from sqlalchemy import ForeignKey 
    92import md5 
    103import sha 
     4from datetime import datetime 
    115 
    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) 
     6from tg import config 
     7from sqlalchemy import Table, ForeignKey, Column 
     8from sqlalchemy.types import String, Unicode, UnicodeText, Integer, DateTime, \ 
     9                             Boolean, Float 
     10from sqlalchemy.orm import relation, backref, synonym 
     11 
     12from {{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. 
     17group_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")) 
    1722) 
    1823 
    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. 
    3426user_group_table = Table('tg_user_group', metadata, 
    3527    Column('user_id', Integer, ForeignKey('tg_user.user_id', 
     
    3931) 
    4032 
    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 
    4734 
    48 # identity model 
    49 class Group(object): 
     35class Group(DeclarativeBase): 
    5036    """An ultra-simple group definition. 
    5137    """ 
     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     
    5250    def __repr__(self): 
    5351        return '<Group: name=%s>' % self.group_name 
    5452 
    55 class User(object): 
     53 
     54class User(DeclarativeBase): 
    5655    """Reasonably basic User definition. Probably would want additional 
    5756    attributes. 
    5857    """ 
     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     
    5972    def __repr__(self): 
    6073        return '<User: email="%s", display name="%s">' % ( 
     
    7386        based on their email addresses since it is unique. 
    7487        """ 
    75         return cls.query.filter(cls.email_address==email).first() 
     88        return DBSession.query(cls).filter(cls.email_address==email).first() 
    7689 
    7790    @classmethod 
     
    8093        based on their user_name attribute. 
    8194        """ 
    82         return cls.query.filter(cls.user_name==username).first() 
     95        return DBSession.query(cls).filter(cls.user_name==username).first() 
    8396 
    8497 
     
    95108        return self._password 
    96109 
    97     password = property(_get_password, _set_password) 
     110    password = synonym('password', descriptor=property(_get_password, 
     111                                                       _set_password)) 
    98112 
    99113    def __encrypt_password(self, algorithm, password): 
     
    146160 
    147161 
    148 class Permission(object): 
     162class Permission(DeclarativeBase): 
    149163    """A relationship that determines what each Group can do 
    150164    """ 
    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') 
    152175 
    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'))) 
    164176{{endif}} 
  • projects/tg.devtools/trunk/devtools/templates/turbogears/+package+/model/__init__.py_tmpl

    r5078 r5169  
    44from zope.sqlalchemy import ZopeTransactionExtension 
    55from sqlalchemy.orm import scoped_session, sessionmaker 
    6 from sqlalchemy import MetaData 
     6#from sqlalchemy import MetaData 
     7from sqlalchemy.ext.declarative import declarative_base 
    78 
    89 
     
    1314DBSession = scoped_session(maker) 
    1415 
    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. 
     19DeclarativeBase = declarative_base() 
     20 
     21# Global metadata. 
     22# The default metadata is the one from the declarative base. 
     23metadata = 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() 
    1827 
    1928##### 
     
    5059 
    5160{{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 
     61from identity import User, Group, Permission 
    5562{{endif}} 
    5663