X-Git-Url: http://git.veekun.com/zzz-floof.git/blobdiff_plain/224a257ade788e1a87aab78032dc3cdc9677cc06..69d5189cc4fb2ca63418a0741bf744cf5fee8bc9:/floof/model/users.py diff --git a/floof/model/users.py b/floof/model/users.py index f51282c..86c31d8 100644 --- a/floof/model/users.py +++ b/floof/model/users.py @@ -1,19 +1,56 @@ -from sqlalchemy import Column, ForeignKey -from sqlalchemy.orm import relation -from sqlalchemy.types import Integer, Unicode +# +# floof/floof/model/users.py +# +# Copyright (c) 2009 Scribblr +# -from floof.model import meta +# from elixir import Entity, Field, Unicode, belongs_to, has_many +from elixir import * +from search import GalleryWidget -__all__ = ['User', 'IdentityURL'] +class User(Entity): + name = Field(Unicode(20)) + uploads = OneToMany('Art') + has_many('identity_urls', of_kind='IdentityURL') + searches = OneToMany('SavedSearch') + # galleries = OneToMany('GalleryWidget') + pages = OneToMany('UserPage', inverse="owner") + primary_page = OneToOne('UserPage', inverse="owner") -class User(meta.TableBase): - __tablename__ = 'users' - id = Column(Integer, primary_key=True) - name = Column(Unicode(length=20), nullable=False) + + def __unicode__(self): + return self.name -class IdentityURL(meta.TableBase): - __tablename__ = 'identity_urls' - url = Column(Unicode(length=255), primary_key=True) - user_id = Column(Integer, ForeignKey('users.id')) + def __init__(self, **kwargs): + super(User, self).__init__(**kwargs) + + + + # TODO: have this clone a standard starter page + self.primary_page = UserPage(owner=self, title="default", visible=True) + + # a starter gallery, just for fun + gallery = GalleryWidget(owner=self, string="awesome") + self.primary_page.galleries.append(gallery) -IdentityURL.user = relation(User, lazy=False, backref="identity_urls") + +class IdentityURL(Entity): + url = Field(Unicode(255)) + belongs_to('user', of_kind='User') + + + +class UserPage(Entity): + """A user can have multiple pages, though by default they only have one visible. + This is so that they can keep some nice themed pages lying around for special occasions. + Page templates that provide familiar interfaces will also be UserPage records. Users will + see a panel full of them, and they can choose to clone those template pages to their own page list. + If more than one is set to visible, there would be tabs. + + """ + + owner = ManyToOne('User', inverse="pages") + title = Field(String) + + visible = Field(Boolean) + galleries = OneToMany('GalleryWidget') \ No newline at end of file