Skip to content

Commit d4861b9

Browse files
authored
Merge pull request #12 from Point72/tkp/backend
Defer backend imports, fixes #1
2 parents b68222f + 6fdb301 commit d4861b9

File tree

10 files changed

+104
-24
lines changed

10 files changed

+104
-24
lines changed

csp_bot/__init__.py

Lines changed: 1 addition & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,7 @@
11
__version__ = "1.0.0"
22

33

4-
# reexport
5-
from csp_adapter_discord import DiscordAdapterConfig
6-
from csp_adapter_slack import SlackAdapterConfig
7-
from csp_adapter_symphony import SymphonyAdapterConfig
8-
4+
from .backends import *
95
from .bot import Bot
106
from .bot_config import *
117
from .commands import *

csp_bot/backends/__init__.py

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
from .discord import *
2+
from .slack import *
3+
from .symphony import *

csp_bot/backends/discord.py

Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,23 @@
1+
from csp import Struct
2+
from pydantic import BaseModel
3+
4+
__all__ = (
5+
"DiscordAdapterConfig",
6+
"DiscordAdapterManager",
7+
"DiscordMessage",
8+
"mention_user_discord",
9+
)
10+
11+
try:
12+
from csp_adapter_discord import DiscordAdapterConfig, DiscordAdapterManager, DiscordMessage, mention_user as mention_user_discord
13+
except ImportError:
14+
15+
class DiscordAdapterConfig(BaseModel):
16+
pass
17+
18+
DiscordAdapterManager = None
19+
20+
class DiscordMessage(Struct):
21+
_ignore: str = ""
22+
23+
mention_user_discord = lambda x: x # noqa: E731

csp_bot/backends/slack.py

Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,24 @@
1+
from csp import Struct
2+
from pydantic import BaseModel
3+
4+
__all__ = (
5+
"SlackAdapterConfig",
6+
"SlackAdapterManager",
7+
"SlackMessage",
8+
"mention_user_slack",
9+
)
10+
11+
# reexport
12+
try:
13+
from csp_adapter_slack import SlackAdapterConfig, SlackAdapterManager, SlackMessage, mention_user as mention_user_slack
14+
except ImportError:
15+
16+
class SlackAdapterConfig(BaseModel):
17+
pass
18+
19+
SlackAdapterManager = None
20+
21+
class SlackMessage(Struct):
22+
_ignore: str = ""
23+
24+
mention_user_slack = lambda x: x # noqa: E731

csp_bot/backends/symphony.py

Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,27 @@
1+
from csp import Struct
2+
from pydantic import BaseModel
3+
4+
__all__ = (
5+
"SymphonyAdapterConfig",
6+
"SymphonyAdapter",
7+
"SymphonyMessage",
8+
"Presence",
9+
"mention_user_symphony",
10+
)
11+
12+
# reexport
13+
try:
14+
from csp_adapter_symphony import SymphonyAdapter, SymphonyAdapterConfig, SymphonyMessage, mention_user as mention_user_symphony
15+
from csp_adapter_symphony.adapter import Presence
16+
except ImportError:
17+
18+
class SymphonyAdapterConfig(BaseModel):
19+
pass
20+
21+
SymphonyAdapter = None
22+
Presence = None
23+
24+
class SymphonyMessage(Struct):
25+
_ignore: str = ""
26+
27+
mention_user_symphony = lambda x: x # noqa: E731

csp_bot/bot.py

Lines changed: 15 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -12,12 +12,17 @@
1212
from bs4 import BeautifulSoup, Tag
1313
from croniter import croniter
1414
from csp import Outputs, ts
15-
from csp_adapter_discord import DiscordAdapterManager, DiscordMessage as RawDiscordMessage
16-
from csp_adapter_slack import SlackAdapterManager, SlackMessage as RawSlackMessage
17-
from csp_adapter_symphony import SymphonyAdapter, SymphonyMessage as RawSymphonyMessage
18-
from csp_adapter_symphony.adapter import Presence
1915
from pydantic import PrivateAttr
2016

