Skip to content

Commit 01012be

Browse files
register extension with handler class
1 parent eba15d3 commit 01012be

8 files changed

Lines changed: 23 additions & 17 deletions

File tree

sifter/commands/fileinto.py

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,7 @@
1414
class CommandFileInto(Command):
1515

1616
HANDLER_ID = 'FILEINTO'
17+
EXTENSION_NAME = 'fileinto'
1718
POSITIONAL_ARGS = [StringList(length=1)]
1819

1920
def evaluate(self, message: Message, state: EvaluationState) -> Optional[Actions]:

sifter/commands/imap4flags.py

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,7 @@
1616
class CommandSetFlag(Command):
1717

1818
HANDLER_ID = 'SETFLAG'
19+
EXTENSION_NAME = 'imap4flags'
1920
POSITIONAL_ARGS = [StringList()]
2021

2122
def evaluate(self, message: Message, state: EvaluationState) -> Optional[Actions]:
@@ -29,6 +30,7 @@ def evaluate(self, message: Message, state: EvaluationState) -> Optional[Actions
2930
class CommandRemoveFlag(Command):
3031

3132
HANDLER_ID = 'REMOVEFLAG'
33+
EXTENSION_NAME = 'imap4flags'
3234
POSITIONAL_ARGS = [StringList()]
3335

3436
def evaluate(self, message: Message, state: EvaluationState) -> Optional[Actions]:
@@ -42,6 +44,7 @@ def evaluate(self, message: Message, state: EvaluationState) -> Optional[Actions
4244
class CommandAddFlag(Command):
4345

4446
HANDLER_ID = 'ADDFLAG'
47+
EXTENSION_NAME = 'imap4flags'
4548
POSITIONAL_ARGS = [StringList()]
4649

4750
def evaluate(self, message: Message, state: EvaluationState) -> Optional[Actions]:

sifter/commands/notify.py

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,7 @@
1616
class CommandNotify(Command):
1717

1818
HANDLER_ID = 'NOTIFY'
19+
EXTENSION_NAME = 'enotify'
1920
TAGGED_ARGS = {
2021
'from': Tag('FROM', (StringList(1),)),
2122
'importance': Tag('IMPORTANCE', (StringList(1),)),

sifter/commands/reject.py

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,7 @@
1414
class CommandReject(Command):
1515

1616
HANDLER_ID: Text = 'REJECT'
17+
EXTENSION_NAME = 'reject'
1718
POSITIONAL_ARGS = [StringList()]
1819

1920
def evaluate(self, message: Message, state: EvaluationState) -> Optional[Actions]:
@@ -26,3 +27,4 @@ def evaluate(self, message: Message, state: EvaluationState) -> Optional[Actions
2627
class CommandEReject(CommandReject):
2728

2829
HANDLER_ID: Text = 'EREJECT'
30+
EXTENSION_NAME = 'ereject'

sifter/commands/variables.py

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,7 @@
1919
class CommandSet(Command):
2020

2121
HANDLER_ID = 'SET'
22+
EXTENSION_NAME = 'variables'
2223
TAGGED_ARGS = {
2324
'lower': Tag('LOWER'),
2425
'upper': Tag('UPPER'),

sifter/extensions/__init__.py

Lines changed: 13 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
from typing import (
22
TYPE_CHECKING,
3+
cast,
34
Dict,
45
List,
56
Text,
@@ -17,6 +18,7 @@
1718
from sifter.grammar.test import Test
1819
if TYPE_CHECKING:
1920
from sifter.grammar.tag import Tag
21+
from sifter.grammar.sieveobject import SieveObject
2022

2123

2224
class ExtensionRegistry():
@@ -27,38 +29,32 @@ class ExtensionRegistry():
2729
Text,
2830
Union[
2931
bool,
30-
Type['Comparator'],
31-
Type['Rule'],
32-
Type['NotificationMethod']
32+
Type['SieveObject']
3333
]
3434
]
3535
] = {}
3636
DEFAULT_EXTENSION: List[Text] = [
37-
'body',
3837
'comparator-i;ascii-casemap',
39-
'comparator-i;octet',
40-
'enotify',
41-
'fileinto',
42-
'imap4flags',
43-
'regex',
44-
'reject',
45-
'ereject',
46-
'variables',
38+
'comparator-i;octet'
39+
'regex'
4740
]
4841

4942
def __init__(self) -> None:
5043
for extension_name in self.DEFAULT_EXTENSION:
5144
self.register_extension(extension_name)
5245

5346
for entry_point in pkg_resources.iter_entry_points('sifter_extensions'):
54-
self.register_handler(entry_point.load())
47+
sifter_extension_cls = cast(Type['SieveObject'], entry_point.load())
48+
self.register_handler(sifter_extension_cls)
49+
if sifter_extension_cls.EXTENSION_NAME is not None:
50+
self.register_extension(sifter_extension_cls.EXTENSION_NAME)
5551

5652
@classmethod
5753
def register_extension(cls, extension_name: Text) -> None:
5854
cls.register('extension', extension_name, True)
5955

6056
@classmethod
61-
def register_handler(cls, ext_cls: Union[Type['Comparator'], Type['Rule']]) -> None:
57+
def register_handler(cls, ext_cls: Type['SieveObject']) -> None:
6258
cls.register(ext_cls.handler_type(), ext_cls.handler_id(), ext_cls)
6359

6460
@classmethod
@@ -100,18 +96,18 @@ def register(
10096
cls,
10197
handler_type: Text,
10298
handler_id: Text,
103-
value: Union[bool, Type['Comparator'], Type['Rule']]
99+
value: Union[bool, Type['SieveObject']]
104100
) -> None:
105101
cls._HANDLERS_MAP.setdefault(handler_type, {})[handler_id] = value
106102

107103
@classmethod
108104
def unregister(
109105
cls, handler_type: Text, handler_id: Text
110-
) -> Optional[Union[bool, Type[NotificationMethod], Type['Comparator'], Type['Rule']]]:
106+
) -> Optional[Union[bool, Type['SieveObject']]]:
111107
return cls._HANDLERS_MAP.get(handler_type, {}).pop(handler_id, None)
112108

113109
@classmethod
114110
def get(
115111
cls, handler_type: Text, handler_id: Text
116-
) -> Optional[Union[bool, Type[NotificationMethod], Type['Comparator'], Type['Rule']]]:
112+
) -> Optional[Union[bool, Type['SieveObject']]]:
117113
return cls._HANDLERS_MAP.get(handler_type, {}).get(handler_id, None)

sifter/grammar/sieveobject.py

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@ class SieveObject():
77

88
HANDLER_TYPE: Optional[Text] = None
99
HANDLER_ID: Optional[Text] = None
10+
EXTENSION_NAME: Optional[Text] = None
1011

1112
@classmethod
1213
def handler_type(cls) -> Text:

sifter/tests/body.py

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,7 @@
2424
class TestBody(Test):
2525

2626
HANDLER_ID = 'BODY'
27+
EXTENSION_NAME = 'body'
2728
TAGGED_ARGS = {
2829
'comparator': Comparator(),
2930
'match_type': MatchType(),

0 commit comments

Comments
 (0)