Skip to content

Commit d906ace

Browse files
set TAGGED_ARGS and POSITIONAL_ARGS from rules as class property
1 parent ba564f4 commit d906ace

8 files changed

Lines changed: 39 additions & 47 deletions

File tree

sifter/commands/fileinto.py

Lines changed: 2 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,7 @@
2424
class CommandFileInto(Command):
2525

2626
RULE_IDENTIFIER = 'FILEINTO'
27+
POSITIONAL_ARGS = [StringList(length=1)]
2728

2829
def __init__(
2930
self,
@@ -32,10 +33,7 @@ def __init__(
3233
block: Optional[CommandList] = None
3334
) -> None:
3435
super().__init__(arguments, tests, block)
35-
_, positional_args = self.validate_arguments(
36-
{},
37-
[StringList(length=1), ],
38-
)
36+
_, positional_args = self.validate_arguments()
3937
self.validate_tests_size(0)
4038
self.validate_block_size(0)
4139
self.file_dest = positional_args[0]

sifter/commands/redirect.py

Lines changed: 2 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -26,6 +26,7 @@
2626
class CommandRedirect(Command):
2727

2828
RULE_IDENTIFIER = 'REDIRECT'
29+
POSITIONAL_ARGS = [StringList(length=1)]
2930

3031
def __init__(
3132
self,
@@ -34,10 +35,7 @@ def __init__(
3435
block: Optional[CommandList] = None
3536
) -> None:
3637
super().__init__(arguments, tests, block)
37-
_, positional_args = self.validate_arguments(
38-
{},
39-
[StringList(length=1), ],
40-
)
38+
_, positional_args = self.validate_arguments()
4139
self.validate_tests_size(0)
4240
self.validate_block_size(0)
4341
if not isinstance(positional_args, list):

sifter/commands/require.py

Lines changed: 2 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -26,6 +26,7 @@
2626
class CommandRequire(Command):
2727

2828
RULE_IDENTIFIER: Text = 'REQUIRE'
29+
POSITIONAL_ARGS = [StringList()]
2930

3031
def __init__(
3132
self,
@@ -34,10 +35,7 @@ def __init__(
3435
block: Optional[CommandList] = None
3536
) -> None:
3637
super().__init__(arguments, tests, block)
37-
_, positional_args = self.validate_arguments(
38-
{},
39-
[StringList(), ],
40-
)
38+
_, positional_args = self.validate_arguments()
4139
self.validate_tests_size(0)
4240
self.validate_block_size(0)
4341
self.ext_names = positional_args[0]

sifter/grammar/rule.py

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -29,6 +29,9 @@ class Rule(object):
2929
RULE_TYPE: Optional[Text] = None
3030
RULE_IDENTIFIER: Optional[Text] = None
3131

32+
TAGGED_ARGS: Optional[Union[List[Validator], Dict[Text, Validator]]] = None
33+
POSITIONAL_ARGS: Optional[List[Validator]] = None
34+
3235
@classmethod
3336
def register(cls) -> None:
3437
try:
@@ -70,9 +73,9 @@ def validate_arguments(
7073
List[Union[Tag, SupportsInt, List[Union[Text, 'String']]]]
7174
]:
7275
if tagged_args is None:
73-
tagged_args = {}
76+
tagged_args = self.TAGGED_ARGS or {}
7477
if positional_args is None:
75-
positional_args = []
78+
positional_args = self.POSITIONAL_ARGS or []
7679

7780
seen_args: Dict[Text, List[Union['Tag', SupportsInt, List[Union[Text, 'String']]]]] = {}
7881
i, n = 0, len(self.arguments)

sifter/tests/address.py

Lines changed: 10 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -26,24 +26,23 @@
2626
class TestAddress(Test):
2727

2828
RULE_IDENTIFIER: Text = 'ADDRESS'
29+
TAGGED_ARGS = {
30+
'comparator': Comparator(),
31+
'match_type': MatchType(),
32+
'address_part': Tag(('LOCALPART', 'DOMAIN', 'ALL')),
33+
}
34+
POSITIONAL_ARGS = [
35+
StringList(),
36+
StringList(),
37+
]
2938

3039
def __init__(
3140
self,
3241
arguments: Optional[List[Union['TagGrammar', SupportsInt, List[Union[Text, 'String']]]]] = None,
3342
tests: Optional[List['Test']] = None
3443
) -> None:
3544
super().__init__(arguments, tests)
36-
tagged_args, positional_args = self.validate_arguments(
37-
{
38-
'comparator': Comparator(),
39-
'match_type': MatchType(),
40-
'address_part': Tag(('LOCALPART', 'DOMAIN', 'ALL')),
41-
},
42-
[
43-
StringList(),
44-
StringList(),
45-
]
46-
)
45+
tagged_args, positional_args = self.validate_arguments()
4746
self.validate_tests_size(0)
4847

4948
self.headers, self.keylist = positional_args

sifter/tests/exists.py

Lines changed: 2 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -22,17 +22,15 @@
2222
class TestExists(Test):
2323

2424
RULE_IDENTIFIER = 'EXISTS'
25+
POSITIONAL_ARGS = [StringList()]
2526

2627
def __init__(
2728
self,
2829
arguments: Optional[List[Union['TagGrammar', SupportsInt, List[Union[Text, 'String']]]]] = None,
2930
tests: Optional[List['Test']] = None
3031
) -> None:
3132
super().__init__(arguments, tests)
32-
tagged_args, positional_args = self.validate_arguments(
33-
{},
34-
[StringList(), ]
35-
)
33+
tagged_args, positional_args = self.validate_arguments()
3634
self.validate_tests_size(0)
3735
self.headers = positional_args[0]
3836

sifter/tests/header.py

Lines changed: 9 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -24,23 +24,22 @@
2424
class TestHeader(Test):
2525

2626
RULE_IDENTIFIER = 'HEADER'
27+
TAGGED_ARGS = {
28+
'comparator': Comparator(),
29+
'match_type': MatchType(),
30+
}
31+
POSITIONAL_ARGS = [
32+
StringList(),
33+
StringList(),
34+
]
2735

2836
def __init__(
2937
self,
3038
arguments: Optional[List[Union['TagGrammar', SupportsInt, List[Union[Text, 'String']]]]] = None,
3139
tests: Optional[List['Test']] = None
3240
) -> None:
3341
super().__init__(arguments, tests)
34-
tagged_args, positional_args = self.validate_arguments(
35-
{
36-
'comparator': Comparator(),
37-
'match_type': MatchType(),
38-
},
39-
[
40-
StringList(),
41-
StringList(),
42-
]
43-
)
42+
tagged_args, positional_args = self.validate_arguments()
4443
self.validate_tests_size(0)
4544

4645
self.headers = positional_args[0]

sifter/tests/size.py

Lines changed: 7 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -26,6 +26,12 @@
2626
class TestSize(Test):
2727

2828
RULE_IDENTIFIER = 'SIZE'
29+
TAGGED_ARGS = {
30+
'size': Tag(
31+
('OVER', 'UNDER'),
32+
(Number(),)
33+
),
34+
}
2935

3036
COMPARISON_FNS: Dict[Text, Callable[[Any, Any], bool]] = {
3137
'OVER': operator.gt,
@@ -38,14 +44,7 @@ def __init__(
3844
tests: Optional[List['Test']] = None
3945
) -> None:
4046
super().__init__(arguments, tests)
41-
tagged_args, positional_args = self.validate_arguments(
42-
{
43-
'size': Tag(
44-
('OVER', 'UNDER'),
45-
(Number(),)
46-
),
47-
}
48-
)
47+
tagged_args, positional_args = self.validate_arguments()
4948
self.validate_tests_size(0)
5049
self.comparison_fn = self.COMPARISON_FNS[tagged_args['size'][0]] # type: ignore
5150
self.comparison_size = tagged_args['size'][1]

0 commit comments

Comments
 (0)