def test_filters_multiple(self): def test(filters): filter_values = { "startdate": date(2013, 02, 20), "enddate": date(2013, 03, 05) } data = self._get_user_data(filter_values, filters) self.assertNotIn('user1', data) self.assertEqual(data['user2']['indicator_a'], 2) self.assertEqual(data['user2']['indicator_b'], 1) test([GTE('date', 'startdate'), LT('date', 'enddate')]) test([AND([GTE('date', 'startdate'), LT('date', 'enddate')])])
def columns(self): self.config['mother_ids'] = tuple(DeliveryMothersIds(config=self.config).data.keys()) + ('',) columns = [ DatabaseColumn("Total children with with birthweight known", CountUniqueColumn('doc_id', alias="total_birthweight_known", filters=self.filters + [NOTEQ('weight_birth', 'empty')])), DatabaseColumn("Total births", CountUniqueColumn('doc_id', filters=[AND([IN('mother_id', get_INFilter_bindparams('mother_ids', self.config['mother_ids'])), OR([EQ('gender', 'female'), EQ('gender', 'male')])])], alias='total_births'))] columns.extend([ DatabaseColumn("Birthweight < 2.5 kg", CountUniqueColumn('doc_id', alias="total_birthweight_lt_25", filters=self.filters + [AND([LT('weight_birth', 'weight_birth_25'), NOTEQ('weight_birth', 'empty')])] ) ), DatabaseColumn("Birthweight >= 2.5 kg", CountUniqueColumn('doc_id', alias="total_birthweight_gte_25", filters=self.filters + [AND([GTE('weight_birth', 'weight_birth_25'), NOTEQ('weight_birth', 'empty')])] ) ) ]) return columns
def columns(self): columns = [ DatabaseColumn( "Total children with with birthweight known", CountUniqueColumn('doc_id', alias="total_birthweight_known", filters=self.filters + [NOTEQ('weight_birth', 'empty')])), ] columns.extend([ DatabaseColumn( "Birthweight < 2.5 kg", CountUniqueColumn( 'doc_id', alias="total_birthweight_lt_25", filters=self.filters + [ AND([ LT('weight_birth', 'weight_birth_25'), NOTEQ('weight_birth', 'empty') ]) ])), DatabaseColumn( "Birthweight >= 2.5 kg", CountUniqueColumn( 'doc_id', alias="total_birthweight_gte_25", filters=self.filters + [ AND([ GTE('weight_birth', 'weight_birth_25'), NOTEQ('weight_birth', 'empty') ]) ])) ]) return columns
def _age_range_filter(self): age_range = {age_range.slug: age_range for age_range in AGE_RANGES}[self.config['age_range']] return [ GTE(age_range.column, age_range.lower_bound), LT(age_range.column, age_range.upper_bound) ]
def _get_age_range_filter(self): filters = [ AND([ GTE(age_range.column, age_range.lower_param), LT(age_range.column, age_range.upper_param) ]) for age_range in self._age_ranges ] return filters[0] if len(filters) == 1 else OR(filters)
def test_filters(self): filters = [LT('date', 'enddate')] filter_values = {"enddate": date(2013, 02, 01)} data = self._get_user_data(filter_values, filters) self.assertEqual(data['user1']['indicator_a'], 1) self.assertEqual(data['user1']['indicator_b'], 1) self.assertEqual(data['user2']['indicator_a'], 0) self.assertEqual(data['user2']['indicator_b'], 1)
def columns(self): return [ DatabaseColumn('location_id', SimpleColumn('site_id')), DatabaseColumn('Completude', CountColumn('doc_id', alias='completude')), DatabaseColumn('Promptitude', CountColumn( 'doc_id', alias='promptitude', filters=self.filters + [LT('opened_on', 'monday')] )), ]
def filters(self): filters = [ AND([GTE('opened_on', 'start_date'), LT('opened_on', 'end_date')]), ] locations_id = filter(lambda x: bool(x), self.config.locations_id) if locations_id: filters.append( IN('person_owner_id', get_INFilter_bindparams('locations_id', locations_id))) return filters
def test_alias(self): filters = [LT('date', 'enddate')] filter_values = {"enddate": date(2013, 04, 01)} vc = QueryContext("user_table", filters=filters, group_by=["user"]) user = SimpleColumn("user") i_sum_a = SumColumn("indicator_a", alias="sum_a") i_count_a = CountColumn("indicator_a", alias="count_a") vc.append_column(user) vc.append_column(i_sum_a) vc.append_column(i_count_a) data = vc.resolve(self.session.connection(), filter_values) self.assertEqual(data['user1']['sum_a'], 4) self.assertEqual(data['user1']['count_a'], 2) self.assertEqual(data['user2']['sum_a'], 2) self.assertEqual(data['user2']['count_a'], 2)
def test_different_filters(self): filters = [LT('date', 'enddate')] filter_values = {"enddate": date(2013, 02, 01)} vc = QueryContext("user_table", filters=filters, group_by=["user"]) user = SimpleColumn("user") i_a = SumColumn("indicator_a") i_b = SumColumn("indicator_b", filters=[GT('date', 'enddate')]) vc.append_column(user) vc.append_column(i_a) vc.append_column(i_b) data = vc.resolve(self.session.connection(), filter_values) self.assertEqual(data['user1']['indicator_a'], 1) self.assertNotIn('indicator_b', data['user1']) self.assertEqual(data['user2']['indicator_a'], 0) self.assertEqual(data['user2']['indicator_b'], 1)
def filters(self): filters = [ AND([GTE(self.date_property, 'start_date'), LT(self.date_property, 'end_date')]) ] locations_id = filter(lambda x: bool(x), self.config.locations_id) if locations_id: filters.append( IN(self.location_property, get_INFilter_bindparams('locations_id', locations_id)) ) is_migrated = self.config.is_migrated if is_migrated is not None: filters.append(EQ('case_created_by_migration', 'is_migrated')) return filters
def test_multiple_tables(self): filters = [LT('date', 'enddate')] filter_values = {"enddate": date(2013, 04, 01)} vc = QueryContext("user_table", filters=filters, group_by=["user"]) user = SimpleColumn("user") i_a = SumColumn("indicator_a") region = SimpleColumn("region", table_name="region_table", group_by=["region"]) i_a_r = SumColumn("indicator_a", table_name="region_table", group_by=["region"]) vc.append_column(user) vc.append_column(i_a) vc.append_column(region) vc.append_column(i_a_r) data = vc.resolve(self.session.connection(), filter_values) self.assertEqual(data['user1']['indicator_a'], 4) self.assertEqual(data['user2']['indicator_a'], 2) self.assertEqual(data['region1']['indicator_a'], 5) self.assertEqual(data['region2']['indicator_a'], 2)
def columns(self): test_type_filter = [RawFilter("bacteriological_examination = 1")] filters_without_episode_type = self.filters[:-1] bacteriological_test_date_reported = [ AND([ GTE('bacteriological_test_date_reported', 'start_date'), LT('bacteriological_test_date_reported', 'end_date') ]) ] filters_with_bacteriological_date = bacteriological_test_date_reported + self.filters[ 1:] return ( generate_for_all_patient_types( 'pulmonary_microbiologically', self.filters + diagnosis_filter('microbiological', 'pulmonary')) + generate_for_all_patient_types( 'pulmonary_clinical', self.filters + diagnosis_filter('clinical', 'pulmonary')) + generate_for_all_patient_types( 'extra_pulmonary', self.filters + [ RawFilter('patient_type IS NOT NULL'), RawFilter("disease_classification = 'extra_pulmonary'") ]) + generate_for_all_patient_types( 'total', self.filters + [RawFilter("patient_type IS NOT NULL")]) + generate_for_all_ranges( 'male', self.filters + [RawFilter("sex = 'male'")]) + generate_for_all_ranges( 'female', self.filters + [RawFilter("sex = 'female'")]) + generate_for_all_ranges( 'transgender', self.filters + [RawFilter("sex = 'transgender'")]) + generate_for_all_ranges('all', self.filters) + [ DatabaseColumn( '', CountColumn( 'doc_id', filters=filters_without_episode_type + test_type_filter + [ RawFilter( "bacteriological_test_episode_type = 'presumptive_tb'" ) ], alias='patients_with_presumptive_tb')), DatabaseColumn( '', CountColumn( 'doc_id', filters= (filters_without_episode_type + test_type_filter + [ RawFilter( "result_of_bacteriological_test = 'tb_detected'" ), RawFilter( "bacteriological_test_episode_type = 'presumptive_tb'" ) ]), alias='patients_with_positive_tb')), DatabaseColumn( '', CountColumn( 'doc_id', filters=self.filters + [ RawFilter( "hiv_status IN ('reactive', 'non_reactive')") ], alias='all_hiv_tested')), DatabaseColumn( '', CountColumn('doc_id', filters=self.filters + [RawFilter("hiv_status = 'reactive'")], alias='hiv_reactive')), DatabaseColumn( '', CountColumn('doc_id', filters=self.filters + [ RawFilter("hiv_status = 'reactive'"), RawFilter("cpt_initiated = 'yes'") ], alias='hiv_reactive_cpt')), DatabaseColumn( '', CountColumn( 'doc_id', filters=(self.filters + [RawFilter("hiv_status = 'reactive'")] + [RawFilter("initiated_on_art = 'yes'")]), alias='hiv_reactive_art')), DatabaseColumn( '', CountColumn( 'doc_id', filters=(filters_with_bacteriological_date + convert_to_raw_filters_list( "patient_type = 'new'", "disease_classification = 'pulmonary'", "diagnostic_result = 'tb_detected'")), alias='new_positive_tb_pulmonary')), DatabaseColumn( '', CountColumn( 'doc_id', filters=(filters_with_bacteriological_date + convert_to_raw_filters_list( "patient_type = 'new'", "disease_classification = 'pulmonary'", "diagnostic_result = 'tb_not_detected'")), alias='new_negative_tb_pulmonary')), DatabaseColumn( '', CountColumn( 'doc_id', filters=( filters_with_bacteriological_date + convert_to_raw_filters_list( "patient_type = 'new'", "disease_classification = 'extrapulmonary'", "diagnostic_result = 'tb_detected'")), alias='new_positive_tb_extrapulmonary')), DatabaseColumn( '', CountColumn( 'doc_id', filters=(self.filters + convert_to_raw_filters_list( "patient_type = 'recurrent'", "diagnostic_result = 'tb_detected'")), alias='recurrent_positive_tb')), DatabaseColumn( '', CountColumn( 'doc_id', filters=(self.filters + convert_to_raw_filters_list( "patient_type = 'treatment_after_failure'", "diagnostic_result = 'tb_detected'")), alias='failure_positive_tb')), DatabaseColumn( '', CountColumn( 'doc_id', filters=(self.filters + convert_to_raw_filters_list( "patient_type = 'treatment_after_lfu'", "diagnostic_result = 'tb_detected'")), alias='lfu_positive_tb')), DatabaseColumn( '', CountColumn( 'doc_id', filters=(self.filters + convert_to_raw_filters_list( "patient_type = 'other_previously_treated'", "diagnostic_result = 'tb_detected'")), alias='other_positive_tb')) ])