def _add_overrides_for_build(self, doc): linked_build = wrap_app(doc) log_prefix = "{}{} app {}, build {}".format( "[DRY RUN] " if self.dry_run else "", linked_build.domain, linked_build.origin_id, linked_build.get_id) if not linked_build.upstream_app_id or not linked_build.upstream_version: return if not linked_build.domain_link: logger.error( "{}: Skipping due to missing domain link".format(log_prefix)) return try: master_build = get_master_app_by_version( linked_build.domain_link, linked_build.upstream_app_id, linked_build.upstream_version) except ActionNotPermitted: logger.error("{}: Skipping due to 403".format(log_prefix)) return if not master_build: logger.info( "{}: Skipping, no master build found".format(log_prefix)) return linked_map = self._get_xmlns_map(linked_build) master_map = self._get_xmlns_map(master_build) override_map = { master_form_unique_id: linked_map[xmlns] for xmlns, master_form_unique_id in master_map.items() if xmlns in linked_map } if not override_map: logger.info( "{}: Skipping, no forms found to map".format(log_prefix)) return current_overrides = { pre_id: override.post_id for pre_id, override in get_xform_resource_overrides( linked_build.domain, linked_build.origin_id).items() } if set(override_map.items()) - set(current_overrides.items()): logger.info("{}: Found {} overrides, updating with {}".format( log_prefix, len(current_overrides), len(override_map))) if not self.dry_run: try: add_xform_resource_overrides(linked_build.domain, linked_build.origin_id, override_map) except ResourceOverrideError as e: logger.error("{}".format(str( e))) # skip log_prefix, error message has same info else: logger.info( "{}: Skipping, all {} overrides already present".format( log_prefix, len(override_map)))
def test_overrides(self): forms = list(self.factory.app.get_module(0).get_forms()) add_xform_resource_overrides(self.factory.app.domain, self.factory.app.origin_id, { forms[0].unique_id: '123', forms[1].unique_id: '456', }) expected = """ <partial> <xform> <resource descriptor="Form: (Module module0 module) - module0 form 0" id="{}" version="1"> <location authority="local">./modules-0/forms-0.xml</location> <location authority="remote">./modules-0/forms-0.xml</location> </resource> </xform> <xform> <resource descriptor="Form: (Module module0 module) - module0 form 1" id="{}" version="1"> <location authority="local">./modules-0/forms-1.xml</location> <location authority="remote">./modules-0/forms-1.xml</location> </resource> </xform> <xform> <resource descriptor="Form: (Module module0 module) - module0 form 2" id="{}" version="1"> <location authority="local">./modules-0/forms-2.xml</location> <location authority="remote">./modules-0/forms-2.xml</location> </resource> </xform> </partial> """.format('123', '456', forms[2].unique_id) self.assertXmlPartialEqual(expected, self.factory.app.create_suite(), "./xform")
def test_duplicate_overrides_raises(self): forms = list(self.factory.app.get_module(0).get_forms()) add_xform_resource_overrides(self.factory.app.domain, self.factory.app.master_id, { forms[0].unique_id: '123', forms[1].unique_id: '456', forms[2].unique_id: '456', }) with self.assertRaises(ResourceOverrideError): self.factory.app.create_suite()
def test_overwrite_app_override_form_unique_ids(self): module = self.master1.add_module(Module.new_module('M1', None)) master_form = module.new_form('f1', None, self.get_xml('very_simple_form').decode('utf-8')) add_xform_resource_overrides(self.linked_domain, self.linked_app.get_id, {master_form.unique_id: '123'}) overwrite_app(self.linked_app, self.master1) self.assertEqual( {master_form.xmlns: '123'}, self._get_form_ids_by_xmlns(LinkedApplication.get(self.linked_app._id)) ) ResourceOverride.objects.filter(domain=self.linked_domain, app_id=self.linked_app.get_id).delete()
def test_overwrite_app_override_form_unique_ids(self): master_form = list(self.master1.get_forms(bare=True))[0] add_xform_resource_overrides(self.linked_domain, self.linked_app.get_id, {master_form.unique_id: '123'}) overwrite_app(self.linked_app, self.master1) self.assertEqual({master_form.xmlns: '123'}, self._get_form_ids_by_xmlns( LinkedApplication.get(self.linked_app._id))) ResourceOverride.objects.filter( domain=self.linked_domain, app_id=self.linked_app.get_id).delete()
def test_copy_xform_resource_overrides(self): forms = list(self.factory.app.get_module(0).get_forms()) add_xform_resource_overrides(self.factory.app.domain, self.factory.app.master_id, { forms[0].unique_id: '123', forms[1].unique_id: '456', }) copy_xform_resource_overrides(self.factory.app.domain, self.factory.app.master_id, { forms[0].unique_id: '321', '123': '987', }) overrides = get_xform_resource_overrides(self.factory.app.domain, self.factory.app.master_id) self.assertEqual({o.pre_id: o.post_id for o in overrides.values()}, { forms[0].unique_id: '123', forms[1].unique_id: '456', '321': '123', })