11from typing import (
22 TYPE_CHECKING ,
3+ cast ,
34 Dict ,
45 List ,
56 Text ,
1718from sifter .grammar .test import Test
1819if TYPE_CHECKING :
1920 from sifter .grammar .tag import Tag
21+ from sifter .grammar .sieveobject import SieveObject
2022
2123
2224class 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 )
0 commit comments