本文整理汇总了Python中util.rest.parse_dict函数的典型用法代码示例。如果您正苦于以下问题:Python parse_dict函数的具体用法?Python parse_dict怎么用?Python parse_dict使用的例子?那么恭喜您, 这里精选的函数代码示例或许可以为您提供帮助。
在下文中一共展示了parse_dict函数的15个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的Python代码示例。
示例1: post
def post(self, request):
"""Creates a new recipe type and returns a link to the detail URL
:param request: the HTTP POST request
:type request: :class:`rest_framework.request.Request`
:rtype: :class:`rest_framework.response.Response`
:returns: the HTTP response to send back to the user
"""
name = rest_util.parse_string(request, 'name')
version = rest_util.parse_string(request, 'version')
title = rest_util.parse_string(request, 'title', default_value=name)
description = rest_util.parse_string(request, 'description', required=False)
definition_dict = rest_util.parse_dict(request, 'definition')
# Check for optional trigger rule parameters
trigger_rule_dict = rest_util.parse_dict(request, 'trigger_rule', required=False)
if (('type' in trigger_rule_dict and 'configuration' not in trigger_rule_dict) or
('type' not in trigger_rule_dict and 'configuration' in trigger_rule_dict)):
raise BadParameter('Trigger type and configuration are required together.')
is_active = trigger_rule_dict['is_active'] if 'is_active' in trigger_rule_dict else True
# Attempt to look up the trigger handler for the type
rule_handler = None
if trigger_rule_dict and 'type' in trigger_rule_dict:
try:
rule_handler = trigger_handler.get_trigger_rule_handler(trigger_rule_dict['type'])
except InvalidTriggerType as ex:
logger.exception('Invalid trigger type for new recipe type: %s', name)
raise BadParameter(unicode(ex))
try:
with transaction.atomic():
# Validate the recipe definition
recipe_def = RecipeDefinition(definition_dict)
# Attempt to create the trigger rule
trigger_rule = None
if rule_handler and 'configuration' in trigger_rule_dict:
trigger_rule = rule_handler.create_trigger_rule(trigger_rule_dict['configuration'], name, is_active)
# Create the recipe type
recipe_type = RecipeType.objects.create_recipe_type(name, version, title, description, recipe_def,
trigger_rule)
except (InvalidDefinition, InvalidTriggerType, InvalidTriggerRule, InvalidRecipeConnection) as ex:
logger.exception('Unable to create new recipe type: %s', name)
raise BadParameter(unicode(ex))
# Fetch the full recipe type with details
try:
recipe_type = RecipeType.objects.get_details(recipe_type.id)
except RecipeType.DoesNotExist:
raise Http404
url = urlresolvers.reverse('recipe_type_details_view', args=[recipe_type.id])
serializer = RecipeTypeDetailsSerializer(recipe_type)
return Response(serializer.data, status=status.HTTP_201_CREATED, headers=dict(location=url))
示例2: post
def post(self, request):
"""Queue a recipe and returns the new job information in JSON form
:param request: the HTTP POST request
:type request: :class:`rest_framework.request.Request`
:rtype: :class:`rest_framework.response.Response`
:returns: the HTTP response to send back to the user
"""
recipe_type_id = rest_util.parse_int(request, 'recipe_type_id')
recipe_data = rest_util.parse_dict(request, 'recipe_data', {})
try:
recipe_type = RecipeType.objects.get(pk=recipe_type_id)
except RecipeType.DoesNotExist:
raise Http404
try:
handler = Queue.objects.queue_new_recipe_for_user(recipe_type, RecipeData(recipe_data))
except InvalidRecipeData as err:
return Response('Invalid recipe data: ' + unicode(err), status=status.HTTP_400_BAD_REQUEST)
try:
recipe = Recipe.objects.get_details(handler.recipe.id)
except Recipe.DoesNotExist:
raise Http404
serializer = self.get_serializer(recipe)
recipe_url = reverse('recipe_details_view', args=[recipe.id], request=request)
return Response(serializer.data, status=status.HTTP_201_CREATED, headers=dict(location=recipe_url))
示例3: create
def create(self, request):
"""Creates a new Strike process and returns a link to the detail URL
:param request: the HTTP POST request
:type request: :class:`rest_framework.request.Request`
:rtype: :class:`rest_framework.response.Response`
:returns: the HTTP response to send back to the user
"""
name = rest_util.parse_string(request, 'name')
title = rest_util.parse_string(request, 'title', required=False)
description = rest_util.parse_string(request, 'description', required=False)
configuration = rest_util.parse_dict(request, 'configuration')
try:
strike = Strike.objects.create_strike(name, title, description, configuration)
except InvalidStrikeConfiguration as ex:
raise BadParameter('Strike configuration invalid: %s' % unicode(ex))
# Fetch the full strike process with details
try:
strike = Strike.objects.get_details(strike.id)
except Strike.DoesNotExist:
raise Http404
serializer = StrikeDetailsSerializer(strike)
strike_url = urlresolvers.reverse('strike_details_view', args=[strike.id])
return Response(serializer.data, status=status.HTTP_201_CREATED, headers=dict(location=strike_url))
示例4: create
def create(self, request):
"""Creates a new Workspace and returns it in JSON form
:param request: the HTTP POST request
:type request: :class:`rest_framework.request.Request`
:rtype: :class:`rest_framework.response.Response`
:returns: the HTTP response to send back to the user
"""
name = rest_util.parse_string(request, "name")
title = rest_util.parse_string(request, "title", required=False)
description = rest_util.parse_string(request, "description", required=False)
json_config = rest_util.parse_dict(request, "json_config")
base_url = rest_util.parse_string(request, "base_url", required=False)
is_active = rest_util.parse_bool(request, "is_active", default_value=True, required=False)
try:
workspace = Workspace.objects.create_workspace(name, title, description, json_config, base_url, is_active)
except InvalidWorkspaceConfiguration as ex:
logger.exception("Unable to create new workspace: %s", name)
raise BadParameter(unicode(ex))
# Fetch the full workspace with details
try:
workspace = Workspace.objects.get_details(workspace.id)
except Workspace.DoesNotExist:
raise Http404
serializer = WorkspaceDetailsSerializer(workspace)
workspace_url = reverse("workspace_details_view", args=[workspace.id], request=request)
return Response(serializer.data, status=status.HTTP_201_CREATED, headers=dict(location=workspace_url))
示例5: post
def post(self, request):
"""Queue a recipe and returns the new job information in JSON form
:param request: the HTTP POST request
:type request: :class:`rest_framework.request.Request`
:rtype: :class:`rest_framework.response.Response`
:returns: the HTTP response to send back to the user
"""
recipe_type_id = rest_util.parse_int(request, 'recipe_type_id')
recipe_data = rest_util.parse_dict(request, 'recipe_data', {})
try:
recipe_type = RecipeType.objects.get(pk=recipe_type_id)
except RecipeType.DoesNotExist:
raise Http404
try:
recipe_id = Queue.objects.queue_new_recipe_for_user(recipe_type, recipe_data)
except InvalidData:
return Response('Invalid recipe information.', status=status.HTTP_400_BAD_REQUEST)
recipe_details = Recipe.objects.get_details(recipe_id)
serializer = RecipeDetailsSerializer(recipe_details, context={'request': request})
recipe_url = urlresolvers.reverse('recipe_details_view', args=[recipe_id])
return Response(serializer.data, status=status.HTTP_201_CREATED, headers=dict(location=recipe_url))
示例6: patch
def patch(self, request, workspace_id):
"""Edits an existing workspace and returns the updated details
:param request: the HTTP GET request
:type request: :class:`rest_framework.request.Request`
:param workspace_id: The ID for the workspace.
:type workspace_id: int encoded as a str
:rtype: :class:`rest_framework.response.Response`
:returns: the HTTP response to send back to the user
"""
title = rest_util.parse_string(request, "title", required=False)
description = rest_util.parse_string(request, "description", required=False)
json_config = rest_util.parse_dict(request, "json_config", required=False)
base_url = rest_util.parse_string(request, "base_url", required=False)
is_active = rest_util.parse_string(request, "is_active", required=False)
try:
Workspace.objects.edit_workspace(workspace_id, title, description, json_config, base_url, is_active)
workspace = Workspace.objects.get_details(workspace_id)
except Workspace.DoesNotExist:
raise Http404
except InvalidWorkspaceConfiguration as ex:
logger.exception("Unable to edit workspace: %s", workspace_id)
raise BadParameter(unicode(ex))
serializer = self.get_serializer(workspace)
return Response(serializer.data)
示例7: patch
def patch(self, request, strike_id):
"""Edits an existing Strike process and returns the updated details
:param request: the HTTP GET request
:type request: :class:`rest_framework.request.Request`
:param strike_id: The ID of the Strike process
:type strike_id: int encoded as a str
:rtype: :class:`rest_framework.response.Response`
:returns: the HTTP response to send back to the user
"""
title = rest_util.parse_string(request, 'title', required=False)
description = rest_util.parse_string(request, 'description', required=False)
configuration = rest_util.parse_dict(request, 'configuration', required=False)
try:
Strike.objects.edit_strike(strike_id, title, description, configuration)
strike = Strike.objects.get_details(strike_id)
except Strike.DoesNotExist:
raise Http404
except InvalidStrikeConfiguration as ex:
logger.exception('Unable to edit Strike process: %s', strike_id)
raise BadParameter(unicode(ex))
serializer = self.get_serializer(strike)
return Response(serializer.data)
示例8: patch
def patch(self, request, job_type_id):
'''Modify job type info with a subset of fields
:param request: the HTTP GET request
:type request: :class:`rest_framework.request.Request`
:param job_type_id: The ID for the job type.
:type job_type_id: int encoded as a str
:rtype: :class:`rest_framework.response.Response`
:returns: the HTTP response to send back to the user
'''
# Validate that no extra fields are included
rest_util.check_update(request, [u'error_mapping', u'is_paused'])
# Validate JSON
error_mapping = rest_util.parse_dict(request, u'error_mapping', required=False)
is_paused = rest_util.parse_bool(request, u'is_paused', required=False)
if error_mapping is not None:
try:
ErrorInterface(error_mapping)
except InvalidInterfaceDefinition:
return Response(u'Input failed schema validation.', status=status.HTTP_400_BAD_REQUEST)
try:
if error_mapping is not None:
JobType.objects.update_error_mapping(error_mapping, job_type_id)
if is_paused is not None:
Queue.objects.update_job_type_pause(job_type_id, is_paused)
job_type = JobType.objects.get_details(job_type_id)
serializer = JobTypeDetailsSerializer(job_type)
return Response(serializer.data, status=status.HTTP_200_OK)
except JobType.DoesNotExist:
raise Http404
示例9: test_parse_dict
def test_parse_dict(self):
"""Tests parsing a dictionary."""
result = {
'name': 'value',
}
request = MagicMock(Request)
request.query_params = QueryDict('', mutable=True)
request.query_params.update({
'test': result,
})
self.assertDictEqual(rest_util.parse_dict(request, 'test'), result)
示例10: test_parse_dict
def test_parse_dict(self):
'''Tests parsing a dictionary.'''
result = {
'name': 'value',
}
request = MagicMock(Request)
request.QUERY_PARAMS = QueryDict('', mutable=True)
request.QUERY_PARAMS.update({
'test': result,
})
self.assertDictEqual(rest_util.parse_dict(request, 'test'), result)
示例11: post
def post(self, request):
'''Validates job and recipe configuration to make sure it can be imported.
:param request: the HTTP POST request
:type request: :class:`rest_framework.request.Request`
:rtype: :class:`rest_framework.response.Response`
:returns: the HTTP response to send back to the user
'''
import_dict = rest_util.parse_dict(request, 'import')
try:
warnings = importer.validate_config(import_dict)
except InvalidConfiguration as ex:
logger.exception('Unable to validate import configuration.')
raise BadParameter(unicode(ex))
results = [{'id': w.key, 'details': w.details} for w in warnings]
return Response({'warnings': results}, status=status.HTTP_200_OK)
示例12: post
def post(self, request):
'''Creates a new Strike process and returns its ID in JSON form
:param request: the HTTP POST request
:type request: :class:`rest_framework.request.Request`
:rtype: :class:`rest_framework.response.Response`
:returns: the HTTP response to send back to the user
'''
name = rest_util.parse_string(request, 'name')
title = rest_util.parse_string(request, 'title', required=False)
description = rest_util.parse_string(request, 'description', required=False)
configuration = rest_util.parse_dict(request, 'configuration')
try:
strike = Strike.objects.create_strike_process(name, title, description, configuration)
except InvalidStrikeConfiguration:
raise BadParameter('Configuration failed to validate.')
return Response({'strike_id': strike.id})
示例13: post
def post(self, request):
"""Imports job and recipe configuration and updates the corresponding models.
:param request: the HTTP POST request
:type request: :class:`rest_framework.request.Request`
:rtype: :class:`rest_framework.response.Response`
:returns: the HTTP response to send back to the user
"""
import_dict = rest_util.parse_dict(request, 'import')
try:
warnings = importer.import_config(import_dict)
except InvalidConfiguration as ex:
logger.exception('Unable to import configuration.')
raise BadParameter(unicode(ex))
results = [{'id': w.key, 'details': w.details} for w in warnings]
return Response({'warnings': results})
示例14: test_parse_dict_optional
def test_parse_dict_optional(self):
"""Tests parsing an optional dict with no default value."""
request = MagicMock(Request)
request.query_params = QueryDict('', mutable=True)
self.assertDictEqual(rest_util.parse_dict(request, 'test', required=False), {})
示例15: patch
def patch(self, request, job_type_id):
"""Edits an existing job type and returns the updated details
:param request: the HTTP GET request
:type request: :class:`rest_framework.request.Request`
:param job_type_id: The ID for the job type.
:type job_type_id: int encoded as a str
:rtype: :class:`rest_framework.response.Response`
:returns: the HTTP response to send back to the user
"""
# Validate the job interface
interface_dict = rest_util.parse_dict(request, 'interface', required=False)
interface = None
try:
if interface_dict:
interface = JobInterface(interface_dict)
except InvalidInterfaceDefinition as ex:
raise BadParameter('Job type interface invalid: %s' % unicode(ex))
# Validate the error mapping
error_dict = rest_util.parse_dict(request, 'error_mapping', required=False)
error_mapping = None
try:
if error_dict:
error_mapping = ErrorInterface(error_dict)
error_mapping.validate()
except InvalidInterfaceDefinition as ex:
raise BadParameter('Job type error mapping invalid: %s' % unicode(ex))
# Check for optional trigger rule parameters
trigger_rule_dict = rest_util.parse_dict(request, 'trigger_rule', required=False)
if (('type' in trigger_rule_dict and 'configuration' not in trigger_rule_dict) or
('type' not in trigger_rule_dict and 'configuration' in trigger_rule_dict)):
raise BadParameter('Trigger type and configuration are required together.')
is_active = trigger_rule_dict['is_active'] if 'is_active' in trigger_rule_dict else True
remove_trigger_rule = rest_util.has_params(request, 'trigger_rule') and not trigger_rule_dict
# Fetch the current job type model
try:
job_type = JobType.objects.select_related('trigger_rule').get(pk=job_type_id)
except JobType.DoesNotExist:
raise Http404
# Attempt to look up the trigger handler for the type
rule_handler = None
if trigger_rule_dict and 'type' in trigger_rule_dict:
try:
rule_handler = trigger_handler.get_trigger_rule_handler(trigger_rule_dict['type'])
except InvalidTriggerType as ex:
logger.exception('Invalid trigger type for job type: %i', job_type_id)
raise BadParameter(unicode(ex))
# Extract the fields that should be updated as keyword arguments
extra_fields = {}
base_fields = {'name', 'version', 'interface', 'trigger_rule', 'error_mapping'}
for key, value in request.data.iteritems():
if key not in base_fields and key not in JobType.UNEDITABLE_FIELDS:
extra_fields[key] = value
try:
from recipe.configuration.definition.exceptions import InvalidDefinition
except:
logger.exception('Failed to import higher level recipe application.')
pass
try:
with transaction.atomic():
# Attempt to create the trigger rule
trigger_rule = None
if rule_handler and 'configuration' in trigger_rule_dict:
trigger_rule = rule_handler.create_trigger_rule(trigger_rule_dict['configuration'],
job_type.name, is_active)
# Update the active state separately if that is only given trigger field
if not trigger_rule and job_type.trigger_rule and 'is_active' in trigger_rule_dict:
job_type.trigger_rule.is_active = is_active
job_type.trigger_rule.save()
# Edit the job type
JobType.objects.edit_job_type(job_type_id, interface, trigger_rule, remove_trigger_rule, error_mapping,
**extra_fields)
except (InvalidJobField, InvalidTriggerType, InvalidTriggerRule, InvalidConnection, InvalidDefinition,
ValueError) as ex:
logger.exception('Unable to update job type: %i', job_type_id)
raise BadParameter(unicode(ex))
# Fetch the full job type with details
try:
job_type = JobType.objects.get_details(job_type.id)
except JobType.DoesNotExist:
raise Http404
serializer = self.get_serializer(job_type)
return Response(serializer.data)