Skip to content

Commit d1f5e57

Browse files
authored
Fix some code smells and unnecessary quotes from _type_checking imported type hints (#747)
1 parent ff2c599 commit d1f5e57

16 files changed

+75
-75
lines changed

jsonargparse/_actions.py

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -544,7 +544,7 @@ def _move_parser_actions(parser, args, kwargs):
544544
title = kwargs.pop("title", kwargs.pop("help", None))
545545
description = kwargs.pop("description", subparser.description)
546546
if len(kwargs) > 0:
547-
raise ValueError(f"ActionParser does not accept the following parameters: {set(kwargs.keys())}")
547+
raise ValueError(f"ActionParser does not accept the following parameters: {set(kwargs)}")
548548
if not (len(args) == 1 and args[0].startswith("--")):
549549
raise ValueError(f"ActionParser only accepts a single optional key but got {args}")
550550
prefix = args[0][2:]
@@ -558,7 +558,7 @@ def add_prefix(key):
558558
for key, action in filter_default_actions(subparser._option_string_actions).items():
559559
option_string_actions[add_prefix(key)] = action
560560

561-
isect = set(option_string_actions.keys()).intersection(set(parser._option_string_actions.keys()))
561+
isect = set(option_string_actions).intersection(set(parser._option_string_actions))
562562
if len(isect) > 0:
563563
raise ValueError(f"ActionParser conflicting keys: {isect}")
564564

@@ -705,7 +705,7 @@ def get_subcommands(
705705
require_single = single_subcommand.get()
706706

707707
# Get subcommand settings keys
708-
subcommand_keys = [k for k in action.choices.keys() if isinstance(cfg.get(prefix + k), Namespace)]
708+
subcommand_keys = [k for k in action.choices if isinstance(cfg.get(prefix + k), Namespace)]
709709

710710
# Get subcommand
711711
subcommand = None
@@ -735,7 +735,7 @@ def get_subcommands(
735735
# If subcommand is required and no subcommand is provided,
736736
# present the user with a friendly error message to remind them of
737737
# the available subcommands and to select one.
738-
available_subcommands = list(action._name_parser_map.keys())
738+
available_subcommands = list(action._name_parser_map)
739739
if len(available_subcommands) <= 5:
740740
candidate_subcommands_str = "{" + ",".join(available_subcommands) + "}"
741741
else:

jsonargparse/_cli.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -170,7 +170,7 @@ def _add_subcommands(
170170

171171

172172
def has_parameter(component, name) -> bool:
173-
return name in inspect.signature(component).parameters.keys()
173+
return name in inspect.signature(component).parameters
174174

175175

176176
def _add_component_to_parser(
@@ -180,7 +180,7 @@ def _add_component_to_parser(
180180
fail_untyped: bool,
181181
config_help: str,
182182
):
183-
kwargs: dict = dict(as_positional=as_positional, fail_untyped=fail_untyped, sub_configs=True)
183+
kwargs: dict = {"as_positional": as_positional, "fail_untyped": fail_untyped, "sub_configs": True}
184184
if inspect.isclass(component):
185185
class_methods = [
186186
k for k, v in inspect.getmembers(component) if (callable(v) or isinstance(v, property)) and k[0] != "_"

jsonargparse/_common.py

Lines changed: 17 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -65,16 +65,16 @@ def __call__(self, class_type: Type[ClassType], *args, **kwargs) -> ClassType:
6565
applied_instantiation_links: ContextVar[Optional[set]] = ContextVar("applied_instantiation_links", default=None)
6666

6767

68-
parser_context_vars = dict(
69-
parent_parser=parent_parser,
70-
parser_capture=parser_capture,
71-
defaults_cache=defaults_cache,
72-
lenient_check=lenient_check,
73-
load_value_mode=load_value_mode,
74-
class_instantiators=class_instantiators,
75-
nested_links=nested_links,
76-
applied_instantiation_links=applied_instantiation_links,
77-
)
68+
parser_context_vars = {
69+
"parent_parser": parent_parser,
70+
"parser_capture": parser_capture,
71+
"defaults_cache": defaults_cache,
72+
"lenient_check": lenient_check,
73+
"load_value_mode": load_value_mode,
74+
"class_instantiators": class_instantiators,
75+
"nested_links": nested_links,
76+
"applied_instantiation_links": applied_instantiation_links,
77+
}
7878

7979

8080
@contextmanager
@@ -91,10 +91,10 @@ def parser_context(**kwargs):
9191
context_var.reset(token)
9292

9393

94-
parsing_settings = dict(
95-
validate_defaults=False,
96-
parse_optionals_as_positionals=False,
97-
)
94+
parsing_settings = {
95+
"validate_defaults": False,
96+
"parse_optionals_as_positionals": False,
97+
}
9898

9999

100100
def set_parsing_settings(
@@ -270,7 +270,7 @@ def __init__(self, instantiators: InstantiatorsDictType) -> None:
270270
def __call__(self, class_type: Type[ClassType], *args, **kwargs) -> ClassType:
271271
for (cls, subclasses), instantiator in self.instantiators.items():
272272
if class_type is cls or (subclasses and is_subclass(class_type, cls)):
273-
param_names = set(inspect.signature(instantiator).parameters.keys())
273+
param_names = set(inspect.signature(instantiator).parameters)
274274
if "applied_instantiation_links" in param_names:
275275
applied_links = applied_instantiation_links.get() or set()
276276
kwargs["applied_instantiation_links"] = {
@@ -316,7 +316,7 @@ def setup_default_logger(data, level, caller):
316316
def parse_logger(logger: Union[bool, str, dict, logging.Logger], caller):
317317
if not isinstance(logger, (bool, str, dict, logging.Logger)):
318318
raise ValueError(f"Expected logger to be an instance of (bool, str, dict, logging.Logger), but got {logger}.")
319-
if isinstance(logger, dict) and len(set(logger.keys()) - {"name", "level"}) > 0:
319+
if isinstance(logger, dict) and len(set(logger) - {"name", "level"}) > 0:
320320
value = {k: v for k, v in logger.items() if k not in {"name", "level"}}
321321
raise ValueError(f"Unexpected data to configure logger: {value}.")
322322
if logger is False:
@@ -384,6 +384,6 @@ class Action(LoggerProperty, argparse.Action):
384384

385385
def _check_type_(self, value, **kwargs):
386386
if not hasattr(self, "_check_type_kwargs"):
387-
self._check_type_kwargs = set(inspect.signature(self._check_type).parameters.keys())
387+
self._check_type_kwargs = set(inspect.signature(self._check_type).parameters)
388388
kwargs = {k: v for k, v in kwargs.items() if k in self._check_type_kwargs}
389389
return self._check_type(value, **kwargs)

jsonargparse/_core.py

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -222,7 +222,7 @@ class ArgumentGroup(ActionsContainer, argparse._ArgumentGroup):
222222
"""Extension of argparse._ArgumentGroup to support additional functionalities."""
223223

224224
dest: Optional[str] = None
225-
parser: Optional[Union["ArgumentParser", "ActionsContainer"]] = None
225+
parser: Optional[Union["ArgumentParser", ActionsContainer]] = None
226226

227227

228228
class ArgumentParser(ParserDeprecations, ActionsContainer, ArgumentLinking, LoggerProperty, argparse.ArgumentParser):
@@ -1352,9 +1352,9 @@ def _apply_actions(
13521352
cfg_branch = cfg
13531353
cfg = Namespace()
13541354
cfg[parent_key] = cfg_branch
1355-
keys = [parent_key + "." + k for k in cfg_branch.__dict__.keys()]
1355+
keys = [parent_key + "." + k for k in cfg_branch.__dict__]
13561356
else:
1357-
keys = list(cfg.__dict__.keys())
1357+
keys = list(cfg.__dict__)
13581358

13591359
if prev_cfg:
13601360
prev_cfg = prev_cfg.clone()
@@ -1594,7 +1594,7 @@ def parser_mode(self, parser_mode: str):
15941594
if parser_mode == "omegaconf":
15951595
set_omegaconf_loader()
15961596
if parser_mode not in loaders:
1597-
raise ValueError(f"The only accepted values for parser_mode are {set(loaders.keys())}.")
1597+
raise ValueError(f"The only accepted values for parser_mode are {set(loaders)}.")
15981598
if parser_mode == "jsonnet":
15991599
import_jsonnet("parser_mode=jsonnet")
16001600
self._parser_mode = parser_mode

jsonargparse/_deprecated.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -553,7 +553,7 @@ def __init__(self, *args, error_handler=False, **kwargs):
553553
self.error_handler = error_handler
554554

555555
@property
556-
def error_handler(self) -> Optional[Callable[["ArgumentParser", str], None]]:
556+
def error_handler(self) -> Optional[Callable[[ArgumentParser, str], None]]:
557557
"""Property for the error_handler function that is called when there are parsing errors.
558558
559559
:getter: Returns the current error_handler function.
@@ -601,7 +601,7 @@ def check_config(self, *args, **kwargs):
601601
def deprecated_skip_check(component, kwargs: dict, skip_validation: bool) -> bool:
602602
skip_check = kwargs.pop("skip_check", None)
603603
if kwargs:
604-
raise ValueError(f"Unexpected keyword parameters: {set(kwargs.keys())}")
604+
raise ValueError(f"Unexpected keyword parameters: {set(kwargs)}")
605605
if skip_check is not None:
606606
skip_validation = skip_check
607607
deprecation_warning(

jsonargparse/_formatters.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -288,7 +288,7 @@ def set_yaml_argument_comment(
288288

289289

290290
def get_env_var(
291-
parser_or_formatter: Union["ArgumentParser", DefaultHelpFormatter],
291+
parser_or_formatter: Union[ArgumentParser, DefaultHelpFormatter],
292292
action: Optional[Action] = None,
293293
) -> str:
294294
"""Returns the environment variable name for a given parser or formatter and action."""

jsonargparse/_loaders_dumpers.py

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -87,11 +87,11 @@ def yaml_load(stream):
8787

8888
value = yaml.load(stream, Loader=get_yaml_default_loader())
8989
if isinstance(value, dict) and value and all(v is None for v in value.values()):
90-
if len(value) == 1 and stream.strip() == next(iter(value.keys())) + ":":
90+
if len(value) == 1 and stream.strip() == next(iter(value)) + ":":
9191
value = stream
9292
else:
9393
keys = set(stream.strip(" {}").replace(" ", "").split(","))
94-
if len(keys) > 0 and keys == set(value.keys()):
94+
if len(keys) > 0 and keys == set(value):
9595
value = stream
9696
return value
9797

@@ -284,7 +284,7 @@ def dump_using_format(parser: ArgumentParser, data: dict, dump_format: str) -> s
284284
def set_loader(
285285
mode: str,
286286
loader_fn: Callable[[str], Any],
287-
exceptions: Tuple[Type[Exception], ...] = tuple(),
287+
exceptions: Tuple[Type[Exception], ...] = (),
288288
json_superset: bool = True,
289289
):
290290
"""Sets the value loader function to be used when parsing with a certain mode.

jsonargparse/_namespace.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -332,11 +332,11 @@ def del_clash_mark(key: str) -> str:
332332

333333
def expand_dict(cfg):
334334
for k, v in cfg.items():
335-
if isinstance(v, dict) and all(isinstance(k, str) for k in v.keys()):
335+
if isinstance(v, dict) and all(isinstance(k, str) for k in v):
336336
cfg[k] = expand_dict(v)
337337
elif isinstance(v, list):
338338
for nn, vv in enumerate(v):
339-
if isinstance(vv, dict) and all(isinstance(k, str) for k in vv.keys()):
339+
if isinstance(vv, dict) and all(isinstance(k, str) for k in vv):
340340
cfg[k][nn] = expand_dict(vv)
341341
return Namespace(**cfg)
342342

jsonargparse/_parameter_resolvers.py

Lines changed: 23 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -172,7 +172,7 @@ def ast_is_call_with_value(node, value_dump) -> bool:
172172

173173

174174
ast_constant_attr = {ast.Constant: "value"}
175-
ast_constant_types = tuple(ast_constant_attr.keys())
175+
ast_constant_types = tuple(ast_constant_attr)
176176

177177

178178
def ast_is_constant(node):
@@ -324,7 +324,7 @@ def unpack_typed_dict_kwargs(params: ParamList, kwargs_idx: int) -> int:
324324
annotation = kwargs.annotation
325325
if is_unpack_typehint(annotation):
326326
params.pop(kwargs_idx)
327-
annotation_args: tuple = getattr(annotation, "__args__", tuple())
327+
annotation_args: tuple = getattr(annotation, "__args__", ())
328328
assert len(annotation_args) == 1, "Unpack requires a single type argument"
329329
dict_annotations = annotation_args[0].__annotations__
330330
new_params = []
@@ -710,7 +710,7 @@ def replace_param_default_subclass_specs(self, params: List[ParamData]) -> None:
710710
subclass_types = get_subclass_types(param.annotation, callable_return=True)
711711
if not (class_type and subclass_types and is_subclass(class_type, subclass_types)):
712712
continue
713-
subclass_spec: dict = dict(class_path=get_import_path(class_type), init_args=dict())
713+
subclass_spec: dict = {"class_path": get_import_path(class_type), "init_args": {}}
714714
for kwarg in node.keywords:
715715
if kwarg.arg and ast_is_constant(kwarg.value):
716716
subclass_spec["init_args"][kwarg.arg] = ast_get_constant_value(kwarg.value)
@@ -890,11 +890,11 @@ def get_field_data_pydantic1_model(field, name, doc_params):
890890
elif field.default_factory:
891891
default = field.default_factory()
892892

893-
return dict(
894-
annotation=field.annotation,
895-
default=default,
896-
doc=field.field_info.description or doc_params.get(name),
897-
)
893+
return {
894+
"annotation": field.annotation,
895+
"default": default,
896+
"doc": field.field_info.description or doc_params.get(name),
897+
}
898898

899899

900900
def get_field_data_pydantic2_dataclass(field, name, doc_params):
@@ -921,11 +921,11 @@ def get_field_data_pydantic2_dataclass(field, name, doc_params):
921921
field_type = get_annotated_base_type(field.type)
922922
else:
923923
field_type = field.type
924-
return dict(
925-
annotation=field_type,
926-
default=default,
927-
doc=doc_params.get(name),
928-
)
924+
return {
925+
"annotation": field_type,
926+
"default": default,
927+
"doc": doc_params.get(name),
928+
}
929929

930930

931931
def get_field_data_pydantic2_model(field, name, doc_params):
@@ -935,11 +935,11 @@ def get_field_data_pydantic2_model(field, name, doc_params):
935935
elif field.default_factory:
936936
default = field.default_factory()
937937

938-
return dict(
939-
annotation=field.rebuild_annotation(),
940-
default=default,
941-
doc=field.description or doc_params.get(name),
942-
)
938+
return {
939+
"annotation": field.rebuild_annotation(),
940+
"default": default,
941+
"doc": field.description or doc_params.get(name),
942+
}
943943

944944

945945
def get_field_data_attrs(field, name, doc_params):
@@ -951,11 +951,11 @@ def get_field_data_attrs(field, name, doc_params):
951951
elif isinstance(default, attrs.Factory):
952952
default = default.factory()
953953

954-
return dict(
955-
annotation=field.type,
956-
default=default,
957-
doc=doc_params.get(name),
958-
)
954+
return {
955+
"annotation": field.type,
956+
"default": default,
957+
"doc": doc_params.get(name),
958+
}
959959

960960

961961
def is_init_field_pydantic2_dataclass(field) -> bool:

jsonargparse/_signatures.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -122,7 +122,7 @@ def add_class_arguments(
122122
defaults = default.lazy_get_init_args().as_dict()
123123
elif is_dataclass_like(default.__class__):
124124
defaults = dataclass_to_dict(default)
125-
args = set(k[len(prefix) :] for k in added_args)
125+
args = {k[len(prefix) :] for k in added_args}
126126
skip_not_added = [k for k in defaults if k not in args]
127127
if skip_not_added:
128128
skip.update(skip_not_added) # skip init=False

0 commit comments

Comments
 (0)