Project

Profile

Help

Story #2843

Updated by dkliban@redhat.com over 7 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].  
 Artifacts 
 - 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 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 (digest) of the uploaded file is generated.  
 If 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.  
 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