소스 검색

fix: Add notice for issues with index detail

Cristian 5 년 전
부모
커밋
71f5f03a20
2개의 변경된 파일15개의 추가작업 그리고 5개의 파일을 삭제
  1. 4 1
      archivebox/index/__init__.py
  2. 11 4
      archivebox/index/json.py

+ 4 - 1
archivebox/index/__init__.py

@@ -583,7 +583,10 @@ def fix_invalid_folder_locations(out_dir: str=OUTPUT_DIR) -> Tuple[List[str], Li
     for entry in os.scandir(os.path.join(out_dir, ARCHIVE_DIR_NAME)):
         if entry.is_dir(follow_symlinks=True):
             if os.path.exists(os.path.join(entry.path, 'index.json')):
-                link = parse_json_link_details(entry.path)
+                try:
+                    link = parse_json_link_details(entry.path)
+                except KeyError:
+                    link = None
                 if not link:
                     continue
 

+ 11 - 4
archivebox/index/json.py

@@ -19,6 +19,7 @@ from ..config import (
     DEPENDENCIES,
     JSON_INDEX_FILENAME,
     ARCHIVE_DIR_NAME,
+    ANSI
 )
 
 
@@ -53,9 +54,12 @@ def parse_json_main_index(out_dir: str=OUTPUT_DIR) -> Iterator[Link]:
                 try:
                     yield Link.from_json(link_json)
                 except KeyError:
-                    detail_index_path = Path(OUTPUT_DIR) / ARCHIVE_DIR_NAME / link_json['timestamp']
-                    yield parse_json_link_details(str(detail_index_path))
-
+                    try:
+                        detail_index_path = Path(f"{OUTPUT_DIR}/{ARCHIVE_DIR_NAME}/{link_json['timestamp']}")
+                        yield parse_json_link_details(str(detail_index_path))
+                    except KeyError: 
+                        print("    {lightyellow}! Failed to retrieve index from {}. The index may be corrupt.".format(detail_index_path, **ANSI))
+                        continue
     return ()
 
 @enforce_types
@@ -115,7 +119,10 @@ def parse_json_links_details(out_dir: str) -> Iterator[Link]:
     for entry in os.scandir(os.path.join(out_dir, ARCHIVE_DIR_NAME)):
         if entry.is_dir(follow_symlinks=True):
             if os.path.exists(os.path.join(entry.path, 'index.json')):
-                link = parse_json_link_details(entry.path)
+                try:
+                    link = parse_json_link_details(entry.path)
+                except KeyError:
+                    link = None
                 if link:
                     yield link