예제 #1
0
    def testConvertAndRestoreReportXFormDicts(self):
        orig = CONCEPT_XFORM
        orig['domain'] = settings.ES_XFORM_FULL_INDEX_DOMAINS[0]
        for_indexing = transform_xform_for_report_forms_index(orig)

        restored = restore_property_dict(for_indexing)

        #appVersion might be munged in meta, so swapping it out
        orig_appversion = orig['form']['meta']['appVersion']
        restored_appversion = restored['form']['meta']['appVersion']
        if isinstance(orig_appversion, dict):
            self.assertEqual(restored_appversion, orig_appversion['#text'])
        else:
            self.assertEqual(restored_appversion, orig_appversion)

        del(orig['form']['meta']['appVersion'])
        del(restored['form']['meta']['appVersion'])

        # user_type gets added in change_transform
        del(restored['user_type'])
        del(for_indexing['user_type'])

        # inserted during the transform
        del(restored['inserted_at'])
        del(for_indexing['inserted_at'])
        del(restored['form']['meta']['app_build_version'])
        del(restored['form']['meta']['commcare_version'])
        del(restored['form']['meta']['geo_point'])

        self.assertNotEqual(for_indexing, orig)
        self.assertNotEqual(for_indexing, restored)
        del restored['backend_id']
        self.assertEqual(orig, restored)
예제 #2
0
    def run_query(self, es_query):
        es_results = super(XFormES, self).run_query(es_query)
        #hack, walk the results again, and if we have xmlns, populate human readable names
        # Note that `get_unknown_form_name` does not require the request, which is also
        # not necessarily available here. So `None` is passed here.
        form_filter = FormsByApplicationFilter(None, domain=self.domain)

        for res in es_results.get('hits', {}).get('hits', []):
            if '_source' in res:
                res_source = restore_property_dict(res['_source'])
                res['_source'] = res_source
                xmlns = res['_source'].get('xmlns', None)
                name = None
                if xmlns:
                    name = form_filter.get_unknown_form_name(
                        xmlns,
                        app_id=res['_source'].get('app_id', None),
                        none_if_not_found=True)
                if not name:
                    name = 'unknown'  # try to fix it below but this will be the default
                    # fall back
                    try:
                        if res['_source']['form'].get('@name', None):
                            name = res['_source']['form']['@name']
                        else:
                            backup = res['_source']['form'].get(
                                '#type', 'data')
                            if backup != 'data':
                                name = backup
                    except (TypeError, KeyError):
                        pass

                res['_source']['es_readable_name'] = name
        return es_results
예제 #3
0
파일: es.py 프로젝트: aristide/commcare-hq
    def run_query(self, es_query):
        es_results = super(XFormES, self).run_query(es_query)
        #hack, walk the results again, and if we have xmlns, populate human readable names
        # Note that `get_unknown_form_name` does not require the request, which is also
        # not necessarily available here. So `None` is passed here.
        form_filter = FormsByApplicationFilter(None, domain=self.domain)

        for res in es_results.get('hits', {}).get('hits', []):
            if '_source' in res:
                res_source = restore_property_dict(res['_source'])
                res['_source'] = res_source
                xmlns = res['_source'].get('xmlns', None)
                name = None
                if xmlns:
                    name = form_filter.get_unknown_form_name(xmlns,
                                                             app_id=res['_source'].get('app_id',
                                                                                       None),
                                                             none_if_not_found=True)
                if not name:
                    name = 'unknown' # try to fix it below but this will be the default
                    # fall back
                    try:
                        if res['_source']['form'].get('@name', None):
                            name = res['_source']['form']['@name']
                        else:
                            backup = res['_source']['form'].get('#type', 'data')
                            if backup != 'data':
                                name = backup
                    except (TypeError, KeyError):
                        pass

                res['_source']['es_readable_name'] = name
        return es_results
