// offending code· 3 files flaggedpatterns: 8
--- easy_tdx-1.0.0/src/easy_tdx/client.py (excerpt) ---
"""高层行情 API:TdxClient(同步)和 AsyncTdxClient(asyncio)。"""
import asyncio
import json
import logging
from collections.abc import Awaitable, Callable
from dataclasses import asdict
from datetime import datetime
from pathlib import Path
from types import TracebackType
from typing import TypeVar
from zoneinfo import ZoneInfo
import pandas as pd
from ._df import _add_minute_datetime, _merge_bar_datetime, _merge_txn_datetime, _to_df
from .codec.block import parse_block_dat
from .codec.financial import parse_financial_dat, parse_financial_file_list
from .codec.industry import parse_tdxhy_cfg
from .codec.price_rules import compute_price_limits, get_no_limit_window_days
from .commands.base import BaseCommand
from .commands.block_info import GetBlockInfoCmd, GetBlockInfoMetaCmd
from .commands.company_info import GetCompanyInfoCategoryCmd, GetCompanyInfoContentCmd
from .commands.finance_info import GetFinanceInfoCmd
from .commands.fund_flow import GetHistoryFundFlowCmd
from .commands.minute_time import GetHistoryMinuteTimeDataCmd
from .commands.report_file import GetReportFileCmd
from .commands.security_bars import GetIndexBarsCmd, GetSecurityBarsCmd
from .commands.security_count import GetSecurityCountCmd
from .commands.security_list import GetSecurityListCmd
from .commands.security_quotes import GetSecurityQuotesCmd
from .commands.transaction import GetHistoryTransactionDataCmd, GetTransactionDataCmd
from .commands.xdxr_info import GetXdxrInfoCmd
from
--- easy_tdx-1.0.0/src/easy_tdx/transport/async_.py (excerpt) ---
"""异步 TCP 连接(基于 asyncio)。"""
import asyncio
from types import TracebackType
from typing import TYPE_CHECKING, TypeVar
from ..codec.frame import HEADER_SIZE, decompress_body, parse_header
from ..commands.setup import SETUP_COMMANDS
from ..exceptions import TdxConnectionError
if TYPE_CHECKING:
from ..commands.base import BaseCommand
T = TypeVar("T")
_DEFAULT_HOST = "180.153.18.170"
_DEFAULT_PORT = 7709
_DEFAULT_TIMEOUT = 15.0
class AsyncTdxConnection:
"""异步通达信 TCP 连接(asyncio)。
使用示例::
async with AsyncTdxConnection("180.153.18.170") as conn:
result = await conn.execute(SomeCommand(...))
"""
def __init__(
self,
host: str = _DEFAULT_HOST,
port: int = _DEFAULT_PORT,
timeout: float = _DEFAULT_TIMEOUT,
) -> None:
self.host = host
self.port = port
self.timeout = timeout
self._reader: asyncio.StreamReader | None = None
self._writer: asyncio.StreamWriter | None = None
# 单连接不支持请求复用;所有 IO 在连接内串行执行。
self._io_lock = asyncio.Lock()
async def connect(self) -> None:
"""建立 TCP 连接并完成握手。"""
async with self._io_lock:
if self._writer is not None and not self._writer.is_closing():
return
await self._connect_unlocked()
async def close(self) -> None:
"""关闭连接。"""
async with self._io_lock:
await self._close_unlocked()
--- easy_tdx-1.0.0/src/easy_tdx/transport/sync.py (excerpt) ---
"""同步 TCP 连接(基于 socket)。"""
import socket
import time
from types import TracebackType
from typing import TYPE_CHECKING, TypeVar
from ..codec.frame import HEADER_SIZE, decompress_body, parse_header
from ..commands.setup import SETUP_COMMANDS
from ..exceptions import TdxConnectionError
if TYPE_CHECKING:
from ..commands.base import BaseCommand
T = TypeVar("T")
_DEFAULT_HOST = "180.153.18.170"
_DEFAULT_PORT = 7709
_DEFAULT_TIMEOUT = 15.0
# 已知可用的通达信行情服务器(按优先级排序)
# 原有地址
KNOWN_HOSTS: list[str] = [
"180.153.18.170",
"124.71.187.122",
"180.153.18.171",
"180.153.18.172",
"119.147.212.81",
"115.238.56.198",
"115.238.90.165",
"218.75.126.9",
"47.107.75.159",
"59.175.238.38",
# 来自通达信 connect.cfg [HQHOST](2025-05)
"110.41.147.114",
"110.41.2.72",
"101.33.225.16",
"175.178.112.197",
"175.178.128.227",
"43.139.95.83",
"124.223.163.242",
"122.51.120.217",
"150.158.160.2",
"123.60.164.122",
"111.229.247.189",
"124.70.199.56",
"62.234.50.143",
"81.70.151.186",
"82.156.214.79",
"159.75.29.111",
"43.139.18.171",
"81.71.32.47",
"122.51.232.182",
"118.25.98.114",
"121.36.225.169",
"123.60.70.228",
"123.60.73.44",
"124.70.133.119",
"124.71.187.72",
"119.97.185.59",
"129.204.230.128",
"101.42.240.54",
"124.71.9.153",
"123.60.84.66",
"111.230.186.52",
"101.43