All pastes #939245 Raw Edit

matiu

public python v1 · immutable
·published 2008-03-12 04:11 UTC
rendered paste body
from datetime import datetime# import the basic Elixir classes and functions for declaring the data model# (see http://elixir.ematia.de/trac/wiki/TutorialDivingIn)from elixir import Entity, Field, OneToMany, ManyToOne, ManyToManyfrom elixir import options_defaults, using_options, setup_all# import some datatypes for table columns from Elixir# (see http://www.sqlalchemy.org/docs/04/types.html for more)from elixir import String, Unicode, Integer, DateTimefrom turbogears import identityoptions_defaults['autosetup'] = False# your data model# class YourDataClass(Entity):#     pass# the identity modelclass Visit(Entity):    """    A visit to your site    """    using_options(tablename='visit')    visit_key = Field(String(40), primary_key=True)    created = Field(DateTime, nullable=False, default=datetime.now)    expiry = Field(DateTime)    @classmethod    def lookup_visit(cls, visit_key):        return Visit.get(visit_key)class VisitIdentity(Entity):    """    A Visit that is link to a User object    """    using_options(tablename='visit_identity')    visit_key = Field(String(40), primary_key=True)    user = ManyToOne('User', colname='user_id', use_alter=True)class Group(Entity):    """    An ultra-simple group definition.    """    using_options(tablename='tg_group')    group_id = Field(Integer, primary_key=True)    group_name = Field(Unicode(16), unique=True)    display_name = Field(Unicode(255))    created = Field(DateTime, default=datetime.now)    users = ManyToMany('User', tablename='user_group')    permissions = ManyToMany('Permission', tablename='group_permission')class User(Entity):    """    Reasonably basic User definition.    Probably would want additional attributes.    """    using_options(tablename='tg_user')    user_id = Field(Integer, primary_key=True)    user_name = Field(Unicode(16), unique=True)    email_address = Field(Unicode(255), unique=True)    display_name = Field(Unicode(255))    password = Field(Unicode(40))    created = Field(DateTime, default=datetime.now)    groups = ManyToMany('Group', tablename='user_group')    @property    def permissions(self):        perms = set()        for g in self.groups:            perms |= set(g.permissions)        return permsclass Permission(Entity):    """    A relationship that determines what each Group can do    """    using_options(tablename='permission')    permission_id = Field(Integer, primary_key=True)    permission_name = Field(Unicode(16), unique=True)    description = Field(Unicode(255))    groups = ManyToMany('Group', tablename='group_permission')# Set up all Elixir entities declared abovesetup_all()