diff --git a/eos/db/__init__.py b/eos/db/__init__.py index 9119ab4aa..c453f47bc 100644 --- a/eos/db/__init__.py +++ b/eos/db/__init__.py @@ -17,24 +17,32 @@ # along with eos. If not, see . # =============================================================================== +import re import threading -from sqlalchemy import MetaData, create_engine +from sqlalchemy import MetaData, create_engine, event from sqlalchemy.orm import sessionmaker from . import migration from eos import config from logbook import Logger + pyfalog = Logger(__name__) pyfalog.info("Initializing database") pyfalog.info("Gamedata connection: {0}", config.gamedata_connectionstring) pyfalog.info("Saveddata connection: {0}", config.saveddata_connectionstring) + class ReadOnlyException(Exception): pass +def re_fn(expr, item): + reg = re.compile(expr, re.IGNORECASE) + return reg.search(item) is not None + + pyfalog.debug('Initializing gamedata') gamedata_connectionstring = config.gamedata_connectionstring if callable(gamedata_connectionstring): @@ -42,6 +50,12 @@ if callable(gamedata_connectionstring): else: gamedata_engine = create_engine(gamedata_connectionstring, echo=config.debug) + +@event.listens_for(gamedata_engine, 'connect') +def create_functions(dbapi_connection, connection_record): + dbapi_connection.create_function('regexp', 2, re_fn) + + gamedata_meta = MetaData() gamedata_meta.bind = gamedata_engine gamedata_session = sessionmaker(bind=gamedata_engine, autoflush=False, expire_on_commit=False)()