예제 #4
0
    def rows(self):
        case_displays = (
            HNBCReportDisplay(self, restore_property_dict(self.get_case(case)))
            for case in self.es_results["hits"].get("hits", [])
        )

        for disp in case_displays:
            yield [disp.case_link, disp.baby_name, disp.owner_display, disp.dob, disp.visit_completion, disp.delivery]
    def testComputedConversion(self):
        """
        Since we set dyanmic=True on reportxforms, need to do conversions on the computed_ properties
        so call conversion on computed_ dict as well, this test ensures that it's converted on change_transform
        :return:
        """
        orig = {
            '_id': 'blank_strings',
            'form': {
                'case': {
                    "@xmlns": "http://commcarehq.org/case/transaction/v2",
                    "@date_modified": "2013-10-14T10:59:44Z",
                    "@user_id": "someuser",
                    "@case_id": "mycase",
                    "index": "",
                    "attachment": "",
                    "create": "",
                    "update": "",
                }
            },
            'computed_': {
                "mvp_indicators": {
                    "last_muac": {
                        "updated": "2013-02-04T21:54:28Z",
                        "version": 1,
                        "type": "FormDataAliasIndicatorDefinition",
                        "multi_value": False,
                        "value": None
                    },
                    "muac": {
                        "updated": "2013-02-04T21:54:28Z",
                        "version": 1,
                        "type": "FormDataAliasIndicatorDefinition",
                        "multi_value": False,
                        "value": {
                            "#text": "",
                           "@concept_id": "1343"
                        }
                    },
                    "vaccination_status": {
                        "updated": "2013-02-04T21:54:28Z",
                        "version": 1,
                        "type": "FormDataAliasIndicatorDefinition",
                        "multi_value": False,
                        "value": "yes"

                    },
                }
            }
        }
        pillow = ReportXFormPillow(online=False)
        orig['domain'] = settings.ES_XFORM_FULL_INDEX_DOMAINS[0]
        for_indexing = pillow.change_transform(orig)
        restored = restore_property_dict(for_indexing)

        self.assertNotEqual(orig['computed_'], for_indexing['computed_'])
        self.assertEqual(orig['computed_'], restored['computed_'])
    def testComputedConversion(self):
        """
        Since we set dyanmic=True on reportxforms, need to do conversions on the computed_ properties
        so call conversion on computed_ dict as well, this test ensures that it's converted on change_transform
        :return:
        """
        orig = {
            '_id': 'blank_strings',
            'form': {
                'case': {
                    "@xmlns": "http://commcarehq.org/case/transaction/v2",
                    "@date_modified": "2013-10-14T10:59:44Z",
                    "@user_id": "someuser",
                    "@case_id": "mycase",
                    "index": "",
                    "attachment": "",
                    "create": "",
                    "update": "",
                }
            },
            'computed_': {
                "mvp_indicators": {
                    "last_muac": {
                        "updated": "2013-02-04T21:54:28Z",
                        "version": 1,
                        "type": "FormDataAliasIndicatorDefinition",
                        "multi_value": False,
                        "value": None
                    },
                    "muac": {
                        "updated": "2013-02-04T21:54:28Z",
                        "version": 1,
                        "type": "FormDataAliasIndicatorDefinition",
                        "multi_value": False,
                        "value": {
                            "#text": "",
                           "@concept_id": "1343"
                        }
                    },
                    "vaccination_status": {
                        "updated": "2013-02-04T21:54:28Z",
                        "version": 1,
                        "type": "FormDataAliasIndicatorDefinition",
                        "multi_value": False,
                        "value": "yes"

                    },
                }
            }
        }
        pillow = ReportXFormPillow(online=False)
        orig['domain'] = settings.ES_XFORM_FULL_INDEX_DOMAINS[0]
        for_indexing = pillow.change_transform(orig)
        restored = restore_property_dict(for_indexing)

        self.assertNotEqual(orig['computed_'], for_indexing['computed_'])
        self.assertEqual(orig['computed_'], restored['computed_'])
