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)
def post_load(self, data): return types.ErrorResponse(**data)