Source code for oriole_service.db
#
# __ _,--="=--,_ __
# / \." .-. "./ \
# / ,/ _ : : _ \/` \
# \ `| /o\ :_: /o\ |\__/
# `-'| :="~` _ `~"=: |
# \` (_) `/
# .-"-. \ | / .-"-.
# .-----{ }--| /,.-'-.,\ |--{ }-----.
# ) (_)_)_) \_/`~-===-~`\_/ (_(_(_) (
# ( )
# ) Oriole-DB (
# ( Eric.Zhou )
# '-------------------------------------------'
#
from sqlalchemy import Column, Integer, String, create_engine, types
from sqlalchemy.ext.declarative import declarative_base
from sqlalchemy.orm import scoped_session, sessionmaker
from sqlalchemy import and_, or_, distinct, func
from weakref import WeakKeyDictionary
from nameko.extensions import DependencyProvider
from redis import StrictRedis
Base = declarative_base()
RS_URI = "datasets"
DB_URI = "database"
DB_POOL = "pool_size"
DB_RECYCLE = "pool_recycle"
[docs]class Db(DependencyProvider):
def __init__(self, Base):
self.base = Base
self.dbs = WeakKeyDictionary()
[docs] def setup(self):
self.conf = self.container.config
pool_size = int(self.conf.get(DB_POOL, 10))
pool_recycle = int(self.conf.get(DB_RECYCLE, 4 * 3600))
self.bind = create_engine(
self.conf.get(DB_URI),
pool_size=pool_size,
pool_recycle=pool_recycle)
self.base.metadata.create_all(self.bind)
[docs] def stop(self):
self.bind.dispose()
del self.bind
[docs] def get_dependency(self, worker_ctx):
session_cls = sessionmaker(self.bind)
session = session_cls()
self.dbs[worker_ctx] = session
return session
[docs] def worker_teardown(self, worker_ctx):
session = self.dbs.pop(worker_ctx)
session.close()
[docs]class Rs(DependencyProvider):
[docs] def setup(self):
self.conf = self.container.config
self.rs = StrictRedis.from_url(self.conf.get(RS_URI))
[docs] def get_dependency(self, worker_ctx):
return self.rs