예제 #1
0
    def report_config_to_v2_fixture(report_config, restore_user):
        domain = restore_user.domain
        report, data_source = BaseReportFixturesProvider._get_report_and_data_source(
            report_config.report_id, domain)

        # apply filters specified in report module
        all_filter_values = {
            filter_slug: restore_user.get_ucr_filter_value(
                filter, report.get_ui_filter(filter_slug))
            for filter_slug, filter in report_config.filters.items()
        }
        # apply all prefilters
        prefilters = [
            ReportFilterFactory.from_spec(p, report) for p in report.prefilters
        ]
        prefilter_values = {
            prefilter.name: prefilter.value()
            for prefilter in prefilters
        }
        all_filter_values.update(prefilter_values)
        # filter out nulls
        filter_values = {
            filter_slug: filter_value
            for filter_slug, filter_value in all_filter_values.items()
            if filter_value is not None
        }
        defer_filters = {
            filter_slug: report.get_ui_filter(filter_slug)
            for filter_slug, filter_value in all_filter_values.items()
            if filter_value is None and is_valid_mobile_select_filter_type(
                report.get_ui_filter(filter_slug))
        }
        data_source.set_filter_values(filter_values)
        data_source.defer_filters(defer_filters)
        filter_options_by_field = defaultdict(set)

        rows_elem = ReportFixturesProviderV2._get_v2_report_elem(
            data_source,
            {ui_filter.field
             for ui_filter in defer_filters.values()}, filter_options_by_field)
        filters_elem = BaseReportFixturesProvider._get_filters_elem(
            defer_filters, filter_options_by_field, restore_user._couch_user)
        report_filter_elem = E.fixture(
            id=ReportFixturesProviderV2._report_filter_id(report_config.uuid))
        report_filter_elem.append(filters_elem)

        if (data_source.config.backend_id in UCR_SUPPORT_BOTH_BACKENDS
                and random.randint(0, MOBILE_UCR_RANDOM_THRESHOLD)
                == MOBILE_UCR_RANDOM_THRESHOLD):
            compare_ucr_dbs.delay(domain, report_config.report_id,
                                  filter_values)

        report_elem = E.fixture(id=ReportFixturesProviderV2._report_fixture_id(
            report_config.uuid),
                                user_id=restore_user.user_id,
                                report_id=report_config.report_id,
                                last_sync=_utcnow().isoformat(),
                                indexed='true')
        report_elem.append(rows_elem)
        return [report_filter_elem, report_elem]
예제 #2
0
def generate_rows_and_filters(report_data_cache, report_config, restore_user,
                              row_to_element):
    """Generate restore row and filter elements
    :param row_to_element: function (
                deferred_fields, filter_options_by_field, row, index, is_total_row
            ) -> row_element
    """
    domain = restore_user.domain
    report, data_source = _get_report_and_data_source(report_config.report_id,
                                                      domain)

    # apply filters specified in report module
    all_filter_values = {
        filter_slug:
        restore_user.get_ucr_filter_value(filter,
                                          report.get_ui_filter(filter_slug))
        for filter_slug, filter in report_config.filters.items()
    }
    # apply all prefilters
    prefilters = [
        ReportFilterFactory.from_spec(p, report) for p in report.prefilters
    ]
    prefilter_values = {
        prefilter.name: prefilter.value()
        for prefilter in prefilters
    }
    all_filter_values.update(prefilter_values)
    # filter out nulls
    filter_values = {
        filter_slug: filter_value
        for filter_slug, filter_value in all_filter_values.items()
        if filter_value is not None
    }
    defer_filters = [
        report.get_ui_filter(filter_slug)
        for filter_slug, filter_value in all_filter_values.items()
        if filter_value is None and is_valid_mobile_select_filter_type(
            report.get_ui_filter(filter_slug))
    ]
    data_source.set_filter_values(filter_values)
    data_source.set_defer_fields([f.field for f in defer_filters])
    filter_options_by_field = defaultdict(set)

    row_elements = get_report_element(
        report_data_cache,
        report_config,
        data_source,
        {f.field
         for f in defer_filters},
        filter_options_by_field,
        row_to_element,
    )
    filters_elem = _get_filters_elem(defer_filters, filter_options_by_field,
                                     restore_user._couch_user)

    if (report_config.report_id in settings.UCR_COMPARISONS and
            COMPARE_UCR_REPORTS.enabled(uuid.uuid4().hex, NAMESPACE_OTHER)):
        compare_ucr_dbs.delay(domain, report_config.report_id, filter_values)

    return row_elements, filters_elem
