コード例 #1
0
    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)))
コード例 #2
0
 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")
コード例 #3
0
 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()
コード例 #4
0
    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()
コード例 #5
0
    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()
コード例 #6
0
    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',
        })