Browse Source

refactor: parse args via EnvDefaultArgparser

Fabian Peter Hammerle 5 years ago
parent
commit
5daf383bc2
1 changed files with 16 additions and 6 deletions
  1. 16 6
      pyftpd-sink

+ 16 - 6
pyftpd-sink

@@ -1,5 +1,6 @@
 #!/usr/bin/env python3
 
+import argparse
 import hashlib
 import os
 import pyftpdlib.authorizers
@@ -44,9 +45,18 @@ def serve(root_dir_path, username, password_sha256_hexdigest, control_port, pass
     server.serve_forever()
 
 
+class EnvDefaultArgparser(argparse.ArgumentParser):
+    def add_argument(self, *args, envvar=None, **kwargs):
+        if envvar:
+            envvar_value = os.environ.get(envvar, None)
+            if envvar_value:
+                kwargs['required'] = False
+                kwargs['default'] = envvar_value
+        super().add_argument(*args, **kwargs)
+
+
 def _init_argparser():
-    import argparse
-    argparser = argparse.ArgumentParser()
+    argparser = EnvDefaultArgparser()
     argparser.add_argument(
         '--root', '--root-dir',
         metavar='path',
@@ -58,16 +68,16 @@ def _init_argparser():
         '--user', '--username',
         metavar='username',
         dest='username',
-        required=not os.environ.get('FTP_USERNAME'),
-        default=os.environ.get('FTP_USERNAME'),
+        required=True,
+        envvar='FTP_USERNAME',
         help='default: env var $FTP_USERNAME',
     )
     argparser.add_argument(
         '--pwd-hash', '--password-hash',
         metavar='sha256_hexdigest',
         dest='password_sha256_hexdigest',
-        required=not os.environ.get('FTP_PASSWORD_SHA256'),
-        default=os.environ.get('FTP_PASSWORD_SHA256'),
+        required=True,
+        envvar='FTP_PASSWORD_SHA256',
         help='default: env var $FTP_PASSWORD_SHA256',
     )
     argparser.add_argument(