def _store_obj(self, obj):
        key = self._generate_key(obj)
        document = self._resource_schema().dump(obj)

        for field in self._unique_values:
            # Check if a document already exists with a duplicate unique value
            if document[field] in [o[field] for o in self.objects.values()]:
                value = document[field]
                if not value:
                    continue

                msg = f"A duplicate value '{value}' exists for field '{field}'."
                error = types.DuplicateFieldError(
                    message=msg,
                    field=field,
                    duplicate_value=value,
                    conflicting_resource=None,
                )
                serialized_errors = [DuplicateFieldErrorSchema().dump(error)]
                raise CommercetoolsError(
                    msg,
                    errors=serialized_errors,
                    response=types.ErrorResponse(
                        status_code=400,
                        message=msg,
                        error=error.code,
                        errors=serialized_errors,
                    ),
                )

        self.objects[key] = document
        return document
 def _create_data_error_response(self, message, obj):
     return ErrorResponseSchema().dump(
         types.ErrorResponse(
             status_code=400,
             message=message,
             errors=[
                 types.ConcurrentModificationError(
                     message=message, current_version=obj["version"])
             ],
         ))
 def _create_version_error_response(self, version):
     return ErrorResponseSchema().dump(
         types.ErrorResponse(
             status_code=409,
             message="Version mismatch. Concurrent modification.",
             errors=[
                 types.ConcurrentModificationError(
                     message="Version mismatch. Concurrent modification.",
                     current_version=version,
                 )
             ],
         ))
 def get_by_container_key(self, request, container: str, key: str):
     id = (container, key)
     item = self.model.objects.get(id)
     if item:
         return create_response(request, json=item)
     else:
         content = schemas.ErrorResponseSchema().dumps(
             types.ErrorResponse(
                 status_code=404,
                 message=f"The CustomObject with ID '({container},{key})'",
                 errors=[
                     types.InvalidSubjectError(
                         code="InvalidSubject",
                         message=f"The CustomObject with ID '({container},{key}' was not found.",
                     )
                 ],
             )
         )
         return create_response(request, text=content, status_code=404)
    def create(self, request):
        obj = self._schema_draft().loads(request.body)

        if isinstance(obj.destination, types.SqsDestination):
            dest = obj.destination
            message = (
                "A test message could not be delivered to this destination: "
                "SQS %r in %r for %r. "
                "Please make sure your destination is correctly configured."
            ) % (dest.queue_url, dest.region, dest.access_key)
            error = types.ErrorResponse(
                status_code=400,
                message=message,
                errors=[types.InvalidInputError(message=message)],
            )
            error_data = schemas.ErrorResponseSchema().dumps(error).encode("utf-8")
            return create_response(request, content=error_data, status_code=400)

        data = self.model.add(obj)
        return create_response(request, json=data)
Exemplo n.º 6
0
 def post_load(self, data):
     return types.ErrorResponse(**data)