merged. Oh no, we have two different user relationship models. Mine's in relations...
[zzz-floof.git] / floof / model / users.py
index 86c31d8..7601cf5 100644 (file)
@@ -16,19 +16,24 @@ class User(Entity):
     # galleries = OneToMany('GalleryWidget')
     pages = OneToMany('UserPage', inverse="owner")
     primary_page = OneToOne('UserPage', inverse="owner")
     # galleries = OneToMany('GalleryWidget')
     pages = OneToMany('UserPage', inverse="owner")
     primary_page = OneToOne('UserPage', inverse="owner")
+    relationships = OneToMany('UserRelationship', inverse='user')
+    target_of_relationships = OneToMany('UserRelationship', inverse='target_user')
+
 
 
-    
     def __unicode__(self):
         return self.name
     def __unicode__(self):
         return self.name
+    
+    def __str__(self):
+        return self.name
 
     def __init__(self, **kwargs):
         super(User, self).__init__(**kwargs)
 
     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)
         # 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)
         # a starter gallery, just for fun
         gallery = GalleryWidget(owner=self, string="awesome")
         self.primary_page.galleries.append(gallery)
@@ -45,12 +50,31 @@ class UserPage(Entity):
     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.
     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.
-    
-     """
+    If more than one is set to visible, there would be tabs.  The primary page is indicated in the user model.
+    """
     
     owner = ManyToOne('User', inverse="pages")
     title = Field(String)
     
     owner = ManyToOne('User', inverse="pages")
     title = Field(String)
-    
+
     visible = Field(Boolean)
     visible = Field(Boolean)
-    galleries = OneToMany('GalleryWidget')
\ No newline at end of file
+    galleries = OneToMany('GalleryWidget')
+
+
+class UserRelationshipTypes(object):
+    IS_WATCHING = 1
+
+class UserRelationship(Entity):
+    """Represents some sort of connection between users.
+
+    For the moment, this means "watching".  Later, it may mean friending or
+    ignoring.
+
+    XXX: Watching should be made more general than this; it should have the
+    power of an arbitrary query per watched artist without being unintelligible
+    to users.
+    """
+
+    user = ManyToOne('User')
+    target_user = ManyToOne('User')
+    type = Field(Integer)  # UserRelationshipTypes above
+