root / elixir / trunk / examples / videostore / videostore / model.py @ 97

Revision 97, 2.9 kB (checked in by ged, 6 years ago)

As reported by Jorge Godoy, the TG example used a strange has_field statement
with a manual foreignkey instead of a belongs_to relationship, so I changed
that.

Line 
1from turbogears.database    import metadata, session
2from elixir                 import Unicode, DateTime, String, Integer
3from elixir                 import Entity, has_field, using_options
4from elixir                 import has_many, belongs_to, has_and_belongs_to_many
5from sqlalchemy             import ForeignKey
6from datetime               import datetime
7
8
9#
10# application model
11#
12
13class Director(Entity):
14    has_field('name', Unicode(60))
15    has_many('movies', of_kind='Movie', inverse='director')
16    using_options(tablename='directors')
17
18
19class Movie(Entity):
20    has_field('title', Unicode(60))
21    has_field('description', Unicode(512))
22    has_field('releasedate', DateTime)
23    belongs_to('director', of_kind='Director', inverse='movies')
24    has_and_belongs_to_many('actors', of_kind='Actor', inverse='movies', tablename='movie_casting')
25    using_options(tablename='movies')
26
27
28class Actor(Entity):
29    has_field('name', Unicode(60))
30    has_and_belongs_to_many('movies', of_kind='Movie', inverse='actors', tablename='movie_casting')
31    using_options(tablename='actors')
32   
33
34#
35# identity model
36#
37
38class Visit(Entity):
39    has_field('visit_key', String(40), primary_key=True)
40    has_field('created', DateTime, nullable=False, default=datetime.now)
41    has_field('expiry', DateTime)
42    using_options(tablename='visit')
43   
44    @classmethod
45    def lookup_visit(cls, visit_key):
46        return Visit.get(visit_key)
47
48class VisitIdentity(Entity):
49    has_field('visit_key', String(40), primary_key=True)
50    belongs_to('user', of_kind='User', colname='user_id', use_alter=True)
51    using_options(tablename='visit_identity')
52
53class Group(Entity):
54    has_field('group_id', Integer, primary_key=True)
55    has_field('group_name', Unicode(16), unique=True)
56    has_field('display_name', Unicode(255))
57    has_field('created', DateTime, default=datetime.now)
58    has_and_belongs_to_many('users', of_kind='User', inverse='groups')
59    has_and_belongs_to_many('permissions', of_kind='Permission', inverse='groups')
60    using_options(tablename='tg_group')
61
62class User(Entity):
63    has_field('user_id', Integer, primary_key=True)
64    has_field('user_name', Unicode(16), unique=True)
65    has_field('email_address', Unicode(255), unique=True)
66    has_field('display_name', Unicode(255))
67    has_field('password', Unicode(40))
68    has_field('created', DateTime, default=datetime.now)
69    has_and_belongs_to_many('groups', of_kind='Group', inverse='users')
70    using_options(tablename='tg_user')
71   
72    @property
73    def permissions(self):
74        perms = set()
75        for g in self.groups:
76            perms = perms | set(g.permissions)
77        return perms
78
79class Permission(Entity):
80    has_field('permission_id', Integer, primary_key=True)
81    has_field('permission_name', Unicode(16), unique=True)
82    has_field('description', Unicode(255))
83    has_and_belongs_to_many('groups', of_kind='Group', inverse='permissions')
84    using_options(tablename='permission')
Note: See TracBrowser for help on using the browser.