@@ -13,6 +13,7 @@ class NaturalOrderGroup(click.Group):
1313
1414 @click.group(cls=NaturalOrderGroup)
1515 """
16+
1617 def list_commands (self , ctx ):
1718 """List command names as they are in commands dict.
1819
@@ -26,15 +27,16 @@ class CommaSeparatedText(click.ParamType):
2627 """
2728 Comma separated text
2829 """
30+
2931 def __init__ (self , dtype = click .STRING , simplify = False , length = None ):
3032 self .dtype = dtype
3133 self .dtype_name = _get_type_name (dtype )
3234 self .simplify = simplify
3335 self .length = length
3436 if length and length <= 3 :
35- self .name = ',' .join ([f' { self .dtype_name } ' ] * length )
37+ self .name = "," .join ([f" { self .dtype_name } " ] * length )
3638 else :
37- self .name = ' {}[,{}...]' .format (self .dtype_name , self .dtype_name )
39+ self .name = " {}[,{}...]" .format (self .dtype_name , self .dtype_name )
3840
3941 def convert (self , value , param , ctx ):
4042 """
@@ -67,23 +69,25 @@ def convert(self, value, param, ctx):
6769 if value is None :
6870 converted = None
6971 else :
70- converted = list (map (self .dtype , str (value ).split (',' )))
72+ converted = list (map (self .dtype , str (value ).split ("," )))
7173 if self .simplify and len (converted ) == 1 :
7274 converted = converted [0 ]
7375 except ValueError :
7476 self .fail (
75- '{} is not a valid comma separated list of {}' .format (
76- value , self .dtype_name ),
77+ "{} is not a valid comma separated list of {}" .format (
78+ value , self .dtype_name
79+ ),
7780 param ,
78- ctx
81+ ctx ,
7982 )
8083 if self .length :
8184 if len (converted ) != self .length :
8285 self .fail (
83- '{} is not a valid comma separated list of length {}' .format (
84- value , self .length ),
86+ "{} is not a valid comma separated list of length {}" .format (
87+ value , self .length
88+ ),
8589 param ,
86- ctx
90+ ctx ,
8791 )
8892 return converted
8993
@@ -92,8 +96,9 @@ class Dictionary(click.ParamType):
9296 """
9397 Text to be parsed as a python dict definition
9498 """
99+
95100 def __init__ (self , keys = None ):
96- self .name = ' TEXT:VAL[,TEXT:VAL...]'
101+ self .name = " TEXT:VAL[,TEXT:VAL...]"
97102 self .keys = keys
98103
99104 def convert (self , value , param , ctx ):
@@ -122,19 +127,19 @@ def convert(self, value, param, ctx):
122127 """
123128 try :
124129 converted = dict ()
125- for token in value .split (',' ):
126- if ':' not in token :
130+ for token in value .split ("," ):
131+ if ":" not in token :
127132 raise ValueError
128- key , _ , value = token .partition (':' )
133+ key , _ , value = token .partition (":" )
129134 if not key :
130135 raise ValueError
131136 if isinstance (self .keys , (list , tuple )) and key not in self .keys :
132- self .fail (f' { key } is not a valid key ({ self .keys } )' )
133- if value == ' None' :
137+ self .fail (f" { key } is not a valid key ({ self .keys } )" )
138+ if value == " None" :
134139 value = None
135- elif value .lower () == ' true' :
140+ elif value .lower () == " true" :
136141 value = True
137- elif value .lower () == ' false' :
142+ elif value .lower () == " false" :
138143 value = False
139144 else :
140145 try :
@@ -144,19 +149,15 @@ def convert(self, value, param, ctx):
144149 converted [key ] = value
145150 return converted
146151 except ValueError :
147- self .fail (
148- f'{ value } is not a valid python dict definition' ,
149- param ,
150- ctx
151- )
152+ self .fail (f"{ value } is not a valid python dict definition" , param , ctx )
152153
153154
154155def _get_type_name (obj ):
155- name = ' text'
156+ name = " text"
156157 try :
157- name = getattr (obj , ' name' )
158+ name = getattr (obj , " name" )
158159 except AttributeError :
159- name = getattr (obj , ' __name__' )
160+ name = getattr (obj , " __name__" )
160161 return name
161162
162163
@@ -181,8 +182,7 @@ def valid_limit(ctx, param, value):
181182 [0.0125, 0.0125]
182183 """
183184 if value [0 ] > value [1 ]:
184- param .type .fail (
185- 'lower limit must not exceed upper limit' , param , ctx )
185+ param .type .fail ("lower limit must not exceed upper limit" , param , ctx )
186186 return value
187187
188188
@@ -212,13 +212,13 @@ def valid_parameter_limits(ctx, param, value):
212212 """
213213 for val in value :
214214 if val [1 ] > val [2 ]:
215- param .type .fail (
216- 'lower limit must not exceed upper limit' , param , ctx )
215+ param .type .fail ("lower limit must not exceed upper limit" , param , ctx )
217216 return value
218217
219218
220219def mutually_exclusive_with (param_name ):
221- internal_name = param_name .strip ('-' ).replace ('-' , '_' ).lower ()
220+ internal_name = param_name .strip ("-" ).replace ("-" , "_" ).lower ()
221+
222222 def valid_mutually_exclusive (ctx , param , value ):
223223 try :
224224 other_value = ctx .params [internal_name ]
@@ -227,27 +227,35 @@ def valid_mutually_exclusive(ctx, param, value):
227227 if (value is None ) == (other_value is None ):
228228 param .type .fail (
229229 'mutually exclusive with "{}", one and only one must be '
230- ' specified.' .format (param_name ),
230+ " specified." .format (param_name ),
231231 param ,
232232 ctx ,
233233 )
234234 return value
235+
235236 return valid_mutually_exclusive
236237
237238
238239def required_by (param_name ):
239- internal_name = param_name .strip ('-' ).replace ('-' , '_' ).lower ()
240+ internal_name = param_name .strip ("-" ).replace ("-" , "_" ).lower ()
241+
240242 def required (ctx , param , value ):
241243 try :
242244 other_value = ctx .params [internal_name ]
243245 except KeyError :
244246 return value
245247 if other_value and not value :
246- param .type .fail ('required by "{}".' .format (param_name ), param , ctx ,)
248+ param .type .fail (
249+ 'required by "{}".' .format (param_name ),
250+ param ,
251+ ctx ,
252+ )
247253 return value
254+
248255 return required
249256
250257
251- if __name__ == ' __main__' :
258+ if __name__ == " __main__" :
252259 import doctest
260+
253261 sys .exit (doctest .testmod (verbose = True )[0 ])
0 commit comments