本文整理汇总了Python中wirecloud.commons.utils.http.parse_json_request函数的典型用法代码示例。如果您正苦于以下问题:Python parse_json_request函数的具体用法?Python parse_json_request怎么用?Python parse_json_request使用的例子?那么恭喜您, 这里精选的函数代码示例或许可以为您提供帮助。
在下文中一共展示了parse_json_request函数的15个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的Python代码示例。
示例1: create
def create(self, request, workspace_id, tab_id, iwidget_id):
workspace = get_object_or_404(Workspace, pk=workspace_id)
iwidget = get_object_or_404(IWidget, pk=iwidget_id)
if iwidget.tab_id != int(tab_id):
raise Http404
iwidget_info = iwidget.widget.resource.get_processed_info(translate=True, process_variables=True)
new_values = parse_json_request(request)
for var_name in new_values:
if var_name not in iwidget_info['variables']['properties']:
msg = _('Invalid persistent variable: "%s"') % var_name
return build_error_response(request, 422, msg)
# Check if its multiuser
if not iwidget_info['variables']['properties'][var_name].get("multiuser", False):
# No multiuser -> Check permissions
if workspace.creator != request.user:
msg = _('You have not enough permission for updating the persistent variables of this widget')
return build_error_response(request, 403, msg)
else:
# Multiuser -> Check permissions
if not workspace.is_available_for(request.user):
msg = _('You have not enough permission for updating the persistent variables of this widget')
return build_error_response(request, 403, msg)
iwidget.set_variable_value(var_name, new_values[var_name], request.user)
iwidget.save()
return HttpResponse(status=204)
示例2: process
def process(self, request):
data = parse_json_request(request)
(resource_vendor, resource_name, resource_version) = data['resource'].split('/')
resource = get_object_or_404(CatalogueResource, vendor=resource_vendor, short_name=resource_name, version=resource_version)
if not resource.is_available_for(request.user):
return build_error_response(request, 403, _('You are not allowed to delete this market'))
base_dir = catalogue.wgt_deployer.get_base_dir(resource_vendor, resource_name, resource_version)
wgt_file = WgtFile(os.path.join(base_dir, resource.template_uri))
market_managers = get_market_managers(request.user)
errors = {}
for market_endpoint in data['marketplaces']:
try:
market_managers[market_endpoint['market']].publish(market_endpoint, wgt_file, request.user, request=request)
except Exception as e:
errors[market_endpoint['market']] = text_type(e)
if len(errors) == 0:
return HttpResponse(status=204)
elif len(errors) == len(data['marketplaces']):
return build_error_response(request, 502, _('Something went wrong (see details for more info)'), details=errors)
else:
return build_error_response(request, 200, _('Something went wrong (see details for more info)'), details=errors)
示例3: create
def create(self, request):
received_data = parse_json_request(request)
if 'options' not in received_data:
return build_error_response(request, 400, _("Missing marketplace options"))
validate_url_param(request, 'options.url', received_data['options']['url'])
if 'user' not in received_data['options'] or received_data['options']['user'] == request.user.username:
user_entry = request.user
elif received_data['options'].get('user', None) is not None:
user_entry = User.objects.get(username=received_data['options']['user'])
else:
user_entry = None
if (user_entry is None or user_entry != request.user) and not request.user.is_superuser:
return build_error_response(request, 403, _("You don't have permissions for adding public marketplaces"))
if 'user' in received_data['options']:
del received_data['options']['user']
try:
Market.objects.create(user=user_entry, name=received_data['name'], options=received_data['options'])
except IntegrityError:
return build_error_response(request, 409, 'Market name already in use')
return HttpResponse(status=201)
示例4: create
def create(self, request, workspace_id):
ts = parse_json_request(request)
workspace = Workspace.objects.get(pk=workspace_id)
if not (request.user.is_superuser or workspace.users.filter(pk=request.user.pk).exists()):
return build_error_response(request, 403, _('You are not allowed to update this workspace'))
if 'active' in ts:
active = ts.get('active', False)
if isinstance(active, string_types):
active = ts['active'].lower() == 'true'
if active:
# Only one active workspace
setActiveWorkspace(request.user, workspace)
else:
currentUserWorkspace = UserWorkspace.objects.get(workspace=workspace, user=request.user)
currentUserWorkspace.active = False
currentUserWorkspace.save()
if 'name' in ts:
workspace.name = ts['name']
workspace.save()
return HttpResponse(status=204)
示例5: process
def process(self, request, to_ws_id):
data = parse_json_request(request)
mashup_id = data.get('mashup', '')
workspace_id = data.get('workspace', '')
if mashup_id == '' and workspace_id == '':
return build_error_response(request, 422, _('Missing workspace or mashup parameter'))
elif mashup_id != '' and workspace_id != '':
return build_error_response(request, 422, _('Workspace and mashup parameters cannot be used at the same time'))
to_ws = get_object_or_404(Workspace, id=to_ws_id)
if not request.user.is_superuser and to_ws.creator != request.user:
return build_error_response(request, 403, _('You are not allowed to update this workspace'))
if mashup_id != '':
values = mashup_id.split('/', 3)
if len(values) != 3:
return build_error_response(request, 422, _('invalid mashup id'))
(mashup_vendor, mashup_name, mashup_version) = values
try:
resource = CatalogueResource.objects.get(vendor=mashup_vendor, short_name=mashup_name, version=mashup_version)
if not resource.is_available_for(request.user) or resource.resource_type() != 'mashup':
raise CatalogueResource.DoesNotExist
except CatalogueResource.DoesNotExist:
return build_error_response(request, 422, _('Mashup not found: %(mashup_id)s') % {'mashup_id': mashup_id})
base_dir = catalogue.wgt_deployer.get_base_dir(mashup_vendor, mashup_name, mashup_version)
wgt_file = WgtFile(os.path.join(base_dir, resource.template_uri))
template = TemplateParser(wgt_file.get_template())
else:
from_ws = get_object_or_404(Workspace, id=workspace_id)
if not request.user.is_superuser and from_ws.creator != request.user:
return build_error_response(request, 403, _('You are not allowed to read from workspace %s') % workspace_id)
options = {
'vendor': 'api',
'name': 'merge_op',
'version': '1.0',
'title': '',
'description': 'Temporal mashup for merging operation',
'email': '[email protected]',
}
template = TemplateParser(build_json_template_from_workspace(options, from_ws, from_ws.creator))
try:
check_mashup_dependencies(template, request.user)
except MissingDependencies as e:
details = {
'missingDependencies': e.missing_dependencies,
}
return build_error_response(request, 422, e, details=details)
fillWorkspaceUsingTemplate(to_ws, template)
return HttpResponse(status=204)
示例6: add_tenant
def add_tenant(request):
data = parse_json_request(request)
id_4CaaSt = data['4CaaStID']
if id_4CaaSt is None:
return build_error_response(request, 400, _('Missing 4CaaStID'))
if not isinstance(id_4CaaSt, string_types) or id_4CaaSt.strip() == '':
return build_error_response(request, 400, _('Invalid 4CaaStID'))
username = parse_username(id_4CaaSt)
status = 201
try:
user = User.objects.create_user(username, '[email protected]', username)
except:
status = 209
user = User.objects.get(username=username)
try:
if user.tenantprofile_4CaaSt.id_4CaaSt != id_4CaaSt:
msg = "A user with the same name and with different tenant id already exists."
return build_error_response(request, 400, msg)
else:
return HttpResponse(status)
except TenantProfile.DoesNotExist:
pass
TenantProfile.objects.create(user=user, id_4CaaSt=id_4CaaSt)
return HttpResponse(status)
示例7: create
def create(self, request, workspace_id, tab_id, iwidget_id):
workspace = get_object_or_404(Workspace, pk=workspace_id)
if not request.user.is_superuser and workspace.creator != request.user:
msg = _('You have not enough permission for updating the preferences of the iwidget')
return build_error_response(request, 403, msg)
iwidget = get_object_or_404(IWidget.objects.select_related('widget__resource'), pk=iwidget_id)
if iwidget.tab_id != int(tab_id):
raise Http404
iwidget_info = iwidget.widget.resource.get_processed_info(translate=True, process_variables=True)
new_values = parse_json_request(request)
for var_name in new_values:
try:
vardef = iwidget_info['variables']['preferences'][var_name]
except KeyError:
msg = _('Invalid preference: "%s"') % var_name
return build_error_response(request, 422, msg)
if vardef['readonly'] is True:
msg = _('"%s" preference is read only.') % var_name
return build_error_response(request, 403, msg)
iwidget.set_variable_value(var_name, new_values[var_name])
iwidget.save()
return HttpResponse(status=204)
示例8: create
def create(self, request, workspace_id):
# Check Workspace existance and owned by this user
workspace = get_object_or_404(Workspace, pk=workspace_id)
if not (request.user.is_superuser or workspace.users.filter(pk=request.user.pk).exists()):
return build_error_response(request, 403, _('You are not allowed to update this workspace'))
preferences_json = parse_json_request(request)
if 'sharelist' in preferences_json:
workspace.users.clear()
workspace.groups.clear()
sharelist = json.loads(preferences_json['sharelist']['value'])
for item in sharelist:
try:
user = User.objects.get(username=item['name'])
except User.DoesNotExist:
continue
workspace.userworkspace_set.create(user=user)
try:
workspace.groups.add(user.organization.group)
except Organization.DoesNotExist:
pass
del preferences_json['sharelist']
if 'public' in preferences_json:
workspace.public = preferences_json['public']['value'].strip().lower() == 'true'
workspace.save()
del preferences_json['public']
update_workspace_preferences(workspace, preferences_json)
return HttpResponse(status=204)
示例9: update
def update(self, request, workspace_id):
workspace = get_object_or_404(Workspace, id=workspace_id)
if not request.user.is_superuser and workspace.creator != request.user:
return build_error_response(request, 403, _('You are not allowed to update this workspace'))
wiring_status = parse_json_request(request)
old_wiring_status = workspace.wiringStatus
old_read_only_connections = []
for connection in old_wiring_status['connections']:
if connection.get('readonly', False):
old_read_only_connections.append(connection)
read_only_connections = []
for connection in wiring_status['connections']:
if connection.get('readonly', False):
read_only_connections.append(connection)
if len(old_read_only_connections) > len(read_only_connections):
return build_error_response(request, 403, _('You are not allowed to remove read only connections'))
for connection in old_read_only_connections:
if connection not in read_only_connections:
return build_error_response(request, 403, _('You are not allowed to remove read only connections'))
workspace.wiringStatus = wiring_status
workspace.save()
return HttpResponse(status=204)
示例10: update
def update(self, request, workspace_id, tab_id):
tab = get_object_or_404(Tab.objects.select_related('workspace'), workspace__pk=workspace_id, pk=tab_id)
if tab.workspace.creator != request.user:
return build_error_response(request, 403, _('You are not allowed to update this workspace'))
user_workspace = UserWorkspace.objects.get(user__id=request.user.id, workspace__id=workspace_id)
if user_workspace.manager != '':
return build_error_response(request, 403, _('You are not allowed to update this workspace'))
data = parse_json_request(request)
if 'visible' in data:
visible = data['visible']
if isinstance(visible, string_types):
visible = visible.strip().lower()
if visible not in ('true', 'false'):
return build_error_response(request, 422, _('Invalid visible value'))
visible = visible == 'true'
elif not isinstance(visible, bool):
return build_error_response(request, 422, _('Invalid visible value'))
if visible:
#Only one visible tab
setVisibleTab(request.user, workspace_id, tab)
else:
tab.visible = False
if 'name' in data:
tab.name = data['name']
tab.save()
return HttpResponse(status=204)
示例11: process
def process(self, request):
if not request.user.is_superuser:
return build_error_response(request, 403, _("You don't have permission to switch current session user"))
user_info = parse_json_request(request)
if "username" not in user_info:
return build_error_response(request, 422, "Missing target user info")
user_id = get_object_or_404(User, username=user_info['username']).id
target_user = None
for backend in auth.get_backends():
try:
target_user = backend.get_user(user_id)
except:
continue
if target_user is None:
continue
# Annotate the user object with the path of the backend.
target_user.backend = "%s.%s" % (backend.__module__, backend.__class__.__name__)
break
if target_user is None:
raise Http404
auth.login(request, target_user)
return HttpResponse(status=204)
示例12: _parse_ac_request
def _parse_ac_request(request):
fileURL = None
file_contents = None
content_type = get_content_type(request)[0]
data = parse_json_request(request)
if 'url' not in data:
return build_error_response(request, 400, _('Missing widget URL'))
fileURL = data.get('url')
id_4CaaSt = data.get('4CaaStID')
if id_4CaaSt is None:
return build_error_response(request, 400, _('Missing 4CaaStID'))
if not isinstance(id_4CaaSt, string_types) or id_4CaaSt.strip() == '':
return build_error_response(request, 400, _('Invalid 4CaaStID'))
try:
downloaded_file = download_http_content(fileURL)
except:
return build_error_response(request, 409, _('Mashable application component could not be downloaded'))
downloaded_file = StringIO(downloaded_file)
file_contents = WgtFile(downloaded_file)
# Create a custom version of the resource
template = TemplateParser(file_contents.get_template())
template_info = template.get_resource_info()
template_info['name'] += '@' + id_4CaaSt
for pref_name, pref_value in six.iteritems(data.get('preferences', {})):
for widget_pref_index, widget_pref in enumerate(template_info['preferences']):
if widget_pref['name'] == pref_name:
template_info['preferences'][widget_pref_index]['readonly'] = True
template_info['preferences'][widget_pref_index]['value'] = pref_value
break
# Write a new Wgt file
new_file = StringIO()
zin = zipfile.ZipFile(downloaded_file, 'r')
zout = zipfile.ZipFile(new_file, 'w')
zout.writestr('config.xml', write_rdf_description(template_info))
for item in zin.infolist():
if item.filename == 'config.xml':
continue
zout.writestr(item, zin.read(item.filename))
zin.close()
zout.close()
file_contents = WgtFile(new_file)
return id_4CaaSt, file_contents, fileURL
示例13: update
def update(self, request, workspace_id):
workspace = get_object_or_404(Workspace, id=workspace_id)
if not request.user.is_superuser and workspace.creator != request.user:
return build_error_response(request, 403, _('You are not allowed to update this workspace'))
new_wiring_status = parse_json_request(request)
old_wiring_status = workspace.wiringStatus
# Check read only connections
old_read_only_connections = [connection for connection in old_wiring_status['connections'] if connection.get('readonly', False)]
new_read_only_connections = [connection for connection in new_wiring_status['connections'] if connection.get('readonly', False)]
if len(old_read_only_connections) > len(new_read_only_connections):
return build_error_response(request, 403, _('You are not allowed to remove or update read only connections'))
for connection in old_read_only_connections:
if connection not in new_read_only_connections:
return build_error_response(request, 403, _('You are not allowed to remove or update read only connections'))
# Check operator preferences
for operator_id, operator in six.iteritems(new_wiring_status['operators']):
if operator_id in old_wiring_status['operators']:
old_operator = old_wiring_status['operators'][operator_id]
added_preferences = set(operator['preferences'].keys()) - set(old_operator['preferences'].keys())
removed_preferences = set(old_operator['preferences'].keys()) - set(operator['preferences'].keys())
updated_preferences = set(operator['preferences'].keys()).intersection(old_operator['preferences'].keys())
else:
# New operator
added_preferences = operator['preferences'].keys()
removed_preferences = ()
updated_preferences = ()
for preference_name in added_preferences:
if operator['preferences'][preference_name].get('readonly', False) or operator['preferences'][preference_name].get('hidden', False):
return build_error_response(request, 403, _('Read only and hidden preferences cannot be created using this API'))
for preference_name in removed_preferences:
if old_operator['preferences'][preference_name].get('readonly', False) or old_operator['preferences'][preference_name].get('hidden', False):
return build_error_response(request, 403, _('Read only and hidden preferences cannot be removed'))
for preference_name in updated_preferences:
old_preference = old_operator['preferences'][preference_name]
new_preference = operator['preferences'][preference_name]
if old_preference.get('readonly', False) != new_preference.get('readonly', False) or old_preference.get('hidden', False) != new_preference.get('hidden', False):
return build_error_response(request, 403, _('Read only and hidden status cannot be changed using this API'))
if new_preference.get('readonly', False) and new_preference.get('value') != old_preference.get('value'):
return build_error_response(request, 403, _('Read only preferences cannot be updated'))
workspace.wiringStatus = new_wiring_status
workspace.save()
return HttpResponse(status=204)
示例14: patch
def patch(self, request, workspace_id):
workspace = get_object_or_404(Workspace, id=workspace_id)
old_wiring_status = workspace.wiringStatus
req = parse_json_request(request)
# Cant explicitly update missing operator preferences / properties
# Check if its modifying directly a preference / property
regex = re.compile(r'^/?operators/(?P<operator_id>[0-9]+)/(preferences/|properties/)', re.S)
for p in req:
try:
if p["op"] is "test":
continue
except:
return build_error_response(request, 400, _('Invalid JSON patch'))
result = regex.match(p["path"])
if result is not None:
try:
vendor, name, version = workspace.wiringStatus["operators"][result.group("operator_id")]["name"].split("/")
except:
raise Http404
# If the operator is missing -> 403
try:
CatalogueResource.objects.get(vendor=vendor, short_name=name, version=version)
except:
return build_error_response(request, 403, _('Missing operators variables cannot be updated'))
try:
new_wiring_status = jsonpatch.apply_patch(old_wiring_status, req)
except jsonpatch.JsonPointerException:
return build_error_response(request, 422, _('Failed to apply patch'))
except jsonpatch.InvalidJsonPatch:
return build_error_response(request, 400, _('Invalid JSON patch'))
if workspace.creator == request.user or request.user.is_superuser:
result = self.checkWiring(request, new_wiring_status, old_wiring_status, can_update_secure=True)
elif workspace.is_available_for(request.user):
result = self.checkMultiuserWiring(request, new_wiring_status, old_wiring_status, workspace.creator, can_update_secure=True)
else:
return build_error_response(request, 403, _('You are not allowed to update this workspace'))
if result is not True:
return result
workspace.wiringStatus = new_wiring_status
workspace.save()
return HttpResponse(status=204)
示例15: create
def create(self, request):
resources = parse_json_request(request)
result = []
for g in resources:
latest_resource_version = get_latest_resource_version(g["name"], g["vendor"])
if latest_resource_version:
# the resource is still in the catalogue
g["lastVersion"] = latest_resource_version.version
g["lastVersionURL"] = latest_resource_version.template_uri
result.append(g)
return HttpResponse(json.dumps({'resources': result}),
content_type='application/json; charset=UTF-8')