forked from hummingbot/hummingbot-api
-
Notifications
You must be signed in to change notification settings - Fork 1
Expand file tree
/
Copy pathconfig.py
More file actions
136 lines (99 loc) · 4.44 KB
/
config.py
File metadata and controls
136 lines (99 loc) · 4.44 KB
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
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
from typing import List
from pydantic import Field
from pydantic_settings import BaseSettings, SettingsConfigDict
class BrokerSettings(BaseSettings):
"""MQTT Broker configuration for bot communication."""
host: str = Field(default="localhost", description="MQTT broker host")
port: int = Field(default=1883, description="MQTT broker port")
username: str = Field(default="admin", description="MQTT broker username")
password: str = Field(default="password", description="MQTT broker password")
model_config = SettingsConfigDict(env_prefix="BROKER_", extra="ignore")
class DatabaseSettings(BaseSettings):
"""Database configuration."""
url: str = Field(
default="postgresql+asyncpg://hbot:hummingbot-api@localhost:5432/hummingbot_api",
description="Database connection URL"
)
model_config = SettingsConfigDict(env_prefix="DATABASE_", extra="ignore")
class MarketDataSettings(BaseSettings):
"""Market data feed manager configuration."""
cleanup_interval: int = Field(
default=300,
description="How often to run feed cleanup in seconds"
)
feed_timeout: int = Field(
default=600,
description="How long to keep unused feeds alive in seconds"
)
candles_ready_timeout: int = Field(
default=30,
description="How long to wait for a candle feed to become ready in seconds"
)
model_config = SettingsConfigDict(env_prefix="MARKET_DATA_", extra="ignore")
class SecuritySettings(BaseSettings):
"""Security and authentication configuration."""
username: str = Field(default="admin", description="API basic auth username")
password: str = Field(default="admin", description="API basic auth password")
debug_mode: bool = Field(default=False, description="Enable debug mode (disables auth)")
config_password: str = Field(default="a", description="Bot configuration encryption password")
model_config = SettingsConfigDict(
env_prefix="",
extra="ignore" # Ignore extra environment variables
)
class AWSSettings(BaseSettings):
"""AWS configuration for S3 archiving."""
api_key: str = Field(default="", description="AWS API key")
secret_key: str = Field(default="", description="AWS secret key")
s3_default_bucket_name: str = Field(default="", description="Default S3 bucket for archiving")
model_config = SettingsConfigDict(env_prefix="AWS_", extra="ignore")
class GatewaySettings(BaseSettings):
"""Gateway service configuration."""
url: str = Field(
default="http://localhost:15888",
description="Gateway service URL (use 'http://gateway:15888' when running in Docker)"
)
model_config = SettingsConfigDict(env_prefix="GATEWAY_", extra="ignore")
class AppSettings(BaseSettings):
"""Main application settings."""
# Static paths
controllers_path: str = "bots/conf/controllers"
controllers_module: str = "bots.controllers"
password_verification_path: str = "credentials/master_account/.password_verification"
# Environment-configurable settings
logfire_environment: str = Field(
default="dev",
description="Logfire environment name"
)
# Account state update interval
account_update_interval: int = Field(
default=5,
description="How often to update account states in minutes"
)
model_config = SettingsConfigDict(
env_file=".env",
env_file_encoding="utf-8",
case_sensitive=False,
extra="ignore"
)
class Settings(BaseSettings):
"""Combined application settings."""
broker: BrokerSettings = Field(default_factory=BrokerSettings)
database: DatabaseSettings = Field(default_factory=DatabaseSettings)
market_data: MarketDataSettings = Field(default_factory=MarketDataSettings)
security: SecuritySettings = Field(default_factory=SecuritySettings)
aws: AWSSettings = Field(default_factory=AWSSettings)
gateway: GatewaySettings = Field(default_factory=GatewaySettings)
app: AppSettings = Field(default_factory=AppSettings)
# Direct banned_tokens field to handle env parsing
banned_tokens: List[str] = Field(
default=["NAV", "ARS", "ETHW", "ETHF"],
description="List of banned trading tokens"
)
model_config = SettingsConfigDict(
env_file=".env",
env_file_encoding="utf-8",
env_prefix="",
extra="ignore"
)
# Create global settings instance
settings = Settings()