Exemple #1
0
    def test_pre_filter_between_operator(self):
        column = Mock()
        column.name = 'dob_field'
        column.between.return_value = 'foo'
        table = Mock()
        table.c = [column]

        value = {
            'operator': 'between',
            'operand': ['2017-03-13', '2017-04-11']
        }
        filter_ = ReportFilter.wrap({
            'type': 'pre',
            'field': 'dob_field',
            'slug': 'dob_slug',
            'datatype': 'date',
            'pre_value': value['operand'],
            'pre_operator': value['operator'],
        })
        filter_value = PreFilterValue(filter_, value)
        self.assertEqual(filter_value.to_sql_values(), {
            'dob_slug_0': '2017-03-13',
            'dob_slug_1': '2017-04-11'
        })
        self.assertEqual(filter_value.to_sql_filter().build_expression(table),
                         'foo')
Exemple #2
0
    def test_pre_filter_dyn_operator(self):
        from corehq.apps.reports.daterange import get_daterange_start_end_dates

        column = Mock()
        column.name = 'dob_field'
        column.between.return_value = 'foo'
        table = Mock()
        table.c = [column]

        start_date, end_date = get_daterange_start_end_dates('lastmonth')

        value = {'operator': 'lastmonth', 'operand': [None]}
        filter_ = ReportFilter.wrap({
            'type': 'pre',
            'field': 'dob_field',
            'slug': 'dob_slug',
            'datatype': 'array',
            'pre_value': value['operand'],
            'pre_operator': value['operator'],
        })
        filter_value = PreFilterValue(filter_, value)
        self.assertEqual(filter_value.to_sql_values(), {
            'dob_slug_0': str(start_date),
            'dob_slug_1': str(end_date),
        })
        self.assertEqual(filter_value.to_sql_filter().build_expression(table),
                         'foo')
Exemple #3
0
    def test_pre_filter_dyn_operator(self):
        from corehq.apps.reports.daterange import get_daterange_start_end_dates

        column = Mock()
        column.name = 'dob_field'
        column.between.return_value = 'foo'
        table = Mock()
        table.c = [column]

        start_date, end_date = get_daterange_start_end_dates('lastmonth')

        value = {'operator': 'lastmonth', 'operand': [None]}
        filter_ = ReportFilter.wrap({
            'type': 'pre',
            'field': 'dob_field',
            'slug': 'dob_slug',
            'datatype': 'array',
            'pre_value': value['operand'],
            'pre_operator': value['operator'],
        })
        filter_value = PreFilterValue(filter_, value)
        self.assertEqual(filter_value.to_sql_values(), {
            'dob_slug_0': str(start_date),
            'dob_slug_1': str(end_date),
        })
        self.assertEqual(filter_value.to_sql_filter().build_expression(table), 'foo')
 def test_filter_value(self):
     filter = ReportFilter.wrap({
         "type": "location_drilldown",
         "field": "block_id",
         "slug": "block_id_drill",
         "display": "Drilldown by Location",
     })
     filter_value = LocationDrilldownFilterValue(filter, ['Middlesex'])
     self.assertDictEqual(filter_value.to_sql_values(), {'block_id_drill_0': 'Middlesex'})
Exemple #5
0
 def from_spec(cls, spec):
     from corehq.apps.userreports.reports.data_source import ConfigurableReportDataSource
     return ConfigurableReportDataSource(
         domain=spec.domain,
         config_or_config_id=spec.config_id,
         filters=[ReportFilter.wrap(f) for f in spec.filters],
         aggregation_columns=spec.aggregation_columns,
         columns=spec.report_columns,
     )
Exemple #6
0
 def from_spec(cls, spec):
     from corehq.apps.userreports.reports.data_source import ConfigurableReportDataSource
     order_by = [(o['field'], o['order']) for o in spec.sort_expression]
     return ConfigurableReportDataSource(
         domain=spec.domain,
         config_or_config_id=spec.config_id,
         filters=[ReportFilter.wrap(f) for f in spec.filters],
         aggregation_columns=spec.aggregation_columns,
         columns=spec.report_columns,
         order_by=order_by,
     )
 def test_numeric_filter_value(self):
     filter = ReportFilter.wrap({
         "type": "numeric",
         "field": "number_of_children_field",
         "slug": "number_of_children_slug",
         "display": "Number of Children",
     })
     NumericFilterValue(filter, None)
     NumericFilterValue(filter, {'operator': '<', 'operand': 3})
     with self.assertRaises(AssertionError):
         NumericFilterValue(filter, {'operator': 'sql injection', 'operand': 3})
 def test_numeric_filter_value(self):
     filter = ReportFilter.wrap({
         "type": "numeric",
         "field": "number_of_children_field",
         "slug": "number_of_children_slug",
         "display": "Number of Children",
     })
     NumericFilterValue(filter, None)
     NumericFilterValue(filter, {'operator': '<', 'operand': 3})
     with self.assertRaises(AssertionError):
         NumericFilterValue(filter, {'operator': 'sql injection', 'operand': 3})
