55import argparse
66import os
77import sys
8+ from distutils .util import strtobool
89
910from pyms .crypt .fernet import Crypt
1011from pyms .flask .services .swagger import merge_swagger_file
1112from pyms .utils import check_package_exists , import_from , utils
13+ from pyms .config import create_conf_file
1214
1315
1416class Command :
@@ -18,6 +20,7 @@ class Command:
1820
1921 args = []
2022
23+ # flake8: noqa: C901
2124 def __init__ (self , * args , ** kwargs ):
2225 arguments = kwargs .get ("arguments" , False )
2326 autorun = kwargs .get ("autorun" , True )
@@ -53,6 +56,9 @@ def __init__(self, *args, **kwargs):
5356 "-f" , "--file" , default = os .path .join ('project' , 'swagger' , 'swagger.yaml' ),
5457 help = 'Swagger file path' )
5558
59+ parser_create_config = commands .add_parser ('create-config' , help = 'Generate a config file' )
60+ parser_create_config .add_argument ("create_config" , action = 'store_true' , help = 'Generate a config file' )
61+
5662 parser .add_argument ("-v" , "--verbose" , default = "" , type = str , help = "Verbose " )
5763
5864 args = parser .parse_args (arguments )
@@ -74,6 +80,10 @@ def __init__(self, *args, **kwargs):
7480 self .file = args .file
7581 except AttributeError :
7682 self .merge_swagger = False
83+ try :
84+ self .create_config = args .create_config
85+ except Exception :
86+ self .create_config = False
7787 self .verbose = len (args .verbose )
7888 if autorun : # pragma: no cover
7989 result = self .run ()
@@ -91,6 +101,8 @@ def run(self):
91101 if self .create_key :
92102 path = crypt ._loader .get_path_from_env () # pylint: disable=protected-access
93103 pwd = self .get_input ('Type a password to generate the key file: ' )
104+ # Should use yes_no_input insted of get input below
105+ # the result should be validated for Yes (Y|y) rather allowing anything other than 'n'
94106 generate_file = self .get_input ('Do you want to generate a file in {}? [Y/n]' .format (path ))
95107 generate_file = generate_file .lower () != "n"
96108 key = crypt .generate_key (pwd , generate_file )
@@ -99,6 +111,8 @@ def run(self):
99111 else :
100112 self .print_ok ("Key generated: {}" .format (key ))
101113 if self .encrypt :
114+ # Spoted Unhandle exceptions - The encrypt function throws FileDoesNotExistException, ValueError
115+ # which are not currently handled
102116 encrypted = crypt .encrypt (self .encrypt )
103117 self .print_ok ("Encrypted OK: {}" .format (encrypted ))
104118 if self .startproject :
@@ -113,8 +127,26 @@ def run(self):
113127 except FileNotFoundError as ex :
114128 self .print_error (ex .__str__ ())
115129 return False
130+ if self .create_config :
131+ use_requests = self .yes_no_input ('Do you want to use request' )
132+ use_swagger = self .yes_no_input ('Do you want to use swagger' )
133+ try :
134+ conf_file_path = create_conf_file (use_requests , use_swagger )
135+ self .print_ok (f'Config file "{ conf_file_path } " created' )
136+ return True
137+ except Exception as ex :
138+ self .print_error (ex .__str__ ())
139+ return False
116140 return True
117141
142+ def yes_no_input (self , msg = "" ): # pragma: no cover
143+ answer = input (utils .colored_text (f'{ msg } { "?" if not msg .endswith ("?" ) else "" } [Y/n] :' , utils .Colors .BLUE , True )) # nosec
144+ try :
145+ return strtobool (answer )
146+ except ValueError :
147+ self .print_error ('Invalid input, Please answer with a "Y" or "n"' )
148+ self .yes_no_input (msg )
149+
118150 @staticmethod
119151 def print_ok (msg = "" ):
120152 print (utils .colored_text (msg , utils .Colors .BRIGHT_GREEN , True ))
0 commit comments