コード例 #1
0
    def testReportXFormTransform(self):
        form = XFORM_SINGLE_CASE
        report_pillow = ReportXFormPillow(online=False)
        form['domain'] = settings.ES_XFORM_FULL_INDEX_DOMAINS[0]
        processed_form = report_pillow.change_transform(form)
        mapping = report_pillow.default_mapping

        #root level
        for k, v in processed_form['form'].items():
            if k in mapping['properties']['form']['properties']:
                if isinstance(v, dict):
                    self.assertFalse(
                        '#value' in v,
                        msg=
                        "Error, processed dict contains a #value dict for key [%s] when it shouldn't"
                        % k)
                else:
                    #it's not a dict, so that means it's ok
                    if k in form:
                        self.assertEqual(form[k], v)
            else:
                self.assertTrue(isinstance(v, dict))
                if isinstance(form['form'][k], dict):
                    #if the original is a dict, then, make sure the keys are the same
                    self.assertFalse('#value' in v)
                    self.assertEqual(sorted(form['form'][k].keys()),
                                     sorted(v.keys()))
                else:
                    self.assertTrue('#value' in v)
                    self.assertEqual(form['form'][k], v['#value'])
コード例 #2
0
    def testBlanktoNulls(self):
        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": "",
                }
            }
        }

        dict_props = ['index', 'attachment', 'create', 'update']

        pillow = ReportXFormPillow(online=False)
        all_blank = copy.deepcopy(orig)
        all_blank['domain'] = settings.ES_XFORM_FULL_INDEX_DOMAINS[0]
        for_indexing = pillow.change_transform(all_blank)

        for prop in dict_props:
            self.assertIsNone(for_indexing['form']['case'][prop])

        all_dicts = copy.deepcopy(orig)
        all_dicts['domain'] = settings.ES_XFORM_FULL_INDEX_DOMAINS[0]
        for prop in dict_props:
            all_dicts['form']['case'][prop] = {}

        for_index2 = pillow.change_transform(all_dicts)
        for prop in dict_props:
            self.assertIsNotNone(for_index2['form']['case'][prop])
コード例 #3
0
    def testReportXFormTransform(self):
        form = XFORM_SINGLE_CASE
        report_pillow = ReportXFormPillow(online=False)
        form['domain'] = settings.ES_XFORM_FULL_INDEX_DOMAINS[0]
        processed_form = report_pillow.change_transform(form)
        mapping = report_pillow.default_mapping

        #root level
        for k, v in processed_form['form'].items():
            if k in mapping['properties']['form']['properties']:
                if isinstance(v, dict):
                    self.assertFalse('#value' in v, msg="Error, processed dict contains a #value dict for key [%s] when it shouldn't" % k)
                else:
                    #it's not a dict, so that means it's ok
                    if k in form:
                        self.assertEqual(form[k], v)
            else:
                self.assertTrue(isinstance(v, dict))
                if isinstance(form['form'][k], dict):
                    #if the original is a dict, then, make sure the keys are the same
                    self.assertFalse('#value' in v)
                    self.assertEqual(sorted(form['form'][k].keys()), sorted(v.keys()))
                else:
                    self.assertTrue('#value' in v)
                    self.assertEqual(form['form'][k], v['#value'])
コード例 #4
0
    def finish_handle(self):
        filepath = os.path.join(settings.FILEPATH, 'corehq','pillows','mappings','reportxform_mapping.py')
        xform_pillow = ReportXFormPillow(create_index=False)

        #current index
        #check current index
        aliased_indices = xform_pillow.check_alias()

        current_index = xform_pillow.es_index

        sys.stderr.write("current index:\n")
        sys.stderr.write('REPORT_XFORM_INDEX="%s"\n' % current_index)

        #regenerate the mapping dict
        mapping = reportxform_mapping.REPORT_XFORM_MAPPING
        xform_pillow.default_mapping = mapping
        delattr(xform_pillow, '_calc_meta_cache')
        calc_index = "%s_%s" % (xform_pillow.es_index_prefix, xform_pillow.calc_meta())

        if calc_index not in aliased_indices and calc_index != current_index:
            sys.stderr.write("\n\tWarning, current index %s is not aliased at the moment\n" % current_index)
            sys.stderr.write("\tCurrent live aliased index: %s\n\n"  % (','.join(aliased_indices)))

        if calc_index != current_index:
            sys.stderr.write("REPORT_XFORM_INDEX hash has changed, please update \n\t%s\n\tREPORT_XFORM_INDEX property with the line below:\n" % filepath)
            sys.stdout.write('REPORT_XFORM_INDEX="%s"\n' % calc_index)
        else:
            sys.stderr.write("REPORT_XFORM_INDEX unchanged\n")
