Skip to content

Commit 58e6f11

Browse files
even mor type hints
1 parent 264ebd3 commit 58e6f11

12 files changed

Lines changed: 44 additions & 34 deletions

File tree

sifter/commands/redirect.py

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,8 @@
22

33
import sifter.grammar
44
import sifter.validators
5+
from sifter.grammar.rule import RuleSyntaxError
6+
from sifter.validators.stringlist import StringList
57

68
__all__ = ('CommandRedirect',)
79

@@ -15,7 +17,7 @@ def __init__(self, arguments=None, tests=None, block=None):
1517
super(CommandRedirect, self).__init__(arguments, tests, block)
1618
_, positional_args = self.validate_arguments(
1719
{},
18-
[sifter.validators.StringList(length=1), ],
20+
[StringList(length=1), ],
1921
)
2022
self.validate_tests_size(0)
2123
self.validate_block_size(0)
@@ -26,7 +28,7 @@ def __init__(self, arguments=None, tests=None, block=None):
2628
# parsing.
2729
realname, emailaddr = email.utils.parseaddr(self.email_address)
2830
if emailaddr == "":
29-
raise sifter.grammar.RuleSyntaxError(
31+
raise RuleSyntaxError(
3032
"REDIRECT destination not a valid email address: %s"
3133
% self.email_address
3234
)

sifter/commands/require.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@
55
from sifter.grammar.command import Command
66
import sifter.grammar
77
import sifter.handler
8-
import sifter.validators
8+
from sifter.validators.stringlist import StringList
99

1010
__all__ = ('CommandRequire',)
1111

@@ -19,7 +19,7 @@ def __init__(self, arguments=None, tests=None, block=None) -> None:
1919
super(CommandRequire, self).__init__(arguments, tests, block)
2020
_, positional_args = self.validate_arguments(
2121
{},
22-
[sifter.validators.StringList(), ],
22+
[StringList(), ],
2323
)
2424
self.validate_tests_size(0)
2525
self.validate_block_size(0)

sifter/grammar/command.py

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,8 @@
33
)
44

55
import sifter.grammar
6+
from sifter.grammar.command_list import CommandList
7+
from sifter.grammar.rule import RuleSyntaxError
68
from . import rule
79
import sifter.utils
810

@@ -16,7 +18,7 @@ class Command(rule.Rule):
1618
def __init__(self, arguments=None, tests=None, block=None) -> None:
1719
super(Command, self).__init__(arguments, tests)
1820
if block is None:
19-
self.block = sifter.grammar.CommandList()
21+
self.block = CommandList()
2022
else:
2123
self.block = block
2224

@@ -31,6 +33,6 @@ def __str__(self) -> Text:
3133