예제 #3
0
    def report_config_to_v2_fixture(report_config, restore_user):
        domain = restore_user.domain
        report, data_source = BaseReportFixturesProvider._get_report_and_data_source(
            report_config.report_id, domain)

        # apply filters specified in report module
        all_filter_values = {
            filter_slug: restore_user.get_ucr_filter_value(
                filter, report.get_ui_filter(filter_slug))
            for filter_slug, filter in report_config.filters.items()
        }
        # apply all prefilters
        prefilters = [
            ReportFilterFactory.from_spec(p, report) for p in report.prefilters
        ]
        prefilter_values = {
            prefilter.name: prefilter.value()
            for prefilter in prefilters
        }
        all_filter_values.update(prefilter_values)
        # filter out nulls
        filter_values = {
            filter_slug: filter_value
            for filter_slug, filter_value in all_filter_values.items()
            if filter_value is not None
        }
        defer_filters = [
            report.get_ui_filter(filter_slug)
            for filter_slug, filter_value in all_filter_values.items()
            if filter_value is None and is_valid_mobile_select_filter_type(
                report.get_ui_filter(filter_slug))
        ]
        data_source.set_filter_values(filter_values)
        data_source.set_defer_fields([f.field for f in defer_filters])
        filter_options_by_field = defaultdict(set)

        rows_elem = ReportFixturesProviderV2._get_v2_report_elem(
            data_source, {f.field
                          for f in defer_filters}, filter_options_by_field,
            _format_last_sync_time(domain, restore_user.user_id), restore_user)
        filters_elem = BaseReportFixturesProvider._get_filters_elem(
            defer_filters, filter_options_by_field, restore_user._couch_user)
        report_filter_elem = E.fixture(
            id=ReportFixturesProviderV2._report_filter_id(report_config.uuid))
        report_filter_elem.append(filters_elem)

        if (report_config.report_id in settings.UCR_COMPARISONS
                and COMPARE_UCR_REPORTS.enabled(uuid.uuid4().hex,
                                                NAMESPACE_OTHER)):
            compare_ucr_dbs.delay(domain, report_config.report_id,
                                  filter_values)

        report_elem = E.fixture(id=ReportFixturesProviderV2._report_fixture_id(
            report_config.uuid),
                                user_id=restore_user.user_id,
                                report_id=report_config.report_id,
                                indexed='true')
        report_elem.append(rows_elem)
        return [report_filter_elem, report_elem]
예제 #4
0
    def report_config_to_v1_fixture(report_config, restore_user):
        domain = restore_user.domain
        report, data_source = BaseReportFixturesProvider._get_report_and_data_source(
            report_config.report_id, domain)

        # apply filters specified in report module
        all_filter_values = {
            filter_slug: restore_user.get_ucr_filter_value(
                filter, report.get_ui_filter(filter_slug))
            for filter_slug, filter in report_config.filters.items()
        }
        # apply all prefilters
        prefilters = [
            ReportFilterFactory.from_spec(p, report) for p in report.prefilters
        ]
        prefilter_values = {
            prefilter.name: prefilter.value()
            for prefilter in prefilters
        }
        all_filter_values.update(prefilter_values)
        # filter out nulls
        filter_values = {
            filter_slug: filter_value
            for filter_slug, filter_value in all_filter_values.items()
            if filter_value is not None
        }
        defer_filters = [
            report.get_ui_filter(filter_slug)
            for filter_slug, filter_value in all_filter_values.items()
            if filter_value is None and is_valid_mobile_select_filter_type(
                report.get_ui_filter(filter_slug))
        ]
        data_source.set_filter_values(filter_values)
        data_source.set_defer_fields([f.field for f in defer_filters])
        filter_options_by_field = defaultdict(set)

        rows_elem = ReportFixturesProvider._get_v1_report_elem(
            data_source, {ui_filter.field
                          for ui_filter in defer_filters},
            filter_options_by_field)
        filters_elem = BaseReportFixturesProvider._get_filters_elem(
            defer_filters, filter_options_by_field, restore_user._couch_user)

        if (report_config.report_id in settings.UCR_COMPARISONS
                and random.randint(0, UCR_COMPARISONS_THRESHOLD)
                == UCR_COMPARISONS_THRESHOLD):
            compare_ucr_dbs.delay(domain, report_config.report_id,
                                  filter_values)

        report_elem = E.report(id=report_config.uuid,
                               report_id=report_config.report_id)
        report_elem.append(filters_elem)
        report_elem.append(rows_elem)
        return report_elem
예제 #5
0
    def report_config_to_v2_fixture(report_config, restore_user):
        domain = restore_user.domain
        report, data_source = BaseReportFixturesProvider._get_report_and_data_source(
            report_config.report_id, domain)

        # apply filters specified in report module
        all_filter_values = {
            filter_slug: restore_user.get_ucr_filter_value(filter, report.get_ui_filter(filter_slug))
            for filter_slug, filter in report_config.filters.items()
        }
        # apply all prefilters
        prefilters = [ReportFilterFactory.from_spec(p, report) for p in report.prefilters]
        prefilter_values = {prefilter.name: prefilter.value() for prefilter in prefilters}
        all_filter_values.update(prefilter_values)
        # filter out nulls
        filter_values = {
            filter_slug: filter_value for filter_slug, filter_value in all_filter_values.items()
            if filter_value is not None
        }
        defer_filters = [
            report.get_ui_filter(filter_slug)
            for filter_slug, filter_value in all_filter_values.items()
            if filter_value is None and is_valid_mobile_select_filter_type(report.get_ui_filter(filter_slug))
        ]
        data_source.set_filter_values(filter_values)
        data_source.set_defer_fields([f.field for f in defer_filters])
        filter_options_by_field = defaultdict(set)

        rows_elem = ReportFixturesProviderV2._get_v2_report_elem(
            data_source,
            {f.field for f in defer_filters},
            filter_options_by_field,
            _last_sync_time(domain, restore_user.user_id),
        )
        filters_elem = BaseReportFixturesProvider._get_filters_elem(
            defer_filters, filter_options_by_field, restore_user._couch_user)
        report_filter_elem = E.fixture(id=ReportFixturesProviderV2._report_filter_id(report_config.uuid))
        report_filter_elem.append(filters_elem)

        if (report_config.report_id in settings.UCR_COMPARISONS and
                random.randint(0, UCR_COMPARISONS_THRESHOLD) == UCR_COMPARISONS_THRESHOLD):
            compare_ucr_dbs.delay(domain, report_config.report_id, filter_values)

        report_elem = E.fixture(
            id=ReportFixturesProviderV2._report_fixture_id(report_config.uuid), user_id=restore_user.user_id,
            report_id=report_config.report_id, indexed='true'
        )
        report_elem.append(rows_elem)
        return [report_filter_elem, report_elem]
예제 #6
0
    def report_config_to_fixture(report_config, restore_user):
        report, data_source = ReportFixturesProvider._get_report_and_data_source(
            report_config.report_id, restore_user.domain)

        # TODO: Convert to be compatible with restore_user
        # apply filters specified in report module
        all_filter_values = {
            filter_slug: restore_user.get_ucr_filter_value(
                filter, report.get_ui_filter(filter_slug))
            for filter_slug, filter in report_config.filters.items()
        }
        # apply all prefilters
        prefilters = [
            ReportFilterFactory.from_spec(p, report) for p in report.prefilters
        ]
        prefilter_values = {
            prefilter.name: prefilter.value()
            for prefilter in prefilters
        }
        all_filter_values.update(prefilter_values)
        # filter out nulls
        filter_values = {
            filter_slug: filter_value
            for filter_slug, filter_value in all_filter_values.items()
            if filter_value is not None
        }
        defer_filters = {
            filter_slug: report.get_ui_filter(filter_slug)
            for filter_slug, filter_value in all_filter_values.items()
            if filter_value is None and is_valid_mobile_select_filter_type(
                report.get_ui_filter(filter_slug))
        }
        data_source.set_filter_values(filter_values)
        data_source.defer_filters(defer_filters)
        filter_options_by_field = defaultdict(set)

        rows_elem = ReportFixturesProvider._get_report_elem(
            data_source,
            {ui_filter.field
             for ui_filter in defer_filters.values()}, filter_options_by_field)
        filters_elem = ReportFixturesProvider._get_filters_elem(
            defer_filters, filter_options_by_field, restore_user._couch_user)

        report_elem = E.report(id=report_config.uuid,
                               report_id=report_config.report_id)
        report_elem.append(filters_elem)
        report_elem.append(rows_elem)
        return report_elem
예제 #7
0
    def _report_config_to_fixture(report_config, restore_user):
        report, data_source = ReportFixturesProvider._get_report_and_data_source(
            report_config.report_id, restore_user.domain
        )

        # TODO: Convert to be compatible with restore_user
        # apply filters specified in report module
        all_filter_values = {
            filter_slug: restore_user.get_ucr_filter_value(filter, report.get_ui_filter(filter_slug))
            for filter_slug, filter in report_config.filters.items()
        }
        # apply all prefilters
        prefilters = [ReportFilterFactory.from_spec(p, report) for p in report.prefilters]
        prefilter_values = {prefilter.name: prefilter.value() for prefilter in prefilters}
        all_filter_values.update(prefilter_values)
        # filter out nulls
        filter_values = {
            filter_slug: filter_value for filter_slug, filter_value in all_filter_values.items()
            if filter_value is not None
        }
        defer_filters = {
            filter_slug: report.get_ui_filter(filter_slug)
            for filter_slug, filter_value in all_filter_values.items()
            if filter_value is None and is_valid_mobile_select_filter_type(report.get_ui_filter(filter_slug))
        }
        data_source.set_filter_values(filter_values)
        data_source.defer_filters(defer_filters)
        filter_options_by_field = defaultdict(set)

        rows_elem = ReportFixturesProvider._get_report_elem(
            data_source,
            {ui_filter.field for ui_filter in defer_filters.values()},
            filter_options_by_field
        )
        filters_elem = ReportFixturesProvider._get_filters_elem(defer_filters, filter_options_by_field)

        report_elem = E.report(id=report_config.uuid)
        report_elem.append(filters_elem)
        report_elem.append(rows_elem)
        return report_elem