from abc import ABCMeta, abstractmethod from collections import namedtuple from six import add_metaclass class BlobUpload(namedtuple('BlobUpload', ['uuid', 'storage_metadata', 'location_name'])): """ BlobUpload represents a single upload of a blob in progress or previously started. """ @add_metaclass(ABCMeta) class BlobUploadCleanupWorkerDataInterface(object): """ Interface that represents all data store interactions required by the blob upload cleanup worker. """ @abstractmethod def get_stale_blob_upload(self, stale_threshold): """ Returns a BlobUpload that was created on or before the current date/time minus the stale threshold. If none, returns None. """ pass @abstractmethod def delete_blob_upload(self, blob_upload): """ Deletes a blob upload from the database. """ pass @abstractmethod def create_stale_upload_for_testing(self): """ Creates a new stale blob upload for testing. """ pass @abstractmethod def blob_upload_exists(self, upload_uuid): """ Returns True if a blob upload with the given UUID exists. """ pass