Skip to content

Commit 974da52

Browse files
fixed mypy and flake8 errors
1 parent 287da00 commit 974da52

6 files changed

Lines changed: 76 additions & 38 deletions

File tree

sifter/commands/notify.py

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -59,6 +59,9 @@ def evaluate(self, message: Message, state: EvaluationState) -> Optional[Actions
5959
if not res:
6060
raise RuleSyntaxError(msg)
6161

62-
state.actions.append('notify', (notify_method, notify_from, notify_importance, notify_options, notify_message)) # type: ignore
62+
state.actions.append(
63+
'notify',
64+
(notify_method, notify_from, notify_importance, notify_options, notify_message) # type: ignore
65+
)
6366

6467
return None

sifter/commands/variables.py

Lines changed: 27 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,18 @@
11
import re
2+
from email.message import Message
3+
from typing import (
4+
Optional,
5+
Text
6+
)
7+
28
from urllib.parse import quote
39
from sifter.grammar.command import Command
410
from sifter.grammar.rule import RuleSyntaxError
511
from sifter.validators.stringlist import StringList
612
from sifter.validators.tag import Tag
713
from sifter.grammar.string import expand_variables
14+
from sifter.grammar.state import EvaluationState
15+
from sifter.grammar.actions import Actions
816

917
__all__ = ('CommandSet',)
1018

@@ -28,34 +36,33 @@ class CommandSet(Command):
2836
StringList(length=1),
2937
]
3038

31-
def __init__(self, arguments=None, tests=None, block=None):
32-
super(CommandSet, self).__init__(arguments, tests, block)
39+
def evaluate(self, message: Message, state: EvaluationState) -> Optional[Actions]:
40+
state.check_required_extension('variables', 'VARIABLES')
3341

34-
self.variable_modifier = self.tagged_args
35-
self.variable_name = self.positional_args[0][0]
36-
if (not re.match(r'^[A-Za-z_][A-Za-z0-9_]*$', self.variable_name)):
37-
raise RuleSyntaxError("Illegal variable name '%s' encountered" % self.variable_name)
38-
self.variable_value = self.positional_args[1][0]
42+
variable_modifier = self.tagged_args
43+
variable_name = self.positional_args[0][0] # type: ignore
44+
if (not re.match(r'^[A-Za-z_][A-Za-z0-9_]*$', variable_name)):
45+
raise RuleSyntaxError("Illegal variable name '%s' encountered" % variable_name)
46+
variable_value: Text = self.positional_args[1][0] # type: ignore
3947

40-
def evaluate(self, message, state):
41-
state.check_required_extension('variables', 'VARIABLES')
42-
variable_value = expand_variables(self.variable_value, state)
43-
if 'lower' in self.variable_modifier:
48+
variable_value = expand_variables(variable_value, state)
49+
if 'lower' in variable_modifier:
4450
variable_value = variable_value.lower()
45-
if 'upper' in self.variable_modifier:
51+
if 'upper' in variable_modifier:
4652
variable_value = variable_value.upper()
47-
if 'lowerfirst' in self.variable_modifier:
53+
if 'lowerfirst' in variable_modifier:
4854
variable_value = variable_value[:1].lower() + variable_value[1:]
49-
if 'upperfirst' in self.variable_modifier:
55+
if 'upperfirst' in variable_modifier:
5056
variable_value = variable_value[:1].upper() + variable_value[1:]
51-
if 'quotewildcard' in self.variable_modifier:
57+
if 'quotewildcard' in variable_modifier:
5258
variable_value = variable_value.replace('*', '\\*')
5359
variable_value = variable_value.replace('?', '\\?')
5460
variable_value = variable_value.replace('\\', '\\\\')
55-
if 'quoteregex' in self.variable_modifier:
61+
if 'quoteregex' in variable_modifier:
5662
variable_value = re.escape(variable_value)
57-
if 'encodeurl' in self.variable_modifier:
63+
if 'encodeurl' in variable_modifier:
5864
variable_value = quote(variable_value, safe='-._~')
59-
if 'length' in self.variable_modifier:
60-
variable_value = "" + len(variable_value)
61-
state.named_variables[self.variable_name] = variable_value
65+
if 'length' in variable_modifier:
66+
variable_value = "" + str(len(variable_value))
67+
state.named_variables[variable_name] = variable_value
68+
return None

