Test suite runs and passes!
[zzz-floof.git] / floof / model / users.py
index a6f3a6d..6643702 100644 (file)
@@ -11,8 +11,8 @@ from elixir import *
 from search import GalleryWidget
 
 class User(Entity):
-    name = Field(Unicode(20), unique=True)
-    display_name = Field(Unicode(20))
+    name = Field(Unicode(20), unique=True, required=True)
+    display_name = Field(Unicode(20), required=True)
     uploads = OneToMany('Art')
     has_many('identity_urls', of_kind='IdentityURL')
     searches = OneToMany('SavedSearch')
@@ -48,19 +48,49 @@ class User(Entity):
 
         # TODO: have this clone a standard starter page
         self.primary_page = UserPage(owner=self, title="default", visible=True)
+        prepositions = ['by','for','of']
+        for preposition in prepositions:
+            GalleryWidget(page=self.primary_page, string=preposition+":me", owner=self)
 
-        # a starter gallery, just for fun
-        gallery = GalleryWidget(owner=self, string="awesome")
-        self.primary_page.galleries.append(gallery)
+        #UserPage.clone_primary_template(self)
 
 
 class IdentityURL(Entity):
-    url = Field(Unicode(255))
-    belongs_to('user', of_kind='User')
-
+    url = Field(Unicode(255), required=True)
+    user = ManyToOne('User', required=True)
 
 
+from copy import copy
 class UserPage(Entity):
+    default_name = "default"
+
+    ### This was a bit more complex than I thought it would be...
+    ### Sure it probably works ok, but I'd rather duct-tape it for now (above)
+    # @classmethod
+    # def get_primary_template(cls):
+    #     return cls.get_by(owner=None, title=cls.default_name)
+    # 
+    # @classmethod
+    # def make_primary_template(cls):
+    #     if not cls.get_primary_template():
+    #         page = cls(owner=None, title=cls.default_name, visible=True)
+    #         prepositions = ['by','for','of']
+    #         for preposition in prepositions:
+    #             GalleryWidget(page=page, string=preposition+":me")
+    #         
+    # @classmethod
+    # def clone_primary_template(cls, user):
+    #     template = cls.get_primary_template()
+    #     new = cls(owner=user, title=template.title)
+    #     for gallery in template.galleries:
+    #         new.galleries.append(GalleryWidget(user=user, string=gallery.string))
+    #     
+    #     
+    #     session.add(template)
+    #     template.user = user
+    #     template.id = None
+    #     return template
+    
     """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
@@ -89,7 +119,7 @@ class UserRelationship(Entity):
     to users.
     """
 
-    user = ManyToOne('User')
-    target_user = ManyToOne('User')
+    user = ManyToOne('User', required=True)
+    target_user = ManyToOne('User', required=True)
     type = Field(Integer)  # UserRelationshipTypes above