コード例 #5
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'])

        # 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)
        self.assertEqual(orig, restored)
コード例 #6
0
    def testBlanktoNulls(self):
        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": "",
                }
            }
        }

        dict_props = ['index', 'attachment', 'create', 'update']

        pillow = ReportXFormPillow(online=False)
        all_blank = copy.deepcopy(orig)
        all_blank['domain'] = settings.ES_XFORM_FULL_INDEX_DOMAINS[0]
        for_indexing = pillow.change_transform(all_blank)

        for prop in dict_props:
            self.assertIsNone(for_indexing['form']['case'][prop])

        all_dicts = copy.deepcopy(orig)
        all_dicts['domain'] = settings.ES_XFORM_FULL_INDEX_DOMAINS[0]
        for prop in dict_props:
            all_dicts['form']['case'][prop] = {}

        for_index2 = pillow.change_transform(all_dicts)
        for prop in dict_props:
            self.assertIsNotNone(for_index2['form']['case'][prop])
コード例 #7
0
    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_'])
コード例 #8
0
    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_'])
コード例 #9
0
 def test_xformPillowTransform(self):
     """
     Test to make sure report xform and reportxform pillows strip the appVersion dict to match the
     mappings
     """
     pillows = [ReportXFormPillow(online=False),XFormPillow(online=False)]
     bad_appVersion = {
         "_id": "foo",
         "domain": settings.ES_XFORM_FULL_INDEX_DOMAINS[0],
         "form": {
             "meta": {
                 "@xmlns": "http://openrosa.org/jr/xforms",
                 "username": "******",
                 "instanceID": "foo",
                 "userID": "some_user_id",
                 "timeEnd": "2013-09-20T01:33:12Z",
                 "appVersion": {
                     "@xmlns": "http://commcarehq.org/xforms",
                     "#text": "CCODK:\"2.5.1\"(11126). v236 CC2.5b[11126] on April-15-2013"
                 },
                 "timeStart": "2013-09-19T01:13:20Z",
                 "deviceID": "somedevice"
             }
         }
     }
     for pillow in pillows:
         cleaned = pillow.change_transform(bad_appVersion)
         self.assertFalse(isinstance(cleaned['form']['meta']['appVersion'], dict))
         self.assertTrue(isinstance(cleaned['form']['meta']['appVersion'], str))
         self.assertTrue(cleaned['form']['meta']['appVersion'], "CCODK:\"2.5.1\"(11126). v236 CC2.5b[11126] on April-15-2013")
コード例 #10
0
    def testConceptReportConversion(self):
        pillow = ReportXFormPillow(online=False)
        orig = CONCEPT_XFORM
        orig['domain'] = settings.ES_XFORM_FULL_INDEX_DOMAINS[0]
        for_indexing = pillow.change_transform(orig)

        self.assertTrue(isinstance(for_indexing['form']['last_visit'], dict))
        self.assertTrue('#value' in for_indexing['form']['last_visit'])

        self.assertTrue(isinstance(for_indexing['form']['member_available'], dict))
        self.assertTrue(isinstance(for_indexing['form']['member_available']['#text'], dict))
        self.assertTrue(isinstance(for_indexing['form']['member_available']['@concept_id'], dict))

        self.assertEqual(for_indexing['form']['member_available'],
                         {
                             "#text": {
                                 "#value": "yes"
                             },
                             "@concept_id": {
                                 "#value": "1890"
                             }
                         }
        )
        self.assertEqual(for_indexing['form']['modern_fp'],
                         [
                             {
                                 "fp_type": {
                                     "#text": {
                                         "#value": "iud"
                                     },
                                     "@concept_id": {
                                         "#value": "374"
                                     }
                                 }
                             },
                             {
                                 "fp_type": {
                                     "#text": {
                                         "#value": "ij"
                                     },
                                     "@concept_id": {
                                         "#value": "374"
                                     }
                                 }
                             }
                         ]
        )
