5
5
import argparse
6
6
import os
7
7
import sys
8
+ from distutils .util import strtobool
8
9
9
10
from pyms .crypt .fernet import Crypt
10
11
from pyms .flask .services .swagger import merge_swagger_file
11
12
from pyms .utils import check_package_exists , import_from , utils
13
+ from pyms .config import create_conf_file
12
14
13
15
14
16
class Command :
@@ -18,6 +20,7 @@ class Command:
18
20
19
21
args = []
20
22
23
+ # flake8: noqa: C901
21
24
def __init__ (self , * args , ** kwargs ):
22
25
arguments = kwargs .get ("arguments" , False )
23
26
autorun = kwargs .get ("autorun" , True )
@@ -53,6 +56,9 @@ def __init__(self, *args, **kwargs):
53
56
"-f" , "--file" , default = os .path .join ('project' , 'swagger' , 'swagger.yaml' ),
54
57
help = 'Swagger file path' )
55
58
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
+
56
62
parser .add_argument ("-v" , "--verbose" , default = "" , type = str , help = "Verbose " )
57
63
58
64
args = parser .parse_args (arguments )
@@ -74,6 +80,10 @@ def __init__(self, *args, **kwargs):
74
80
self .file = args .file
75
81
except AttributeError :
76
82
self .merge_swagger = False
83
+ try :
84
+ self .create_config = args .create_config
85
+ except Exception :
86
+ self .create_config = False
77
87
self .verbose = len (args .verbose )
78
88
if autorun : # pragma: no cover
79
89
result = self .run ()
@@ -91,6 +101,8 @@ def run(self):
91
101
if self .create_key :
92
102
path = crypt ._loader .get_path_from_env () # pylint: disable=protected-access
93
103
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'
94
106
generate_file = self .get_input ('Do you want to generate a file in {}? [Y/n]' .format (path ))
95
107
generate_file = generate_file .lower () != "n"
96
108
key = crypt .generate_key (pwd , generate_file )
@@ -99,6 +111,8 @@ def run(self):
99
111
else :
100
112
self .print_ok ("Key generated: {}" .format (key ))
101
113
if self .encrypt :
114
+ # Spoted Unhandle exceptions - The encrypt function throws FileDoesNotExistException, ValueError
115
+ # which are not currently handled
102
116
encrypted = crypt .encrypt (self .encrypt )
103
117
self .print_ok ("Encrypted OK: {}" .format (encrypted ))
104
118
if self .startproject :
@@ -113,8 +127,26 @@ def run(self):
113
127
except FileNotFoundError as ex :
114
128
self .print_error (ex .__str__ ())
115
129
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
116
140
return True
117
141
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
+
118
150
@staticmethod
119
151
def print_ok (msg = "" ):
120
152
print (utils .colored_text (msg , utils .Colors .BRIGHT_GREEN , True ))
0 commit comments