"""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"))