-
Notifications
You must be signed in to change notification settings - Fork 4
/
Copy pathconfig.py
101 lines (83 loc) · 3.66 KB
/
config.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
import os
from dataclasses import dataclass, field
from lib.logger import configure_logger
from typing import List
logger = configure_logger(__name__)
@dataclass
class DatabaseConfig:
backend: str = os.getenv("AIBTC_BACKEND", "supabase")
user: str = os.getenv("AIBTC_SUPABASE_USER", "")
password: str = os.getenv("AIBTC_SUPABASE_PASSWORD", "")
host: str = os.getenv("AIBTC_SUPABASE_HOST", "")
port: str = os.getenv("AIBTC_SUPABASE_PORT", "")
dbname: str = os.getenv("AIBTC_SUPABASE_DBNAME", "")
url: str = os.getenv("AIBTC_SUPABASE_URL", "")
service_key: str = os.getenv("AIBTC_SUPABASE_SERVICE_KEY", "")
bucket_name: str = os.getenv("AIBTC_SUPABASE_BUCKET_NAME", "")
@dataclass
class TwitterConfig:
enabled: bool = os.getenv("AIBTC_TWITTER_ENABLED", "false").lower() == "true"
interval_seconds: int = int(os.getenv("AIBTC_TWITTER_INTERVAL_SECONDS", "120"))
consumer_key: str = os.getenv("AIBTC_TWITTER_CONSUMER_KEY", "")
consumer_secret: str = os.getenv("AIBTC_TWITTER_CONSUMER_SECRET", "")
client_id: str = os.getenv("AIBTC_TWITTER_CLIENT_ID", "")
client_secret: str = os.getenv("AIBTC_TWITTER_CLIENT_SECRET", "")
access_token: str = os.getenv("AIBTC_TWITTER_ACCESS_TOKEN", "")
access_secret: str = os.getenv("AIBTC_TWITTER_ACCESS_SECRET", "")
automated_user_id: str = os.getenv("AIBTC_TWITTER_AUTOMATED_USER_ID", "")
whitelisted_authors: List[str] = field(
default_factory=lambda: os.getenv("AIBTC_TWITTER_WHITELISTED", "").split(",")
)
@dataclass
class TelegramConfig:
token: str = os.getenv("AIBTC_TELEGRAM_BOT_TOKEN", "")
enabled: bool = os.getenv("AIBTC_TELEGRAM_BOT_ENABLED", "false").lower() == "true"
@dataclass
class SchedulerConfig:
sync_enabled: bool = (
os.getenv("AIBTC_SCHEDULE_SYNC_ENABLED", "false").lower() == "true"
)
sync_interval_seconds: int = int(
os.getenv("AIBTC_SCHEDULE_SYNC_INTERVAL_SECONDS", "60")
)
dao_runner_enabled: bool = (
os.getenv("AIBTC_DAO_RUNNER_ENABLED", "false").lower() == "true"
)
dao_runner_interval_seconds: int = int(
os.getenv("AIBTC_DAO_RUNNER_INTERVAL_SECONDS", "30")
)
tweet_runner_enabled: bool = (
os.getenv("AIBTC_TWEET_RUNNER_ENABLED", "false").lower() == "true"
)
tweet_runner_interval_seconds: int = int(
os.getenv("AIBTC_TWEET_RUNNER_INTERVAL_SECONDS", "30")
)
@dataclass
class APIConfig:
alex_base_url: str = os.getenv("AIBTC_ALEX_BASE_URL", "https://api.alexgo.io/")
hiro_api_url: str = os.getenv("AIBTC_HIRO_API_URL", "https://api.hiro.so")
hiro_api_key: str = os.getenv("HIRO_API_KEY", "")
webhook_url: str = os.getenv("AIBTC_WEBHOOK_URL", "")
webhook_auth: str = os.getenv("AIBTC_WEBHOOK_AUTH", "Bearer 1234567890")
lunarcrush_api_key: str = os.getenv("AIBTC_LUNARCRUSH_API_KEY", "")
cmc_api_key: str = os.getenv("AIBTC_CMC_API_KEY", "")
openai_api_key: str = os.getenv("OPENAI_API_KEY", "")
@dataclass
class NetworkConfig:
network: str = os.getenv("NETWORK", "testnet")
@dataclass
class Config:
db: DatabaseConfig = field(default_factory=DatabaseConfig)
twitter: TwitterConfig = field(default_factory=TwitterConfig)
telegram: TelegramConfig = field(default_factory=TelegramConfig)
scheduler: SchedulerConfig = field(default_factory=SchedulerConfig)
api: APIConfig = field(default_factory=APIConfig)
network: NetworkConfig = field(default_factory=NetworkConfig)
@classmethod
def load(cls) -> "Config":
"""Load and validate configuration"""
config = cls()
logger.info("Configuration loaded successfully")
return config
# Global configuration instance
config = Config.load()