@@ -138,97 +138,96 @@ class BaseDbModel(object):
return cls.get(int(value))
if callback is not None:
return callback(value)
raise Exception(
'given object must be int, long or Instance of %s '
'got %s, no callback provided' % (cls, type(value))
)
@classmethod
def get_or_404(cls, id_):
try:
id_ = int(id_)
except (TypeError, ValueError):
raise HTTPNotFound
res = cls.query().get(id_)
if res is None:
return res
def delete(cls, id_):
obj = cls.query().get(id_)
Session().delete(obj)
def __repr__(self):
return '<DB:%s>' % (self.__class__.__name__)
_table_args_default_dict = {'extend_existing': True,
'mysql_engine': 'InnoDB',
'sqlite_autoincrement': True,
}
class Setting(Base, BaseDbModel):
__tablename__ = 'settings'
__table_args__ = (
_table_args_default_dict,
SETTINGS_TYPES = {
'str': safe_bytes,
'int': safe_int,
'unicode': safe_str,
'bool': asbool,
'list': functools.partial(aslist, sep=',')
DEFAULT_UPDATE_URL = ''
app_settings_id = Column(Integer(), primary_key=True)
app_settings_name = Column(String(255), nullable=False, unique=True)
_app_settings_value = Column("app_settings_value", Unicode(4096), nullable=False)
_app_settings_type = Column("app_settings_type", String(255), nullable=True) # FIXME: not nullable?
def __init__(self, key='', val='', type='unicode'):
self.app_settings_name = key
self.app_settings_value = val
self.app_settings_type = type
@validates('_app_settings_value')
def validate_settings_value(self, key, val):
assert isinstance(val, str)
return val
@hybrid_property
def app_settings_value(self):
v = self._app_settings_value
_type = self.app_settings_type
converter = self.SETTINGS_TYPES.get(_type) or self.SETTINGS_TYPES['unicode']
return converter(v)
@app_settings_value.setter
def app_settings_value(self, val):
"""
Setter that will always make sure we use str in app_settings_value
self._app_settings_value = safe_str(val)
def app_settings_type(self):
return self._app_settings_type
@app_settings_type.setter
def app_settings_type(self, val):
if val not in self.SETTINGS_TYPES:
raise Exception('type must be one of %s got %s'
% (list(self.SETTINGS_TYPES), val))
self._app_settings_type = val
return "<%s %s.%s=%r>" % (
self.__class__.__name__,
self.app_settings_name, self.app_settings_type, self.app_settings_value
Status change: