From b01323a2cada0b2fd8bf56665a4eef71b3a5845e Mon Sep 17 00:00:00 2001
From: Yannick DAYER <yannick.dayer@idiap.ch>
Date: Sun, 5 Feb 2023 05:10:51 +0100
Subject: [PATCH] [py] fix issues with listing protocol paths in tar

---
 .../pipelines/dataset/protocols/retrieve.py   | 23 +++++++++++--------
 1 file changed, 14 insertions(+), 9 deletions(-)

diff --git a/src/bob/pipelines/dataset/protocols/retrieve.py b/src/bob/pipelines/dataset/protocols/retrieve.py
index 9246b3e..8bab0d1 100644
--- a/src/bob/pipelines/dataset/protocols/retrieve.py
+++ b/src/bob/pipelines/dataset/protocols/retrieve.py
@@ -113,27 +113,32 @@ def list_protocol_paths(
     database_name: str,
     base_dir: Union[PathLike[str], str, None] = None,
     subdir: Union[PathLike[str], str] = "protocol",
-    database_filename: Optional[str] = None,
+    database_filename: Union[str, None] = None,
 ) -> list[Path]:
     """Returns the paths of each protocol in a database definition file."""
     if base_dir is None:
         base_dir = _get_local_data_directory()
     final_dir = Path(base_dir) / subdir
-    if database_filename is None:
-        final_dir /= database_name
-    else:
-        final_dir /= database_filename
+    final_dir /= (
+        database_name if database_filename is None else database_filename
+    )
 
     if archive.is_archive(final_dir):
         protocols = archive.list_dirs(final_dir, show_files=False)
-        archive_path, inner_dir = archive.path_and_subdir(final_dir)
-        if len(protocols) == 1 and protocols[0] == database_name:
+        if len(protocols) == 1 and protocols[0].name == database_name:
             protocols = archive.list_dirs(
                 final_dir, database_name, show_files=False
             )
-            inner_dir /= database_name
+
+        archive_path, inner_dir = archive.path_and_subdir(final_dir)
+        if inner_dir is None:
+            return [
+                Path(f"{archive_path.as_posix()}:{p.as_posix().lstrip('/')}")
+                for p in protocols
+            ]
+
         return [
-            Path(f"{archive_path.as_posix()}:{inner_dir.as_posix}/{p}")
+            Path(f"{archive_path.as_posix()}:{inner_dir.as_posix()}/{p.name}")
             for p in protocols
         ]
 
-- 
GitLab