New model.Group class to wrap group-related tables.
This commit is contained in:
parent
d38ca756a2
commit
f610577bf8
|
@ -0,0 +1,90 @@
|
||||||
|
from Persistent import Persistent, quote
|
||||||
|
|
||||||
|
|
||||||
|
class Group( Persistent ):
|
||||||
|
"""
|
||||||
|
A group of users, used to represent an organization, department, or team.
|
||||||
|
"""
|
||||||
|
|
||||||
|
def __init__( self, object_id, revision = None, name = None, admin = None ):
|
||||||
|
"""
|
||||||
|
Create a new group with the given id and name.
|
||||||
|
|
||||||
|
@type object_id: unicode
|
||||||
|
@param object_id: id of the group
|
||||||
|
@type revision: datetime or NoneType
|
||||||
|
@param revision: revision timestamp of the object (optional, defaults to now)
|
||||||
|
@type name: unicode or NoneType
|
||||||
|
@param name: name of this group (optional)
|
||||||
|
@type admin: bool
|
||||||
|
@param admin: whether access to this group includes admin capabilities
|
||||||
|
@rtype: Group
|
||||||
|
@return: newly constructed group
|
||||||
|
"""
|
||||||
|
Persistent.__init__( self, object_id, revision )
|
||||||
|
self.__name = name
|
||||||
|
self.__admin = admin
|
||||||
|
|
||||||
|
@staticmethod
|
||||||
|
def create( object_id, name = None, admin = None ):
|
||||||
|
"""
|
||||||
|
Convenience constructor for creating a new group.
|
||||||
|
|
||||||
|
@type object_id: unicode
|
||||||
|
@param object_id: id of the group
|
||||||
|
@type name: unicode or NoneType
|
||||||
|
@param name: name of this group (optional)
|
||||||
|
@type admin: bool
|
||||||
|
@param admin: whether access to this group includes admin capabilities
|
||||||
|
@rtype: group
|
||||||
|
@return: newly constructed group
|
||||||
|
"""
|
||||||
|
return Group( object_id, name = name, admin = admin )
|
||||||
|
|
||||||
|
@staticmethod
|
||||||
|
def sql_load( object_id, revision = None ):
|
||||||
|
if revision:
|
||||||
|
return "select * from luminotes_group where id = %s and revision = %s;" % ( quote( object_id ), quote( revision ) )
|
||||||
|
|
||||||
|
return "select * from luminotes_group_current where id = %s;" % quote( object_id )
|
||||||
|
|
||||||
|
@staticmethod
|
||||||
|
def sql_id_exists( object_id, revision = None ):
|
||||||
|
if revision:
|
||||||
|
return "select id from luminotes_group where id = %s and revision = %s;" % ( quote( object_id ), quote( revision ) )
|
||||||
|
|
||||||
|
return "select id from luminotes_group_current where id = %s;" % quote( object_id )
|
||||||
|
|
||||||
|
def sql_exists( self ):
|
||||||
|
return Group.sql_id_exists( self.object_id, self.revision )
|
||||||
|
|
||||||
|
def sql_create( self ):
|
||||||
|
return \
|
||||||
|
"insert into luminotes_group ( id, revision, name ) " + \
|
||||||
|
"values ( %s, %s, %s );" % \
|
||||||
|
( quote( self.object_id ), quote( self.revision ), quote( self.__name ) )
|
||||||
|
|
||||||
|
def sql_update( self ):
|
||||||
|
return self.sql_create()
|
||||||
|
|
||||||
|
def to_dict( self ):
|
||||||
|
d = Persistent.to_dict( self )
|
||||||
|
|
||||||
|
d.update( dict(
|
||||||
|
name = self.__name,
|
||||||
|
admin = self.__admin,
|
||||||
|
) )
|
||||||
|
|
||||||
|
return d
|
||||||
|
|
||||||
|
def __set_name( self, name ):
|
||||||
|
self.__name = name
|
||||||
|
self.update_revision()
|
||||||
|
|
||||||
|
def __set_admin( self, admin ):
|
||||||
|
# The admin member isn't actually saved to the database, so setting it doesn't need to
|
||||||
|
# call update_revision().
|
||||||
|
self.__admin = admin
|
||||||
|
|
||||||
|
name = property( lambda self: self.__name, __set_name )
|
||||||
|
admin = property( lambda self: self.__admin, __set_admin )
|
|
@ -0,0 +1,42 @@
|
||||||
|
from pytz import utc
|
||||||
|
from datetime import datetime, timedelta
|
||||||
|
from model.Group import Group
|
||||||
|
|
||||||
|
|
||||||
|
class Test_group( object ):
|
||||||
|
def setUp( self ):
|
||||||
|
self.object_id = "17"
|
||||||
|
self.name = u"my group"
|
||||||
|
self.delta = timedelta( seconds = 1 )
|
||||||
|
self.admin = True
|
||||||
|
|
||||||
|
self.group = Group.create( self.object_id, self.name, self.admin )
|
||||||
|
|
||||||
|
def test_create( self ):
|
||||||
|
assert self.group.object_id == self.object_id
|
||||||
|
assert datetime.now( tz = utc ) - self.group.revision < self.delta
|
||||||
|
assert self.group.name == self.name
|
||||||
|
assert self.group.admin == True
|
||||||
|
|
||||||
|
def test_set_name( self ):
|
||||||
|
new_name = u"my new group"
|
||||||
|
previous_revision = self.group.revision
|
||||||
|
self.group.name = new_name
|
||||||
|
|
||||||
|
assert self.group.name == new_name
|
||||||
|
assert self.group.revision > previous_revision
|
||||||
|
|
||||||
|
def test_set_admin( self ):
|
||||||
|
original_revision = self.group.revision
|
||||||
|
self.group.admin = True
|
||||||
|
|
||||||
|
assert self.group.admin == True
|
||||||
|
assert self.group.revision == original_revision
|
||||||
|
|
||||||
|
def test_to_dict( self ):
|
||||||
|
d = self.group.to_dict()
|
||||||
|
|
||||||
|
assert d.get( "name" ) == self.name
|
||||||
|
assert d.get( "admin" ) == True
|
||||||
|
assert d.get( "object_id" ) == self.group.object_id
|
||||||
|
assert datetime.now( tz = utc ) - d.get( "revision" ) < self.delta
|
Reference in New Issue