Ejemplo n.º 1
0
    def test_form_pillow_indicators(self):
        since = get_current_seq(XFormInstance.get_db())
        form_id = self._save_doc_to_db('indicator_form.json', XFormInstance)
        form_instance = XFormInstance.get(form_id)

        # Form Label Indicator
        form_label = FormLabelIndicatorDefinition.increment_or_create_unique(
            INDICATOR_TEST_NAMESPACE,
            INDICATOR_TEST_DOMAIN,
            slug='create_form',
            xmlns='http://openrosa.org/formdesigner/indicator-create-xmlns',
        )
        form_label.save()

        # Form Alias
        form_alias = FormDataAliasIndicatorDefinition.increment_or_create_unique(
            INDICATOR_TEST_NAMESPACE,
            INDICATOR_TEST_DOMAIN,
            slug='club_name',
            question_id='location.club',
            xmlns='http://openrosa.org/formdesigner/indicator-create-xmlns',
        )
        form_alias.save()
        self.form_pillow.process_changes(since=since, forever=False)

        indicator_form = IndicatorXForm.get(form_id)
        self.assertNotEqual(indicator_form.get_db().dbname,
                            form_instance.get_db().dbname)
        self.assertNotEqual(indicator_form.computed_, {})
Ejemplo n.º 2
0
    def test_form_pillow_indicators(self):
        form_id = self._save_doc_to_db('indicator_form.json', XFormInstance)
        form_instance = XFormInstance.get(form_id)

        # Form Label Indicator
        form_label = FormLabelIndicatorDefinition.increment_or_create_unique(
            INDICATOR_TEST_NAMESPACE,
            INDICATOR_TEST_DOMAIN,
            slug='create_form',
            xmlns='http://openrosa.org/formdesigner/indicator-create-xmlns',
        )
        form_label.save()

        # Form Alias
        form_alias = FormDataAliasIndicatorDefinition.increment_or_create_unique(
            INDICATOR_TEST_NAMESPACE,
            INDICATOR_TEST_DOMAIN,
            slug='club_name',
            question_id='location.club',
            xmlns='http://openrosa.org/formdesigner/indicator-create-xmlns',
        )
        form_alias.save()
        self.form_pillow.process_changes(since=None, forever=False)

        indicator_form = IndicatorXForm.get(form_id)
        self.assertNotEqual(
            indicator_form.get_db().dbname, form_instance.get_db().dbname
        )
        self.assertNotEqual(indicator_form.computed_, {})
Ejemplo n.º 3
0
    def test_form_pillow_indicators(self):
        form_id = self._save_doc_to_db("indicator_form.json", XFormInstance)
        form_instance = XFormInstance.get(form_id)

        # Form Label Indicator
        form_label = FormLabelIndicatorDefinition.increment_or_create_unique(
            INDICATOR_TEST_NAMESPACE,
            INDICATOR_TEST_DOMAIN,
            slug="create_form",
            xmlns="http://openrosa.org/formdesigner/indicator-create-xmlns",
        )
        form_label.save()

        # Form Alias
        form_alias = FormDataAliasIndicatorDefinition.increment_or_create_unique(
            INDICATOR_TEST_NAMESPACE,
            INDICATOR_TEST_DOMAIN,
            slug="club_name",
            question_id="location.club",
            xmlns="http://openrosa.org/formdesigner/indicator-create-xmlns",
        )
        form_alias.save()

        self.form_pillow.run_burst()

        indicator_form = IndicatorXForm.get(form_id)
        self.assertNotEqual(indicator_form.get_db().dbname, form_instance.get_db().dbname)
        self.assertNotEqual(indicator_form.computed_, {})
Ejemplo n.º 4
0
 def format_property(self, key, property):
     if key == "xmlns":
         from corehq.apps.indicators.models import FormLabelIndicatorDefinition
         label = FormLabelIndicatorDefinition.get_label_for_xmlns(self.document_instance.namespace,
                                                                  self.document_instance.domain, property)
         return mark_safe(render_to_string("indicators/partials/form_label.html", {
             "label": label,
             "xmlns": property,
         }))
     return super(BaseFormIndicatorAdminCRUDManager, self).format_property(key, property)
