integrations.factory

integrations/factory.py

 1"""
 2integrations/factory.py
 3"""
 4
 5from typing import TYPE_CHECKING, Literal, NoReturn, TypeAlias, Union, overload
 6
 7from integrations.discord.adapter import ServiceAdapter as discord_adapter
 8from integrations.slack.adapter import ServiceAdapter as slack_adapter
 9from integrations.standard_io.adapter import ServiceAdapter as std_adapter
10from integrations.web.adapter import ServiceAdapter as web_adapter
11from libs.types import ServiceType
12
13if TYPE_CHECKING:
14    from libs.bootstrap.app_config import AppConfig
15
16
17AdapterType: TypeAlias = Union[
18    slack_adapter,
19    discord_adapter,
20    web_adapter,
21    std_adapter,
22]
23"""アダプタインターフェース"""
24
25
26@overload
27def select_adapter(selected_service: Literal[ServiceType.SLACK], conf: "AppConfig") -> slack_adapter: ...
28
29
30@overload
31def select_adapter(selected_service: Literal[ServiceType.DISCORD], conf: "AppConfig") -> discord_adapter: ...
32
33
34@overload
35def select_adapter(selected_service: Literal[ServiceType.WEB], conf: "AppConfig") -> web_adapter: ...
36
37
38@overload
39def select_adapter(selected_service: Literal[ServiceType.STANDARD_IO], conf: "AppConfig") -> std_adapter: ...
40
41
42@overload
43def select_adapter(selected_service: Literal[ServiceType.UNKNOWN], conf: "AppConfig") -> NoReturn: ...
44
45
46@overload
47def select_adapter(selected_service: ServiceType, conf: "AppConfig") -> AdapterType: ...
48
49
50def select_adapter(selected_service: ServiceType, conf: "AppConfig") -> AdapterType:
51    """
52    インターフェース選択
53
54    Args:
55        selected_service (ServiceType): 選択サービス
56        conf (AppConfig): 設定ファイル
57
58    Raises:
59        ValueError: 未定義サービス
60
61    Returns:
62        AdapterType: アダプタインターフェース
63
64    """
65    match selected_service:
66        case ServiceType.SLACK:
67            return slack_adapter(conf.main_parser)
68        case ServiceType.DISCORD:
69            return discord_adapter(conf.main_parser)
70        case ServiceType.WEB:
71            return web_adapter(conf.main_parser)
72        case ServiceType.STANDARD_IO:
73            return std_adapter(conf.main_parser)
74        case _:
75            raise ValueError(f"Unknown service: {selected_service}")

アダプタインターフェース

51def select_adapter(selected_service: ServiceType, conf: "AppConfig") -> AdapterType:
52    """
53    インターフェース選択
54
55    Args:
56        selected_service (ServiceType): 選択サービス
57        conf (AppConfig): 設定ファイル
58
59    Raises:
60        ValueError: 未定義サービス
61
62    Returns:
63        AdapterType: アダプタインターフェース
64
65    """
66    match selected_service:
67        case ServiceType.SLACK:
68            return slack_adapter(conf.main_parser)
69        case ServiceType.DISCORD:
70            return discord_adapter(conf.main_parser)
71        case ServiceType.WEB:
72            return web_adapter(conf.main_parser)
73        case ServiceType.STANDARD_IO:
74            return std_adapter(conf.main_parser)
75        case _:
76            raise ValueError(f"Unknown service: {selected_service}")

インターフェース選択

Arguments:
  • selected_service (ServiceType): 選択サービス
  • conf (AppConfig): 設定ファイル
Raises:
  • ValueError: 未定義サービス
Returns:

AdapterType: アダプタインターフェース