Skip to content

Commit 2644936

Browse files
authored
Refactor importing transformers (#481)
* Remove unused version * Refactor importing transformers
1 parent 2dc2931 commit 2644936

File tree

9 files changed

+315
-225
lines changed

9 files changed

+315
-225
lines changed

robotidy/api.py

Lines changed: 20 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,11 @@
11
"""
22
Methods for transforming Robot Framework ast model programmatically.
33
"""
4-
from typing import Optional
4+
from typing import Dict, List, Optional
55

66
from robotidy import app, disablers, files, skip, transformers, utils
77
from robotidy.config import Config, FormattingConfig
8+
from robotidy.transformers import TransformConfig, TransformConfigMap
89

910

1011
def get_skip_config(config):
@@ -54,17 +55,28 @@ def get_formatting_config(config, kwargs):
5455

5556

5657
def get_robotidy(src: str, output: Optional[str], **kwargs):
57-
def convert_transformers_config(param_name, config):
58-
return [converter.convert(tr, None, None) for tr in config.get(param_name, ())]
58+
def convert_transformers_config(
59+
param_name: str,
60+
config: Dict,
61+
force_included: bool = False,
62+
custom_transformer: bool = False,
63+
is_config: bool = False,
64+
) -> List[TransformConfig]:
65+
return [
66+
TransformConfig(
67+
tr, force_include=force_included, custom_transformer=custom_transformer, is_config=is_config
68+
)
69+
for tr in config.get(param_name, ())
70+
]
5971

6072
# TODO Refactor - Config should be read in one place both for API and CLI
6173
# TODO Remove kwargs usage - other SDKs are not using this feature
6274
config = files.find_and_read_config((src,))
6375
config = {k: str(v) if not isinstance(v, (list, dict)) else v for k, v in config.items()}
64-
converter = transformers.TransformType()
65-
transformer_list = convert_transformers_config("transform", config)
66-
custom_transformers = convert_transformers_config("load-transformers", config)
67-
configurations = convert_transformers_config("configure", config)
76+
transformer_list = convert_transformers_config("transform", config, force_included=True)
77+
custom_transformers = convert_transformers_config("load-transformers", config, custom_transformer=True)
78+
configurations = convert_transformers_config("configure", config, is_config=True)
79+
transformer_config = TransformConfigMap(transformer_list, custom_transformers, configurations)
6880
formatting_config = get_formatting_config(config, kwargs)
6981
exclude = config.get("exclude", None)
7082
extend_exclude = config.get("extend_exclude", None)
@@ -74,9 +86,7 @@ def convert_transformers_config(param_name, config):
7486
global_skip = get_skip_config(config)
7587
language = config.get("language", None)
7688
configuration = Config(
77-
transformers=transformer_list,
78-
custom_transformers=custom_transformers,
79-
transformers_config=configurations,
89+
transformers_config=transformer_config,
8090
skip=global_skip,
8191
src=(),
8292
exclude=exclude,

robotidy/cli.py

Lines changed: 18 additions & 38 deletions
Original file line numberDiff line numberDiff line change
@@ -13,10 +13,10 @@
1313

1414
RICH_PRESENT = False
1515

16-
from robotidy import app, decorators, exceptions, files, skip, utils, version
16+
from robotidy import app, decorators, files, skip, utils, version
1717
from robotidy.config import Config, FormattingConfig
1818
from robotidy.rich_console import console
19-
from robotidy.transformers import TransformType, load_transformers
19+
from robotidy.transformers import TransformConfig, TransformConfigMap, TransformConfigParameter, load_transformers
2020

2121
CLI_OPTIONS_LIST = [
2222
{
@@ -170,7 +170,7 @@ def print_transformer_docs(transformer):
170170
@decorators.optional_rich
171171
def print_description(name: str, target_version: int):
172172
# TODO: --desc works only for default transformers, it should also print custom transformer desc
173-
transformers = load_transformers([], [], {}, allow_disabled=True, target_version=target_version)
173+
transformers = load_transformers(TransformConfigMap([], [], []), allow_disabled=True, target_version=target_version)
174174
transformer_by_names = {transformer.name: transformer for transformer in transformers}
175175
if name == "all":
176176
for transformer in transformers:
@@ -185,19 +185,10 @@ def print_description(name: str, target_version: int):
185185
return 0
186186

187187

188-
def _load_external_transformers(
189-
transformers: List,
190-
custom_transformers: List[Tuple[str, List]],
191-
transformers_from_config: List[Tuple[str, List]],
192-
transformer_config: List[Tuple[str, List]],
193-
target_version: int,
194-
):
188+
def _load_external_transformers(transformers: List, transformers_config: TransformConfigMap, target_version: int):
195189
external = []
196190
transformers_names = {transformer.name for transformer in transformers}
197-
transformer_config_converted = Config.convert_configure(transformer_config)
198-
transformers_from_conf = load_transformers(
199-
transformers_from_config, custom_transformers, transformer_config_converted, target_version=target_version
200-
)
191+
transformers_from_conf = load_transformers(transformers_config, target_version=target_version)
201192
for transformer in transformers_from_conf:
202193
if transformer.name not in transformers_names:
203194
external.append(transformer)
@@ -206,24 +197,15 @@ def _load_external_transformers(
206197

207198
@decorators.optional_rich
208199
def print_transformers_list(
209-
transformers_from_config: List[Tuple[str, List]],
210-
custom_transformers: List[Tuple[str, List]],
211-
transformer_config: List[Tuple[str, List]],
212-
config: Config,
213-
target_version: int,
214-
list_transformers: str,
200+
transformers_config: TransformConfigMap, config: Config, target_version: int, list_transformers: str
215201
):
216202
from rich.table import Table
217203

218204
table = Table(title="Transformers", header_style="bold red")
219205
table.add_column("Name", justify="left", no_wrap=True)
220206
table.add_column("Enabled")
221-
transformers = load_transformers([], [], {}, allow_disabled=True, target_version=target_version)
222-
transformers.extend(
223-
_load_external_transformers(
224-
transformers, custom_transformers, transformers_from_config, transformer_config, target_version
225-
)
226-
)
207+
transformers = load_transformers(TransformConfigMap([], [], []), allow_disabled=True, target_version=target_version)
208+
transformers.extend(_load_external_transformers(transformers, transformers_config, target_version))
227209

228210
for transformer in transformers:
229211
enabled = transformer.name in config.transformers_lookup
@@ -254,23 +236,23 @@ def print_transformers_list(
254236
@click.option(
255237
"--transform",
256238
"-t",
257-
type=TransformType(),
239+
type=TransformConfigParameter(),
258240
multiple=True,
259241
metavar="TRANSFORMER_NAME",
260242
help="Transform files from [PATH(S)] with given transformer",
261243
)
262244
@click.option(
263245
"--load-transformers",
264246
"custom_transformers",
265-
type=TransformType(),
247+
type=TransformConfigParameter(),
266248
multiple=True,
267249
metavar="TRANSFORMER_NAME",
268250
help="Load custom transformer from the path and run them after default ones.",
269251
)
270252
@click.option(
271253
"--configure",
272254
"-c",
273-
type=TransformType(),
255+
type=TransformConfigParameter(),
274256
multiple=True,
275257
metavar="TRANSFORMER_NAME:PARAM=VALUE",
276258
help="Configure transformers",
@@ -490,9 +472,9 @@ def print_transformers_list(
490472
@decorators.catch_exceptions
491473
def cli(
492474
ctx: click.Context,
493-
transform: List[Tuple[str, List]],
494-
custom_transformers: List[Tuple[str, List]],
495-
configure: List[Tuple[str, List]],
475+
transform: List[TransformConfig],
476+
custom_transformers: List[TransformConfig],
477+
configure: List[TransformConfig],
496478
src: Tuple[str, ...],
497479
exclude: Optional[Pattern],
498480
extend_exclude: Optional[Pattern],
@@ -584,14 +566,12 @@ def cli(
584566
end_line=endline,
585567
line_length=line_length,
586568
)
587-
# array of some class, that holds info if it's forced, configure or custom
588-
# or just name:args TODO
569+
570+
transformers_config = TransformConfigMap(transform, custom_transformers, configure)
589571
config = Config(
590572
formatting=formatting,
591573
skip=skip_config,
592-
transformers=transform,
593-
custom_transformers=custom_transformers,
594-
transformers_config=configure,
574+
transformers_config=transformers_config,
595575
src=src,
596576
exclude=exclude,
597577
extend_exclude=extend_exclude,
@@ -609,7 +589,7 @@ def cli(
609589
)
610590

611591
if list_transformers:
612-
print_transformers_list(transform, custom_transformers, configure, config, target_version, list_transformers)
592+
print_transformers_list(transformers_config, config, target_version, list_transformers)
613593
sys.exit(0)
614594
if desc is not None:
615595
return_code = print_description(desc, target_version)

robotidy/config.py

Lines changed: 4 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@
99
Languages = None
1010

1111
from robotidy.files import get_paths
12-
from robotidy.transformers import load_transformers
12+
from robotidy.transformers import TransformConfig, TransformConfigMap, load_transformers
1313

1414

1515
class FormattingConfig:
@@ -62,9 +62,7 @@ def __init__(
6262
self,
6363
formatting: FormattingConfig,
6464
skip,
65-
transformers: List[Tuple[str, List]],
66-
custom_transformers: List[Tuple[str, List]],
67-
transformers_config: List[Tuple[str, List]],
65+
transformers_config: TransformConfigMap,
6866
src: Tuple[str, ...],
6967
exclude: Optional[Pattern],
7068
extend_exclude: Optional[Pattern],
@@ -90,19 +88,12 @@ def __init__(
9088
self.color = color
9189
self.reruns = reruns
9290
self.language = self.get_languages(language)
93-
transformers_config = self.convert_configure(transformers_config)
9491
self.transformers = []
9592
self.transformers_lookup = dict()
96-
self.load_transformers(
97-
transformers, custom_transformers, transformers_config, force_order, target_version, skip
98-
)
93+
self.load_transformers(transformers_config, force_order, target_version, skip)
9994

100-
def load_transformers(
101-
self, transformers, custom_transformers, transformers_config, force_order, target_version, skip
102-
):
95+
def load_transformers(self, transformers_config: TransformConfigMap, force_order, target_version, skip):
10396
transformers = load_transformers(
104-
transformers,
105-
custom_transformers,
10697
transformers_config,
10798
force_order=force_order,
10899
target_version=target_version,
@@ -116,13 +107,6 @@ def load_transformers(
116107
self.transformers.append(transformer.instance)
117108
self.transformers_lookup[transformer.name] = transformer.instance
118109

119-
@staticmethod
120-
def convert_configure(configure: List[Tuple[str, List]]) -> Dict[str, List]:
121-
config_map = defaultdict(list)
122-
for transformer, args in configure:
123-
config_map[transformer].extend(args)
124-
return config_map
125-
126110
@staticmethod
127111
def get_languages(lang):
128112
if Languages is None:

robotidy/decorators.py

Lines changed: 0 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -20,9 +20,6 @@ def wrapper(*args, **kwargs):
2020
return functools.partial(catch_exceptions)
2121
try:
2222
return func(*args, **kwargs)
23-
except exceptions.RobotidyConfigError as err:
24-
print(f"Error: {err}")
25-
sys.exit(1)
2623
except (click.exceptions.ClickException, click.exceptions.Exit):
2724
raise
2825
except Exception as err:

robotidy/exceptions.py

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,10 @@
1+
import sys
2+
3+
14
class RobotidyConfigError(Exception):
2-
pass
5+
def __init__(self, err):
6+
print(f"Error: {err}")
7+
sys.exit(1)
38

49

510
class InvalidParameterValueError(RobotidyConfigError):

0 commit comments

Comments
 (0)