def _url_context(): # given a url path, returns potentially the app, parent, and case, if # they're selected. the front end optimizes with these to avoid excess # server calls # there's an annoying dependency between this logic and backbone's # url routing that seems hard to solve well. this needs to be synced # with apps.js if anything changes # for apps anything with "view/app/" works # for cases it will be: # "view/:app/:module/:form/case/:case/" # if there are parent cases, it will be: # "view/:app/:module/:form/parent/:parent/case/:case/ # could use regex here but this is actually simpler with the potential # absence of a trailing slash split = urlPath.split('/') app_id = split[1] if len(split) >= 2 else None if len(split) >= 5 and split[4] == "parent": parent_id = split[5] case_id = split[7] if len(split) >= 7 else None else: parent_id = None case_id = split[5] if len(split) >= 6 else None app = None if app_id: if app_id in [a['_id'] for a in apps]: app = look_up_app_json(domain, app_id) else: messages.info(request, _("That app is no longer valid. Try using the " "navigation links to select an app.")) if app is None and len(apps) == 1: app = look_up_app_json(domain, apps[0]['_id']) def _get_case(domain, case_id): case = CommCareCase.get(case_id) assert case.domain == domain, "case %s not in %s" % (case_id, domain) return case.get_json() case = _get_case(domain, case_id) if case_id else None if parent_id is None and case is not None: parent_id = case.get('indices',{}).get('parent', {}).get('case_id', None) parent = _get_case(domain, parent_id) if parent_id else None return { "app": app, "case": case, "parent": parent }
def _url_context(): # given a url path, returns potentially the app, parent, and case, if # they're selected. the front end optimizes with these to avoid excess # server calls # there's an annoying dependency between this logic and backbone's # url routing that seems hard to solve well. this needs to be synced # with apps.js if anything changes # for apps anything with "view/app/" works # for cases it will be: # "view/:app/:module/:form/case/:case/" # if there are parent cases, it will be: # "view/:app/:module/:form/parent/:parent/case/:case/ # could use regex here but this is actually simpler with the potential # absence of a trailing slash split = urlPath.split('/') app_id = split[1] if len(split) >= 2 else None if len(split) >= 5 and split[4] == "parent": parent_id = split[5] case_id = split[7] if len(split) >= 7 else None else: parent_id = None case_id = split[5] if len(split) >= 6 else None app = None if app_id: if app_id in [a['_id'] for a in apps]: app = look_up_app_json(domain, app_id) else: messages.info( request, _("That app is no longer valid. Try using the " "navigation links to select an app.")) if app is None and len(apps) == 1: app = look_up_app_json(domain, apps[0]['_id']) def _get_case(domain, case_id): case = accessor.get_case(case_id) assert case.domain == domain, "case %s not in %s" % (case_id, domain) return case.to_api_json()
def get_cloudcare_app(): """ Total hack function to get direct links to the cloud care application pages """ def get_latest_build(domain, app_id): build = ApplicationBase.view('app_manager/saved_app', startkey=[domain, app_id, {}], endkey=[domain, app_id], descending=True, limit=1).one() return build._doc if build else None from corehq.apps.cloudcare import api apps = api.get_cloudcare_apps(PACT_DOMAIN) filtered_app = filter(lambda x: x['name']==PACT_CLOUD_APPNAME, apps) if len(filtered_app) != 1: raise Exception ("Your hacky assumption failed for pact!") app = api.look_up_app_json(PACT_DOMAIN, filtered_app[0]['_id']) app_id = app['_id'] pact_cloudcare = filter(lambda x: x['name']['en'] == PACT_CLOUDCARE_MODULE, app['modules']) forms = pact_cloudcare[0]['forms'] ret = dict((f['name']['en'], ix) for (ix, f) in enumerate(forms)) url_root = '/a/%(domain)s/cloudcare/apps/view/%(build_id)s/%(module_id)s/%(form_id)s/case/%(case_id)s/enter/' ret['url_root'] = url_root ret['domain'] = PACT_DOMAIN ret['app_id'] = app_id latest_build = get_latest_build(PACT_DOMAIN, app_id) if latest_build is not None: latest_build_id = latest_build['_id'] ret['build_id'] = latest_build_id ret['module_id'] = 0 return ret
def get_app_api(request, domain, app_id): return json_response(look_up_app_json(domain, app_id))
def get_app_api(request, domain, app_id): try: return json_response(look_up_app_json(domain, app_id)) except RemoteAppError: raise Http404()
def get_app_api(request, domain, app_id): try: return json_response(look_up_app_json(domain, app_id)) except RemoteAppError: raise Http404()
def get_app_api(request, domain, app_id): return json_response(look_up_app_json(domain, app_id))