From 08299abd2a01dc481b81e03f2585d06e81f0f590 Mon Sep 17 00:00:00 2001 From: Flo Greistorfer Date: Thu, 18 Jul 2024 09:17:55 +0200 Subject: [PATCH] added class constructor and regenerate now deletes .previews --- .version | 2 +- builder.py | 7 +++++- modules/argumentparser.py | 51 ++++++++++++++++++++++++++++----------- 3 files changed, 44 insertions(+), 16 deletions(-) diff --git a/.version b/.version index ecf00d9..1506473 100644 --- a/.version +++ b/.version @@ -1 +1 @@ -2.2.5 \ No newline at end of file +2.2.6 \ No newline at end of file diff --git a/builder.py b/builder.py index b1ac170..7025a7c 100755 --- a/builder.py +++ b/builder.py @@ -160,7 +160,9 @@ def get_total_folders(folder: str, _args: Args, _total: int = 0) -> int: items = sorted(os.listdir(folder)) for item in items: if item not in EXCLUDES and os.path.isdir(os.path.join(folder, item)): - if item not in _args.exclude_folders and not any(fnmatch.fnmatchcase(os.path.join(folder, item), exclude) for exclude in _args.exclude_folders): + if item not in _args.exclude_folders and not any( + fnmatch.fnmatchcase(os.path.join(folder, item), exclude) for exclude in _args.exclude_folders + ): _total = get_total_folders(os.path.join(folder, item), _args, _total) return _total @@ -181,6 +183,9 @@ def main() -> None: try: Path(lock_file).touch() + if args.regenerate_thumbnails: + if os.path.exists(os.path.join(args.root_directory, ".thumbnails")): + shutil.rmtree(os.path.join(args.root_directory, ".thumbnails")) os.makedirs(os.path.join(args.root_directory, ".thumbnails"), exist_ok=True) copy_static_files(args) diff --git a/modules/argumentparser.py b/modules/argumentparser.py index 04a6d6d..0d2ea7b 100644 --- a/modules/argumentparser.py +++ b/modules/argumentparser.py @@ -1,3 +1,4 @@ +from dataclasses import dataclass from typing import List, Optional import os import argparse @@ -10,6 +11,7 @@ DEFAULT_THEME_PATH = os.path.join(os.path.abspath(os.path.dirname(__file__).remo DEFAULT_AUTHOR = "Author" +@dataclass(init=True) class Args: """ A class to store command-line arguments for the script. @@ -58,6 +60,24 @@ class Args: use_fancy_folders: bool web_root_url: str + def to_dict(self) -> dict: + result: dict = {} + result["author_name"] = self.author_name + result["exclude_folders"] = self.exclude_folders + result["file_extensions"] = self.file_extensions + result["generate_webmanifest"] = self.generate_webmanifest + result["ignore_other_files"] = self.ignore_other_files + if self.license_type is not None: + result["license_type"] = self.license_type + result["non_interactive_mode"] = self.non_interactive_mode + result["regenerate_thumbnails"] = self.regenerate_thumbnails + result["root_directory"] = self.root_directory + result["site_title"] = self.site_title + result["theme_path"] = self.theme_path + result["use_fancy_folders"] = self.use_fancy_folders + result["web_root_url"] = self.web_root_url + return result + def parse_arguments(version: str) -> Args: """ @@ -73,6 +93,7 @@ def parse_arguments(version: str) -> Args: Args An instance of the Args class containing the parsed arguments. """ + # fmt: off parser = argparse.ArgumentParser(description="Generate HTML files for a static image hosting website.", formatter_class=RichHelpFormatter) parser.add_argument("--exclude-folder", help="Folders to exclude from processing, globs supported (can be specified multiple times).", action="append", dest="exclude_folders", metavar="FOLDER") parser.add_argument("--generate-help-preview", action=HelpPreviewAction, path="help.svg") @@ -90,18 +111,20 @@ def parse_arguments(version: str) -> Args: parser.add_argument("-t", "--site-title", help="Title of the image hosting site.", required=True, type=str, dest="site_title", metavar="TITLE") parser.add_argument("-w", "--web-root-url", help="Base URL of the web root for the image hosting site.", required=True, type=str, dest="web_root_url", metavar="URL") parsed_args = parser.parse_args() - _args = Args() - _args.author_name = parsed_args.author_name - _args.exclude_folders = parsed_args.exclude_folders - _args.file_extensions = parsed_args.file_extensions - _args.generate_webmanifest = parsed_args.generate_webmanifest - _args.ignore_other_files = parsed_args.ignore_other_files - _args.license_type = parsed_args.license_type - _args.non_interactive_mode = parsed_args.non_interactive_mode - _args.regenerate_thumbnails = parsed_args.regenerate_thumbnails - _args.root_directory = parsed_args.root_directory - _args.site_title = parsed_args.site_title - _args.theme_path = parsed_args.theme_path - _args.use_fancy_folders = parsed_args.use_fancy_folders - _args.web_root_url = parsed_args.web_root_url + # fmt: on + _args = Args( + author_name=parsed_args.author_name, + exclude_folders=parsed_args.exclude_folders, + file_extensions=parsed_args.file_extensions, + generate_webmanifest=parsed_args.generate_webmanifest, + ignore_other_files=parsed_args.ignore_other_files, + license_type=parsed_args.license_type, + non_interactive_mode=parsed_args.non_interactive_mode, + regenerate_thumbnails=parsed_args.regenerate_thumbnails, + root_directory=parsed_args.root_directory, + site_title=parsed_args.site_title, + theme_path=parsed_args.theme_path, + use_fancy_folders=parsed_args.use_fancy_folders, + web_root_url=parsed_args.web_root_url, + ) return _args