51 lines
1.3 KiB
Python
51 lines
1.3 KiB
Python
from qommon.storage import StorableObject
|
|
from qommon.misc import simplify
|
|
|
|
class Category(StorableObject):
|
|
_names = 'categories'
|
|
name = None
|
|
url_name = None
|
|
description = None
|
|
position = None
|
|
|
|
def __init__(self, name = None):
|
|
StorableObject.__init__(self)
|
|
self.name = name
|
|
|
|
def migrate(self):
|
|
changed = False
|
|
|
|
if not self.url_name:
|
|
self.url_name = simplify(self.name)
|
|
changed = True
|
|
|
|
if changed:
|
|
self.store()
|
|
|
|
def get_by_urlname(cls, url_name):
|
|
objects = [x for x in cls.select() if x.url_name == url_name]
|
|
if objects:
|
|
return objects[0]
|
|
raise KeyError()
|
|
get_by_urlname = classmethod(get_by_urlname)
|
|
|
|
def has_urlname(cls, url_name):
|
|
objects = [x for x in cls.select() if x.url_name == url_name]
|
|
if objects:
|
|
return True
|
|
return False
|
|
has_urlname = classmethod(has_urlname)
|
|
|
|
def sort_by_position(cls, categories):
|
|
def cmp_position(x, y):
|
|
if x.position == y.position:
|
|
return 0
|
|
if x.position is None:
|
|
return 1
|
|
if y.position is None:
|
|
return -1
|
|
return cmp(x.position, y.position)
|
|
categories.sort(cmp_position)
|
|
sort_by_position = classmethod(sort_by_position)
|
|
|