Ejemplo n.º 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
Ejemplo n.º 2
0
def insert_report_schedule(
    type: str,
    name: str,
    crontab: str,
    timezone: Optional[str] = None,
    sql: Optional[str] = None,
    description: Optional[str] = None,
    chart: Optional[Slice] = None,
    dashboard: Optional[Dashboard] = None,
    database: Optional[Database] = None,
    owners: Optional[List[User]] = None,
    validator_type: Optional[str] = None,
    validator_config_json: Optional[str] = None,
    log_retention: Optional[int] = None,
    last_state: Optional[ReportState] = None,
    grace_period: Optional[int] = None,
    recipients: Optional[List[ReportRecipients]] = None,
    report_format: Optional[ReportDataFormat] = None,
    logs: Optional[List[ReportExecutionLog]] = None,
    extra: Optional[Dict[Any, Any]] = None,
    force_screenshot: bool = False,
) -> ReportSchedule:
    owners = owners or []
    recipients = recipients or []
    logs = logs or []
    last_state = last_state or ReportState.NOOP
    report_schedule = ReportSchedule(
        type=type,
        name=name,
        crontab=crontab,
        timezone=timezone,
        sql=sql,
        description=description,
        chart=chart,
        dashboard=dashboard,
        database=database,
        owners=owners,
        validator_type=validator_type,
        validator_config_json=validator_config_json,
        log_retention=log_retention,
        grace_period=grace_period,
        recipients=recipients,
        logs=logs,
        last_state=last_state,
        report_format=report_format,
        extra=extra,
        force_screenshot=force_screenshot,
    )
    db.session.add(report_schedule)
    db.session.commit()
    return report_schedule
Ejemplo n.º 3
0
    def create_chart_with_report(self):
        with self.create_app().app_context():
            admin = self.get_user("admin")
            chart = self.insert_chart(f"chart_report", [admin.id], 1)
            report_schedule = ReportSchedule(
                type=ReportScheduleType.REPORT,
                name="report_with_chart",
                crontab="* * * * *",
                chart=chart,
            )
            db.session.commit()

            yield chart

            # rollback changes
            db.session.delete(report_schedule)
            db.session.delete(chart)
            db.session.commit()
Ejemplo n.º 4
0
    def create_dashboard_with_report(self):
        with self.create_app().app_context():
            admin = self.get_user("admin")
            dashboard = self.insert_dashboard(f"dashboard_report",
                                              "dashboard_report", [admin.id])
            report_schedule = ReportSchedule(
                type=ReportScheduleType.REPORT,
                name="report_with_dashboard",
                crontab="* * * * *",
                dashboard=dashboard,
            )
            db.session.commit()

            yield dashboard

            # rollback changes
            db.session.delete(report_schedule)
            db.session.delete(dashboard)
            db.session.commit()
Ejemplo n.º 5
0
 def insert_report_schedule(
     self,
     type: str,
     name: str,
     crontab: str,
     sql: Optional[str] = None,
     description: Optional[str] = None,
     chart: Optional[Slice] = None,
     dashboard: Optional[Dashboard] = None,
     database: Optional[Database] = None,
     owners: Optional[List[User]] = None,
     validator_type: Optional[str] = None,
     validator_config_json: Optional[str] = None,
     log_retention: Optional[int] = None,
     grace_period: Optional[int] = None,
     recipients: Optional[List[ReportRecipients]] = None,
     logs: Optional[List[ReportExecutionLog]] = None,
 ) -> ReportSchedule:
     owners = owners or []
     recipients = recipients or []
     logs = logs or []
     report_schedule = ReportSchedule(
         type=type,
         name=name,
         crontab=crontab,
         sql=sql,
         description=description,
         chart=chart,
         dashboard=dashboard,
         database=database,
         owners=owners,
         validator_type=validator_type,
         validator_config_json=validator_config_json,
         log_retention=log_retention,
         grace_period=grace_period,
         recipients=recipients,
         logs=logs,
     )
     db.session.add(report_schedule)
     db.session.commit()
     return report_schedule
Ejemplo n.º 6
0
    def create_database_with_report(self):
        with self.create_app().app_context():
            example_db = get_example_database()
            database = self.insert_database(
                "database_with_report",
                example_db.sqlalchemy_uri_decrypted,
                expose_in_sqllab=True,
            )
            report_schedule = ReportSchedule(
                type=ReportScheduleType.ALERT,
                name="report_with_database",
                crontab="* * * * *",
                database=database,
            )
            db.session.add(report_schedule)
            db.session.commit()
            yield database

            # rollback changes
            db.session.delete(report_schedule)
            db.session.delete(database)
            db.session.commit()