home · contact · privacy
Use argparse. master
authorPlom Heller <plom@plomlompom.com>
Tue, 25 Aug 2026 16:05:52 +0000 (18:05 +0200)
committerPlom Heller <plom@plomlompom.com>
Tue, 25 Aug 2026 16:05:52 +0000 (18:05 +0200)
src/run.py

index afcf6ede4baf6a25dc305e65d0325078bfa90ef7..88c20f840c969c75cb5ec2a9ab9244db0a8eeb99 100755 (executable)
@@ -2,8 +2,9 @@
 """Match command line calls to appropriate scripts."""
 
 # standard libs
 """Match command line calls to appropriate scripts."""
 
 # standard libs
+from argparse import ArgumentParser
 from subprocess import CalledProcessError, run as subprocess_run
 from subprocess import CalledProcessError, run as subprocess_run
-from sys import argv, exit as sys_exit
+from sys import exit as sys_exit
 # non-standard libs
 from plomlib.setup import dependency_hint
 try:
 # non-standard libs
 from plomlib.setup import dependency_hint
 try:
@@ -17,34 +18,45 @@ except ModuleNotFoundError as e:
     dependency_hint(e)
 
 
     dependency_hint(e)
 
 
+_PATH_UPGRADER = './upgrade_dep.sh'
+_CMD_SERVE = 'serve'
+_COMMANDS = {
+        'make_config': (
+            lambda _: Config().save_file()),
+        'create_db': (
+            lambda _: DbFile.create()),
+        'migrate_db': (
+            lambda _: DbFile(skip_validations=True).migrate(MIGRATIONS)),
+        _CMD_SERVE: (
+            lambda _: serve()),
+        'sync': (
+            lambda _: sync()),
+        'upgrade_dep': (
+            lambda arg: subprocess_run([_PATH_UPGRADER] + arg, check=True)),
+    }
+_UPGRADABLES = (
+        'yt-dlp',
+        'google-api-python-client'
+    )
+
+
 if __name__ == '__main__':
 if __name__ == '__main__':
+    parser = ArgumentParser()
+    parser.add_argument(
+            'command',
+            nargs='?',
+            choices=_COMMANDS.keys(),
+            default=_CMD_SERVE)
+    parser.add_argument(
+            'command_arg',
+            nargs='?',
+            choices=_UPGRADABLES,
+            default=_UPGRADABLES[0])
+    args = parser.parse_args()
     try:
     try:
-        match len(argv):
-            case 1:
-                serve()
-            case 2:
-                match argv[1]:
-                    case 'make_config':
-                        Config().save_file()
-                    case 'create_db':
-                        DbFile.create()
-                    case 'migrate_db':
-                        DbFile(skip_validations=True).migrate(MIGRATIONS)
-                    case 'serve':
-                        serve()
-                    case 'sync':
-                        sync()
-                    case _:
-                        raise HandledException('Unknown argument.')
-            case _:
-                if argv[1] == 'upgrade_dep':
-                    _PATH_UPGRADER = './upgrade_dep.sh'
-                    try:
-                        subprocess_run([_PATH_UPGRADER] + argv[2:], check=True)
-                    except CalledProcessError as e:
-                        sys_exit(e.returncode)
-                else:
-                    raise HandledException('Bad number of command arguments.')
+        _COMMANDS[args.command](args.command_arg)
+    except CalledProcessError as e:
+        sys_exit(e.returncode)
     except HandledException as e:
         print(e)
         sys_exit(1)
     except HandledException as e:
         print(e)
         sys_exit(1)