Exemple #1
0
 def save(self, model, **kwargs):
     """ Saves model instance.
     Before actual saving it runs `*_isinstance` function.
     """
     self._isinstance(model)
     db.get_session().add(model)
     return model
Exemple #2
0
def set_search_path(event):
    request = event.request
    public_schema, public_include = get_public_schema_info()

    session = db.get_session()
    set_schema_to_public(session=session, public_schema=public_schema)
    domain_url = get_domain_url_from_request(request)

    tenant = Meta.TenantModel.manager.get_or_404(domain_url=domain_url)
    request.tenant = tenant
    register_tenant_schema(request=request, session=session, tenant=tenant)
Exemple #3
0
def schema_context(schema_name=None, domain_url=None):
    if schema_name is None and domain_url is None:
        raise ValueError(u"Gimme schema_name or domain_url")

    session = db.get_session()

    if schema_name:
        tenant = Meta.TenantModel.manager.get_or_404(schema_name=schema_name)

    else:
        tenant = Meta.TenantModel.manager.get_or_404(domain_url=domain_url)

    session.execute('SET search_path TO {0}'.format(tenant.schema_name))
    yield
Exemple #4
0
    def save(self, model, create_schema=True, **kwargs):
        from sqlalchemy.schema import CreateSchema
        from seth import tenancy
        public_schema, _ = tenancy.get_public_schema_info()
        session = db.get_session()
        tenancy.set_schema_to_public(
            session=session, public_schema=public_schema
        )

        super(TenantManager, self).save(model)

        if not model.id and create_schema and model.schema_name != public_schema:
            session.execute(CreateSchema(model.schema_name))
            tenancy.set_schema_to_public(
                session=session, public_schema=public_schema
            )
Exemple #5
0
def _register_tenancy(config, TenantModel):
    from seth import db
    from seth import tenancy

    tenancy.Meta.TenantModel = TenantModel

    session = db.get_session()
    dialect = session.connection().engine.url.get_dialect()

    if dialect.name in tenancy.supported_dialects:
        config.add_subscriber(tenancy.set_search_path, NewRequest)
    else:
        msg = 'Cannot register tenancy. Dialect: {0} is not supported'.format(
            dialect.name
        )
        logger.error(msg)
        raise RuntimeError(msg)
Exemple #6
0
    def query(self):
        """ Provides shortcut to sqlalchemy's `*session.query` function
        from manager.

        For example:

        .. code-block:: python

            MyModel.manager.query

        or

        .. code-block:: python

            MyModel.query

        """
        return db.get_session().query(self.model_class)
Exemple #7
0
 def setUp(self):
     self.connection = self.engine.connect()
     self.trans = self.connection.begin()
     self.config = testing.setUp()
     self.session = db.get_session()
Exemple #8
0
if __name__ == '__main__':
    logging.basicConfig(level=logging.DEBUG)
    config = Configurator()
    settings = {
        'sqlalchemy.url': 'sqlite://'
    }

    engine = engine_from_config(settings, prefix='sqlalchemy.')
    maker = scoped_session(sessionmaker(
        extension=ZopeTransactionExtension()
    ))
    maker.configure(bind=engine)
    db.register_maker(maker=maker)
    Base.metadata.bind = engine
    Base.metadata.create_all(engine)

    # create two blank models
    session = db.get_session()
    for i in range(10000):
        SuperModel.manager.create()
    db.commit()

    config.include('seth')
    config.register_query_listener(engine, 0)
    config.register_resource(SampleResource, '/test/')

    app = config.make_wsgi_app()
    server = make_server('0.0.0.0', 6543, app)
    server.serve_forever()
Exemple #9
0
 def test_assert_raises_not_initialized_exception_when_db_is_not_initialized(self):
     old_maker = db.Meta.maker
     db.Meta.maker = None
     self.assertRaises(db.SessionNotInitializedException, lambda: db.get_session())
     db.Meta.maker = old_maker
Exemple #10
0
 def save(self, model, **kwargs):
     if not self.query.count():
         self._isinstance(model)
         model.id = self.default_pk
         db.get_session().add(model)
     return model
Exemple #11
0
    def delete(self, model):
        """ Deletes model instance performing verification first.
        """

        self._isinstance(model)
        db.get_session().delete(model)
Exemple #12
0
 def handle_update(self, instance, data):
     session = db.get_session()
     instance.manager.update(model=instance, **data)
     session.flush()
Exemple #13
0
 def handle_deletion(self, instance):
     session = db.get_session()
     instance.manager.delete(model=instance)
     session.flush()
Exemple #14
0
 def handle_creation(self, instance):
     session = db.get_session()
     instance.manager.save(model=instance)
     session.flush()