Mercurial > kallithea
view rhodecode/model/meta.py @ 1115:fcb5054937f6 beta
merge with optional gravatars
author | Marcin Kuzminski <marcin@python-works.com> |
---|---|
date | Sat, 05 Mar 2011 23:02:15 +0100 |
parents | 5d676b6ab71c |
children | 6832ef664673 |
line wrap: on
line source
"""SQLAlchemy Metadata and Session object""" from sqlalchemy.ext.declarative import declarative_base from sqlalchemy.orm import scoped_session, sessionmaker, class_mapper from beaker import cache from rhodecode.model import caching_query # Beaker CacheManager. A home base for cache configurations. cache_manager = cache.CacheManager() __all__ = ['Base', 'Session'] # # SQLAlchemy session manager. Updated by model.init_model() # Session = scoped_session( sessionmaker( query_cls=caching_query.query_callable(cache_manager) ) ) class BaseModel(object): """Base Model for all classess """ @classmethod def _get_keys(cls): """return column names for this model """ return class_mapper(cls).c.keys() def get_dict(self): """return dict with keys and values corresponding to this model data """ d = {} for k in self._get_keys(): d[k] = getattr(self, k) return d def get_appstruct(self): """return list with keys and values tupples corresponding to this model data """ l = [] for k in self._get_keys(): l.append((k, getattr(self, k),)) return l def populate_obj(self, populate_dict): """populate model with data from given populate_dict""" for k in self._get_keys(): if k in populate_dict: setattr(self, k, populate_dict[k]) @classmethod def query(cls): return Session.query(cls) @classmethod def get(cls, id_): return Session.query(cls).get(id_) # The declarative Base Base = declarative_base(cls=BaseModel) #to use cache use this in query #.options(FromCache("sqlalchemy_cache_type", "cachekey"))