misc: add slug to roles (#7180)
This commit is contained in:
parent
6841713c2f
commit
6a25e750d0
|
@ -0,0 +1,38 @@
|
|||
import cPickle
|
||||
|
||||
from utilities import create_temporary_pub, clean_temporary_pub
|
||||
|
||||
from qommon.storage import StorableObject
|
||||
from wcs.roles import Role
|
||||
|
||||
def setup_module(module):
|
||||
pub = create_temporary_pub()
|
||||
pub.cfg['language'] = {'language': 'en'}
|
||||
|
||||
def teardown_module(module):
|
||||
clean_temporary_pub()
|
||||
|
||||
def test_slug():
|
||||
Role.wipe()
|
||||
role = Role(name='Hello world')
|
||||
role.store()
|
||||
assert role.slug == 'hello-world'
|
||||
|
||||
def test_duplicated_name():
|
||||
Role.wipe()
|
||||
role = Role(name='Hello world')
|
||||
role.store()
|
||||
assert role.slug == 'hello-world'
|
||||
role = Role(name='Hello world')
|
||||
role.store()
|
||||
assert role.slug == 'hello-world-1'
|
||||
|
||||
def test_migrate():
|
||||
Role.wipe()
|
||||
role = Role(name='Hello world')
|
||||
role.store()
|
||||
obj = cPickle.load(open(role.get_object_filename()))
|
||||
del obj.slug
|
||||
cPickle.dump(obj, open(role.get_object_filename(), 'w'))
|
||||
assert cPickle.load(open(role.get_object_filename())).slug is None
|
||||
assert Role.get(role.id).slug == 'hello-world'
|
32
wcs/roles.py
32
wcs/roles.py
|
@ -21,7 +21,10 @@ import qommon.misc
|
|||
|
||||
class Role(StorableObject):
|
||||
_names = 'roles'
|
||||
_indexes = ['slug']
|
||||
|
||||
name = None
|
||||
slug = None
|
||||
details = None
|
||||
emails = None
|
||||
emails_to_members = False
|
||||
|
@ -31,6 +34,35 @@ class Role(StorableObject):
|
|||
StorableObject.__init__(self)
|
||||
self.name = name
|
||||
|
||||
def migrate(self):
|
||||
changed = False
|
||||
if not self.slug:
|
||||
# .store() will take care of setting the slug
|
||||
changed = True
|
||||
if changed:
|
||||
self.store()
|
||||
|
||||
def store(self):
|
||||
if self.slug is None:
|
||||
# set slug if it's not yet there
|
||||
self.slug = self.get_new_slug()
|
||||
super(Role, self).store()
|
||||
|
||||
def get_new_slug(self):
|
||||
new_slug = qommon.misc.simplify(self.name)
|
||||
base_new_slug = new_slug
|
||||
suffix_no = 0
|
||||
while True:
|
||||
try:
|
||||
role = self.get_on_index(new_slug, 'slug', ignore_migration=True)
|
||||
except KeyError:
|
||||
break
|
||||
if role.id == self.id:
|
||||
break
|
||||
suffix_no += 1
|
||||
new_slug = '%s-%s' % (base_new_slug, suffix_no)
|
||||
return new_slug
|
||||
|
||||
def get_emails(self):
|
||||
emails = self.emails or []
|
||||
if not self.emails_to_members:
|
||||
|
|
Loading…
Reference in New Issue