コード例 #1
0
    def handle(self, domain, **options):
        verbose = options["verbose"] or options["dryrun"]

        succeeded = []
        failed = []
        error_messages = defaultdict(lambda: 0)
        problem_ids = self._get_form_ids(domain)
        prefix = "Processing: "
        form_iterator = FormAccessors(domain).iter_forms(problem_ids)
        if not verbose:
            form_iterator = with_progress_bar(form_iterator, len(problem_ids), prefix=prefix, oneline=False)
        for form in form_iterator:
            if verbose:
                print("%s\t%s\t%s\t%s" % (form.form_id, form.received_on, form.xmlns, form.problem.strip()))

            if not options["dryrun"]:
                try:
                    reprocess_xform_error(form)
                except Exception as e:
                    raise
                    failed.append(form.form_id)
                    error_messages[str(e)] += 1
                else:
                    succeeded.append(form.form_id)

        if not options["dryrun"]:
            print("%s / %s forms successfully processed, %s failures" %
                  (len(succeeded), len(succeeded) + len(failed), len(failed)))
            if error_messages:
                print("The following errors were seen: \n%s" %
                      ("\n".join("%s: %s" % (v, k) for k, v in error_messages.items())))
コード例 #2
0
    def handle(self, domain, **options):
        verbose = options["verbose"] or options["dryrun"]

        succeeded = []
        failed = []
        error_messages = defaultdict(lambda: 0)
        problem_ids = self._get_form_ids(domain)
        prefix = "Processing: "
        form_iterator = FormAccessors(domain).iter_forms(problem_ids)
        if not verbose:
            form_iterator = with_progress_bar(form_iterator, len(problem_ids), prefix=prefix, oneline=False)
        for form in form_iterator:
            if verbose:
                print("%s\t%s\t%s\t%s" % (form.form_id, form.received_on, form.xmlns, form.problem.strip()))

            if not options["dryrun"]:
                try:
                    reprocess_xform_error(form)
                except Exception as e:
                    raise
                    failed.append(form.form_id)
                    error_messages[str(e)] += 1
                else:
                    succeeded.append(form.form_id)

        if not options["dryrun"]:
            print("%s / %s forms successfully processed, %s failures" %
                  (len(succeeded), len(succeeded) + len(failed), len(failed)))
            if error_messages:
                print("The following errors were seen: \n%s" %
                      ("\n".join("%s: %s" % (v, k) for k, v in error_messages.items())))
コード例 #3
0
    def test_reprocess_xform_error(self):
        case_id = uuid.uuid4().hex
        parent_case_id = uuid.uuid4().hex
        case = CaseBlock(
            create=True,
            case_id=case_id,
            user_id='user1',
            owner_id='user1',
            case_type='demo',
            case_name='child',
            index={'parent': ('parent_type', parent_case_id)}
        )

        post_case_blocks([case.as_xml()], domain=self.domain)

        form_accessors = FormAccessors(self.domain)
        error_forms = form_accessors.get_forms_by_type('XFormError', 10)
        self.assertEqual(1, len(error_forms))

        form = error_forms[0]
        reprocess_xform_error(form)
        error_forms = form_accessors.get_forms_by_type('XFormError', 10)
        self.assertEqual(1, len(error_forms))

        case = CaseBlock(
            create=True,
            case_id=parent_case_id,
            user_id='user1',
            owner_id='user1',
            case_type='parent_type',
            case_name='parent',
        )

        post_case_blocks([case.as_xml()], domain=self.domain)

        reprocess_xform_error(form_accessors.get_form(form.form_id))

        form = form_accessors.get_form(form.form_id)
        # self.assertTrue(form.initial_processing_complete)  Can't change this with SQL forms at the moment
        self.assertTrue(form.is_normal)
        self.assertIsNone(form.problem)

        case = CaseAccessors(self.domain).get_case(case_id)
        self.assertEqual(1, len(case.indices))
        self.assertEqual(case.indices[0].referenced_id, parent_case_id)
        self._validate_case(case)
コード例 #4
0
    def test_reprocess_xform_error(self):
        case_id = uuid.uuid4().hex
        parent_case_id = uuid.uuid4().hex
        case = CaseBlock(
            create=True,
            case_id=case_id,
            user_id='user1',
            owner_id='user1',
            case_type='demo',
            case_name='child',
            index={'parent': ('parent_type', parent_case_id)}
        )

        post_case_blocks([case.as_xml()], domain=self.domain)

        form_accessors = FormAccessors(self.domain)
        error_forms = form_accessors.get_forms_by_type('XFormError', 10)
        self.assertEqual(1, len(error_forms))

        form = error_forms[0]
        reprocess_xform_error(form)
        error_forms = form_accessors.get_forms_by_type('XFormError', 10)
        self.assertEqual(1, len(error_forms))

        case = CaseBlock(
            create=True,
            case_id=parent_case_id,
            user_id='user1',
            owner_id='user1',
            case_type='parent_type',
            case_name='parent',
        )

        post_case_blocks([case.as_xml()], domain=self.domain)

        reprocess_xform_error(form_accessors.get_form(form.form_id))

        form = form_accessors.get_form(form.form_id)
        # self.assertTrue(form.initial_processing_complete)  Can't change this with SQL forms at the moment
        self.assertTrue(form.is_normal)
        self.assertIsNone(form.problem)

        case = CaseAccessors(self.domain).get_case(case_id)
        self.assertEqual(1, len(case.indices))
        self.assertEqual(case.indices[0].referenced_id, parent_case_id)
        self._validate_case(case)