本文整理汇总了Python中corehq.apps.cloudcare.models.ApplicationAccess类的典型用法代码示例。如果您正苦于以下问题:Python ApplicationAccess类的具体用法?Python ApplicationAccess怎么用?Python ApplicationAccess使用的例子?那么恭喜您, 这里精选的类代码示例或许可以为您提供帮助。
在下文中一共展示了ApplicationAccess类的9个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的Python代码示例。
示例1: app_settings
def app_settings(request, domain):
if request.method == 'GET':
apps = get_cloudcare_apps(domain)
access = ApplicationAccess.get_template_json(domain, apps)
groups = Group.by_domain(domain)
return render(request, 'cloudcare/config.html', {
'domain': domain,
'apps': apps,
'groups': groups,
'access': access,
})
elif request.method == 'PUT':
j = json.loads(request.raw_post_data)
old = ApplicationAccess.get_by_domain(domain)
new = ApplicationAccess.wrap(j)
old.restrict = new.restrict
old.app_groups = new.app_groups
try:
if old._rev != new._rev or old._id != new._id:
raise ResourceConflict()
old.save()
except ResourceConflict:
return HttpResponseConflict()
else:
return json_response({'_rev': old._rev})
示例2: put
def put(self, request, *args, **kwargs):
j = json.loads(request.raw_post_data)
old = ApplicationAccess.get_by_domain(self.domain)
new = ApplicationAccess.wrap(j)
old.restrict = new.restrict
old.app_groups = new.app_groups
try:
if old._rev != new._rev or old._id != new._id:
raise ResourceConflict()
old.save()
except ResourceConflict:
return HttpResponseConflict()
else:
return json_response({'_rev': old._rev})
示例3: get
def get(self, request, domain, app_id, **kwargs):
app_access = ApplicationAccess.get_by_domain(domain)
app = get_current_app(domain, app_id)
if not app_access.user_can_access_app(request.couch_user, app):
raise Http404()
def _default_lang():
try:
return app['langs'][0]
except Exception:
return 'en'
# default language to user's preference, followed by
# first app's default, followed by english
language = request.couch_user.language or _default_lang()
context = {
"domain": domain,
"language": language,
"apps": [app],
"maps_api_key": settings.GMAPS_API_KEY,
"username": request.user.username,
"formplayer_url": settings.FORMPLAYER_URL,
"single_app_mode": True,
"home_url": reverse(self.urlname, args=[domain, app_id]),
"environment": WEB_APPS_ENVIRONMENT,
}
return render(request, "cloudcare/formplayer_home.html", context)
示例4: page_context
def page_context(self):
apps = get_cloudcare_apps(self.domain)
access = ApplicationAccess.get_template_json(self.domain, apps)
groups = Group.by_domain(self.domain)
return {
'apps': apps,
'groups': groups,
'access': access,
}
示例5: test_get_application_access_for_domain
def test_get_application_access_for_domain(self):
application_access_objects = []
domain = 'application-access-dbaccessors'
try:
self.assertIsNone(get_application_access_for_domain(domain))
o = ApplicationAccess(domain=domain)
o.save()
application_access_objects.append(o)
self.assertEqual(
o.to_json(),
get_application_access_for_domain(domain).to_json()
)
o = ApplicationAccess(domain=domain)
o.save()
application_access_objects.append(o)
self.assertIn(
get_application_access_for_domain(domain).to_json(),
[o.to_json() for o in application_access_objects]
)
finally:
ApplicationAccess.get_db().bulk_delete(application_access_objects)
示例6: get_application_access_for_domain
def get_application_access_for_domain(domain):
"""
there should only be one ApplicationAccess per domain,
return it if found, otherwise None.
if more than one is found, one is arbitrarily returned.
"""
return ApplicationAccess.view(
'by_domain_doc_type_date/view',
startkey=[domain, 'ApplicationAccess'],
endkey=[domain, 'ApplicationAccess', {}],
include_docs=True,
reduce=False,
).first()
示例7: get_web_apps_available_to_user
def get_web_apps_available_to_user(self, domain, user):
app_access = ApplicationAccess.get_by_domain(domain)
app_ids = get_app_ids_in_domain(domain)
apps = list(map(
lambda app_id: self.fetch_app(domain, app_id),
app_ids,
))
apps = filter(None, apps)
apps = filter(lambda app: app.get('cloudcare_enabled') or self.preview, apps)
apps = filter(lambda app: app_access.user_can_access_app(user, app), apps)
role = user.get_role(domain)
if role:
apps = [app for app in apps if role.permissions.view_web_app(app)]
apps = sorted(apps, key=lambda app: app['name'])
return apps
示例8: cloudcare_main
def cloudcare_main(request, domain, urlPath):
try:
preview = string_to_boolean(request.REQUEST.get("preview", "false"))
except ValueError:
# this is typically only set at all if it's intended to be true so this
# is a reasonable default for "something went wrong"
preview = True
app_access = ApplicationAccess.get_by_domain(domain)
def _app_latest_build_json(app_id):
build = ApplicationBase.view('app_manager/saved_app',
startkey=[domain, app_id, {}],
endkey=[domain, app_id],
descending=True,
limit=1).one()
return get_app_json(build) if build else None
if not preview:
apps = get_cloudcare_apps(domain)
# replace the apps with the last build of each app
apps = [_app_latest_build_json(app["_id"]) for app in apps]
else:
apps = ApplicationBase.view('app_manager/applications_brief', startkey=[domain], endkey=[domain, {}])
apps = [get_app_json(app) for app in apps if app and app.application_version == V2]
# trim out empty apps
apps = filter(lambda app: app, apps)
apps = filter(lambda app: app_access.user_can_access_app(request.couch_user, app), apps)
def _default_lang():
if apps:
# unfortunately we have to go back to the DB to find this
return Application.get(apps[0]["_id"]).build_langs[0]
else:
return "en"
# default language to user's preference, followed by
# first app's default, followed by english
language = request.couch_user.language or _default_lang()
def _url_context():
# given a url path, returns potentially the app 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/"
# 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
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
return {
"app": app,
"case": case
}
context = {
"domain": domain,
"language": language,
"apps": apps,
"apps_raw": apps,
"preview": preview,
"maps_api_key": settings.GMAPS_API_KEY
}
context.update(_url_context())
return render(request, "cloudcare/cloudcare_home.html", context)
示例9: cloudcare_main
def cloudcare_main(request, domain, urlPath):
try:
preview = string_to_boolean(request.REQUEST.get("preview", "false"))
except ValueError:
# this is typically only set at all if it's intended to be true so this
# is a reasonable default for "something went wrong"
preview = True
app_access = ApplicationAccess.get_by_domain(domain)
if not preview:
apps = get_cloudcare_apps(domain)
if request.project.use_cloudcare_releases:
# replace the apps with the last starred build of each app, removing the ones that aren't starred
apps = filter(lambda app: app.is_released, [get_app(domain, app['_id'], latest=True) for app in apps])
# convert to json
apps = [get_app_json(app) for app in apps]
else:
# legacy functionality - use the latest build regardless of stars
apps = [get_app_json(ApplicationBase.get_latest_build(domain, app['_id'])) for app in apps]
else:
apps = ApplicationBase.view('app_manager/applications_brief', startkey=[domain], endkey=[domain, {}])
apps = [get_app_json(app) for app in apps if app and app.application_version == V2]
# trim out empty apps
apps = filter(lambda app: app, apps)
apps = filter(lambda app: app_access.user_can_access_app(request.couch_user, app), apps)
def _default_lang():
if apps:
# unfortunately we have to go back to the DB to find this
return Application.get(apps[0]["_id"]).build_langs[0]
else:
return "en"
# default language to user's preference, followed by
# first app's default, followed by english
language = request.couch_user.language or _default_lang()
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
}
context = {
"domain": domain,
"language": language,
"apps": apps,
"apps_raw": apps,
#.........这里部分代码省略.........