Project

Profile

Help

Story #2843

Updated by dkliban@redhat.com over 6 years ago

For an API user to create an Artifact, Pulp 3 needs to have the following: 
  
 - updated Artifact[0] model without a 'content' foreign key nor the 'relative_path' field. A uniqueness constraint should be added on the sha256 field. 
 - viewset that can handle CRD operations for Artifacts. It most likely needs to use the FileUploadParser[1] and a custom Django Upload Handler[2].  
 - 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 
 - POST request to the /api/v3/content/artifacts/ endpoint creates an Artifact. The body of the request contains multipart form data with the following: 
 > binary file - The file being uploaded 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 (digest) of the uploaded file is generated.  
 If a sha256 was specified in POST GET parameters, the generated hash is validated against the value specified as the POST GET parameter. If the values don't match a validation exception is raised.  
 If an Artifact with the same sha256 checksum already exists, a 400 response is returned an IntegrityError will be raised when trying to save the user. model.  
 When the model is saved, the file is written to MEDIA_ROOT/content/units/digest[0:2]/digest[2:] 
 After a successful save, a serialized version of the Artifact is returned. 
  
 - GET request to the /api/v3/content/artifacts/<artifact id> returns serialized Artifact 
  
 - DELETE request to the /api/v3/content/artifacts/<artifact 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 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 
 [1] http://www.django-rest-framework.org/api-guide/parsers/#fileuploadparser 
 [2] https://docs.djangoproject.com/en/1.11/topics/http/file-uploads/#upload-handlers

Back