|
18 | 18 | ) |
19 | 19 | from typing import ( |
20 | 20 | Optional, |
21 | | - Type, |
22 | 21 | Union, |
23 | 22 | ) |
24 | 23 |
|
@@ -51,7 +50,7 @@ class EnrouteBuilder: |
51 | 50 | """Enroute builder class.""" |
52 | 51 |
|
53 | 52 | def __init__( |
54 | | - self, *classes: Union[str, Type], middleware: Optional[Union[str, Callable, list[Union[str, Callable]]]] = None |
| 53 | + self, *classes: Union[str, type], middleware: Optional[Union[str, Callable, list[Union[str, Callable]]]] = None |
55 | 54 | ): |
56 | 55 | if middleware is None: |
57 | 56 | middleware = tuple() |
@@ -129,14 +128,13 @@ async def _wrapper(*ag, **kw): |
129 | 128 |
|
130 | 129 | # noinspection PyMethodMayBeStatic |
131 | 130 | def _validate_not_redefined(self, decorators: Collection[EnrouteDecorator]) -> None: |
132 | | - raw = set(map(lambda obj: (type(obj).__bases__[0], *obj), decorators)) |
| 131 | + mapper = defaultdict(set) |
| 132 | + for decorator in decorators: |
| 133 | + mapper[tuple(decorator)].add(decorator) |
133 | 134 |
|
134 | | - if len(raw) == len(decorators): |
135 | | - return |
136 | | - |
137 | | - duplicated = next(iter(raw)) |
138 | | - decorator = duplicated[0](*duplicated[1:]) |
139 | | - raise MinosRedefinedEnrouteDecoratorException(f"{decorator} can be used only once.") |
| 135 | + for cases in mapper.values(): |
| 136 | + if len(cases) > 1: |
| 137 | + raise MinosRedefinedEnrouteDecoratorException(f"Only one of {cases!r} can be used simultaneously.") |
140 | 138 |
|
141 | 139 | def _build_all_classes(self, method_name: str, **kwargs) -> dict[EnrouteDecorator, set[Handler]]: |
142 | 140 | decomposed_handlers = defaultdict(set) |
|
0 commit comments