adesse

Signed testimonials for certifications.
Log | Files | Refs

commit 3eec507299ec75a8549a31a9c0edb3d1aea48b06
parent 8231accd68176ef423b3f5478e36fc1c6af37831
Author: lash <dev@holbrook.no>
Date:   Mon,  7 Sep 2026 19:03:50 -0600

Ensure deterministic uuid in store

Diffstat:
Madesse/store/base.py | 6++++++
Madesse/store/fs.py | 2+-
Madesse/util/xmp.py | 38+++++++++++++++++++++++---------------
3 files changed, 30 insertions(+), 16 deletions(-)

diff --git a/adesse/store/base.py b/adesse/store/base.py @@ -1,6 +1,9 @@ import hashlib import enum import uuid +import logging + +logg = logging.getLogger('store.base') @@ -28,6 +31,7 @@ def sha512_for_path(filepath): class BaseStore: default_canon = 'uuid' + default_sum = 'sha256' def __init__(self, seed=None): self.transformers = {} @@ -35,6 +39,7 @@ class BaseStore: seed = uuid.uuid4() self.seed = seed self.register_uuid() + getattr(self, 'register_' + self.default_sum)() self.canon = BaseStore.default_canon self.meta = {} @@ -56,6 +61,7 @@ class BaseStore: def uuid_for_sum(self, v): + v = self.transformers[BaseStore.default_sum](v) r = uuid.uuid5(self.seed, v) return r.bytes diff --git a/adesse/store/fs.py b/adesse/store/fs.py @@ -51,7 +51,7 @@ class FsStore(BaseStore): attachment.set_uu(v) dst = os.path.join(self.canon_path, v.hex()) shutil.copyfile(fp, dst) - logg.info('canon file to {}'.format(dst)) + logg.info('canon file to {} {}'.format(dst, v)) for k in self.transformers.keys(): v = self.transformers[k](fp) diff --git a/adesse/util/xmp.py b/adesse/util/xmp.py @@ -21,19 +21,27 @@ def _parse_xmp(xmp_file, resource_file, search_dir=None): f = None cont = True - fp = None - for d in search_dir: - if not cont: - break - fp = os.path.join(d, resource_file) - logg.debug('trying file {}'.format(fp)) - try: - f = open(fp, 'rb') - cont = False - logg.info('match on file {}'.format(fp)) - break - except FileNotFoundError: - pass + fp = resource_file + try: + f = open(fp, 'rb') + cont = False + logg.info('match on file {}'.format(fp)) + except FileNotFoundError: + pass + + if f == None: + for d in search_dir: + if not cont: + break + fp = os.path.join(d, resource_file) + logg.debug('trying file {}'.format(fp)) + try: + f = open(fp, 'rb') + cont = False + logg.info('match on file {}'.format(fp)) + break + except FileNotFoundError: + pass if f == None: raise FileNotFoundError() @@ -121,7 +129,7 @@ def get_tags(sbj, o): return r -def attachment_from_xmp(xml_file, resource_file=None, search_dir=None, uuidns=None): +def attachment_from_xmp(xml_file, resource_file=None, search_dir=None, uuidns=None, subject=None, opener=None): if search_dir == None: search_dir = ['.'] @@ -145,7 +153,7 @@ def attachment_from_xmp(xml_file, resource_file=None, search_dir=None, uuidns=No uu = None if uuidns != None: uu = uuid.uuid5(uuidns, sum_from_urn(z)) - r = Attachment(title, desc, date, mime, lang=default_lang, uu=uu) + r = Attachment(title, desc, date, mime, lang=default_lang, uu=uu, subject=subject, opener=opener) r.set_sum_from_urn(z) for v in get_tags(sbj, o): r.add_tag(v)