Source code for examples.dogpile_caching.environment
"""Establish data / cache file paths, and configurations,bootstrap fixture data if necessary."""fromhashlibimportmd5importosimportsysfromdogpile.cache.regionimportmake_regionfromsqlalchemyimportcreate_enginefromsqlalchemy.ext.declarativeimportdeclarative_basefromsqlalchemy.ormimportscoped_sessionfromsqlalchemy.ormimportsessionmakerfrom.importcaching_querypy2k=sys.version_info<(3,0)ifpy2k:input=raw_input# noqa# dogpile cache regions. A home base for cache configurations.regions={}# scoped_session.Session=scoped_session(sessionmaker())cache=caching_query.ORMCache(regions)cache.listen_on_session(Session)# global declarative base class.Base=declarative_base()root="./dogpile_data/"ifnotos.path.exists(root):input("Will create datafiles in %r.\n""To reset the cache + database, delete this directory.\n""Press enter to continue.\n"%root)os.makedirs(root)dbfile=os.path.join(root,"dogpile_demo.db")engine=create_engine("sqlite:///%s"%dbfile,echo=True)Session.configure(bind=engine)defmd5_key_mangler(key):"""Receive cache keys as long concatenated strings; distill them into an md5 hash. """returnmd5(key.encode("ascii")).hexdigest()# configure the "default" cache region.regions["default"]=make_region(# the "dbm" backend needs# string-encoded keyskey_mangler=md5_key_mangler).configure(# using type 'file' to illustrate# serialized persistence. Normally# memcached or similar is a better choice# for caching."dogpile.cache.dbm",expiration_time=3600,arguments={"filename":os.path.join(root,"cache.dbm")},)# optional; call invalidate() on the region# once created so that all data is fresh when# the app is restarted. Good for development,# on a production system needs to be used carefully# regions['default'].invalidate()installed=Falsedefbootstrap():globalinstalledfrom.importfixture_dataifnotos.path.exists(dbfile):fixture_data.install()installed=True