1
1
from abc import ABC
2
2
from functools import cached_property
3
+ from typing import ClassVar , Union
3
4
4
5
from app .models .translation import TranslatorPlatform
5
- from app .translator .core .exceptions .core import UnsupportedRootAParser
6
+ from app .translator .core .exceptions .core import UnsupportedPlatform , UnsupportedRootAParser
7
+ from app .translator .core .parser import QueryParser
8
+ from app .translator .core .render import QueryRender
9
+ from app .translator .core .render_cti import RenderCTI
6
10
7
11
8
- class Manager (ABC ):
9
- platforms = {}
10
-
11
- def register (self , cls ):
12
- self .platforms [cls .details .platform_id ] = cls ()
13
- return cls
14
-
15
- def get (self , platform_id : str ): # noqa: ANN201
16
- if platform := self .platforms .get (platform_id ):
17
- return platform
18
- raise UnsupportedRootAParser (parser = platform_id )
12
+ class PlatformManager (ABC ):
13
+ platforms : ClassVar [dict [str , Union [QueryParser , QueryRender , RenderCTI ]]] = {}
19
14
20
15
def all_platforms (self ) -> list :
21
16
return list (self .platforms .keys ())
@@ -40,54 +35,61 @@ def get_platforms_details(self) -> list[TranslatorPlatform]:
40
35
return sorted (platforms , key = lambda platform : platform .group_name )
41
36
42
37
43
- class ParserManager (Manager ):
44
- platforms = {}
45
- supported_by_roota_platforms = {}
46
- main_platforms = {}
38
+ class ParserManager (PlatformManager ):
39
+ supported_by_roota_platforms : ClassVar [dict [str , QueryParser ]] = {}
40
+ main_platforms : ClassVar [dict [str , QueryParser ]] = {}
47
41
48
- def get_supported_by_roota (self , platform_id : str ): # noqa: ANN201
42
+ def get (self , platform_id : str ) -> QueryParser :
43
+ if platform := self .platforms .get (platform_id ):
44
+ return platform
45
+ raise UnsupportedPlatform (platform = platform_id , is_parser = True )
46
+
47
+ def register (self , cls : type [QueryParser ]) -> type [QueryParser ]:
48
+ self .platforms [cls .details .platform_id ] = cls ()
49
+ return cls
50
+
51
+ def get_supported_by_roota (self , platform_id : str ) -> QueryParser :
49
52
if platform := self .supported_by_roota_platforms .get (platform_id ):
50
53
return platform
51
54
raise UnsupportedRootAParser (parser = platform_id )
52
55
53
- def register_supported_by_roota (self , cls ) :
56
+ def register_supported_by_roota (self , cls : type [ QueryParser ]) -> type [ QueryParser ] :
54
57
parser = cls ()
55
58
self .supported_by_roota_platforms [cls .details .platform_id ] = parser
56
59
self .platforms [cls .details .platform_id ] = parser
57
60
return cls
58
61
59
- def register_main (self , cls ) :
62
+ def register_main (self , cls : type [ QueryParser ]) -> type [ QueryParser ] :
60
63
parser = cls ()
61
64
self .main_platforms [cls .details .platform_id ] = parser
62
65
self .platforms [cls .details .platform_id ] = parser
63
66
return cls
64
67
65
- @cached_property
66
- def get_platforms_details (self ) -> list [TranslatorPlatform ]:
67
- platforms = [
68
- TranslatorPlatform (
69
- id = platform .details .platform_id ,
70
- name = platform .details .name ,
71
- code = platform .details .platform_id ,
72
- group_name = platform .details .group_name ,
73
- group_id = platform .details .group_id ,
74
- platform_name = platform .details .platform_name ,
75
- platform_id = platform .details .platform_id ,
76
- alt_platform_name = platform .details .alt_platform_name ,
77
- alt_platform = platform .details .alt_platform ,
78
- first_choice = platform .details .first_choice ,
79
- )
80
- for platform in self .platforms .values ()
81
- ]
82
- return sorted (platforms , key = lambda platform : platform .group_name )
83
68
69
+ class RenderManager (PlatformManager ):
70
+ platforms : ClassVar [dict [str , QueryRender ]] = {}
71
+
72
+ def get (self , platform_id : str ) -> QueryRender :
73
+ if platform := self .platforms .get (platform_id ):
74
+ return platform
75
+ raise UnsupportedPlatform (platform = platform_id )
76
+
77
+ def register (self , cls : type [QueryRender ]) -> type [QueryRender ]:
78
+ self .platforms [cls .details .platform_id ] = cls ()
79
+ return cls
84
80
85
- class RenderManager (Manager ):
86
- platforms = {}
87
81
82
+ class RenderCTIManager (PlatformManager ):
83
+ platforms : ClassVar [dict [str , RenderCTI ]] = {}
88
84
89
- class RenderCTIManager (Manager ):
90
- platforms = {}
85
+ def get (self , platform_id : str ) -> RenderCTI :
86
+ if platform := self .platforms .get (platform_id ):
87
+ return platform
88
+ raise UnsupportedPlatform (platform = platform_id )
89
+
90
+ def register (self , cls : type [RenderCTI ]) -> type [RenderCTI ]:
91
+ self .platforms [cls .details .platform_id ] = cls ()
92
+ return cls
91
93
92
94
93
95
parser_manager = ParserManager ()
0 commit comments