17+
from .backends import (
18+
DiscordAdapterManager,
19+
DiscordMessage as RawDiscordMessage,
20+
Presence,
21+
SlackAdapterManager,
22+
SlackMessage as RawSlackMessage,
23+
SymphonyAdapter,
24+
SymphonyMessage as RawSymphonyMessage,
25+
)
2126
from .bot_config import BotConfig
2227
from .commands import (
2328
BaseCommand,
@@ -59,12 +64,18 @@ class Bot(GatewayModule):
5964

6065
def connect(self, channels: GatewayChannels) -> None:
6166
if self.config.discord_config:
67+
if DiscordAdapterManager is None:
68+
raise ImportError("Discord adapter not installed. Please install csp-adapter-discord.")
6269
self._configs["discord"] = self.config.discord_config
6370
self._adapters["discord"] = DiscordAdapterManager(self.config.discord_config.adapter_config)
6471
if self.config.slack_config:
72+
if SlackAdapterManager is None:
73+
raise ImportError("Slack adapter not installed. Please install csp-adapter-slack.")
6574
self._configs["slack"] = self.config.slack_config
6675
self._adapters["slack"] = SlackAdapterManager(self.config.slack_config.adapter_config)
6776
if self.config.symphony_config:
77+
if SymphonyAdapter is None:
78+
raise ImportError("Symphony adapter not installed. Please install csp-adapter-symphony.")
6879
self._configs["symphony"] = self.config.symphony_config
6980
self._adapters["symphony"] = SymphonyAdapter(self.config.symphony_config.adapter_config)
7081

csp_bot/bot_config.py

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,10 @@
11
from typing import List, Optional, Union
22

33
from ccflow import BaseModel
4-
from csp_adapter_discord import DiscordAdapterConfig
5-
from csp_adapter_slack import SlackAdapterConfig
6-
from csp_adapter_symphony import SymphonyAdapterConfig
74
from pydantic import Field
85

6+
from .backends import DiscordAdapterConfig, SlackAdapterConfig, SymphonyAdapterConfig
7+
98
__all__ = (
109
"BaseConfig",
1110
"BotConfig",

csp_bot/structs.py

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -3,11 +3,9 @@
33
from typing import Tuple, Union
44

55
from csp import Struct
6-
from csp_adapter_discord import DiscordMessage as BaseDiscordMessage
7-
from csp_adapter_slack import SlackMessage as BaseSlackMessage
8-
from csp_adapter_symphony import SymphonyMessage as BaseSymphonyMessage
96
from csp_gateway.utils.struct import GatewayStruct
107

8+
from .backends import DiscordMessage as BaseDiscordMessage, SlackMessage as BaseSlackMessage, SymphonyMessage as BaseSymphonyMessage
119
from .utils import Backend
1210

1311
__all__ = (

csp_bot/utils.py

Lines changed: 4 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,7 @@
11
from typing import Literal
22
from urllib.parse import urlparse # quote
33

4-
from csp_adapter_discord import mention_user as discord_mention_user
5-
from csp_adapter_slack import mention_user as slack_mention_user
6-
from csp_adapter_symphony import mention_user as symphony_mention_user
4+
from .backends import mention_user_discord, mention_user_slack, mention_user_symphony
75

86
__all__ = (
97
"is_valid_url",
@@ -58,12 +56,12 @@ def recursive_format_for_message_ml(d):
5856

5957
def mention_user(email_or_userid: str = "", backend: Backend = "symphony") -> str:
6058
if backend == "symphony":
61-
return symphony_mention_user(email_or_userid)
59+
return mention_user_symphony(email_or_userid)
6260
elif backend == "slack":
6361
if not email_or_userid.startswith("@"):
6462
email_or_userid = f"@{email_or_userid}"
65-
return slack_mention_user(email_or_userid)
63+
return mention_user_slack(email_or_userid)
6664
elif backend == "discord":
67-
return discord_mention_user(email_or_userid)
65+
return mention_user_discord(email_or_userid)
6866
else:
6967
raise NotImplementedError(f"Unsupported backend: {backend}")

pyproject.toml

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -38,9 +38,6 @@ dependencies = [
3838
"croniter",
3939
"csp>=0.9,<1",
4040
"csp-gateway>=2,<3",
41-
"csp-adapter-discord>=0.1,<0.2",
42-
"csp-adapter-slack>=0.3,<0.4",
43-
"csp-adapter-symphony>=0.3,<0.4",
4441
"dateparser",
4542
"hydra-core",
4643
"pandas",
@@ -53,6 +50,9 @@ develop = [
5350
"bump-my-version",
5451
"check-manifest",
5552
"codespell>=2.2.6,<2.5",
53+
"csp-adapter-discord>=0.1,<0.2",
54+
"csp-adapter-slack>=0.3,<0.4",
55+
"csp-adapter-symphony>=0.3,<0.4",
5656
"hatchling",
5757
"mdformat>=0.7.17,<0.8",
5858
"mdformat-tables>=1,<1.1",
@@ -141,4 +141,5 @@ known-first-party = ["csp_bot"]
141141
section-order = ["future", "standard-library", "third-party", "first-party", "local-folder"]
142142

143143
[tool.ruff.lint.per-file-ignores]
144+
"csp_bot/backends" = ["F401", "F403"]
144145
"__init__.py" = ["F401", "F403"]

0 commit comments

Comments
 (0)