Exemple #9
0
 def test_pre_filter_value(self):
     pre_value = 'yes'
     filter_ = ReportFilter.wrap({
         'type': 'pre',
         'field': 'at_risk_field',
         'slug': 'at_risk_slug',
         'datatype': 'string',
         'pre_value': pre_value
     })
     filter_value = PreFilterValue(filter_, {'operand': pre_value})
     self.assertEqual(filter_value.to_sql_values(), {'at_risk_slug': 'yes'})
Exemple #10
0
 def test_pre_filter_value(self):
     pre_value = 'yes'
     filter_ = ReportFilter.wrap({
         'type': 'pre',
         'field': 'at_risk_field',
         'slug': 'at_risk_slug',
         'datatype': 'string',
         'pre_value': pre_value
     })
     filter_value = PreFilterValue(filter_, {'operand': pre_value})
     self.assertEqual(filter_value.to_sql_values(), {'at_risk_slug': 'yes'})
Exemple #11
0
 def _computed_dates(self, actual_startdate, actual_enddate):
     filter = ReportFilter(compare_as_string=False,
                           field=u'submission_date',
                           slug=u'submitted_on',
                           type=u'date',
                           required=False)
     value = DateSpan(actual_startdate, actual_enddate)
     filter_value = DateFilterValue(filter, value)
     computed_values = filter_value.to_sql_values()
     startdate = computed_values['%s_startdate' % filter.slug]
     enddate = computed_values['%s_enddate' % filter.slug]
     return startdate, enddate
Exemple #12
0
 def from_spec(cls, spec, include_prefilters=False):
     from corehq.apps.userreports.reports.data_source import ConfigurableReportDataSource
     order_by = [(o['field'], o['order']) for o in spec.sort_expression]
     filters = spec.filters if include_prefilters else spec.filters_without_prefilters
     return ConfigurableReportDataSource(
         domain=spec.domain,
         config_or_config_id=spec.config_id,
         filters=[ReportFilter.wrap(f) for f in filters],
         aggregation_columns=spec.aggregation_columns,
         columns=spec.report_columns,
         order_by=order_by,
     )
 def test_pre_filter_invalid_operator(self):
     value = {'operator': 'in', 'operand': 'no'}  # "in" is invalid for scalar operand
     filter_ = ReportFilter.wrap({
         'type': 'pre',
         'field': 'at_risk_field',
         'slug': 'at_risk_slug',
         'datatype': 'string',
         'pre_value': value['operand'],
         'pre_operator': value['operator'],
     })
     filter_value = PreFilterValue(filter_, value)
     with self.assertRaises(TypeError):
         filter_value.to_sql_filter()
Exemple #14
0
 def from_spec(cls, spec, include_prefilters=False, backend=None):
     from corehq.apps.userreports.reports.data_source import ConfigurableReportDataSource
     order_by = [(o['field'], o['order']) for o in spec.sort_expression]
     filters = spec.filters if include_prefilters else spec.filters_without_prefilters
     return ConfigurableReportDataSource(
         domain=spec.domain,
         config_or_config_id=spec.config_id,
         filters=[ReportFilter.wrap(f) for f in filters],
         aggregation_columns=spec.aggregation_columns,
         columns=spec.report_columns,
         order_by=order_by,
         backend=backend,
     )
Exemple #15
0
 def test_pre_filter_invalid_operator(self):
     value = {'operator': 'in', 'operand': 'no'}  # "in" is invalid for scalar operand
     filter_ = ReportFilter.wrap({
         'type': 'pre',
         'field': 'at_risk_field',
         'slug': 'at_risk_slug',
         'datatype': 'string',
         'pre_value': value['operand'],
         'pre_operator': value['operator'],
     })
     filter_value = PreFilterValue(filter_, value)
     with self.assertRaises(TypeError):
         filter_value.to_sql_filter()
