Mercurial > kallithea
changeset 1546:c363267bbec7 beta
fixes #265 ldap save fails sometimes on converting attributes to booleans, added getter and setter
into model that will provent from this errors on db model level
author | Marcin Kuzminski <marcin@python-works.com> |
---|---|
date | Tue, 11 Oct 2011 21:38:27 +0200 |
parents | a7bee2a5de67 |
children | fbc762ae3496 |
files | rhodecode/model/db.py |
diffstat | 1 files changed, 22 insertions(+), 6 deletions(-) [+] |
line wrap: on
line diff
--- a/rhodecode/model/db.py Tue Oct 11 08:39:18 2011 +0200 +++ b/rhodecode/model/db.py Tue Oct 11 21:38:27 2011 +0200 @@ -31,6 +31,7 @@ from sqlalchemy import * from sqlalchemy.exc import DatabaseError +from sqlalchemy.ext.hybrid import hybrid_property from sqlalchemy.orm import relationship, backref, joinedload, class_mapper from sqlalchemy.orm.interfaces import MapperExtension @@ -42,13 +43,14 @@ from vcs.utils.lazy import LazyProperty from rhodecode.lib import str2bool, safe_str, get_changeset_safe, \ - generate_api_key + generate_api_key, safe_unicode from rhodecode.lib.exceptions import UsersGroupsAssignedException from rhodecode.lib.compat import json from rhodecode.model.meta import Base, Session from rhodecode.model.caching_query import FromCache + log = logging.getLogger(__name__) #============================================================================== @@ -141,12 +143,29 @@ __table_args__ = (UniqueConstraint('app_settings_name'), {'extend_existing':True}) app_settings_id = Column("app_settings_id", Integer(), nullable=False, unique=True, default=None, primary_key=True) app_settings_name = Column("app_settings_name", String(length=255, convert_unicode=False, assert_unicode=None), nullable=True, unique=None, default=None) - app_settings_value = Column("app_settings_value", String(length=255, convert_unicode=False, assert_unicode=None), nullable=True, unique=None, default=None) + _app_settings_value = Column("app_settings_value", String(length=255, convert_unicode=False, assert_unicode=None), nullable=True, unique=None, default=None) def __init__(self, k='', v=''): self.app_settings_name = k self.app_settings_value = v + + @hybrid_property + def app_settings_value(self): + v = self._app_settings_value + if v == 'ldap_active': + v = str2bool(v) + return v + + @app_settings_value.setter + def app_settings_value(self,val): + """ + Setter that will always make sure we use unicode in app_settings_value + + :param val: + """ + self._app_settings_value = safe_unicode(val) + def __repr__(self): return "<%s('%s:%s')>" % (self.__class__.__name__, self.app_settings_name, self.app_settings_value) @@ -177,14 +196,11 @@ @classmethod def get_ldap_settings(cls, cache=False): ret = Session.query(cls)\ - .filter(cls.app_settings_name.startswith('ldap_'))\ - .all() + .filter(cls.app_settings_name.startswith('ldap_')).all() fd = {} for row in ret: fd.update({row.app_settings_name:row.app_settings_value}) - fd.update({'ldap_active':str2bool(fd.get('ldap_active'))}) - return fd