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
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
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
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."}
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."})
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
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