Support exports from outside the current directory
Marco Ricci

Marco Ricci commited on 2024-08-18 00:14:59
Zeige 1 geänderte Dateien mit 13 Einfügungen und 4 Löschungen.


In the storeroom exporter, pass the storeroom directory explicitly, and
open and glob all bucket files relative to this directory.
... ...
@@ -394,9 +394,14 @@ def decrypt_bucket_item(bucket_item: bytes, master_keys: MasterKeys) -> bytes:
394 394
 
395 395
 
396 396
 def decrypt_bucket_file(
397
-    filename: str, master_keys: MasterKeys
397
+    filename: str,
398
+    master_keys: MasterKeys,
399
+    *,
400
+    root_dir: str | bytes | os.PathLike = '.',
398 401
 ) -> Iterator[bytes]:
399
-    with open(filename, 'rb') as bucket_file:
402
+    with open(
403
+        os.path.join(os.fsdecode(root_dir), filename), 'rb'
404
+    ) as bucket_file:
400 405
         header_line = bucket_file.readline()
401 406
         try:
402 407
             header = json.loads(header_line)
... ...
@@ -501,8 +506,12 @@ def export_storeroom_data(
501 506
 
502 507
     config_structure: dict[str, Any] = {}
503 508
     json_contents: dict[str, bytes] = {}
504
-    for file in glob.glob('[01][0-9a-f]'):
505
-        bucket_contents = list(decrypt_bucket_file(file, master_keys))
509
+    for file in glob.glob(
510
+        '[01][0-9a-f]', root_dir=os.fsdecode(storeroom_path)
511
+    ):
512
+        bucket_contents = list(
513
+            decrypt_bucket_file(file, master_keys, root_dir=storeroom_path)
514
+        )
506 515
         bucket_index = json.loads(bucket_contents.pop(0))
507 516
         for pos, item in enumerate(bucket_index):
508 517
             json_contents[item] = bucket_contents[pos]
509 518