Story #2843
Updated by dkliban@redhat.com over 7 years ago
For an API user to create an Artifact, a file upload session, Pulp 3 needs to have the following: - updated Artifact[0] django model without to represent a 'content' foreign key nor the 'relative_path' field. A uniqueness constraint should be added on the sha256 field. file upload (possibly called FileUpload) with 'id' and 'file_path' fields - viewset that can handle CRD operations for Artifacts FileUpload model - serializer for the viewset which will return all serialized fields of the Artifact model. The file field should be it's full path on disk. - API endpoint at /api/v3/content/artifacts /api/v3/uploads/ - POST request to the /api/v3/content/artifacts/ /api/v3/uploads/ endpoint creates an Artifact. The body of the request contains the binary file data. This request also takes the following optional GET parameters: > size - The size of the file in bytes. > md5 - The MD5 checksum of the file. > sha1 - The SHA-1 checksum of the file. > sha224 - The SHA-224 checksum of the file. > sha256 - The SHA-256 checksum of the file. > sha384 - The SHA-384 checksum of the file. > sha512 - The SHA-512 checksum of the file. Before the model is saved, a SHA-256 checksum of the uploaded file is generated. If FileUpload instance and returns a sha256 was specified in GET parameters, the generated hash is validated against the value specified as the GET parameter. If the values don't match a validation exception is raised. If an Artifact with the same sha256 checksum already exists, an IntegrityError will be raised when trying to save the model. After a successful save, a serialized version of the Artifact is returned. FileUpload - GET request to the /api/v3/content/artifacts/<artifact /api/v3/uploads/<upload id> returns serialized Artifact FileUpload - DELETE request to the /api/v3/content/artifacts/<artifact /api/v3/uploads/<upload id>/ raises an exception if the Artifact is still associated with any ContentUnit. The exception should provide a list of content units still associated with the Artifact. If an exception is not raised, Artifact is removed deletes FileUpload from the database and the file is removed from disk. [0] https://github.com/pulp/pulp/blob/3.0-dev/platform/pulpcore/app/models/content.py#L72 at file_path