X-Git-Url: http://git.veekun.com/zzz-floof.git/blobdiff_plain/ce1c8b25f961df0810d735d2337a790e0563f4af..db4c5f0b56d22815ecc31754271797b2401c9458:/floof/model/users.py diff --git a/floof/model/users.py b/floof/model/users.py index af4bfba..a6f3a6d 100644 --- a/floof/model/users.py +++ b/floof/model/users.py @@ -4,12 +4,15 @@ # 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') @@ -19,10 +22,25 @@ class User(Entity): 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 + def __init__(self, **kwargs): super(User, self).__init__(**kwargs) @@ -47,10 +65,9 @@ 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. - 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) @@ -75,3 +92,4 @@ class UserRelationship(Entity): user = ManyToOne('User') target_user = ManyToOne('User') type = Field(Integer) # UserRelationshipTypes above +