Source code for owmeta_core.data_trans.file_ds

from contextlib import contextmanager

from .. import BASE_CONTEXT
from ..datasource import Informational, DataSource


[docs]class FileDataSource(DataSource): ''' This DataSource represents a "file", essentially a sequence of bytes with a name Attributes ---------- source_file_path : :term:`path-like object` The file to commit for this datasource ''' class_context = BASE_CONTEXT md5 = Informational(display_name='MD5 hash') sha256 = Informational(display_name='SHA-256 hash') sha512 = Informational(display_name='SHA-512 hash') def __init__(self, *args, **kwargs): super(FileDataSource, self).__init__(*args, **kwargs) self.source_file_path = None
[docs] @contextmanager def file_contents(self): ''' Returns a :term:`file object` for reading data from the file ''' raise NotImplementedError()
[docs] def update_hash(self, algorithm): ''' Set a message digest property for the file Parameters ---------- algorithm : str The name of the property and algorithm to update ''' import hashlib hsh = hashlib.new(algorithm) with self.file_contents() as f: hsh.update(f.read()) getattr(self, algorithm).set(hsh.hexdigest())