Example #1
0
def location_fixture_instances(domain, instance_name):
    if toggles.FLAT_LOCATION_FIXTURE.enabled(domain):
        return Instance(id=instance_name,
                        src='jr://fixture/{}'.format(instance_name))
    else:
        return Instance(id=instance_name,
                        src='jr://fixture/commtrack:{}'.format(instance_name))
Example #2
0
    def _add_custom_referenced_instances(self, instances,
                                         unknown_instance_ids):
        def _add_custom_instance(instance_name):
            if instance_name in unknown_instance_ids:
                instances.add(
                    Instance(id=instance_name,
                             src='jr://fixture/{}'.format(instance_name)))
                unknown_instance_ids.remove(instance_name)

        if toggles.CUSTOM_CALENDAR_FIXTURE.enabled(self.app.domain):
            _add_custom_instance('enikshay:calendar')

        if toggles.MOBILE_UCR.enabled(self.app.domain):
            _add_custom_instance('commcare:reports')

        instance_name = 'locations'
        if instance_name in unknown_instance_ids:
            if toggles.FLAT_LOCATION_FIXTURE.enabled(self.app.domain):
                instances.add(
                    Instance(id=instance_name,
                             src='jr://fixture/{}'.format(instance_name)))
            else:
                instances.add(
                    Instance(
                        id=instance_name,
                        src='jr://fixture/commtrack:{}'.format(instance_name)))
            unknown_instance_ids.remove(instance_name)
        return instances, unknown_instance_ids
Example #3
0
def location_fixture_instances(domain, instance_name):
    from corehq.apps.locations.models import LocationFixtureConfiguration
    if (toggles.HIERARCHICAL_LOCATION_FIXTURE.enabled(domain)
            and not LocationFixtureConfiguration.for_domain(
                domain).sync_flat_fixture):
        return Instance(id=instance_name,
                        src='jr://fixture/commtrack:{}'.format(instance_name))
    return Instance(id=instance_name,
                    src='jr://fixture/{}'.format(instance_name))
Example #4
0
    def build_instances(self):
        prompt_select_instances = [
            Instance(id=prop.itemset.instance_id,
                     src=prop.itemset.instance_uri)
            for prop in self.module.search_config.properties
            if prop.itemset.instance_id
        ]

        xpaths = {QuerySessionXPath(self.case_session_var).instance()}
        xpaths.update(datum.ref for datum in self._remote_request_query_datums)
        xpaths.add(self.get_post_relevant())
        xpaths = xpaths.union(self._get_multi_select_xpaths())
        xpaths.add(self.module.search_config.search_filter)
        xpaths.update(prop.default_value
                      for prop in self.module.search_config.properties)
        xpaths.update(prop.required
                      for prop in self.module.search_config.properties)
        # we use the module's case list/details view to select the datum so also
        # need these instances to be available
        xpaths.update(self._get_xpaths_for_module())
        instances, unknown_instances = get_all_instances_referenced_in_xpaths(
            self.app, xpaths)

        # exclude remote instances
        instances = [
            instance for instance in instances if 'remote' not in instance.src
        ]

        # sorted list to prevent intermittent test failures
        return sorted(set(list(instances) + prompt_select_instances),
                      key=lambda i: i.id)
Example #5
0
    def _build_instances(self):
        prompt_select_instances = [
            Instance(id=prop.itemset.instance_id,
                     src=prop.itemset.instance_uri)
            for prop in self.module.search_config.properties
            if prop.itemset.instance_id
        ]

        query_xpaths = [
            QuerySessionXPath(
                self.module.search_config.case_session_var).instance()
        ]
        query_xpaths.extend(
            [datum.ref for datum in self._get_remote_request_query_datums()])
        query_xpaths.extend([
            self.module.search_config.get_relevant(),
            self.module.search_config.search_filter
        ])
        query_xpaths.extend([
            prop.default_value for prop in self.module.search_config.properties
        ])
        instances, unknown_instances = get_all_instances_referenced_in_xpaths(
            self.app, query_xpaths)
        # we use the module's case list/details view to select the datum so also
        # need these instances to be available
        instances |= get_instances_for_module(self.app, self.module,
                                              self.detail_section_elements)

        # sorted list to prevent intermittent test failures
        return sorted(set(list(instances) + prompt_select_instances),
                      key=lambda i: i.id)
