From 53dede8e166f93ada89dc01dabd0e7a151ff0c6d Mon Sep 17 00:00:00 2001 From: Cristian Date: Mon, 20 Jul 2020 08:39:46 -0500 Subject: [PATCH 1/3] fix: Remove imports causing circular import issues --- archivebox/logging.py | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/archivebox/logging.py b/archivebox/logging.py index 0bed5a30..859b7090 100644 --- a/archivebox/logging.py +++ b/archivebox/logging.py @@ -13,9 +13,6 @@ from datetime import datetime from dataclasses import dataclass from typing import Optional, List, Dict, Union, IO -from .index.schema import Link, ArchiveResult -from .index.json import to_json -from .index.csv import links_to_csv from .util import enforce_types from .config import ( ConfigDict, @@ -285,7 +282,7 @@ def log_archiving_finished(num_links: int): print(' archivebox server') -def log_link_archiving_started(link: Link, link_dir: str, is_new: bool): +def log_link_archiving_started(link, link_dir: str, is_new: bool): # [*] [2019-03-22 13:46:45] "Log Structured Merge Trees - ben stopford" # http://www.benstopford.com/2015/02/14/log-structured-merge-trees/ # > output/archive/1478739709 @@ -303,7 +300,7 @@ def log_link_archiving_started(link: Link, link_dir: str, is_new: bool): pretty_path(link_dir), )) -def log_link_archiving_finished(link: Link, link_dir: str, is_new: bool, stats: dict): +def log_link_archiving_finished(link, link_dir: str, is_new: bool, stats: dict): total = sum(stats.values()) if stats['failed'] > 0 : @@ -318,7 +315,7 @@ def log_archive_method_started(method: str): print(' > {}'.format(method)) -def log_archive_method_finished(result: ArchiveResult): +def log_archive_method_finished(result): """quote the argument with whitespace in a command so the user can copy-paste the outputted string directly to run the cmd """ @@ -367,6 +364,7 @@ def log_list_started(filter_patterns: Optional[List[str]], filter_type: str): print(' {}'.format(' '.join(filter_patterns or ()))) def log_list_finished(links): + from .index.csv import links_to_csv print() print('---------------------------------------------------------------------------------------------------') print(links_to_csv(links, cols=['timestamp', 'is_archived', 'num_outputs', 'url'], header=True, ljust=16, separator=' | ')) @@ -374,7 +372,7 @@ def log_list_finished(links): print() -def log_removal_started(links: List[Link], yes: bool, delete: bool): +def log_removal_started(links, yes: bool, delete: bool): print('{lightyellow}[i] Found {} matching URLs to remove.{reset}'.format(len(links), **ANSI)) if delete: file_counts = [link.num_outputs for link in links if os.path.exists(link.link_dir)] @@ -448,13 +446,15 @@ def printable_filesize(num_bytes: Union[int, float]) -> str: @enforce_types -def printable_folders(folders: Dict[str, Optional[Link]], +def printable_folders(folders, json: bool=False, csv: Optional[str]=None) -> str: if json: + from .index.json import to_json return to_json(folders.values(), indent=4, sort_keys=True) elif csv: + from .index.csv import links_to_csv return links_to_csv(folders.values(), cols=csv.split(','), header=True) return '\n'.join(f'{folder} {link}' for folder, link in folders.items()) From 75e5a6fcdcaa26bf9c3f873170a38b1b728115ec Mon Sep 17 00:00:00 2001 From: Cristian Date: Mon, 20 Jul 2020 09:11:17 -0500 Subject: [PATCH 2/3] fix: Add missing change to refactor related to circular imports --- archivebox/logging.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/archivebox/logging.py b/archivebox/logging.py index 859b7090..20c48985 100644 --- a/archivebox/logging.py +++ b/archivebox/logging.py @@ -410,7 +410,7 @@ def log_removal_finished(all_links: int, to_keep: int): def log_shell_welcome_msg(): - from . import list_subcommands + from .cli import list_subcommands print('{green}# ArchiveBox Imports{reset}'.format(**ANSI)) print('{green}from archivebox.core.models import Snapshot, User{reset}'.format(**ANSI)) From 834b33e6a8991737730cd9cab8d855636bf64bca Mon Sep 17 00:00:00 2001 From: Cristian Date: Mon, 20 Jul 2020 11:20:08 -0500 Subject: [PATCH 3/3] fix: Re-add typings with conditional import to avoid circular import issue --- archivebox/logging.py | 15 +++++++++------ 1 file changed, 9 insertions(+), 6 deletions(-) diff --git a/archivebox/logging.py b/archivebox/logging.py index 20c48985..361a1aec 100644 --- a/archivebox/logging.py +++ b/archivebox/logging.py @@ -11,7 +11,10 @@ from multiprocessing import Process from datetime import datetime from dataclasses import dataclass -from typing import Optional, List, Dict, Union, IO +from typing import Optional, List, Dict, Union, IO, TYPE_CHECKING + +if TYPE_CHECKING: + from .index.schema import Link, ArchiveResult from .util import enforce_types from .config import ( @@ -282,7 +285,7 @@ def log_archiving_finished(num_links: int): print(' archivebox server') -def log_link_archiving_started(link, link_dir: str, is_new: bool): +def log_link_archiving_started(link: "Link", link_dir: str, is_new: bool): # [*] [2019-03-22 13:46:45] "Log Structured Merge Trees - ben stopford" # http://www.benstopford.com/2015/02/14/log-structured-merge-trees/ # > output/archive/1478739709 @@ -300,7 +303,7 @@ def log_link_archiving_started(link, link_dir: str, is_new: bool): pretty_path(link_dir), )) -def log_link_archiving_finished(link, link_dir: str, is_new: bool, stats: dict): +def log_link_archiving_finished(link: "Link", link_dir: str, is_new: bool, stats: dict): total = sum(stats.values()) if stats['failed'] > 0 : @@ -315,7 +318,7 @@ def log_archive_method_started(method: str): print(' > {}'.format(method)) -def log_archive_method_finished(result): +def log_archive_method_finished(result: "ArchiveResult"): """quote the argument with whitespace in a command so the user can copy-paste the outputted string directly to run the cmd """ @@ -372,7 +375,7 @@ def log_list_finished(links): print() -def log_removal_started(links, yes: bool, delete: bool): +def log_removal_started(links: List["Link"], yes: bool, delete: bool): print('{lightyellow}[i] Found {} matching URLs to remove.{reset}'.format(len(links), **ANSI)) if delete: file_counts = [link.num_outputs for link in links if os.path.exists(link.link_dir)] @@ -446,7 +449,7 @@ def printable_filesize(num_bytes: Union[int, float]) -> str: @enforce_types -def printable_folders(folders, +def printable_folders(folders: Dict[str, Optional["Link"]], json: bool=False, csv: Optional[str]=None) -> str: if json: