X-Git-Url: http://git.veekun.com/zzz-floof.git/blobdiff_plain/40a5c182712d31d44aeacddd16a457f5ab707de7..e0b6c733c6bea7ff31b9361650fb8534b9433597:/floof/model/users.py diff --git a/floof/model/users.py b/floof/model/users.py index 4f83a75..a6f3a6d 100644 --- a/floof/model/users.py +++ b/floof/model/users.py @@ -4,23 +4,40 @@ # Copyright (c) 2009 Scribblr # -# from elixir import Entity, Field, Unicode, belongs_to, has_many +import re + from elixir import * + from search import GalleryWidget class User(Entity): - name = Field(Unicode(20)) + name = Field(Unicode(20), unique=True) + display_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") + relationships = OneToMany('UserRelationship', inverse='user') + target_of_relationships = OneToMany('UserRelationship', inverse='target_user') + + @classmethod + def is_valid_name(cls, name): + """Returns True iff the name is a valid username. + + Only lowercase letters, numbers, and hyphens are allowed. + + Names must also be at least one character long, but no more than 20, + and cannot start or end with a hyphen. + """ + return re.match('^[-a-z0-9]{1,20}$', name) \ + and name[0] != '-' and name[-1] != '-' def __unicode__(self): return self.name - + def __str__(self): return self.name @@ -56,9 +73,23 @@ class UserPage(Entity): visible = Field(Boolean) galleries = OneToMany('GalleryWidget') - - - - -# class ArtRelation(Entity): -# \ No newline at end of file + + +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 +