def create_report(self, report_key, report_config): if not isinstance(report_key, str): raise TypeError('Report key is not a string.') if not isinstance(report_config, dict): raise TypeError('Report config is not a dict.') if 'query_folder' not in self.config: raise KeyError('Query folder is not in config.') query_folder = self.config['query_folder'] if not isinstance(query_folder, str): raise ValueError('Query folder is not a string.') report = Report() report.key = report_key report.type = self.get_type(report_config) report.frequency = self.get_frequency(report_config) report.granularity = self.get_granularity(report_config) report.lag = self.get_lag(report_config) report.is_timeboxed = self.get_is_timeboxed(report_config) report.is_funnel = self.get_is_funnel(report_config) report.first_date = self.get_first_date(report_config, report.is_timeboxed) report.explode_by = self.get_explode_by(report_config) if report.type == 'sql': report.db_key = self.get_db_key(report_config) report.sql_template = self.get_sql_template(report_key, query_folder) elif report.type == 'script': report.script = self.get_script(report_key, query_folder) return report