def add(cls, **kwargs): validation = cls.schema.load(data=kwargs) if validation.errors: raise Exception(validation.errors) with get_db_session_scope() as session: session.add(validation.data)
def update(cls, item_pks, new_values): """Update an item in the DB with new_values. Args: item_pks (dict): a dict with the primary keys of the item to update. new_values (dict): key, values to update over the target entity. Returns: dict: Serialised model after update. """ valid_model_columns = set(inspect(cls.model).columns.keys()) non_applicable_fields = set(new_values.keys()) - valid_model_columns if non_applicable_fields: raise TypeError('Model %s has no attributes %s.', cls.model, non_applicable_fields) primary_keys = cls._filter_non_primary_keys(item_pks) with get_db_session_scope() as session: instance = session.query(cls.model).get(primary_keys) for field, new_value in new_values.items(): db_field_type = type(getattr(instance, field)) if issubclass(db_field_type, Enum): new_value = db_field_type(new_value) setattr(instance, field, new_value) return cls.schema.dump(instance).data
def get_by(cls, product_id, batch_id): with get_db_session_scope() as session: query = session.query( cls.model).filter(cls.model.product_id == product_id) if batch_id: query = query.filter(cls.model.batch_id == batch_id) if cls.order is not None: query = query.order_by(cls.order) return cls.schema.dump(query.all(), many=True).data
def get_by_name(cls, given_name): with get_db_session_scope() as session: try: result = (session.query( cls.model).filter(cls.model.name == given_name).one()) except NoResultFound as e: raise UnExistingDBEntityException('%s %s does not exist.', cls.model.__name__, given_name) from e return cls.schema.dump(result).data
def get_current_revision_in_db(): from connectors.db_connection import get_db_session_scope if not alembic_table_exists(): return None with get_db_session_scope() as session: res = session.execute("""select version_num from alembic_version""") res = res.first() if res: return int(res[0]) return res
def add(cls, **kwargs): validation = cls.schema.load(data=kwargs) if validation.errors: raise ValidationException(validation.errors) try: with get_db_session_scope() as session: session.add(validation.data) session.enable_relationship_loading(validation.data) session.flush() return cls.schema.dump(validation.data).data except IntegrityError as e: raise ValidationException(e)
def get_by_freshness(cls, freshness_state): in_two_days = arrow.utcnow().shift(days=2).date() today = arrow.utcnow().date() with get_db_session_scope() as session: query = session.query(cls.model) if freshness_state == FreshnessEnum.EXPIRED: query = query.filter(cls.model.expiry_date < today) elif freshness_state == FreshnessEnum.EXPIRING: query = query.filter( cls.model.expiry_date.between(today, in_two_days)) elif freshness_state == FreshnessEnum.FRESH: query = query.filter(cls.model.expiry_date > in_two_days) query = query.order_by(cls.order) return cls.schema.dump(query.all(), many=True).data
def get(cls, **primary_keys): """Get records from the DB using the primary keys. Keyword Args: with the primary keys and values. Returns: dict with the serialization of the item requested """ pks = cls._filter_non_primary_keys(primary_keys) with get_db_session_scope() as session: result = session.query(cls.model).get(pks) if not result: raise UnExistingDBEntityException('%s %s does not exist.', cls.model.__name__, primary_keys) return cls.schema.dump(result).data
def alembic_table_exists(): from connectors.db_connection import get_db_session_scope with get_db_session_scope() as session: return session.execute( "SELECT to_regclass('alembic_version');").first()[0]
def get_all(cls): with get_db_session_scope() as session: query = session.query(cls.model) if cls.order is not None: query = query.order_by(cls.order) return cls.schema.dump(query.all(), many=True).data
def get_all(cls): """ """ with get_db_session_scope() as session: query = session.query(cls.model) return cls.schema.dump(query.all(), many=True).data