4
4
from pathlib import Path
5
5
import re
6
6
import shlex
7
- from typing import Any , List , Dict , Optional , TextIO , Tuple , Type , TypeVar , Union
7
+ from typing import Any , Optional , TextIO , TypeVar , Union
8
8
from typing import overload
9
9
10
10
import yaml
15
15
from .dockerutil import make_vol_opt
16
16
17
17
CfgNode = Any
18
- CfgData = Dict [str , CfgNode ]
19
- Environment = Dict [str , str ]
18
+ CfgData = dict [str , CfgNode ]
19
+ Environment = dict [str , str ]
20
20
_T = TypeVar ("_T" )
21
21
22
22
VOLUME_NAME_PATTERN = re .compile (r"^[a-zA-Z0-9][a-zA-Z0-9_.-]+$" )
@@ -59,7 +59,7 @@ class OverrideStr(str, OverrideMixin):
59
59
# http://stackoverflow.com/a/9577670
60
60
class Loader (yaml .SafeLoader ):
61
61
_root : Path # directory containing the loaded document
62
- _cache : Dict [Path , Any ] # document path => document
62
+ _cache : dict [Path , Any ] # document path => document
63
63
64
64
def __init__ (self , stream : TextIO ):
65
65
if not hasattr (self , "_root" ):
@@ -68,7 +68,7 @@ def __init__(self, stream: TextIO):
68
68
super ().__init__ (stream )
69
69
70
70
@staticmethod
71
- def _rooted_loader (root : Path ) -> Type [Loader ]:
71
+ def _rooted_loader (root : Path ) -> type [Loader ]:
72
72
"""Get a Loader class with _root set to root"""
73
73
74
74
class RootedLoader (Loader ):
@@ -160,7 +160,7 @@ def override(self, node: yaml.nodes.Node) -> OverrideMixin:
160
160
Loader .add_constructor ("!override" , Loader .override )
161
161
162
162
163
- def find_config () -> Tuple [Path , Path , ScubaConfig ]:
163
+ def find_config () -> tuple [Path , Path , ScubaConfig ]:
164
164
"""Search up the directory hierarchy for .scuba.yml
165
165
166
166
Returns: path, rel, config on success, or None if not found
@@ -218,7 +218,7 @@ def _expand_env_vars(in_str: str) -> str:
218
218
) from ve
219
219
220
220
221
- def _process_script_node (node : CfgNode , name : str ) -> List [str ]:
221
+ def _process_script_node (node : CfgNode , name : str ) -> list [str ]:
222
222
"""Process a script-type node
223
223
224
224
Args:
@@ -274,7 +274,7 @@ def _process_environment(node: CfgNode, name: str) -> Environment:
274
274
return result
275
275
276
276
277
- def _get_nullable_str (data : Dict [str , Any ], key : str ) -> Optional [str ]:
277
+ def _get_nullable_str (data : dict [str , Any ], key : str ) -> Optional [str ]:
278
278
# N.B. We can't use data.get() here, because that might return
279
279
# None, leading to ambiguity between the key being absent or set
280
280
# to a null value.
@@ -303,7 +303,7 @@ def _get_entrypoint(data: CfgData) -> Optional[str]:
303
303
return _get_nullable_str (data , "entrypoint" )
304
304
305
305
306
- def _get_docker_args (data : CfgData ) -> Optional [List [str ]]:
306
+ def _get_docker_args (data : CfgData ) -> Optional [list [str ]]:
307
307
args_str = _get_nullable_str (data , "docker_args" )
308
308
if args_str is None :
309
309
return None
@@ -319,7 +319,7 @@ def _get_docker_args(data: CfgData) -> Optional[List[str]]:
319
319
def _get_typed_val (
320
320
data : CfgData ,
321
321
key : str ,
322
- type_ : Type [_T ],
322
+ type_ : type [_T ],
323
323
default : Optional [_T ] = None ,
324
324
) -> Optional [_T ]:
325
325
v = data .get (key , default )
@@ -346,14 +346,14 @@ def _get_dict(data: CfgData, key: str) -> Optional[dict[str, Any]]:
346
346
return _get_typed_val (data , key , dict )
347
347
348
348
349
- def _get_delimited_str_list (data : CfgData , key : str , sep : str ) -> List [str ]:
349
+ def _get_delimited_str_list (data : CfgData , key : str , sep : str ) -> list [str ]:
350
350
s = _get_typed_val (data , key , str )
351
351
return s .split (sep ) if s else []
352
352
353
353
354
354
def _get_volumes (
355
355
data : CfgData , scuba_root : Optional [Path ]
356
- ) -> Optional [Dict [Path , ScubaVolume ]]:
356
+ ) -> Optional [dict [Path , ScubaVolume ]]:
357
357
voldata = _get_dict (data , "volumes" )
358
358
if voldata is None :
359
359
return None
@@ -414,7 +414,7 @@ class ScubaVolume:
414
414
container_path : Path
415
415
host_path : Optional [Path ] = None
416
416
volume_name : Optional [str ] = None
417
- options : List [str ] = dataclasses .field (default_factory = list )
417
+ options : list [str ] = dataclasses .field (default_factory = list )
418
418
419
419
def __post_init__ (self ) -> None :
420
420
if sum (bool (x ) for x in (self .host_path , self .volume_name )) != 1 :
@@ -498,14 +498,14 @@ def get_vol_opt(self) -> str:
498
498
@dataclasses .dataclass (frozen = True )
499
499
class ScubaAlias :
500
500
name : str
501
- script : List [str ]
501
+ script : list [str ]
502
502
image : Optional [str ] = None
503
503
entrypoint : Optional [str ] = None
504
- environment : Optional [Dict [str , str ]] = None
504
+ environment : Optional [dict [str , str ]] = None
505
505
shell : Optional [str ] = None
506
506
as_root : bool = False
507
- docker_args : Optional [List [str ]] = None
508
- volumes : Optional [Dict [Path , ScubaVolume ]] = None
507
+ docker_args : Optional [list [str ]] = None
508
+ volumes : Optional [dict [Path , ScubaVolume ]] = None
509
509
510
510
@classmethod
511
511
def from_dict (
@@ -534,10 +534,10 @@ def from_dict(
534
534
class ScubaConfig :
535
535
shell : str
536
536
entrypoint : Optional [str ]
537
- docker_args : Optional [List [str ]] # TODO: drop Optional?
538
- volumes : Optional [Dict [Path , ScubaVolume ]] # TODO: drop Optional? Dict ?
539
- aliases : Dict [str , ScubaAlias ]
540
- hooks : Dict [str , List [str ]]
537
+ docker_args : Optional [list [str ]] # TODO: drop Optional?
538
+ volumes : Optional [dict [Path , ScubaVolume ]] # TODO: drop Optional? dict ?
539
+ aliases : dict [str , ScubaAlias ]
540
+ hooks : dict [str , list [str ]]
541
541
environment : Environment
542
542
543
543
def __init__ (
@@ -578,15 +578,15 @@ def __init__(
578
578
579
579
def _load_aliases (
580
580
self , data : CfgData , scuba_root : Optional [Path ]
581
- ) -> Dict [str , ScubaAlias ]:
581
+ ) -> dict [str , ScubaAlias ]:
582
582
aliases = {}
583
583
for name , node in data .get ("aliases" , {}).items ():
584
584
if " " in name :
585
585
raise ConfigError ("Alias names cannot contain spaces" )
586
586
aliases [name ] = ScubaAlias .from_dict (name , node , scuba_root )
587
587
return aliases
588
588
589
- def _load_hooks (self , data : CfgData ) -> Dict [str , List [str ]]:
589
+ def _load_hooks (self , data : CfgData ) -> dict [str , list [str ]]:
590
590
hooks = {}
591
591
for name in (
592
592
"user" ,
0 commit comments