Project

Profile

Help

Story #4072

closed

As a plugin writer I can have digest and size information validated and populated easily via a staticmethod

Added by bmbouter over 5 years ago. Updated over 4 years ago.

Status:
CLOSED - CURRENTRELEASE
Priority:
Normal
Assignee:
Category:
-
Sprint/Milestone:
Start date:
Due date:
% Done:

100%

Estimated time:
Platform Release:
Groomed:
No
Sprint Candidate:
No
Tags:
Sprint:
Quarter:

Description

Problem

While making an upload API for pulp_ansible, I receive only a sha256 from the user to validate the uploaded data. To save an Artifact I need the other digests and the size. This causes me to manually compute all the digest info and perform any validation.

This is going to be a common problem for plugin writers receiving Artifact data and not using the downloaders, e.g. upload.

Solution

Add a static method to Artifact named create_and_validate that can create an in-memory Artifact from an on-disk asset with the following signature:

def create_and_validate(file, expected_digests=None, expected_size=None):

These params are the same type/names as the ones used by BaseDownloader here

Usage

For example I can call it with:

my_artifact = Artifact.create_and_validate('/path/to/file', expected_digests={'sha256': 'long_digest_value_goes_here'})

Exception Raising

If the sha256 doesn't match, I expect it to raise a DigestValidationError or a SizeValidationError, just like the downloaders. See this docstring:

            :class:`~pulpcore.plugin.download.DigestValidationError`: When any of the
                ``expected_digest`` values don't match the digest of the data passed to
                :meth:`~pulpcore.plugin.download.BaseDownloader.handle_data`.
            :class:`~pulpcore.plugin.download.SizeValidationError`: When the
                ``expected_size`` value doesn't match the size of the data passed to
                :meth:`~pulpcore.plugin.download.BaseDownloader.handle_data`.

^ is from here

Also available in: Atom PDF