Skip to main content
Glama
dependencies.py4.3 kB
# src/server/core/dependencies.py """Dependency injection container for the project. All services, adapters, connections, cache, and settings are registered here. Modules can obtain instances via `Container.xxx()`. """ from dependency_injector import containers, providers from src.server.config.settings import get_settings from src.server.infrastructure.connections.redis_connection import RedisConnection from src.server.infrastructure.connections.tushare_connection import TushareConnection from src.server.infrastructure.connections.finnhub_connection import FinnhubConnection from src.server.infrastructure.connections.baostock_connection import BaostockConnection # Adapters (import lazily to avoid heavy imports at container init) from src.server.domain.adapters.yahoo_adapter import YahooAdapter from src.server.domain.adapters.akshare_adapter import AkshareAdapter from src.server.domain.adapters.crypto_adapter import CryptoAdapter from src.server.domain.adapters.tushare_adapter import TushareAdapter from src.server.domain.adapters.finnhub_adapter import FinnhubAdapter from src.server.domain.adapters.baostock_adapter import BaostockAdapter from src.server.domain.adapters.ccxt_adapter import CCXTAdapter # Services from src.server.domain.services.fundamental_service import FundamentalService from src.server.domain.services.news_service import NewsService from src.server.domain.services.technical_service import TechnicalService from src.server.domain.services.filings_service import FilingsService # Cache wrapper (aiocache) from src.server.infrastructure.cache.redis_cache import AsyncRedisCache class Container(containers.DeclarativeContainer): wiring_config = containers.WiringConfiguration(packages=["src.server"]) config = providers.Singleton(get_settings) # Connections redis = providers.Singleton( RedisConnection, config=providers.Callable(lambda cfg: cfg.redis.model_dump(), config), ) tushare = providers.Singleton( TushareConnection, config=providers.Callable(lambda cfg: cfg.tushare.model_dump(), config), ) finnhub = providers.Singleton( FinnhubConnection, config=providers.Callable(lambda cfg: cfg.finnhub.model_dump(), config), ) baostock = providers.Singleton( BaostockConnection, config=providers.Callable(lambda cfg: cfg.baostock.model_dump(), config), ) # Cache (wrap Redis client) cache = providers.Singleton(AsyncRedisCache, redis_client=redis) # Adapters (each receives cache for result caching) yahoo_adapter = providers.Singleton( YahooAdapter, cache=cache, proxy_url=providers.Callable( lambda cfg: f"http://{cfg.proxy.host}:{cfg.proxy.port}" if cfg.proxy.enabled else None, config ) ) akshare_adapter = providers.Singleton(AkshareAdapter, cache=cache) crypto_adapter = providers.Singleton(CryptoAdapter, cache=cache) ccxt_adapter = providers.Singleton(CCXTAdapter, cache=cache) tushare_adapter = providers.Singleton( TushareAdapter, tushare_conn=tushare, cache=cache ) finnhub_adapter = providers.Singleton( FinnhubAdapter, finnhub_conn=finnhub, cache=cache ) baostock_adapter = providers.Singleton( BaostockAdapter, cache=cache ) # Adapter manager from src.server.domain.adapter_manager import AdapterManager adapter_manager = providers.Singleton( AdapterManager ) # MinIO Client from src.server.infrastructure.minio_client import MinioClient minio_client = providers.Singleton(MinioClient) # Services (receive adapter manager and cache) fundamental_service = providers.Factory( FundamentalService, adapter_manager=adapter_manager, cache=cache, ) news_service = providers.Factory( NewsService, adapter_manager=adapter_manager, cache=cache, api_keys=providers.Callable(lambda cfg: cfg.api_keys.model_dump(), config), ) technical_service = providers.Factory( TechnicalService, adapter_manager=adapter_manager, ) filings_service = providers.Factory( FilingsService, adapter_manager=adapter_manager, minio_client=minio_client, )

Latest Blog Posts

MCP directory API

We provide all the information about MCP servers via our MCP API.

curl -X GET 'https://glama.ai/api/mcp/v1/servers/huweihua123/stock-mcp'

If you have feedback or need assistance with the MCP directory API, please join our Discord server