예제 #7
0
    def rows(self):
        case_displays = (HNBCReportDisplay(self, restore_property_dict(self.get_case(case)))
                         for case in self.es_results['hits'].get('hits', []))

        for disp in case_displays:
            yield [
                disp.case_type,
                disp.case_link,
                disp.owner_display,
                disp.dob,
                disp.visit_completion,
                disp.delivery,
                disp.pnc_status,
            ]
예제 #8
0
    def rows(self):
        case_displays = (PatientTaskListReportDisplay(self, restore_property_dict(self.get_case(case)))
                         for case in self.es_results['hits'].get('hits', []))

        for disp in case_displays:
            yield [
                disp.full_name_link,
                disp.name_link,
                disp.task_responsible,
                disp.status,
                disp.task_due,
                disp.last_modified,
                disp.task_activity,
                disp.task_risk_factor,
                disp.task_details
            ]
예제 #9
0
    def rows(self):
        case_displays = (PatientListReportDisplay(self, restore_property_dict(self.get_case(case)))
                         for case in self.es_results['hits'].get('hits', []))

        for disp in case_displays:
            yield [
                disp.edit_link,
                disp.case_link,
                disp.mrn,
                disp.randomization_date,
                disp.visit_name,
                disp.target_date,
                disp.most_recent,
                disp.discuss,
                disp.patient_info
            ]
예제 #10
0
    def rows(self):
        case_displays = (HSPHCaseDisplay(self, restore_property_dict(self.get_case(case)))
                         for case in self.es_results['hits'].get('hits', []))

        for disp in case_displays:
            yield [
                disp.region,
                disp.district,
                disp.site,
                disp.patient_id,
                disp.status,
                disp.case_link,
                disp.filter_date,
                disp.address,
                disp.allocated_to,
                disp.allocated_start,
                disp.allocated_end,
                disp.outside_allocated_period
            ]
    def testConvertAndRestoreReportXFormDicts(self):
        pillow = ReportXFormPillow(online=False)
        orig = CONCEPT_XFORM
        orig['domain'] = settings.ES_XFORM_FULL_INDEX_DOMAINS[0]
        for_indexing = pillow.change_transform(orig)

        restored = restore_property_dict(for_indexing)

        #appVersion might be munged in meta, so swapping it out
        orig_appversion = orig['form']['meta']['appVersion']
        restored_appversion = restored['form']['meta']['appVersion']
        if isinstance(orig_appversion, dict):
            self.assertEqual(restored_appversion, orig_appversion['#text'])
        else:
            self.assertEqual(restored_appversion, orig_appversion)

        del(orig['form']['meta']['appVersion'])
        del(restored['form']['meta']['appVersion'])

        self.assertNotEqual(for_indexing, orig)
        self.assertNotEqual(for_indexing, restored)

        self.assertEqual(orig, restored)
예제 #12
0
    def testConvertAndRestoreReportXFormDicts(self):
        pillow = ReportXFormPillow(online=False)
        orig = CONCEPT_XFORM
        orig['domain'] = settings.ES_XFORM_FULL_INDEX_DOMAINS[0]
        for_indexing = pillow.change_transform(orig)

        restored = restore_property_dict(for_indexing)

        #appVersion might be munged in meta, so swapping it out
        orig_appversion = orig['form']['meta']['appVersion']
        restored_appversion = restored['form']['meta']['appVersion']
        if isinstance(orig_appversion, dict):
            self.assertEqual(restored_appversion, orig_appversion['#text'])
        else:
            self.assertEqual(restored_appversion, orig_appversion)

        del (orig['form']['meta']['appVersion'])
        del (restored['form']['meta']['appVersion'])

        self.assertNotEqual(for_indexing, orig)
        self.assertNotEqual(for_indexing, restored)

        self.assertEqual(orig, restored)