class FormLabelIndicatorDefinitionAdminInterface(BaseIndicatorAdminInterface):
    name = FormLabelIndicatorDefinition.get_nice_name()
    description = "Maps a form_label to an XMLNS for that form."
    slug = "form_label"
    document_class = FormLabelIndicatorDefinition
    form_class = FormLabelIndicatorDefinitionForm

    @property
    def headers(self):
        header = super(FormLabelIndicatorDefinitionAdminInterface, self).headers
        header.insert_column(DataTablesColumn("XMLNS"), -3)
        return header
Ejemplo n.º 6
0
    def update_indicators_for_xmlns(self, domain, form_label_filter=None):
        key = [MVP.NAMESPACE, domain]
        all_labels = (
            FormLabelIndicatorDefinition.get_db()
            .view("indicators/form_labels", reduce=False, startkey=key, endkey=key + [{}])
            .all()
        )
        for label in all_labels:
            label_name = label["value"]
            if form_label_filter is not None and form_label_filter != label_name:
                continue
            xmlns = label["key"][-2]
            print "\n\nGetting Forms of Type %s and XMLNS %s for domain %s" % (label_name, xmlns, domain)

            relevant_forms = (
                XFormInstance.get_db()
                .view(
                    "all_forms/view",
                    reduce=True,
                    startkey=["submission xmlns", domain, xmlns],
                    endkey=["submission xmlns", domain, xmlns, {}],
                )
                .first()
            )
            num_forms = relevant_forms["value"] if relevant_forms else 0

            form_ids = [
                r["id"]
                for r in XFormInstance.view(
                    "all_forms/view",
                    reduce=False,
                    include_docs=False,
                    startkey=["submission xmlns", domain, xmlns],
                    endkey=["submission xmlns", domain, xmlns, {}],
                ).all()
            ]

            print "Found %d forms with matching XMLNS %s" % (num_forms, xmlns)
            relevant_indicators = FormIndicatorDefinition.get_all(namespace=MVP.NAMESPACE, domain=domain, xmlns=xmlns)
            if relevant_indicators:
                self._throttle_updates(
                    "Forms (TYPE: %s, XMLNS %s, DOMAIN: %s)" % (label_name, xmlns, domain),
                    relevant_indicators,
                    num_forms,
                    domain,
                    form_ids,
                    XFormInstance,
                )
Ejemplo n.º 7
0
    def update_indicators_for_xmlns(self, domain, form_label_filter=None):
        key = [MVP.NAMESPACE, domain]
        all_labels = FormLabelIndicatorDefinition.get_db().view(
            'indicators/form_labels',
            reduce=False,
            startkey=key,
            endkey=key + [{}],
        ).all()
        for label in all_labels:
            label_name = label['value']
            if form_label_filter is not None and form_label_filter != label_name:
                continue
            xmlns = label['key'][-2]
            print("\n\nGetting Forms of Type %s and XMLNS %s for domain %s" % (label_name, xmlns, domain))

            relevant_forms = XFormInstance.get_db().view(
                "all_forms/view",
                reduce=True,
                startkey=['submission xmlns', domain, xmlns],
                endkey=['submission xmlns', domain, xmlns, {}],
            ).first()
            num_forms = relevant_forms['value'] if relevant_forms else 0

            form_ids = [r['id'] for r in XFormInstance.view(
                "all_forms/view",
                reduce=False,
                include_docs=False,
                startkey=['submission xmlns', domain, xmlns],
                endkey=['submission xmlns', domain, xmlns, {}],
            ).all()]

            print("Found %d forms with matching XMLNS %s" % (num_forms, xmlns))
            relevant_indicators = FormIndicatorDefinition.get_all(
                namespace=MVP.NAMESPACE,
                domain=domain,
                xmlns=xmlns
            )
            if relevant_indicators:
                self._throttle_updates(
                    "Forms (TYPE: %s, XMLNS %s, DOMAIN: %s)" % (
                        label_name, xmlns, domain),
                    relevant_indicators, num_forms, domain,
                    form_ids, XFormInstance)