Example #6
0
def _commcare_reports_instances(app, instance_name, prefix):
    from corehq.apps.app_manager.suite_xml.features.mobile_ucr import get_uuids_by_instance_id
    if instance_name.startswith(prefix) and toggles.MOBILE_UCR.enabled(
            app.domain):
        instance_id = instance_name[len(prefix):]
        uuid = get_uuids_by_instance_id(app).get(instance_id, [instance_id])[0]
        return Instance(id=instance_name,
                        src='jr://fixture/{}{}'.format(prefix, uuid))
Example #7
0
    def _get_custom_instances(self, entry, known_instances, required_instances):
        known_instance_ids = [instance.id for instance in known_instances]
        try:
            custom_instances = self._custom_instances_by_xmlns()[entry.form]
        except KeyError:
            custom_instances = []

        for instance in custom_instances:
            if instance.instance_id in known_instance_ids:
                raise DuplicateInstanceIdError(instance.instance_id)
            # Remove custom instances from required instances, but add them even if they aren't referenced anywhere
            required_instances.discard(instance.instance_id)
        return {
            Instance(id=instance.instance_id, src=instance.instance_path) for instance in custom_instances
        }, required_instances
Example #8
0
    def add_referenced_instances(self, entry, details_by_id, relevance_by_menu,
                                 menu_by_command):
        detail_ids = set()
        xpaths = set()

        for datum in entry.datums:
            detail_ids.add(datum.detail_confirm)
            detail_ids.add(datum.detail_select)
            xpaths.add(datum.nodeset)
            xpaths.add(datum.function)
        details = [
            details_by_id[detail_id] for detail_id in detail_ids if detail_id
        ]

        entry_id = entry.command.id
        menu_id = menu_by_command[entry_id]
        relevances = relevance_by_menu[menu_id]
        xpaths.update(relevances)

        for detail in details:
            xpaths.update(detail.get_all_xpaths())
        for assertion in entry.assertions:
            xpaths.add(assertion.test)
        if entry.stack:
            for frame in entry.stack.frames:
                xpaths.add(frame.if_clause)
                if hasattr(frame, 'datums'):
                    for datum in frame.datums:
                        xpaths.add(datum.value)
        xpaths.discard(None)
        instances, unknown_instance_ids = EntryInstances.get_required_instances(
            xpaths)

        if toggles.CUSTOM_CALENDAR_FIXTURE.enabled(self.app.domain):
            instance_name = 'enikshay:calendar'
            if instance_name in unknown_instance_ids:
                instances.add(
                    Instance(id=instance_name,
                             src='jr://fixture/{}'.format(instance_name)))
                unknown_instance_ids.remove(instance_name)

        entry.require_instances(instances=instances,
                                instance_ids=unknown_instance_ids)
Example #9
0
    def _build_instances(self):
        query_xpaths = [datum.ref for datum in self._get_remote_request_query_datums()]
        claim_relevant_xpaths = [self.module.search_config.relevant]
        prompt_select_instances = [
            Instance(id=prop.itemset.instance_id, src=prop.itemset.instance_uri)
            for prop in self.module.search_config.properties
            if prop.itemset.instance_id
        ]

        instances, unknown_instances = get_all_instances_referenced_in_xpaths(
            self.app,
            query_xpaths + claim_relevant_xpaths
        )
        # we use the module's case list/details view to select the datum so also
        # need these instances to be available
        instances |= get_instances_for_module(self.app, self.module)

        # sorted list to prevent intermittent test failures
        return sorted(list(instances) + prompt_select_instances, key=lambda i: i.id)
Example #10
0
def commcare_reports_filters_instances(domain, instance_name):
    if instance_name.startswith('commcare-reports-filters:'
                                ) and toggles.MOBILE_UCR.enabled(domain):
        return Instance(id=instance_name,
                        src='jr://fixture/{}'.format(instance_name))
Example #11
0
def commcare_fixture_instances(domain, instance_name):
    if instance_name == 'commcare:reports' and toggles.MOBILE_UCR.enabled(
            domain):
        return Instance(id=instance_name,
                        src='jr://fixture/{}'.format(instance_name))
Example #12
0
def enikshay_fixture_instances(domain, instance_name):
    if instance_name == 'enikshay:calendar' and toggles.CUSTOM_CALENDAR_FIXTURE.enabled(
            domain):
        return Instance(id=instance_name,
                        src='jr://fixture/{}'.format(instance_name))
