meta.py
58 lines
| 1.7 KiB
| text/x-python
|
PythonLexer
r547 | """SQLAlchemy Metadata and Session object""" | |||
from sqlalchemy.ext.declarative import declarative_base | ||||
from sqlalchemy.orm import scoped_session, sessionmaker | ||||
from rhodecode.model import caching_query | ||||
from beaker import cache | ||||
import os | ||||
from os.path import join as jn, dirname as dn, abspath | ||||
import time | ||||
# 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) | ||||
) | ||||
) | ||||
# The declarative Base | ||||
Base = declarative_base() | ||||
#For another db... | ||||
#Base2 = declarative_base() | ||||
#=============================================================================== | ||||
# CACHE OPTIONS | ||||
#=============================================================================== | ||||
cache_dir = jn(dn(dn(dn(abspath(__file__)))), 'data', 'cache') | ||||
if not os.path.isdir(cache_dir): | ||||
os.mkdir(cache_dir) | ||||
# set start_time to current time | ||||
# to re-cache everything | ||||
# upon application startup | ||||
start_time = time.time() | ||||
# configure the "sqlalchemy" cache region. | ||||
cache_manager.regions['sql_cache_short'] = { | ||||
'type':'memory', | ||||
'data_dir':cache_dir, | ||||
'expire':10, | ||||
'start_time':start_time | ||||
} | ||||
cache_manager.regions['sql_cache_med'] = { | ||||
'type':'memory', | ||||
'data_dir':cache_dir, | ||||
'expire':360, | ||||
'start_time':start_time | ||||
} | ||||
cache_manager.regions['sql_cache_long'] = { | ||||
'type':'file', | ||||
'data_dir':cache_dir, | ||||
'expire':3600, | ||||
'start_time':start_time | ||||
} | ||||
#to use cache use this in query | ||||
#.options(FromCache("sqlalchemy_cache_type", "cachekey")) | ||||