11from abc import ABC
22from functools import cached_property
3+ from typing import ClassVar , Union
34
45from 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
610
711
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 ]]] = {}
1914
2015 def all_platforms (self ) -> list :
2116 return list (self .platforms .keys ())
@@ -40,54 +35,61 @@ def get_platforms_details(self) -> list[TranslatorPlatform]:
4035 return sorted (platforms , key = lambda platform : platform .group_name )
4136
4237
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 ]] = {}
4741
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 :
4952 if platform := self .supported_by_roota_platforms .get (platform_id ):
5053 return platform
5154 raise UnsupportedRootAParser (parser = platform_id )
5255
53- def register_supported_by_roota (self , cls ) :
56+ def register_supported_by_roota (self , cls : type [ QueryParser ]) -> type [ QueryParser ] :
5457 parser = cls ()
5558 self .supported_by_roota_platforms [cls .details .platform_id ] = parser
5659 self .platforms [cls .details .platform_id ] = parser
5760 return cls
5861
59- def register_main (self , cls ) :
62+ def register_main (self , cls : type [ QueryParser ]) -> type [ QueryParser ] :
6063 parser = cls ()
6164 self .main_platforms [cls .details .platform_id ] = parser
6265 self .platforms [cls .details .platform_id ] = parser
6366 return cls
6467
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 )
8368
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
8480
85- class RenderManager (Manager ):
86- platforms = {}
8781
82+ class RenderCTIManager (PlatformManager ):
83+ platforms : ClassVar [dict [str , RenderCTI ]] = {}
8884
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
9193
9294
9395parser_manager = ParserManager ()
0 commit comments