Refactor and translate comments and docstrings in utility modules to English for better clarity and maintainability. Update Gunicorn and application startup messages for consistency in language. Enhance documentation with English translations for better accessibility.

This commit is contained in:
dienakdz
2026-04-06 16:47:36 +07:00
parent 3ca291a346
commit 11e2e5aaa6
64 changed files with 2323 additions and 2336 deletions
+36 -36
View File
@@ -1,5 +1,5 @@
"""
K线数据服务
K-line data service
"""
from typing import Dict, List, Any, Optional
@@ -12,7 +12,7 @@ logger = get_logger(__name__)
class KlineService:
"""K线数据服务"""
"""K-line data service"""
def __init__(self):
self.cache = CacheManager()
@@ -27,27 +27,27 @@ class KlineService:
before_time: Optional[int] = None
) -> List[Dict[str, Any]]:
"""
获取K线数据
Get K-line data
Args:
market: 市场类型 (Crypto, USStock, Forex, Futures)
symbol: 交易对/股票代码
timeframe: 时间周期
limit: 数据条数
before_time: 获取此时间之前的数据
market: market type (Crypto, USStock, Forex, Futures)
symbol: trading pair/stock code
timeframe: time period
limit: number of data items
before_time: Get data before this time
Returns:
K线数据列表
K-line data list
"""
# 构建缓存键(历史数据不缓存)
# Build a cache key (historical data is not cached)
if not before_time:
cache_key = f"kline:{market}:{symbol}:{timeframe}:{limit}"
cached = self.cache.get(cache_key)
if cached:
# logger.info(f"命中缓存: {cache_key}")
# logger.info(f"Hit cache: {cache_key}")
return cached
# 获取数据
# Get data
klines = DataSourceFactory.get_kline(
market=market,
symbol=symbol,
@@ -56,16 +56,16 @@ class KlineService:
before_time=before_time
)
# 设置缓存(仅最新数据)
# Set cache (latest data only)
if klines and not before_time:
ttl = self.cache_ttl.get(timeframe, 300)
self.cache.set(cache_key, klines, ttl)
# logger.info(f"缓存设置: {cache_key}, TTL: {ttl}s")
# logger.info(f"Cache settings: {cache_key}, TTL: {ttl}s")
return klines
def get_latest_price(self, market: str, symbol: str) -> Optional[Dict[str, Any]]:
"""获取最新价格(使用1分钟K线,已弃用,建议使用 get_realtime_price"""
"""Get the latest price (use 1-minute K-line, deprecated, it is recommended to use get_realtime_price)"""
klines = self.get_kline(market, symbol, '1m', 1)
if klines:
return klines[-1]
@@ -73,29 +73,29 @@ class KlineService:
def get_realtime_price(self, market: str, symbol: str, force_refresh: bool = False) -> Dict[str, Any]:
"""
获取实时价格(优先使用 ticker API,降级使用分钟 K 线)
Get real-time prices (priority to use ticker API, downgrade to minute K-line)
Args:
market: 市场类型 (Crypto, USStock, Forex, Futures)
symbol: 交易对/股票代码
force_refresh: 是否强制刷新(跳过缓存)
market: market type (Crypto, USStock, Forex, Futures)
symbol: trading pair/stock code
force_refresh: whether to force refresh (skip cache)
Returns:
实时价格数据: {
'price': 最新价格,
'change': 涨跌额,
'changePercent': 涨跌幅,
'high': 最高价,
'low': 最低价,
'open': 开盘价,
'previousClose': 昨收价,
'source': 数据来源 ('ticker' 'kline')
Real-time price data: {
'price': latest price,
'change': change amount,
'changePercent': increase or decrease,
'high': highest price,
'low': lowest price,
'open': opening price,
'previousClose': yesterday's closing price,
'source': data source ('ticker' or 'kline')
}
"""
# 构建缓存键(短时间缓存,避免频繁请求)
# Build a cache key (short-term cache to avoid frequent requests)
cache_key = f"realtime_price:{market}:{symbol}"
# 如果不是强制刷新,尝试使用缓存
# If it is not a forced refresh, try using caching
if not force_refresh:
cached = self.cache.get(cache_key)
if cached:
@@ -112,7 +112,7 @@ class KlineService:
'source': 'unknown'
}
# 优先尝试使用 ticker API 获取实时价格
# First try to use the ticker API to get real-time prices
try:
ticker = DataSourceFactory.get_ticker(market, symbol)
if ticker and ticker.get('last', 0) > 0:
@@ -126,13 +126,13 @@ class KlineService:
'previousClose': ticker.get('previousClose', 0),
'source': 'ticker'
}
# 缓存 30 秒
# Cache for 30 seconds
self.cache.set(cache_key, result, 30)
return result
except Exception as e:
logger.debug(f"Ticker API failed for {market}:{symbol}, falling back to kline: {e}")
# 降级:使用 1 分钟 K 线
# Downgrade: Use 1 minute candlestick
try:
klines = self.get_kline(market, symbol, '1m', 2)
if klines and len(klines) > 0:
@@ -153,13 +153,13 @@ class KlineService:
'previousClose': prev_close,
'source': 'kline_1m'
}
# 缓存 30 秒
# Cache for 30 seconds
self.cache.set(cache_key, result, 30)
return result
except Exception as e:
logger.debug(f"1m kline failed for {market}:{symbol}, trying daily: {e}")
# 最后降级:使用日线数据(适用于非交易时间)
# Last downgrade: using daily data (applies to non-trading hours)
try:
klines = self.get_kline(market, symbol, '1D', 2)
if klines and len(klines) > 0:
@@ -180,7 +180,7 @@ class KlineService:
'previousClose': prev_close,
'source': 'kline_1d'
}
# 日线数据缓存 5 分钟
# Daily data cache for 5 minutes
self.cache.set(cache_key, result, 300)
return result
except Exception as e: