meta.py
70 lines
| 1.8 KiB
| text/x-python
|
PythonLexer
r547 | """SQLAlchemy Metadata and Session object""" | |||
from sqlalchemy.ext.declarative import declarative_base | ||||
r1065 | from sqlalchemy.orm import scoped_session, sessionmaker, class_mapper | |||
from beaker import cache | ||||
r547 | from rhodecode.model import caching_query | |||
r1065 | ||||
r547 | ||||
# 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) | ||||
) | ||||
) | ||||
r1065 | class BaseModel(object): | |||
"""Base Model for all classess | ||||
r1203 | ||||
r1065 | """ | |||
@classmethod | ||||
def _get_keys(cls): | ||||
"""return column names for this model """ | ||||
return class_mapper(cls).c.keys() | ||||
def get_dict(self): | ||||
r1203 | """return dict with keys and values corresponding | |||
r1065 | to this model data """ | |||
d = {} | ||||
for k in self._get_keys(): | ||||
d[k] = getattr(self, k) | ||||
return d | ||||
def get_appstruct(self): | ||||
r1203 | """return list with keys and values tupples corresponding | |||
r1065 | 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_) | ||||
r547 | # The declarative Base | |||
r1065 | Base = declarative_base(cls=BaseModel) | |||
r547 | ||||
#to use cache use this in query | ||||
#.options(FromCache("sqlalchemy_cache_type", "cachekey")) | ||||