diff --git a/README.md b/README.md index ce02cdf..a0318dc 100644 --- a/README.md +++ b/README.md @@ -22,7 +22,7 @@ entity_manager: ```python from sqlalchemy import Column, Integer, String, ForeignKey from sqlalchemy.orm import relationship -from sqlalchemy_bundle.bundle import Base +from sqlalchemy_bundle import Base class User(Base): __tablename__ = 'user' @@ -44,7 +44,7 @@ for create schema and foreign keys ## Creating the schema ```python -from sqlalchemy_bundle.bundle import EntityManager +from sqlalchemy_bundle import EntityManager import inject em = inject.instance(EntityManager) @@ -54,7 +54,7 @@ em.generate_schema() ## Querying the database ```python -from sqlalchemy_bundle.bundle import EntityManager +from sqlalchemy_bundle import EntityManager import inject em = inject.instance(EntityManager) @@ -67,7 +67,7 @@ with em.s as session: or if you prefer the real session object ```python -from sqlalchemy_bundle.bundle import EntityManager +from sqlalchemy_bundle import EntityManager import inject em = inject.instance(EntityManager) diff --git a/setup.py b/setup.py index 55baa4d..8fa2015 100644 --- a/setup.py +++ b/setup.py @@ -2,7 +2,7 @@ setup( name='sqlalchemy_bundle', packages=['sqlalchemy_bundle'], - version='1.02', + version='1.03', description='SqlAlchemy support for applauncher', author='Alvaro Garcia Gomez', author_email='maxpowel@gmail.com', diff --git a/sqlalchemy_bundle/__init__.py b/sqlalchemy_bundle/__init__.py index e69de29..48d280f 100644 --- a/sqlalchemy_bundle/__init__.py +++ b/sqlalchemy_bundle/__init__.py @@ -0,0 +1,66 @@ +from sqlalchemy.ext.declarative import declarative_base +from sqlalchemy.orm import sessionmaker, scoped_session +from sqlalchemy import create_engine +from applauncher.kernel import Configuration, Kernel +from contextlib import contextmanager +import inject + +Base = declarative_base() + + +class EntityManagerBundle(object): + def __init__(self): + self.config_mapping = { + "entity_manager": { + "driver": None, + "debug": False, + "username": "root", + "hostname": "localhost", + "password": "", + "database": None, + "port": None + + } + } + + +class EntityManager(object): + @inject.params(configuration=Configuration) + def __init__(self, configuration): + config = configuration.entity_manager + if config.driver.startswith("sqlite"): + engine = create_engine(config.driver, echo=config.debug) + else: + uri = "{driver}://{username}{password}@{host}/{database}?charset=utf8".format( + driver=config.driver, + username=config.username, + password=":"+str(config.password) if config.password is not None else "", + host=config.hostname, + database=config.database + ) + + engine = create_engine(uri, echo=config.debug, pool_recycle=60) + + self.engine = engine + + session_factory = sessionmaker(bind=engine, autocommit=False, autoflush=False) + self.Session = scoped_session(session_factory) + # Register mappings + kernel = inject.instance(Kernel) + for bundle in kernel.bundles: + if hasattr(bundle, "register_entities"): + getattr(bundle, "register_entities")() + + def session(self): + return self.Session() + + @property + @contextmanager + def s(self): + try: + yield self.Session() + finally: + self.Session.remove() + + def generate_schema(self): + Base.metadata.create_all(self.engine) diff --git a/sqlalchemy_bundle/bundle.py b/sqlalchemy_bundle/bundle.py deleted file mode 100644 index 48d280f..0000000 --- a/sqlalchemy_bundle/bundle.py +++ /dev/null @@ -1,66 +0,0 @@ -from sqlalchemy.ext.declarative import declarative_base -from sqlalchemy.orm import sessionmaker, scoped_session -from sqlalchemy import create_engine -from applauncher.kernel import Configuration, Kernel -from contextlib import contextmanager -import inject - -Base = declarative_base() - - -class EntityManagerBundle(object): - def __init__(self): - self.config_mapping = { - "entity_manager": { - "driver": None, - "debug": False, - "username": "root", - "hostname": "localhost", - "password": "", - "database": None, - "port": None - - } - } - - -class EntityManager(object): - @inject.params(configuration=Configuration) - def __init__(self, configuration): - config = configuration.entity_manager - if config.driver.startswith("sqlite"): - engine = create_engine(config.driver, echo=config.debug) - else: - uri = "{driver}://{username}{password}@{host}/{database}?charset=utf8".format( - driver=config.driver, - username=config.username, - password=":"+str(config.password) if config.password is not None else "", - host=config.hostname, - database=config.database - ) - - engine = create_engine(uri, echo=config.debug, pool_recycle=60) - - self.engine = engine - - session_factory = sessionmaker(bind=engine, autocommit=False, autoflush=False) - self.Session = scoped_session(session_factory) - # Register mappings - kernel = inject.instance(Kernel) - for bundle in kernel.bundles: - if hasattr(bundle, "register_entities"): - getattr(bundle, "register_entities")() - - def session(self): - return self.Session() - - @property - @contextmanager - def s(self): - try: - yield self.Session() - finally: - self.Session.remove() - - def generate_schema(self): - Base.metadata.create_all(self.engine)