コード例 #11
0
    def testConceptReportConversion(self):
        pillow = ReportXFormPillow(online=False)
        orig = CONCEPT_XFORM
        orig['domain'] = settings.ES_XFORM_FULL_INDEX_DOMAINS[0]
        for_indexing = pillow.change_transform(orig)

        self.assertTrue(isinstance(for_indexing['form']['last_visit'], dict))
        self.assertTrue('#value' in for_indexing['form']['last_visit'])

        self.assertTrue(isinstance(for_indexing['form']['member_available'], dict))
        self.assertTrue(isinstance(for_indexing['form']['member_available']['#text'], dict))
        self.assertTrue(isinstance(for_indexing['form']['member_available']['@concept_id'], dict))

        self.assertEqual(for_indexing['form']['member_available'],
                         {
                             "#text": {
                                 "#value": "yes"
                             },
                             "@concept_id": {
                                 "#value": "1890"
                             }
                         }
        )
        self.assertEqual(for_indexing['form']['modern_fp'],
                         [
                             {
                                 "fp_type": {
                                     "#text": {
                                         "#value": "iud"
                                     },
                                     "@concept_id": {
                                         "#value": "374"
                                     }
                                 }
                             },
                             {
                                 "fp_type": {
                                     "#text": {
                                         "#value": "ij"
                                     },
                                     "@concept_id": {
                                         "#value": "374"
                                     }
                                 }
                             }
                         ]
        )
コード例 #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)
コード例 #13
0
    def testSubCaseForm(self):
        """
        Ensure that the dict format converter never touches any sub property that has a key of 'case'

        this is our way of handling case blocks. The properties in the case block ought not to be touched

        this current form only captures
        """
        pillow = ReportXFormPillow(online=False)
        orig = {
            '_id': 'nested_case_blocks',
            'form': {
                'case': {
                    "@xmlns": "http://commcarehq.org/case/transaction/v2",
                    "@date_modified": "2013-10-14T10:59:44Z",
                    "@user_id": "someuser",
                    "@case_id": "mycase",
                },
                'subcase_0': {
                    'case': {
                        "@xmlns": "http://commcarehq.org/case/transaction/v2",
                        "index": {
                            "parent": {
                                "@case_type": "household",
                                "#text": "some_parent"
                            }
                        },
                        "@date_modified": "2013-10-12T11:59:41Z",
                        "create": {
                            "case_type": "child",
                            "owner_id": "some_owner",
                            "case_name": "hello there"
                        },
                        "@user_id": "someuser",
                        "update": {
                            "first_name": "asdlfjkasdf",
                            "surname": "askljvlajskdlrwe",
                            "dob": "2011-03-21",
                            "sex": "male",
                            "weight_date": "never",
                            "household_head_health_id": "",
                            "dob_known": "yes",
                            "health_id": "",
                            "length_date": "never",
                            "dob_calc": "2011-03-21"
                        },
                        "@case_id": "subcaseid"
                    }
                },
                'really': {
                    'nested': {
                        'case': {
                        "@xmlns": "http://commcarehq.org/case/transaction/v2",
                        "index": {
                            "parent": {
                                "@case_type": "household",
                                "#text": "some_parent"
                            }
                        },
                        "@date_modified": "2013-10-12T11:59:41Z",
                        "create": {
                            "case_type": "child",
                            "owner_id": "some_owner",
                            "case_name": "hello there"
                        },
                        "@user_id": "someuser",
                        "update": {
                            "first_name": "asdlfjkasdf",
                            "surname": "askljvlajskdlrwe",
                            "dob": "2011-03-21",
                            "sex": "male",
                            "weight_date": "never",
                            "household_head_health_id": "",
                            "dob_known": "yes",
                            "health_id": "",
                            "length_date": "never",
                            "dob_calc": "2011-03-21"
                        },
                        "@case_id": "subcaseid2"
                        }
                    }
                },
                'array_cases': [
                    {'case': {'foo': 'bar'}},
                    {'case': {'boo': 'bar'}},
                    {'case': {'poo': 'bar'}},
                ]
            }
        }
        orig['domain'] = settings.ES_XFORM_FULL_INDEX_DOMAINS[0]
        for_indexing = pillow.change_transform(orig)

        self.assertEqual(orig['form']['case'], for_indexing['form']['case'])
        self.assertEqual(orig['form']['subcase_0']['case'], for_indexing['form']['subcase_0']['case'])
        self.assertEqual(orig['form']['really']['nested']['case'], for_indexing['form']['really']['nested']['case'])
