Skip to content

Commit 5fb8c11

Browse files
added more type hints
1 parent 483d691 commit 5fb8c11

4 files changed

Lines changed: 47 additions & 19 deletions

File tree

sifter/comparator.py

Lines changed: 15 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,26 @@
1+
from typing import (
2+
TYPE_CHECKING,
3+
Any,
4+
Callable,
5+
Text,
6+
Optional,
7+
Tuple,
8+
Type
9+
)
10+
111
import sifter.handler
212

13+
if TYPE_CHECKING:
14+
from sifter.grammar.comparator import Comparator
15+
316
__all__ = ('register', 'get_match_fn',)
417

518

6-
def register(comparator_name, comparator_cls):
19+
def register(comparator_name: Text, comparator_cls: Type['Comparator']) -> None:
720
sifter.handler.register('comparator', comparator_name, comparator_cls)
821

922

10-
def get_match_fn(comparator, match_type):
23+
def get_match_fn(comparator: Optional[Text], match_type: Optional[Text]) -> Tuple[Callable[[Text, Text, Any], bool], Text, Text]: # TODO: Change Any from Callable
1124
# section 2.7.3: default comparator is 'i;ascii-casemap'
1225
if comparator is None:
1326
comparator = 'i;ascii-casemap'

sifter/grammar/tag.py

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,12 @@
1+
from typing import Text
2+
13
__all__ = ('Tag',)
24

35

46
class Tag(str):
57

6-
def __str__(self):
8+
def __str__(self) -> Text:
79
return ":%s" % super(Tag, self).__str__()
810

9-
def __repr__(self):
11+
def __repr__(self) -> Text:
1012
return "%s('%s')" % ('Tag', super(Tag, self).__repr__())

sifter/handler.py

Lines changed: 11 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,20 @@
1-
_HANDLERS_MAP = {}
1+
from typing import (
2+
Any,
3+
Dict,
4+
Text
5+
)
26

37

4-
def register(handler_type, handler_id, value):
8+
_HANDLERS_MAP: Dict[Text, Dict[Text, Any]] = {}
9+
10+
11+
def register(handler_type: Text, handler_id: Text, value: Any) -> None:
512
_HANDLERS_MAP.setdefault(handler_type, {})[handler_id] = value
613

714

8-
def unregister(handler_type, handler_id):
15+
def unregister(handler_type: Text, handler_id: Text) -> Any:
916
return _HANDLERS_MAP.get(handler_type, {}).pop(handler_id, None)
1017

1118

12-
def get(handler_type, handler_id):
19+
def get(handler_type: Text, handler_id: Text) -> Any:
1320
return _HANDLERS_MAP.get(handler_type, {}).get(handler_id, None)

sifter/validators/tag.py

Lines changed: 17 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -1,20 +1,25 @@
11
from typing import (
2-
Tuple,
32
Union,
43
Optional,
5-
Text
4+
Text,
5+
List,
6+
Tuple
67
)
78

8-
import sifter.grammar
9+
from sifter.grammar.validator import Validator
10+
from sifter.grammar.rule import RuleSyntaxError
11+
from sifter.grammar import tag
12+
from sifter.validators.stringlist import StringList
913
import sifter.handler
1014
import sifter.validators
1115

1216
__all__ = ('Tag', 'MatchType', 'Comparator',)
1317

1418

15-
class Tag(sifter.grammar.Validator):
19+
class Tag(Validator):
1620

17-
def __init__(self, allowed_tags: Optional[Union[Text, bytes, Tuple[Union[Text, bytes], ...]]] = None, tag_arg_validators=None) -> None:
21+
def __init__(self, allowed_tags: Optional[Union[Text, bytes, Tuple[Union[Text, bytes], ...]]] = None, tag_arg_validators: Optional[Tuple[Validator, ...]] = None) -> None:
22+
self.tag_arg_validators: Tuple[Validator, ...]
1823
super(Tag, self).__init__()
1924
self.allowed_tags: Optional[Union[Text, bytes, Tuple[Union[Text, bytes], ...]]] = None
2025
if isinstance(allowed_tags, (str, bytes)):
@@ -26,10 +31,10 @@ def __init__(self, allowed_tags: Optional[Union[Text, bytes, Tuple[Union[Text, b
2631
else:
2732
self.tag_arg_validators = tag_arg_validators
2833

29-
def validate(self, arg_list: sifter.grammar.Tag, starting_index) -> int:
34+
def validate(self, arg_list: List[tag.Tag], starting_index: int) -> Optional[int]:
3035
if starting_index >= len(arg_list):
3136
return 0
32-
if not isinstance(arg_list[starting_index], sifter.grammar.Tag):
37+
if not isinstance(arg_list[starting_index], tag.Tag):
3338
return 0
3439

3540
if self.allowed_tags is not None:
@@ -61,20 +66,21 @@ class Comparator(Tag):
6166
def __init__(self) -> None:
6267
super(Comparator, self).__init__(
6368
('COMPARATOR',),
64-
(sifter.validators.StringList(1),),
69+
(StringList(1),),
6570
)
6671

67-
def validate(self, arg_list, starting_index):
72+
def validate(self, arg_list: List[tag.Tag], starting_index: int) -> Optional[int]:
6873
validated_args = super(Comparator, self).validate(
6974
arg_list,
7075
starting_index
7176
)
72-
if validated_args > 0:
77+
if validated_args and validated_args > 0:
7378
if not sifter.handler.get(
7479
'comparator',
7580
arg_list[starting_index + 1][0],
7681
):
77-
raise sifter.grammar.RuleSyntaxError(
82+
raise RuleSyntaxError(
7883
"'%s' comparator is unknown/unsupported"
7984
% arg_list[starting_index + 1][0]
8085
)
86+
return None

0 commit comments

Comments
 (0)