- Fix People::by_email_address()

- ricky added Groups::by_name()
- Fix dictionary mapping of email addresses to people & groups.
This commit is contained in:
Toshio Kuratomi 2008-02-20 15:08:51 -08:00
parent 7102229050
commit 9828491560

View file

@ -86,7 +86,7 @@ class People(SABase):
A class method that can be used to search users A class method that can be used to search users
based on their email addresses since it is unique. based on their email addresses since it is unique.
''' '''
return cls.query.filter_by(email_address=email).first() return cls.query.join('emails').filter_by(email=email).first()
by_email_address = classmethod(by_email_address) by_email_address = classmethod(by_email_address)
@ -141,7 +141,15 @@ class Configs(SABase):
class Groups(SABase): class Groups(SABase):
'''Group that people can belong to.''' '''Group that people can belong to.'''
pass def by_name(cls, name):
'''
A class method that permits to search groups
based on their name attribute.
'''
return cls.query.filter_by(name=name).one()
by_name = classmethod(by_name)
# People in the group # People in the group
people = association_proxy('roles', 'member') people = association_proxy('roles', 'member')
# Groups in the group # Groups in the group
@ -182,12 +190,12 @@ class VisitIdentity(SABase):
# #
# set up mappers between tables and classes # set up mappers between tables and classes
# #
mapper(People, PeopleTable) mapper(People, PeopleTable, properties = {
mapper(PersonEmails, PersonEmailsTable, properties = { 'emails': relation(PersonEmails, backref = 'person',
'person': relation(People, backref = 'emails',
collection_class = column_mapped_collection( collection_class = column_mapped_collection(
PersonEmailsTable.c.purpose)) PersonEmailsTable.c.purpose))
}) })
mapper(PersonEmails, PersonEmailsTable)
mapper(PersonRoles, PersonRolesTable, properties = { mapper(PersonRoles, PersonRolesTable, properties = {
'member': relation(People, backref = 'roles', 'member': relation(People, backref = 'roles',
primaryjoin=PersonRolesTable.c.person_id==PeopleTable.c.id), primaryjoin=PersonRolesTable.c.person_id==PeopleTable.c.id),
@ -196,12 +204,14 @@ mapper(PersonRoles, PersonRolesTable, properties = {
mapper(Configs, ConfigsTable, properties = { mapper(Configs, ConfigsTable, properties = {
'person': relation(People, backref = 'configs') 'person': relation(People, backref = 'configs')
}) })
mapper(Groups, GroupsTable) mapper(Groups, GroupsTable, properties = {
mapper(GroupEmails, GroupEmailsTable, properties = { 'owner': relation(People, uselist=False,
'group': relation(Groups, backref = 'emails', primaryjoin = GroupsTable.c.owner_id==PeopleTable.c.id),
'emails': relation(GroupEmails, backref = 'group',
collection_class = column_mapped_collection( collection_class = column_mapped_collection(
GroupEmailsTable.c.purpose)) GroupEmailsTable.c.purpose))
}) })
mapper(GroupEmails, GroupEmailsTable)
# GroupRoles are complex because the group is a member of a group and thus # GroupRoles are complex because the group is a member of a group and thus
# is referencing the same table. # is referencing the same table.
mapper(GroupRoles, GroupRolesTable, properties = { mapper(GroupRoles, GroupRolesTable, properties = {