sifter/extensions/__init__.py

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -103,9 +103,13 @@ def register(
103103
cls._HANDLERS_MAP.setdefault(handler_type, {})[handler_id] = value
104104

105105
@classmethod
106-
def unregister(cls, handler_type: Text, handler_id: Text) -> Optional[Union[bool, Type[NotificationMethod], Type['Comparator'], Type['Rule']]]:
106+
def unregister(
107+
cls, handler_type: Text, handler_id: Text
108+
) -> Optional[Union[bool, Type[NotificationMethod], Type['Comparator'], Type['Rule']]]:
107109
return cls._HANDLERS_MAP.get(handler_type, {}).pop(handler_id, None)
108110

109111
@classmethod
110-
def get(cls, handler_type: Text, handler_id: Text) -> Optional[Union[bool, Type[NotificationMethod], Type['Comparator'], Type['Rule']]]:
112+
def get(
113+
cls, handler_type: Text, handler_id: Text
114+
) -> Optional[Union[bool, Type[NotificationMethod], Type['Comparator'], Type['Rule']]]:
111115
return cls._HANDLERS_MAP.get(handler_type, {}).get(handler_id, None)

sifter/grammar/notificationmethod.py

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,9 @@ def handler_type(cls) -> Text:
1616
@classmethod
1717
def handler_id(cls) -> Text:
1818
if cls.NOTIFICATION_METHOD_ID is None:
19-
raise NotImplementedError('NotificationMethod must be implemented as subclass as NOTIFICATION_METHOD_ID must be set')
19+
raise NotImplementedError(
20+
'NotificationMethod must be implemented as subclass as NOTIFICATION_METHOD_ID must be set'
21+
)
2022
return cls.NOTIFICATION_METHOD_ID
2123

2224
@classmethod

sifter/tests/body.py

Lines changed: 22 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,12 @@
11
import re
2+
from email.message import Message
23
from typing import (
3-
Text
4+
TYPE_CHECKING,
5+
Text,
6+
Optional,
7+
List,
8+
Union,
9+
SupportsInt
410
)
511
from sifter.grammar.state import EvaluationState
612

@@ -9,6 +15,10 @@
915
from sifter.validators.tag import Comparator, MatchType, BodyTransform
1016
from sifter.grammar.string import compare as string_compare, expand_variables
1117

18+
if TYPE_CHECKING:
19+
from sifter.grammar.tag import Tag
20+
from sifter.grammar.string import String
21+
1222

1323
# RFC 5173
1424
class TestBody(Test):
@@ -23,13 +33,18 @@ class TestBody(Test):
2333
StringList(),
2434
]
2535

26-
def __init__(self, arguments=None, tests=None):
36+
def __init__(
37+
self,
38+
arguments: Optional[List[Union['Tag', SupportsInt, List[Union[Text, 'String']]]]] = None,
39+
tests: Optional[List['Test']] = None,
40+
validate: bool = True
41+
) -> None:
2742
super(TestBody, self).__init__(arguments, tests)
2843

2944
self.keylist = self.positional_args[0]
3045
self.body_transform = self.match_type = self.comparator = None
3146
if 'comparator' in self.tagged_args:
32-
self.comparator = self.tagged_args['comparator'][1][0]
47+
self.comparator = self.tagged_args['comparator'][1][0] # type: ignore
3348
if 'match_type' in self.tagged_args:
3449
self.match_type = self.tagged_args['match_type'][0]
3550
if 'body_transform' in self.tagged_args:
@@ -39,11 +54,11 @@ def __init__(self, arguments=None, tests=None):
3954
elif body_transform_type == 'TEXT':
4055
self.body_transform = ['text']
4156
else:
42-
self.body_transform = self.tagged_args['body_transform'][1]
57+
self.body_transform = self.tagged_args['body_transform'][1] # type: ignore
4358
else:
4459
self.body_transform = ['text']
4560

46-
def evaluate(self, message, state):
61+
def evaluate(self, message: Message, state: EvaluationState) -> Optional[bool]:
4762
state.check_required_extension('body', 'tests against the email body')
4863
if not self.body_transform: # RAW
4964
# Flatten message, match header / body separator (two new-lines);
@@ -73,8 +88,8 @@ def evaluate(self, message, state):
7388
return False
7489

7590
def evaluate_part(self, part_str: Text, state: EvaluationState) -> bool:
76-
for key in self.keylist:
91+
for key in self.keylist: # type: ignore
7792
key = expand_variables(key, state)
78-
if string_compare(part_str, key, state, self.comparator, self.match_type):
93+
if string_compare(part_str, key, state, self.comparator, self.match_type): # type: ignore
7994
return True
8095
return False

sifter/tests/notify.py

Lines changed: 14 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,11 @@
11
import re
22
from email.message import Message
3-
from typing import Optional
3+
from typing import (
4+
Any,
5+
Optional,
6+
Text,
7+
List
8+
)
49

510
from sifter.grammar.test import Test
611
from sifter.validators.stringlist import StringList
@@ -54,21 +59,23 @@ class TestNotifyMethodCapability(Test):
5459
def evaluate(self, message: Message, state: EvaluationState) -> Optional[bool]:
5560
state.check_required_extension('enotify', 'NOTIFY')
5661

62+
match_type: Text
63+
5764
if 'comparator' in self.tagged_args:
58-
comparator = self.tagged_args['comparator'][1][0]
65+
comparator = self.tagged_args['comparator'][1][0] # type: ignore
5966
else:
6067
comparator = 'i;ascii-casemap'
6168
if 'match_type' in self.tagged_args:
62-
match_type = self.tagged_args['match_type'][0]
69+
match_type = self.tagged_args['match_type'][0] # type: ignore
6370
else:
6471
match_type = 'IS'
65-
notification_uri = self.positional_args[0][0]
66-
notification_capability = self.positional_args[1][0]
67-
key_list = self.positional_args[2]
72+
notification_uri = self.positional_args[0][0] # type: ignore
73+
notification_capability = self.positional_args[1][0] # type: ignore
74+
key_list: List[Any] = self.positional_args[2] # type: ignore
6875

6976
notification_uri = sifter.grammar.string.expand_variables(notification_uri, state)
7077
notification_capability = sifter.grammar.string.expand_variables(notification_capability, state)
71-
key_list = map(lambda s: sifter.grammar.string.expand_variables(s, state), key_list)
78+
key_list = list(map(lambda s: sifter.grammar.string.expand_variables(s, state), key_list))
7279

7380
m = re.match('^([A-Za-z][A-Za-z0-9.+-]*):', notification_uri)
7481
if not m:

0 commit comments

Comments
 (0)