-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)
-class IdentityURL(meta.TableBase):
- __tablename__ = 'identity_urls'
- url = Column(Unicode(length=255), primary_key=True)
- user_id = Column(Integer, ForeignKey('users.id'))
+ def __unicode__(self):
+ return self.name
-IdentityURL.user = relation(User, lazy=False, backref="identity_urls")
+ 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)
+
+
+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