Example #1
0
def get_datasource_config(config_id,
                          domain,
                          data_source_type=DATA_SOURCE_TYPE_STANDARD):
    def _raise_not_found():
        raise DataSourceConfigurationNotFoundError(
            _('The data source referenced by this report could not be found.'))

    if data_source_type == DATA_SOURCE_TYPE_STANDARD:
        is_static = id_is_static(config_id)
        if is_static:
            config = StaticDataSourceConfiguration.by_id(config_id)
            if config.domain != domain:
                _raise_not_found()
        else:
            try:
                config = get_document_or_not_found(DataSourceConfiguration,
                                                   domain, config_id)
            except DocumentNotFound:
                _raise_not_found()
        return config, is_static
    elif data_source_type == DATA_SOURCE_TYPE_AGGREGATE:
        from corehq.apps.aggregate_ucrs.models import AggregateTableDefinition
        try:
            config = AggregateTableDefinition.objects.get(id=int(config_id),
                                                          domain=domain)
            return config, False
        except AggregateTableDefinition.DoesNotExist:
            _raise_not_found()
    else:
        raise InvalidDataSourceType(
            '{} is not a valid data source type!'.format(data_source_type))
Example #2
0
 def spec(self):
     if self.is_static:
         return StaticReportConfiguration.by_id(self.report_config_id,
                                                domain=self.domain)
     else:
         return get_document_or_not_found(ReportConfiguration, self.domain,
                                          self.report_config_id)
Example #3
0
def get_datasource_config(config_id, domain, data_source_type=DATA_SOURCE_TYPE_STANDARD):
    def _raise_not_found():
        raise DataSourceConfigurationNotFoundError(_(
            'The data source referenced by this report could not be found.'
        ))

    if data_source_type == DATA_SOURCE_TYPE_STANDARD:
        is_static = id_is_static(config_id)
        if is_static:
            config = StaticDataSourceConfiguration.by_id(config_id)
            if config.domain != domain:
                _raise_not_found()
        else:
            try:
                config = get_document_or_not_found(DataSourceConfiguration, domain, config_id)
            except DocumentNotFound:
                _raise_not_found()
        return config, is_static
    elif data_source_type == DATA_SOURCE_TYPE_AGGREGATE:
        from corehq.apps.aggregate_ucrs.models import AggregateTableDefinition
        try:
            config = AggregateTableDefinition.objects.get(id=int(config_id), domain=domain)
            return config, False
        except AggregateTableDefinition.DoesNotExist:
            _raise_not_found()
    else:
        raise InvalidDataSourceType('{} is not a valid data source type!'.format(data_source_type))
Example #4
0
 def __init__(self, domain, filters, report_id):
     report_config = ReportFactory.from_spec(
         get_document_or_not_found(
             ReportConfiguration,
             domain,
             report_id
         )
     )
     report_config.set_filter_values(filters)
     self.report_config = report_config
Example #5
0
 def _get_report_configuration(self, id_, domain):
     """
     Fetch the required ReportConfiguration object
     :param id_: The id of the ReportConfiguration
     :param domain: The domain of the ReportConfiguration
     :return: A ReportConfiguration
     """
     try:
         if report_config_id_is_static(id_):
             return StaticReportConfiguration.by_id(id_, domain=domain)
         else:
             return get_document_or_not_found(ReportConfiguration, domain, id_)
     except DocumentNotFound:
         raise NotFound
Example #6
0
 def _get_report_configuration(self, id_, domain):
     """
     Fetch the required ReportConfiguration object
     :param id_: The id of the ReportConfiguration
     :param domain: The domain of the ReportConfiguration
     :return: A ReportConfiguration
     """
     try:
         if report_config_id_is_static(id_):
             return StaticReportConfiguration.by_id(id_, domain=domain)
         else:
             return get_document_or_not_found(ReportConfiguration, domain, id_)
     except DocumentNotFound:
         raise NotFound