Example #13
0
def generic_fixture_instances(domain, instance_name):
    return Instance(id=instance_name,
                    src='jr://fixture/{}'.format(instance_name))
Example #14
0
def preset_instances(domain, instance_name):
    kwargs = INSTANCE_KWARGS_BY_ID.get(instance_name, None)
    if kwargs:
        return Instance(**kwargs)
Example #15
0
    def get_module_contributions(self, module):
        if module_offers_search(module):
            domain = self.app.domain

            details_helper = DetailsHelper(self.app)

            remote_request = RemoteRequest(
                post=RemoteRequestPost(
                    url=absolute_reverse('claim_case', args=[domain]),
                    relevant=module.search_config.relevant,
                    data=[
                        QueryData(
                            key='case_id',
                            ref=QuerySessionXPath('case_id').instance(),
                            # e.g. instance('querysession')/session/data/case_id
                        ),
                    ]),
                command=Command(
                    id=id_strings.search_command(module),
                    display=Display(text=Text(
                        locale_id=id_strings.case_search_locale(module)), ),
                ),
                instances=[
                    Instance(id=SESSION_INSTANCE, src='jr://instance/session'),
                    Instance(id='casedb', src='jr://instance/casedb'),
                ],
                session=RemoteRequestSession(
                    queries=[
                        RemoteRequestQuery(
                            url=absolute_reverse('remote_search',
                                                 args=[domain]),
                            storage_instance=RESULTS_INSTANCE,
                            data=[
                                QueryData(key='case_type',
                                          ref="'{}'".format(module.case_type)),
                            ],
                            prompts=[
                                QueryPrompt(
                                    key=p.name,
                                    display=Display(
                                        text=Text(locale_id=id_strings.
                                                  search_property_locale(
                                                      module, p.name)), ),
                                ) for p in module.search_config.properties
                            ])
                    ],
                    data=[
                        SessionDatum(
                            id='case_id',
                            nodeset=(CaseTypeXpath(module.case_type).case(
                                instance_name=RESULTS_INSTANCE).select(
                                    u'@status', u'open', quote=True)),
                            value='./@case_id',
                            detail_select=details_helper.get_detail_id_safe(
                                module, 'case_short'),
                            detail_confirm=details_helper.get_detail_id_safe(
                                module, 'case_long'),
                        )
                    ],
                ),
                stack=Stack(),
            )

            frame = CreateFrame()
            # Open first form in module
            frame.add_command(XPath.string(id_strings.menu_id(module)))
            frame.add_datum(
                StackDatum(id='case_id',
                           value=QuerySessionXPath('case_id').instance()))
            remote_request.stack.add_frame(frame)

            return [remote_request]
        return []
Example #16
0
def related_locations_fixture_instances(app, instance_name):
    if instance_name == 'related_locations' and toggles.RELATED_LOCATIONS.enabled(
            app.domain):
        return Instance(id=instance_name,
                        src='jr://fixture/{}'.format(instance_name))
Example #17
0
 def _add_custom_instance(instance_name):
     if instance_name in unknown_instance_ids:
         instances.add(
             Instance(id=instance_name,
                      src='jr://fixture/{}'.format(instance_name)))
         unknown_instance_ids.remove(instance_name)
Example #18
0
get_instance_factory._factory_map = {}


class register_factory(object):
    def __init__(self, *schemes):
        self.schemes = schemes

    def __call__(self, fn):
        for scheme in self.schemes:
            get_instance_factory._factory_map[scheme] = fn
        return fn


INSTANCE_BY_ID = {
    'groups': Instance(id='groups', src='jr://fixture/user-groups'),
    'reports': Instance(id='reports', src='jr://fixture/commcare:reports'),
    'ledgerdb': Instance(id='ledgerdb', src='jr://instance/ledgerdb'),
    'casedb': Instance(id='casedb', src='jr://instance/casedb'),
    'commcaresession': Instance(id='commcaresession',
                                src='jr://instance/session'),
}


@register_factory(*INSTANCE_BY_ID.keys())
def preset_instances(domain, instance_name):
    return INSTANCE_BY_ID.get(instance_name, None)


@register_factory('item-list', 'schedule', 'indicators', 'commtrack')
@memoized