1
1
# -*- coding: UTF-8 -*-
2
- import re
3
- from itertools import chain
4
- from termcolor import colored
5
- from tinyscript .helpers import is_function , BorderlessTable , Path
6
-
7
2
from .logger import *
8
3
9
4
@@ -40,7 +35,7 @@ def __delitem__(self, key):
40
35
self .console .reset ()
41
36
except AttributeError as err :
42
37
pass
43
- l .debug ("{ } => null". format ( key . name ) )
38
+ l .debug (f" { key . name } => null" )
44
39
45
40
def __getitem__ (self , key ):
46
41
""" Custom method for getting an item, returning the original value from the current Config instance or, if the
@@ -72,7 +67,7 @@ def __setitem__(self, key, value):
72
67
key = self ._setkey (key , value )
73
68
if not force and key .old_value == key .value :
74
69
try :
75
- l .debug ("{ } unchanged". format ( key . name ) )
70
+ l .debug (f" { key . name } unchanged" )
76
71
except AttributeError :
77
72
pass
78
73
return # stop here if the final value is unchanged
@@ -83,7 +78,7 @@ def __setitem__(self, key, value):
83
78
self .console .reset ()
84
79
except AttributeError as err :
85
80
pass
86
- l .success ("{ } => {}" . format ( key . name , value if force else key .value ) )
81
+ l .success (f" { key . name } => { value if force else key .value } " )
87
82
88
83
def __str__ (self ):
89
84
""" Custom string method. """
@@ -94,33 +89,35 @@ def __str__(self):
94
89
continue
95
90
r = ["N" , "Y" ][r ]
96
91
if v == "" :
92
+ from tinyscript .helpers import colored
97
93
n , v , r = map (lambda s : colored (s , "red" , attrs = ['bold' ]), [n , v , r ])
98
94
data .append ([n , v , r , d ])
99
95
if len (data ) > 1 :
96
+ from tinyscript .helpers import BorderlessTable
100
97
try :
101
98
prefix = self .console .opt_prefix
102
99
except AttributeError :
103
100
prefix = None
104
101
return BorderlessTable (data ).table if prefix is None else \
105
- BorderlessTable (data , "%s options" % prefix ).table
102
+ BorderlessTable (data , f" { prefix } options" ).table
106
103
return ""
107
104
108
105
def __run_callback (self , key , name ):
109
106
""" Method for executing a callback and updating the current value with its return value if any. """
110
- logger .detail ("{ } {} callback triggered". format ( key , name ) )
107
+ logger .detail (f" { key } { name } callback triggered" )
111
108
retval = None
112
109
if hasattr (self , "_last_error" ):
113
110
del self ._last_error
114
111
try :
115
- retval = getattr (key , "{ }_callback". format ( name ) )()
112
+ retval = getattr (key , f" { name } _callback" )()
116
113
except Exception as e :
117
114
self ._last_error = e
118
115
if True :#not isinstance(e, AttributeError):
119
116
raise
120
117
if retval is not None :
121
118
key .old_value = key .value
122
119
if not key .validate (retval ):
123
- raise ValueError ("Invalid value '{}'" . format ( retval ) )
120
+ raise ValueError (f "Invalid value '{ retval } '" )
124
121
self ._d [key .name ] = (key , retval )
125
122
126
123
def _getitem (self , key ):
@@ -159,7 +156,7 @@ def _setkey(self, key, value):
159
156
# then assign the new one if it is valid
160
157
self ._d [key .name ] = (key , value )
161
158
if value is not None and not key .validate (value ):
162
- raise ValueError ("Invalid value '{}' for key '{}'" . format ( value , key .name ) )
159
+ raise ValueError (f "Invalid value '{ value } ' for key '{ key .name } '" )
163
160
super (Config , self ).__setitem__ (key , value )
164
161
return key
165
162
@@ -181,6 +178,7 @@ def items(self, fail=True):
181
178
182
179
def keys (self , glob = False ):
183
180
""" Return string keys (like original dict). """
181
+ from itertools import chain
184
182
l = [k for k in self ._d .keys ()]
185
183
if glob :
186
184
for k in chain (self ._d .keys (), Config ._g .keys ()):
@@ -300,7 +298,7 @@ def __repr__(self):
300
298
301
299
def __str__ (self ):
302
300
""" Custom string method. """
303
- return "<{}[{}]>" . format ( self .name , [ "N" , "Y" ] [self .required ])
301
+ return f "<{ self .name } [ { 'NY' [self .required ]} ]>"
304
302
305
303
def __set_func (self , func , name , default_func = None ):
306
304
""" Set a function, e.g. for manipulating option's value. """
@@ -309,7 +307,7 @@ def __set_func(self, func, name, default_func=None):
309
307
if isinstance (func , type (lambda :0 )):
310
308
setattr (self , name , func .__get__ (self , self .__class__ ))
311
309
else :
312
- raise Exception ("Bad {} lambda" . format ( name ) )
310
+ raise Exception (f "Bad { name } lambda" )
313
311
314
312
def bind (self , parent ):
315
313
""" Register this instance as a key of the given Config or retrieve the already existing one. """
@@ -325,6 +323,7 @@ def bind(self, parent):
325
323
@property
326
324
def choices (self ):
327
325
""" Pre- or lazy-computed list of choices. """
326
+ from tinyscript .helpers import is_function
328
327
c = self ._choices
329
328
if not is_function (c ):
330
329
return c
@@ -344,7 +343,7 @@ def input(self):
344
343
if hasattr (self , "config" ):
345
344
return self .config [self ]
346
345
else :
347
- raise Exception ("Unbound option {}" . format ( self .name ) )
346
+ raise Exception (f "Unbound option { self .name } " )
348
347
349
348
@property
350
349
def module (self ):
@@ -368,10 +367,12 @@ def value(self):
368
367
if value == getattr (self , "default" , None ):
369
368
value = Config ._g .get (self .name , value )
370
369
if self .required and value is None :
371
- raise ValueError ("{} must be defined" .format (self .name ))
372
- try : # try to expand format variables using console's attributes
370
+ raise ValueError (f"{ self .name } must be defined" )
371
+ # try to expand format variables using console's attributes
372
+ from re import findall
373
+ try :
373
374
kw = {}
374
- for n in re . findall (r'\{([a-z]+)\}' , str (value )):
375
+ for n in findall (r'\{([a-z]+)\}' , str (value )):
375
376
kw [n ] = self .config .console .__dict__ .get (n , "" )
376
377
try :
377
378
value = value .format (** kw )
@@ -381,6 +382,7 @@ def value(self):
381
382
pass
382
383
# expand and resolve paths
383
384
if self .name .endswith ("FOLDER" ) or self .name .endswith ("WORKSPACE" ):
385
+ from tinyscript .helpers import Path
384
386
# this will ensure that every path is expanded
385
387
value = str (Path (value , expand = True ))
386
388
# convert common formats to their basic types
@@ -447,7 +449,7 @@ def __getattribute__(self, name):
447
449
return c .__getattribute__ (name )
448
450
except AttributeError :
449
451
continue
450
- raise AttributeError ("'ProxyConfig' object has no attribute '{}'" . format ( name ) )
452
+ raise AttributeError (f "'ProxyConfig' object has no attribute '{ name } '" )
451
453
452
454
def __getitem__ (self , key ):
453
455
""" Get method for returning the first occurrence of a key among the list of Config instances. """
0 commit comments