Beispiel #1
0
    def create(cls, properties: Dict[str, Any], commit: bool = True) -> Model:
        """
        create a report schedule and nested recipients
        :raises: DAOCreateFailedError
        """

        try:
            model = ReportSchedule()
            for key, value in properties.items():
                if key != "recipients":
                    setattr(model, key, value)
            recipients = properties.get("recipients", [])
            for recipient in recipients:
                model.recipients.append(  # pylint: disable=no-member
                    ReportRecipients(
                        type=recipient["type"],
                        recipient_config_json=json.dumps(
                            recipient["recipient_config_json"]
                        ),
                    )
                )
            db.session.add(model)
            if commit:
                db.session.commit()
            return model
        except SQLAlchemyError as ex:
            db.session.rollback()
            raise DAOCreateFailedError(str(ex)) from ex
Beispiel #2
0
    def update(
        cls, model: Model, properties: Dict[str, Any], commit: bool = True
    ) -> Model:
        """
        create a report schedule and nested recipients
        :raises: DAOCreateFailedError
        """

        try:
            for key, value in properties.items():
                if key != "recipients":
                    setattr(model, key, value)
            if "recipients" in properties:
                recipients = properties["recipients"]
                model.recipients = [
                    ReportRecipients(
                        type=recipient["type"],
                        recipient_config_json=json.dumps(
                            recipient["recipient_config_json"]
                        ),
                        report_schedule=model,
                    )
                    for recipient in recipients
                ]
            db.session.merge(model)
            if commit:
                db.session.commit()
            return model
        except SQLAlchemyError as ex:
            db.session.rollback()
            raise DAOCreateFailedError(str(ex)) from ex
Beispiel #3
0
    def create(cls, properties: Dict[str, Any], commit: bool = True) -> Model:
        """
        Generic for creating models
        :raises: DAOCreateFailedError
        """

        logging.debug('XXXXXXXXXXXXXXXXX')
        logging.debug(str(cls.model_cls().__dict__))

        logging.debug('YYYYYYYYYYYYYYYY')
        logging.debug(str(properties))

        if cls.model_cls is None:
            raise DAOConfigError()
        model = cls.model_cls()  # pylint: disable=not-callable
        for key, value in properties.items():
            setattr(model, key, value)
        try:
            db.session.add(model)
            if commit:
                db.session.commit()
        except SQLAlchemyError as ex:  # pragma: no cover
            db.session.rollback()
            raise DAOCreateFailedError(exception=ex)
        return model
Beispiel #4
0
 def save(cls, instance_model: Model, commit: bool = True) -> Model:
     """
     Generic for saving models
     :raises: DAOCreateFailedError
     """
     if cls.model_cls is None:
         raise DAOConfigError()
     if not isinstance(instance_model, cls.model_cls):
         raise DAOCreateFailedError(
             "the instance model is not a type of the model class")
     try:
         db.session.add(instance_model)
         if commit:
             db.session.commit()
     except SQLAlchemyError as ex:  # pragma: no cover
         db.session.rollback()
         raise DAOCreateFailedError(exception=ex) from ex
     return instance_model
 def test_create_dataset_sqlalchemy_error(self, mock_dao_create):
     """
     Dataset API: Test create dataset sqlalchemy error
     """
     mock_dao_create.side_effect = DAOCreateFailedError()
     self.login(username="******")
     main_db = get_main_database()
     dataset_data = {
         "database": main_db.id,
         "schema": "",
         "table_name": "ab_permission",
     }
     uri = "api/v1/dataset/"
     rv = self.post_assert_metric(uri, dataset_data, "post")
     data = json.loads(rv.data.decode("utf-8"))
     assert rv.status_code == 422
     assert data == {"message": "Dataset could not be created."}
Beispiel #6
0
 def test_create_dataset_sqlalchemy_error(self, mock_dao_create):
     """
         Dataset API: Test create dataset sqlalchemy error
     """
     mock_dao_create.side_effect = DAOCreateFailedError()
     self.login(username="******")
     example_db = get_example_database()
     dataset_data = {
         "database": example_db.id,
         "schema": "",
         "table_name": "ab_permission",
     }
     uri = "api/v1/dataset/"
     rv = self.client.post(uri, json=dataset_data)
     data = json.loads(rv.data.decode("utf-8"))
     self.assertEqual(rv.status_code, 422)
     self.assertEqual(data, {"message": "Dataset could not be created."})
Beispiel #7
0
 def create(cls, properties: Dict, commit=True) -> Optional[Model]:
     """
     Generic for creating models
     :raises: DAOCreateFailedError
     """
     if cls.model_cls is None:
         raise DAOConfigError()
     model = cls.model_cls()  # pylint: disable=not-callable
     for key, value in properties.items():
         setattr(model, key, value)
     try:
         db.session.add(model)
         if commit:
             db.session.commit()
     except SQLAlchemyError as e:  # pragma: no cover
         db.session.rollback()
         raise DAOCreateFailedError(exception=e)
     return model
Beispiel #8
0
 def create(cls, properties: Dict[str, Any], commit: bool = True) -> Model:
     if cls.model_cls is None:
         raise DAOConfigError()
     model = FilterSet()
     setattr(model, NAME_FIELD, properties[NAME_FIELD])
     setattr(model, JSON_METADATA_FIELD, properties[JSON_METADATA_FIELD])
     setattr(model, DESCRIPTION_FIELD, properties.get(DESCRIPTION_FIELD, None))
     setattr(
         model,
         OWNER_ID_FIELD,
         properties.get(OWNER_ID_FIELD, properties[DASHBOARD_ID_FIELD]),
     )
     setattr(model, OWNER_TYPE_FIELD, properties[OWNER_TYPE_FIELD])
     setattr(model, DASHBOARD_ID_FIELD, properties[DASHBOARD_ID_FIELD])
     try:
         db.session.add(model)
         if commit:
             db.session.commit()
     except SQLAlchemyError as ex:  # pragma: no cover
         db.session.rollback()
         raise DAOCreateFailedError() from ex
     return model