commit 3eec507299ec75a8549a31a9c0edb3d1aea48b06
parent 8231accd68176ef423b3f5478e36fc1c6af37831
Author: lash <dev@holbrook.no>
Date: Mon, 7 Sep 2026 19:03:50 -0600
Ensure deterministic uuid in store
Diffstat:
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)