Example #7
0
def get_report_config(config_id, domain):
    is_static = any(
        config_id.startswith(prefix)
        for prefix in [STATIC_PREFIX, CUSTOM_REPORT_PREFIX]
    )
    if is_static:
        config = StaticReportConfiguration.by_id(config_id)
        if not config or config.domain != domain:
            raise ReportConfigurationNotFoundError
    else:
        try:
            config = get_document_or_not_found(ReportConfiguration, domain, config_id)
        except DocumentNotFound:
            raise ReportConfigurationNotFoundError
    return config, is_static
Example #8
0
def compare_ucr_dbs(domain, report_config_id, filter_values, sort_column,
                    sort_order, params):
    from corehq.apps.userreports.laboratory.experiment import UCRExperiment

    def _run_report(backend_to_use):
        data_source = ReportFactory.from_spec(spec,
                                              include_prefilters=True,
                                              backend=backend_to_use)
        data_source.set_filter_values(filter_values)
        if sort_column:
            data_source.set_order_by([
                (data_source.top_level_columns[int(sort_column)].column_id,
                 sort_order.upper())
            ])

        datatables_params = DatatablesParams.from_request_dict(params)
        page = list(
            data_source.get_data(start=datatables_params.start,
                                 limit=datatables_params.count))
        total_records = data_source.get_total_records()
        json_response = {
            'aaData': page,
            "iTotalRecords": total_records,
        }
        total_row = data_source.get_total_row(
        ) if data_source.has_total_row else None
        if total_row is not None:
            json_response["total_row"] = total_row
        return json_response

    spec = get_document_or_not_found(ReportConfiguration, domain,
                                     report_config_id)
    experiment_context = {
        "domain": domain,
        "report_config_id": report_config_id,
        "filter_values": filter_values,
    }
    experiment = UCRExperiment(name="UCR DB Experiment",
                               context=experiment_context)
    with experiment.control() as c:
        c.record(_run_report(UCR_SQL_BACKEND))

    with experiment.candidate() as c:
        c.record(_run_report(UCR_ES_BACKEND))

    objects = experiment.run()
    return objects
Example #9
0
def get_datasource_config(config_id, domain):
    def _raise_not_found():
        raise DataSourceConfigurationNotFoundError(
            _('The data source referenced by this report could not be found.'))

    is_static = id_is_static(config_id)
    if is_static:
        config = StaticDataSourceConfiguration.by_id(config_id)
        if config.domain != domain:
            _raise_not_found()
    else:
        try:
            config = get_document_or_not_found(DataSourceConfiguration, domain,
                                               config_id)
        except DocumentNotFound:
            _raise_not_found()
    return config, is_static
Example #10
0
def get_datasource_config(config_id, domain):
    def _raise_not_found():
        raise DataSourceConfigurationNotFoundError(_(
            'The data source referenced by this report could not be found.'
        ))

    is_static = config_id.startswith(StaticDataSourceConfiguration._datasource_id_prefix)
    if is_static:
        config = StaticDataSourceConfiguration.by_id(config_id)
        if not config or config.domain != domain:
            _raise_not_found()
    else:
        try:
            config = get_document_or_not_found(DataSourceConfiguration, domain, config_id)
        except DocumentNotFound:
            _raise_not_found()
    return config, is_static
Example #11
0
def get_report_config(domain_name, ucr_id):
    report_config = get_document_or_not_found(ReportConfiguration, domain_name, ucr_id)
    return report_config
Example #12
0
 def spec(self):
     if self.is_static:
         return StaticReportConfiguration.by_id(self.report_config_id, domain=self.domain)
     else:
         return get_document_or_not_found(ReportConfiguration, self.domain, self.report_config_id)
Example #13
0
 def spec(self):
     if self.is_custom:
         return CustomReportConfiguration.by_id(self.report_config_id)
     else:
         return get_document_or_not_found(ReportConfiguration, self.domain, self.report_config_id)
Example #14
0
 def ucr(self) -> Optional[ReportConfiguration]:
     try:
         return get_document_or_not_found(ReportConfiguration, self.domain,
                                          self.ucr_id)
     except DocumentNotFound:
         return None
Example #15
0
def get_report_config(domain_name, ucr_id):
    report_config = get_document_or_not_found(ReportConfiguration, domain_name, ucr_id)
    return report_config
Example #16
0
 def spec(self):
     return get_document_or_not_found(
         ReportConfiguration, self.domain, self.report_config_id)