def rollback_migration(self, migration_name): engine = engines.engine_factory.get_engine() filename = self.get_file_name(migration_name) with sessions.session_manager(engine=engine) as session: self._init_migration_table(session) migrations = self._load_migrations(session) migrations[filename].rollback(session, migrations)
def get_all(self, filters=None, session=None): # TODO(efrolov): Add limit and offset parameters filters = self._filters_to_storage_view(filters or {}) with sessions.session_manager(self._engine, session)as s: result = self._table.select(engine=self._engine, filters=filters, session=s) for params in result.fetchall(): yield self.model_cls.restore_from_storage(**params)
def insert(self, session=None): # TODO(efrolov): Add filters arameters. with sessions.session_manager(self._engine, session) as s: self._table.insert(engine=self._engine, data=self._get_prepared_data(), session=s) # TODO(efrolov): Check result self._saved = True
def delete(self, session=None): # TODO(efrolov): Add filters arameters. with sessions.session_manager(self._engine, session) as s: result = self._table.delete( engine=self._engine, ids=self._get_prepared_data(self.get_id_properties()), session=s) # TODO(efrolov): Check result return result
def apply_migration(self, migration_name): engine = engines.engine_factory.get_engine() filename = self.get_file_name(migration_name) with sessions.session_manager(engine=engine) as session: self._init_migration_table(session) migrations = self._load_migrations(session) if migrations[filename].is_applied(): for migration in migrations.values(): if filename in migration.depends_from(): migration.rollback(session, migrations) else: migrations[filename].apply(session, migrations)
def update(self, session=None): # TODO(efrolov): Add filters arameters. with sessions.session_manager(self._engine, session) as s: result = self._table.update( engine=self._engine, ids=self._get_prepared_data(self.get_id_properties()), data=self._get_prepared_data(self.get_data_properties()), session=s) if result.get_count() == 0: raise exceptions.RecordNotFound(model=self, filters=None) if result.get_count() > 1: raise exceptions.MultipleUpdatesDetected(model=self, filters={})