Exemple #16
0
        def get_query_value(year, quarter):
            spec = {
                "type": "quarter",
                "field": "modified_on_field",
                "slug": "my_slug",
                "display": "date Modified",
            }
            reports_core_filter = ReportFilterFactory.from_spec(spec)
            reports_core_value = reports_core_filter.get_value({
                "my_slug-year": year,
                "my_slug-quarter": quarter
            })

            filter = ReportFilter.wrap(spec)
            return filter.create_filter_value(reports_core_value).to_sql_values()
        def get_query_value(year, quarter):
            spec = {
                "type": "quarter",
                "field": "modified_on_field",
                "slug": "my_slug",
                "display": "date Modified",
            }
            reports_core_filter = ReportFilterFactory.from_spec(spec)
            reports_core_value = reports_core_filter.get_value({
                "my_slug-year": year,
                "my_slug-quarter": quarter
            })

            filter = ReportFilter.wrap(spec)
            return filter.create_filter_value(reports_core_value).to_sql_values()
        def get_query_value(compare_as_string):

            spec = {
                "type": "date",
                "field": "modified_on_field",
                "slug": "my_slug",
                "display": "date Modified",
                "compare_as_string": compare_as_string,
            }
            reports_core_filter = ReportFilterFactory.from_spec(spec)
            reports_core_value = reports_core_filter.get_value({
                "my_slug-start": "2015-06-07",
                "my_slug-end": "2015-06-08",
            })

            filter = ReportFilter.wrap(spec)
            return filter.create_filter_value(reports_core_value).to_sql_values()
    def test_pre_filter_value_null(self):
        column = Mock()
        column.name = 'at_risk_field'
        column.is_.return_value = 'foo'
        table = Mock()
        table.c = [column]

        pre_value = None
        filter_ = ReportFilter.wrap({
            'type': 'pre',
            'field': 'at_risk_field',
            'slug': 'at_risk_slug',
            'datatype': 'string',
            'pre_value': pre_value
        })
        filter_value = PreFilterValue(filter_, {'operand': pre_value})
        self.assertEqual(filter_value.to_sql_values(), {})
        self.assertEqual(filter_value.to_sql_filter().build_expression(table), 'foo')
    def test_pre_filter_value_array(self):
        column = Mock()
        column.name = 'at_risk_field'
        column.in_.return_value = 'foo'
        table = Mock()
        table.c = [column]

        pre_value = ['yes', 'maybe']
        filter_ = ReportFilter.wrap({
            'type': 'pre',
            'field': 'at_risk_field',
            'slug': 'at_risk_slug',
            'datatype': 'array',
            'pre_value': pre_value
        })
        filter_value = PreFilterValue(filter_, {'operand': pre_value})
        self.assertEqual(filter_value.to_sql_values(), {'at_risk_slug_0': 'yes', 'at_risk_slug_1': 'maybe'})
        self.assertEqual(filter_value.to_sql_filter().build_expression(table), 'foo')
Exemple #21
0
    def test_pre_filter_value_null(self):
        column = Mock()
        column.name = 'at_risk_field'
        column.is_.return_value = 'foo'
        table = Mock()
        table.c = [column]

        pre_value = None
        filter_ = ReportFilter.wrap({
            'type': 'pre',
            'field': 'at_risk_field',
            'slug': 'at_risk_slug',
            'datatype': 'string',
            'pre_value': pre_value
        })
        filter_value = PreFilterValue(filter_, {'operand': pre_value})
        self.assertEqual(filter_value.to_sql_values(), {})
        self.assertEqual(filter_value.to_sql_filter().build_expression(table), 'foo')
Exemple #22
0
    def test_pre_filter_value_array(self):
        column = Mock()
        column.name = 'at_risk_field'
        column.in_.return_value = 'foo'
        table = Mock()
        table.c = [column]

        pre_value = ['yes', 'maybe']
        filter_ = ReportFilter.wrap({
            'type': 'pre',
            'field': 'at_risk_field',
            'slug': 'at_risk_slug',
            'datatype': 'array',
            'pre_value': pre_value
        })
        filter_value = PreFilterValue(filter_, {'operand': pre_value})
        self.assertEqual(filter_value.to_sql_values(), {'at_risk_slug_0': 'yes', 'at_risk_slug_1': 'maybe'})
        self.assertEqual(filter_value.to_sql_filter().build_expression(table), 'foo')
        def get_query_value(compare_as_string):

            spec = {
                "type": "date",
                "field": "modified_on_field",
                "slug": "my_slug",
                "display": "date Modified",
                "compare_as_string": compare_as_string,
            }
            reports_core_filter = ReportFilterFactory.from_spec(spec)
            reports_core_value = reports_core_filter.get_value({
                "my_slug-start": "2015-06-07",
                "my_slug-end": "2015-06-08",
                "date_range_inclusive": True,
            })

            filter = ReportFilter.wrap(spec)
            return filter.create_filter_value(reports_core_value).to_sql_values()
    def test_pre_filter_distinct_from_operator(self):
        column = Mock()
        column.name = 'at_risk_field'
        column.is_distinct_from.return_value = 'foo'
        table = Mock()
        table.c = [column]

        value = {'operator': 'distinct from', 'operand': 'test'}
        filter_ = ReportFilter.wrap({
            'type': 'pre',
            'field': 'at_risk_field',
            'slug': 'at_risk_slug',
            'datatype': 'string',
            'pre_value': value['operand'],
            'pre_operator': value['operator'],
        })
        filter_value = PreFilterValue(filter_, value)
        self.assertEqual(filter_value.to_sql_values(), {'at_risk_slug': 'test'})
        self.assertEqual(filter_value.to_sql_filter().build_expression(table), 'foo')
Exemple #25
0
    def test_pre_filter_between_operator(self):
        column = Mock()
        column.name = 'dob_field'
        column.between.return_value = 'foo'
        table = Mock()
        table.c = [column]

        value = {'operator': 'between', 'operand': ['2017-03-13', '2017-04-11']}
        filter_ = ReportFilter.wrap({
            'type': 'pre',
            'field': 'dob_field',
            'slug': 'dob_slug',
            'datatype': 'date',
            'pre_value': value['operand'],
            'pre_operator': value['operator'],
        })
        filter_value = PreFilterValue(filter_, value)
        self.assertEqual(filter_value.to_sql_values(), {'dob_slug_0': '2017-03-13', 'dob_slug_1': '2017-04-11'})
        self.assertEqual(filter_value.to_sql_filter().build_expression(table), 'foo')