コード例 #1
0
    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)
コード例 #2
0
    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
コード例 #3
0
 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
コード例 #4
0
 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
コード例 #5
0
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
コード例 #6
0
    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)
コード例 #7
0
 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
コード例 #8
0
    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
コード例 #9
0
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]
コード例 #10
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
コード例 #11
0
 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