コード例 #14
0
    def testSubCaseForm(self):
        """
        Ensure that the dict format converter never touches any sub property that has a key of 'case'

        this is our way of handling case blocks. The properties in the case block ought not to be touched

        this current form only captures
        """
        pillow = ReportXFormPillow(online=False)
        orig = {
            '_id': 'nested_case_blocks',
            'form': {
                'case': {
                    "@xmlns": "http://commcarehq.org/case/transaction/v2",
                    "@date_modified": "2013-10-14T10:59:44Z",
                    "@user_id": "someuser",
                    "@case_id": "mycase",
                },
                'subcase_0': {
                    'case': {
                        "@xmlns": "http://commcarehq.org/case/transaction/v2",
                        "index": {
                            "parent": {
                                "@case_type": "household",
                                "#text": "some_parent"
                            }
                        },
                        "@date_modified": "2013-10-12T11:59:41Z",
                        "create": {
                            "case_type": "child",
                            "owner_id": "some_owner",
                            "case_name": "hello there"
                        },
                        "@user_id": "someuser",
                        "update": {
                            "first_name": "asdlfjkasdf",
                            "surname": "askljvlajskdlrwe",
                            "dob": "2011-03-21",
                            "sex": "male",
                            "weight_date": "never",
                            "household_head_health_id": "",
                            "dob_known": "yes",
                            "health_id": "",
                            "length_date": "never",
                            "dob_calc": "2011-03-21"
                        },
                        "@case_id": "subcaseid"
                    }
                },
                'really': {
                    'nested': {
                        'case': {
                            "@xmlns":
                            "http://commcarehq.org/case/transaction/v2",
                            "index": {
                                "parent": {
                                    "@case_type": "household",
                                    "#text": "some_parent"
                                }
                            },
                            "@date_modified": "2013-10-12T11:59:41Z",
                            "create": {
                                "case_type": "child",
                                "owner_id": "some_owner",
                                "case_name": "hello there"
                            },
                            "@user_id": "someuser",
                            "update": {
                                "first_name": "asdlfjkasdf",
                                "surname": "askljvlajskdlrwe",
                                "dob": "2011-03-21",
                                "sex": "male",
                                "weight_date": "never",
                                "household_head_health_id": "",
                                "dob_known": "yes",
                                "health_id": "",
                                "length_date": "never",
                                "dob_calc": "2011-03-21"
                            },
                            "@case_id": "subcaseid2"
                        }
                    }
                },
                'array_cases': [
                    {
                        'case': {
                            'foo': 'bar'
                        }
                    },
                    {
                        'case': {
                            'boo': 'bar'
                        }
                    },
                    {
                        'case': {
                            'poo': 'bar'
                        }
                    },
                ]
            }
        }
        orig['domain'] = settings.ES_XFORM_FULL_INDEX_DOMAINS[0]
        for_indexing = pillow.change_transform(orig)

        self.assertEqual(orig['form']['case'], for_indexing['form']['case'])
        self.assertEqual(orig['form']['subcase_0']['case'],
                         for_indexing['form']['subcase_0']['case'])
        self.assertEqual(orig['form']['really']['nested']['case'],
                         for_indexing['form']['really']['nested']['case'])