3234
def validate_block_size(self, max_commands: int) -> None:
3335
if len(self.block.commands) > max_commands:
34-
raise sifter.grammar.RuleSyntaxError(
36+
raise RuleSyntaxError(
3537
"%s takes no more than %d commands" % (self.RULE_IDENTIFIER, max_commands)
3638
)

sifter/grammar/command_list.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
import sifter.grammar
1+
from sifter.grammar.state import EvaluationState
22

33
__all__ = ('CommandList',)
44

@@ -16,7 +16,7 @@ def __str__(self):
1616

1717
def evaluate(self, message, state=None):
1818
if state is None:
19-
state = sifter.grammar.EvaluationState()
19+
state = EvaluationState()
2020
for command in self.commands:
2121
command.evaluate(message, state)
2222
# don't bother processing more commands if we hit a STOP. this

sifter/grammar/grammar.py

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,8 @@
66
import sifter.grammar
77
from sifter.grammar.tag import Tag
88
from sifter.grammar.lexer import tokens
9+
from sifter.grammar.command_list import CommandList
10+
from sifter.grammar.string import String
911
import sifter.handler
1012

1113
__all__ = ('parser',)
@@ -39,7 +41,7 @@ def p_commands_list(p):
3941

4042
def p_commands_empty(p):
4143
"""commands : """
42-
p[0] = sifter.grammar.CommandList()
44+
p[0] = CommandList()
4345

4446

4547
def p_command(p):
@@ -172,4 +174,4 @@ def p_stringlist_single(p):
172174

173175
def p_string(p):
174176
"""string : QUOTED_STRING"""
175-
p[0] = sifter.grammar.String(p[1])
177+
p[0] = String(p[1])

sifter/grammar/rule.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -113,5 +113,5 @@ def validate_tests_size(self, min_tests: int, max_tests: Optional[int] = None) -
113113
raise RuleSyntaxError("%s takes %s tests" % (
114114
self.RULE_IDENTIFIER, msg))
115115

116-
def evaluate(self, message: Message, state: EvaluationState) -> None:
116+
def evaluate(self, message: Message, state: EvaluationState) -> Optional[bool]:
117117
raise NotImplementedError

sifter/grammar/state.py

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,15 +1,15 @@
11
from typing import (
22
Text
33
)
4-
import sifter.grammar
4+
from sifter.grammar.actions import Actions
55

66
__all__ = ('EvaluationState',)
77

88

99
class EvaluationState(object):
1010

1111
def __init__(self) -> None:
12-
self.actions = sifter.grammar.Actions(implicit_keep=True)
12+
self.actions = Actions(implicit_keep=True)
1313
self.required_extensions = {}
1414
# section 6.1: the built-in comparators have defined capability
1515
# strings, but they do not need to be explicitly REQUIRE'd before being
@@ -20,7 +20,7 @@ def __init__(self) -> None:
2020
def require_extension(self, extension):
2121
self.required_extensions[extension] = True
2222

23-
def check_required_extension(self, extension: Text, feature_string: Text) -> Text:
23+
def check_required_extension(self, extension: Text, feature_string: Text) -> bool:
2424
if extension not in self.required_extensions:
2525
raise RuntimeError(
2626
"REQUIRE '%s' must happen before %s can be used."

sifter/grammar/test.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,9 @@
1-
from . import rule
1+
from sifter.grammar.rule import Rule
22

33
__all__ = ('Test',)
44

55

6-
class Test(rule.Rule):
6+
class Test(Rule):
77

88
RULE_TYPE = 'test'
99

sifter/tests/address.py

Lines changed: 8 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -3,30 +3,31 @@
33
Text
44
)
55

6-
from sifter.validators.tag import Tag
6+
from sifter.validators.tag import Tag, Comparator, MatchType
77
import sifter.grammar
8+
from sifter.grammar.test import Test
89
import sifter.grammar.string
9-
import sifter.validators
10+
from sifter.validators.stringlist import StringList
1011

1112
__all__ = ('TestAddress',)
1213

1314

1415
# section 5.1
15-
class TestAddress(sifter.grammar.Test):
16+
class TestAddress(Test):
1617

1718
RULE_IDENTIFIER: Text = 'ADDRESS'
1819

1920
def __init__(self, arguments=None, tests=None) -> None:
2021
super(TestAddress, self).__init__(arguments, tests)
2122
tagged_args, positional_args = self.validate_arguments(
2223
{
23-
'comparator': sifter.validators.Comparator(),
24-
'match_type': sifter.validators.MatchType(),
24+
'comparator': Comparator(),
25+
'match_type': MatchType(),
2526
'address_part': Tag(('LOCALPART', 'DOMAIN', 'ALL')),
2627
},
2728
[
28-
sifter.validators.StringList(),
29-
sifter.validators.StringList(),
29+
StringList(),
30+
StringList(),
3031
]
3132
)
3233
self.validate_tests_size(0)

sifter/tests/exists.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
import sifter.grammar
2-
import sifter.validators
2+
from sifter.validators.stringlist import StringList
33

44
__all__ = ('TestExists',)
55

@@ -13,7 +13,7 @@ def __init__(self, arguments=None, tests=None):
1313
super(TestExists, self).__init__(arguments, tests)
1414
tagged_args, positional_args = self.validate_arguments(
1515
{},
16-
[sifter.validators.StringList(), ]
16+
[StringList(), ]
1717
)
1818
self.validate_tests_size(0)
1919
self.headers = positional_args[0]

0 commit comments

Comments
 (0)