diff --git a/scripts/rm.py b/scripts/rm.py new file mode 100755 index 00000000..3b2d0441 --- /dev/null +++ b/scripts/rm.py @@ -0,0 +1,141 @@ +#!/usr/bin/env python3 +# -*- coding: utf-8 -*- + +# Copyright 2025 Mike Fährmann +# +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License version 2 as +# published by the Free Software Foundation. + +"""Delete an extractor module""" + +import os +import re +import logging +import argparse +import util + +LOG = logging.getLogger("rm") + + +def remove_file(args, path): + try: + os.unlink(path) + except Exception: + pass + + +def remove_from_docs_configurationrst(args, path): + with util.lines(path) as lines: + needle = f'{args.category}`' + for idx, line in enumerate(lines): + if needle in line: + lines[idx] = "" + + rm = False + needle = f'extractor.{args.category}.' + for idx, line in enumerate(lines): + if rm: + lines[idx] = "" + if line == "\n": + rm -= 1 + elif line.startswith(needle): + lines[idx] = "" + rm = 2 + + +def remove_from_docs_gallerydlconf(args, path): + rm = False + needle = f' "{args.category}":\n' + + with util.lines(path) as lines: + for idx, line in enumerate(lines): + if rm: + lines[idx] = "" + if line.startswith(" }"): + break + elif line == needle: + lines[idx] = "" + rm = True + + +def remove_from_extractor_init(args, path): + needle = f' "{args.category}",\n' + + with util.lines(path) as lines: + try: + lines.remove(needle) + except ValueError: + pass + + +def remove_from_scripts_supportedsites(args, path): + pattern = re.compile( + r'\s+(\w+\[)?' + f'"{args.category}"' + r'(: (\{)?|\] = )') + + with util.lines(path) as lines: + for idx, line in enumerate(lines): + if pattern.match(line): + lines[idx] = "" + + +def update_docs_supportedsites(args, path): + import supportedsites + supportedsites.main() + + +def parse_args(args=None): + parser = argparse.ArgumentParser(args) + + parser.add_argument("-g", "--git", action="store_true") + parser.add_argument("CATEGORY") + + args = parser.parse_args() + args.category = args.cat = args.CATEGORY + return args + + +def main(): + args = parse_args() + + files = [ + (util.path("gallery_dl", "extractor", f"{args.category}.py"), + remove_file), + + (util.path("test", "results", f"{args.category}.py"), + remove_file), + + (util.path("docs", "configuration.rst"), + remove_from_docs_configurationrst), + + (util.path("docs", "gallery-dl.conf"), + remove_from_docs_gallerydlconf), + + (util.path("gallery_dl", "extractor", "__init__.py"), + remove_from_extractor_init), + + (util.path("scripts", "supportedsites.py"), + remove_from_scripts_supportedsites), + + (util.path("docs", "supportedsites.md"), + update_docs_supportedsites), + ] + + for path, func in files: + path_tr = util.trim(path) + LOG.info(path_tr) + + func(args, path) + + if args.git: + util.git("add", "--", path_tr) + + +if __name__ == "__main__": + logging.basicConfig( + level=logging.DEBUG, + format="[%(levelname)s] %(message)s", + ) + main()