axdata 0.1.0__py3-none-any.whl

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (427) hide show
  1. axdata/__init__.py +16 -0
  2. axdata/cache.py +19 -0
  3. axdata/client.py +1223 -0
  4. axdata-0.1.0.dist-info/METADATA +238 -0
  5. axdata-0.1.0.dist-info/RECORD +427 -0
  6. axdata-0.1.0.dist-info/WHEEL +5 -0
  7. axdata-0.1.0.dist-info/entry_points.txt +8 -0
  8. axdata-0.1.0.dist-info/licenses/LICENSE +162 -0
  9. axdata-0.1.0.dist-info/top_level.txt +6 -0
  10. axdata_core/__init__.py +221 -0
  11. axdata_core/_tdx_wire/__init__.py +35 -0
  12. axdata_core/_tdx_wire/_shim.py +140 -0
  13. axdata_core/_tdx_wire/api/__init__.py +51 -0
  14. axdata_core/_tdx_wire/api/auction.py +24 -0
  15. axdata_core/_tdx_wire/api/bars.py +24 -0
  16. axdata_core/_tdx_wire/api/base.py +26 -0
  17. axdata_core/_tdx_wire/api/codes.py +25 -0
  18. axdata_core/_tdx_wire/api/corporate.py +24 -0
  19. axdata_core/_tdx_wire/api/finance.py +24 -0
  20. axdata_core/_tdx_wire/api/intraday.py +24 -0
  21. axdata_core/_tdx_wire/api/quotes.py +26 -0
  22. axdata_core/_tdx_wire/api/resources.py +25 -0
  23. axdata_core/_tdx_wire/api/session.py +24 -0
  24. axdata_core/_tdx_wire/api/trades.py +24 -0
  25. axdata_core/_tdx_wire/client.py +33 -0
  26. axdata_core/_tdx_wire/exceptions.py +27 -0
  27. axdata_core/_tdx_wire/hosts.py +106 -0
  28. axdata_core/_tdx_wire/models/__init__.py +93 -0
  29. axdata_core/_tdx_wire/models/auction.py +26 -0
  30. axdata_core/_tdx_wire/models/corporate.py +27 -0
  31. axdata_core/_tdx_wire/models/finance.py +26 -0
  32. axdata_core/_tdx_wire/models/intraday.py +31 -0
  33. axdata_core/_tdx_wire/models/kline.py +27 -0
  34. axdata_core/_tdx_wire/models/quote.py +32 -0
  35. axdata_core/_tdx_wire/models/resource.py +24 -0
  36. axdata_core/_tdx_wire/models/security.py +24 -0
  37. axdata_core/_tdx_wire/models/session.py +27 -0
  38. axdata_core/_tdx_wire/models/subchart.py +25 -0
  39. axdata_core/_tdx_wire/models/trade.py +28 -0
  40. axdata_core/_tdx_wire/protocol/__init__.py +49 -0
  41. axdata_core/_tdx_wire/protocol/commands/__init__.py +43 -0
  42. axdata_core/_tdx_wire/protocol/commands/auction.py +110 -0
  43. axdata_core/_tdx_wire/protocol/commands/codec.py +43 -0
  44. axdata_core/_tdx_wire/protocol/commands/corporate.py +98 -0
  45. axdata_core/_tdx_wire/protocol/commands/finance.py +96 -0
  46. axdata_core/_tdx_wire/protocol/commands/intraday.py +122 -0
  47. axdata_core/_tdx_wire/protocol/commands/klines.py +102 -0
  48. axdata_core/_tdx_wire/protocol/commands/lookup.py +36 -0
  49. axdata_core/_tdx_wire/protocol/commands/price_limits.py +89 -0
  50. axdata_core/_tdx_wire/protocol/commands/quotes.py +102 -0
  51. axdata_core/_tdx_wire/protocol/commands/registry.py +36 -0
  52. axdata_core/_tdx_wire/protocol/commands/resources.py +99 -0
  53. axdata_core/_tdx_wire/protocol/commands/security.py +103 -0
  54. axdata_core/_tdx_wire/protocol/commands/session.py +82 -0
  55. axdata_core/_tdx_wire/protocol/commands/subchart.py +97 -0
  56. axdata_core/_tdx_wire/protocol/commands/trades.py +107 -0
  57. axdata_core/_tdx_wire/protocol/constants.py +124 -0
  58. axdata_core/_tdx_wire/protocol/frame.py +68 -0
  59. axdata_core/_tdx_wire/protocol/unit.py +85 -0
  60. axdata_core/_tdx_wire/py.typed +1 -0
  61. axdata_core/_tdx_wire/transport/__init__.py +34 -0
  62. axdata_core/_tdx_wire/transport/base.py +25 -0
  63. axdata_core/_tdx_wire/transport/memory.py +24 -0
  64. axdata_core/_tdx_wire/transport/pool.py +32 -0
  65. axdata_core/_tdx_wire/transport/socket.py +39 -0
  66. axdata_core/adapters/__init__.py +0 -0
  67. axdata_core/adapters/cls/__init__.py +17 -0
  68. axdata_core/adapters/cls/provider_bridge.py +23 -0
  69. axdata_core/adapters/cls/request.py +632 -0
  70. axdata_core/adapters/cls/source_adapter_registry.py +31 -0
  71. axdata_core/adapters/cninfo/__init__.py +17 -0
  72. axdata_core/adapters/cninfo/provider_bridge.py +25 -0
  73. axdata_core/adapters/cninfo/request.py +2425 -0
  74. axdata_core/adapters/cninfo/source_adapter_registry.py +42 -0
  75. axdata_core/adapters/eastmoney/__init__.py +17 -0
  76. axdata_core/adapters/eastmoney/provider_bridge.py +25 -0
  77. axdata_core/adapters/eastmoney/request.py +1128 -0
  78. axdata_core/adapters/eastmoney/source_adapter_registry.py +42 -0
  79. axdata_core/adapters/exchange/__init__.py +17 -0
  80. axdata_core/adapters/exchange/provider_bridge.py +25 -0
  81. axdata_core/adapters/exchange/request.py +1214 -0
  82. axdata_core/adapters/exchange/source_adapter_registry.py +42 -0
  83. axdata_core/adapters/kph/__init__.py +17 -0
  84. axdata_core/adapters/kph/provider_bridge.py +23 -0
  85. axdata_core/adapters/kph/request.py +509 -0
  86. axdata_core/adapters/kph/source_adapter_registry.py +31 -0
  87. axdata_core/adapters/sina/__init__.py +17 -0
  88. axdata_core/adapters/sina/provider_bridge.py +25 -0
  89. axdata_core/adapters/sina/request.py +5155 -0
  90. axdata_core/adapters/sina/source_adapter_registry.py +42 -0
  91. axdata_core/adapters/tdx/__init__.py +32 -0
  92. axdata_core/adapters/tdx/adjustment.py +50 -0
  93. axdata_core/adapters/tdx/adjustment_fetch.py +51 -0
  94. axdata_core/adapters/tdx/auction_fetch.py +51 -0
  95. axdata_core/adapters/tdx/client_factory.py +110 -0
  96. axdata_core/adapters/tdx/code_fetch.py +62 -0
  97. axdata_core/adapters/tdx/codes.py +54 -0
  98. axdata_core/adapters/tdx/derived_rows.py +69 -0
  99. axdata_core/adapters/tdx/downloader.py +193 -0
  100. axdata_core/adapters/tdx/downloader_interface_sets.py +50 -0
  101. axdata_core/adapters/tdx/downloader_profiles.py +43 -0
  102. axdata_core/adapters/tdx/downloader_registry.py +115 -0
  103. axdata_core/adapters/tdx/execution_utils.py +55 -0
  104. axdata_core/adapters/tdx/f10_executor.py +57 -0
  105. axdata_core/adapters/tdx/f10_normalize.py +61 -0
  106. axdata_core/adapters/tdx/f10_params.py +57 -0
  107. axdata_core/adapters/tdx/f10_postprocess.py +67 -0
  108. axdata_core/adapters/tdx/f10_render.py +48 -0
  109. axdata_core/adapters/tdx/f10_request.py +62 -0
  110. axdata_core/adapters/tdx/finance_fetch.py +61 -0
  111. axdata_core/adapters/tdx/finance_maps.py +54 -0
  112. axdata_core/adapters/tdx/finance_normalize.py +57 -0
  113. axdata_core/adapters/tdx/host_config.py +115 -0
  114. axdata_core/adapters/tdx/interface_sets.py +50 -0
  115. axdata_core/adapters/tdx/intraday_fetch.py +68 -0
  116. axdata_core/adapters/tdx/kline_helpers.py +58 -0
  117. axdata_core/adapters/tdx/limit_ladder_fetch.py +60 -0
  118. axdata_core/adapters/tdx/limit_ladder_topics.py +53 -0
  119. axdata_core/adapters/tdx/normalize_utils.py +75 -0
  120. axdata_core/adapters/tdx/options.py +61 -0
  121. axdata_core/adapters/tdx/price_limit_calendar.py +49 -0
  122. axdata_core/adapters/tdx/price_limit_fetch.py +53 -0
  123. axdata_core/adapters/tdx/price_limit_history.py +50 -0
  124. axdata_core/adapters/tdx/price_limits.py +58 -0
  125. axdata_core/adapters/tdx/provider_bridge.py +68 -0
  126. axdata_core/adapters/tdx/quote_fetch.py +61 -0
  127. axdata_core/adapters/tdx/quote_identity.py +49 -0
  128. axdata_core/adapters/tdx/rank_fetch.py +55 -0
  129. axdata_core/adapters/tdx/rank_params.py +52 -0
  130. axdata_core/adapters/tdx/realtime_refresh.py +45 -0
  131. axdata_core/adapters/tdx/request.py +11 -0
  132. axdata_core/adapters/tdx/request_adapter_runtime.py +41 -0
  133. axdata_core/adapters/tdx/request_client.py +51 -0
  134. axdata_core/adapters/tdx/request_compat.py +89 -0
  135. axdata_core/adapters/tdx/request_dispatch.py +50 -0
  136. axdata_core/adapters/tdx/request_filters.py +60 -0
  137. axdata_core/adapters/tdx/request_host_config.py +110 -0
  138. axdata_core/adapters/tdx/request_limits.py +59 -0
  139. axdata_core/adapters/tdx/request_methods.py +41 -0
  140. axdata_core/adapters/tdx/request_params.py +62 -0
  141. axdata_core/adapters/tdx/request_seams.py +41 -0
  142. axdata_core/adapters/tdx/resources/__init__.py +0 -0
  143. axdata_core/adapters/tdx/resources/finance_maps/__init__.py +0 -0
  144. axdata_core/adapters/tdx/resources/finance_maps/incon.dat +3702 -0
  145. axdata_core/adapters/tdx/resources/finance_maps/tdxhy.cfg +5620 -0
  146. axdata_core/adapters/tdx/resources/finance_maps/tdxzs.cfg +605 -0
  147. axdata_core/adapters/tdx/security_codes.py +54 -0
  148. axdata_core/adapters/tdx/series_history.py +57 -0
  149. axdata_core/adapters/tdx/server_cache.py +58 -0
  150. axdata_core/adapters/tdx/snapshot_normalize.py +56 -0
  151. axdata_core/adapters/tdx/source_adapter_registry.py +69 -0
  152. axdata_core/adapters/tdx/source_execution.py +44 -0
  153. axdata_core/adapters/tdx/source_execution_registry.py +70 -0
  154. axdata_core/adapters/tdx/stats_cache.py +184 -0
  155. axdata_core/adapters/tdx/stats_models.py +159 -0
  156. axdata_core/adapters/tdx/stats_resource.py +304 -0
  157. axdata_core/adapters/tdx/status_fetch.py +55 -0
  158. axdata_core/adapters/tdx/time_series_normalize.py +67 -0
  159. axdata_core/adapters/tdx/tqlex.py +50 -0
  160. axdata_core/adapters/tdx/wire_requests.py +60 -0
  161. axdata_core/adapters/tdx_ext/__init__.py +66 -0
  162. axdata_core/adapters/tdx_ext/client.py +688 -0
  163. axdata_core/adapters/tdx_ext/exceptions.py +51 -0
  164. axdata_core/adapters/tdx_ext/host_config.py +40 -0
  165. axdata_core/adapters/tdx_ext/interface_sets.py +65 -0
  166. axdata_core/adapters/tdx_ext/local_cache.py +649 -0
  167. axdata_core/adapters/tdx_ext/models.py +96 -0
  168. axdata_core/adapters/tdx_ext/options.py +36 -0
  169. axdata_core/adapters/tdx_ext/pool.py +153 -0
  170. axdata_core/adapters/tdx_ext/provider_bridge.py +35 -0
  171. axdata_core/adapters/tdx_ext/request.py +498 -0
  172. axdata_core/adapters/tdx_ext/request_execution.py +118 -0
  173. axdata_core/adapters/tdx_ext/request_instruments.py +221 -0
  174. axdata_core/adapters/tdx_ext/request_normalize.py +356 -0
  175. axdata_core/adapters/tdx_ext/request_params.py +157 -0
  176. axdata_core/adapters/tdx_ext/request_series.py +98 -0
  177. axdata_core/adapters/tdx_ext/server_cache.py +13 -0
  178. axdata_core/adapters/tdx_ext/servers.py +35 -0
  179. axdata_core/adapters/tdx_ext/source_adapter_registry.py +42 -0
  180. axdata_core/adapters/tdx_ext/source_execution.py +19 -0
  181. axdata_core/adapters/tdx_ext/source_execution_registry.py +43 -0
  182. axdata_core/adapters/tencent/__init__.py +17 -0
  183. axdata_core/adapters/tencent/provider_bridge.py +25 -0
  184. axdata_core/adapters/tencent/request.py +729 -0
  185. axdata_core/adapters/tencent/source_adapter_registry.py +42 -0
  186. axdata_core/axp.py +1843 -0
  187. axdata_core/builtin_providers.py +586 -0
  188. axdata_core/builtin_source_declarations.py +156 -0
  189. axdata_core/cli.py +1818 -0
  190. axdata_core/collector_registry.py +227 -0
  191. axdata_core/collector_runner.py +1016 -0
  192. axdata_core/collector_scheduler.py +3155 -0
  193. axdata_core/collector_templates.py +339 -0
  194. axdata_core/data_browser.py +1696 -0
  195. axdata_core/diagnostics.py +734 -0
  196. axdata_core/downloader_engine.py +1480 -0
  197. axdata_core/downloader_registry.py +62 -0
  198. axdata_core/downloaders.py +1619 -0
  199. axdata_core/legacy_provider_adapter.py +68 -0
  200. axdata_core/paths.py +51 -0
  201. axdata_core/plugin_config.py +272 -0
  202. axdata_core/plugin_status.py +419 -0
  203. axdata_core/plugins.py +1363 -0
  204. axdata_core/provider_catalog.py +462 -0
  205. axdata_core/provider_registry.py +833 -0
  206. axdata_core/quality.py +86 -0
  207. axdata_core/query.py +242 -0
  208. axdata_core/resources/__init__.py +2 -0
  209. axdata_core/resources/tdx_extended_servers.json +22 -0
  210. axdata_core/resources/tdx_quote_servers.json +49 -0
  211. axdata_core/sample_collectors.py +42 -0
  212. axdata_core/schema.py +385 -0
  213. axdata_core/source_adapter_factory.py +95 -0
  214. axdata_core/source_adapter_options.py +18 -0
  215. axdata_core/source_errors.py +43 -0
  216. axdata_core/source_execution_options.py +37 -0
  217. axdata_core/source_execution_registry.py +27 -0
  218. axdata_core/source_projection.py +21 -0
  219. axdata_core/source_request.py +441 -0
  220. axdata_core/source_session.py +355 -0
  221. axdata_core/sources/__init__.py +40 -0
  222. axdata_core/sources/base.py +112 -0
  223. axdata_core/sources/catalog.py +60 -0
  224. axdata_core/sources/cls/__init__.py +5 -0
  225. axdata_core/sources/cls/catalog.py +231 -0
  226. axdata_core/sources/cninfo/__init__.py +5 -0
  227. axdata_core/sources/cninfo/catalog.py +1994 -0
  228. axdata_core/sources/display_docs.py +139 -0
  229. axdata_core/sources/eastmoney/__init__.py +5 -0
  230. axdata_core/sources/eastmoney/catalog.py +509 -0
  231. axdata_core/sources/exchange/__init__.py +5 -0
  232. axdata_core/sources/exchange/catalog.py +361 -0
  233. axdata_core/sources/kph/__init__.py +5 -0
  234. axdata_core/sources/kph/catalog.py +255 -0
  235. axdata_core/sources/sina/__init__.py +5 -0
  236. axdata_core/sources/sina/catalog.py +2951 -0
  237. axdata_core/sources/tdx/__init__.py +5 -0
  238. axdata_core/sources/tdx/catalog.py +4546 -0
  239. axdata_core/sources/tdx_ext/__init__.py +5 -0
  240. axdata_core/sources/tdx_ext/catalog.py +1518 -0
  241. axdata_core/sources/tencent/__init__.py +5 -0
  242. axdata_core/sources/tencent/catalog.py +370 -0
  243. axdata_core/storage.py +186 -0
  244. axdata_core/tdx_f10_catalog.py +52 -0
  245. axdata_core/tdx_f10_models.py +50 -0
  246. axdata_core/tdx_f10_names.py +47 -0
  247. axdata_core/tdx_f10_specs.py +56 -0
  248. axdata_core/tdx_plugin_required.py +43 -0
  249. axdata_core/tdx_server_config.py +65 -0
  250. axdata_core/trade_calendar_cache.py +397 -0
  251. axdata_source_cninfo/__init__.py +15 -0
  252. axdata_source_cninfo/adapter.py +31 -0
  253. axdata_source_cninfo/axdata-provider.json +384 -0
  254. axdata_source_cninfo/catalog.py +209 -0
  255. axdata_source_cninfo/metadata.py +8 -0
  256. axdata_source_cninfo/provider.py +41 -0
  257. axdata_source_tdx/__init__.py +15 -0
  258. axdata_source_tdx/_tdx_wire/__init__.py +26 -0
  259. axdata_source_tdx/_tdx_wire/_binary.py +218 -0
  260. axdata_source_tdx/_tdx_wire/_code_utils.py +42 -0
  261. axdata_source_tdx/_tdx_wire/_command_codec.py +186 -0
  262. axdata_source_tdx/_tdx_wire/_command_codes.py +74 -0
  263. axdata_source_tdx/_tdx_wire/_command_defaults.py +15 -0
  264. axdata_source_tdx/_tdx_wire/_command_dispatch.py +96 -0
  265. axdata_source_tdx/_tdx_wire/_command_layouts.py +96 -0
  266. axdata_source_tdx/_tdx_wire/_command_lookup.py +25 -0
  267. axdata_source_tdx/_tdx_wire/_command_metadata.py +32 -0
  268. axdata_source_tdx/_tdx_wire/_command_registry.py +61 -0
  269. axdata_source_tdx/_tdx_wire/_connection_defaults.py +13 -0
  270. axdata_source_tdx/_tdx_wire/_host_defaults.py +51 -0
  271. axdata_source_tdx/_tdx_wire/_host_probe.py +81 -0
  272. axdata_source_tdx/_tdx_wire/_host_resource.py +70 -0
  273. axdata_source_tdx/_tdx_wire/_host_utils.py +31 -0
  274. axdata_source_tdx/_tdx_wire/_market.py +66 -0
  275. axdata_source_tdx/_tdx_wire/_request_defaults.py +11 -0
  276. axdata_source_tdx/_tdx_wire/_security_classification.py +61 -0
  277. axdata_source_tdx/_tdx_wire/_time_utils.py +7 -0
  278. axdata_source_tdx/_tdx_wire/api/__init__.py +45 -0
  279. axdata_source_tdx/_tdx_wire/api/auction.py +25 -0
  280. axdata_source_tdx/_tdx_wire/api/bars.py +31 -0
  281. axdata_source_tdx/_tdx_wire/api/base.py +39 -0
  282. axdata_source_tdx/_tdx_wire/api/codes.py +25 -0
  283. axdata_source_tdx/_tdx_wire/api/corporate.py +11 -0
  284. axdata_source_tdx/_tdx_wire/api/finance.py +10 -0
  285. axdata_source_tdx/_tdx_wire/api/intraday.py +38 -0
  286. axdata_source_tdx/_tdx_wire/api/quotes.py +78 -0
  287. axdata_source_tdx/_tdx_wire/api/resources.py +34 -0
  288. axdata_source_tdx/_tdx_wire/api/session.py +16 -0
  289. axdata_source_tdx/_tdx_wire/api/trades.py +34 -0
  290. axdata_source_tdx/_tdx_wire/client.py +470 -0
  291. axdata_source_tdx/_tdx_wire/exceptions.py +25 -0
  292. axdata_source_tdx/_tdx_wire/hosts.py +27 -0
  293. axdata_source_tdx/_tdx_wire/models/__init__.py +87 -0
  294. axdata_source_tdx/_tdx_wire/models/auction.py +58 -0
  295. axdata_source_tdx/_tdx_wire/models/corporate.py +59 -0
  296. axdata_source_tdx/_tdx_wire/models/finance.py +80 -0
  297. axdata_source_tdx/_tdx_wire/models/intraday.py +112 -0
  298. axdata_source_tdx/_tdx_wire/models/kline.py +58 -0
  299. axdata_source_tdx/_tdx_wire/models/quote.py +262 -0
  300. axdata_source_tdx/_tdx_wire/models/resource.py +18 -0
  301. axdata_source_tdx/_tdx_wire/models/security.py +28 -0
  302. axdata_source_tdx/_tdx_wire/models/session.py +30 -0
  303. axdata_source_tdx/_tdx_wire/models/subchart.py +39 -0
  304. axdata_source_tdx/_tdx_wire/models/trade.py +46 -0
  305. axdata_source_tdx/_tdx_wire/protocol/__init__.py +43 -0
  306. axdata_source_tdx/_tdx_wire/protocol/_frame_constants.py +5 -0
  307. axdata_source_tdx/_tdx_wire/protocol/commands/__init__.py +37 -0
  308. axdata_source_tdx/_tdx_wire/protocol/commands/auction.py +165 -0
  309. axdata_source_tdx/_tdx_wire/protocol/commands/codec.py +37 -0
  310. axdata_source_tdx/_tdx_wire/protocol/commands/corporate.py +163 -0
  311. axdata_source_tdx/_tdx_wire/protocol/commands/finance.py +180 -0
  312. axdata_source_tdx/_tdx_wire/protocol/commands/intraday.py +382 -0
  313. axdata_source_tdx/_tdx_wire/protocol/commands/klines.py +396 -0
  314. axdata_source_tdx/_tdx_wire/protocol/commands/lookup.py +31 -0
  315. axdata_source_tdx/_tdx_wire/protocol/commands/price_limits.py +110 -0
  316. axdata_source_tdx/_tdx_wire/protocol/commands/quotes.py +804 -0
  317. axdata_source_tdx/_tdx_wire/protocol/commands/registry.py +30 -0
  318. axdata_source_tdx/_tdx_wire/protocol/commands/resources.py +107 -0
  319. axdata_source_tdx/_tdx_wire/protocol/commands/security.py +163 -0
  320. axdata_source_tdx/_tdx_wire/protocol/commands/session.py +129 -0
  321. axdata_source_tdx/_tdx_wire/protocol/commands/subchart.py +182 -0
  322. axdata_source_tdx/_tdx_wire/protocol/commands/trades.py +275 -0
  323. axdata_source_tdx/_tdx_wire/protocol/constants.py +70 -0
  324. axdata_source_tdx/_tdx_wire/protocol/frame.py +141 -0
  325. axdata_source_tdx/_tdx_wire/protocol/unit.py +98 -0
  326. axdata_source_tdx/_tdx_wire/py.typed +1 -0
  327. axdata_source_tdx/_tdx_wire/transport/__init__.py +28 -0
  328. axdata_source_tdx/_tdx_wire/transport/base.py +21 -0
  329. axdata_source_tdx/_tdx_wire/transport/memory.py +42 -0
  330. axdata_source_tdx/_tdx_wire/transport/pool.py +148 -0
  331. axdata_source_tdx/_tdx_wire/transport/socket.py +373 -0
  332. axdata_source_tdx/adapter.py +31 -0
  333. axdata_source_tdx/adjustment.py +163 -0
  334. axdata_source_tdx/adjustment_fetch.py +148 -0
  335. axdata_source_tdx/auction_fetch.py +162 -0
  336. axdata_source_tdx/axdata-provider.json +23680 -0
  337. axdata_source_tdx/catalog.py +39 -0
  338. axdata_source_tdx/client_factory.py +61 -0
  339. axdata_source_tdx/code_fetch.py +579 -0
  340. axdata_source_tdx/codes.py +69 -0
  341. axdata_source_tdx/collectors.py +525 -0
  342. axdata_source_tdx/derived_rows.py +500 -0
  343. axdata_source_tdx/downloader.py +139 -0
  344. axdata_source_tdx/downloader_interface_sets.py +29 -0
  345. axdata_source_tdx/downloader_profiles.py +731 -0
  346. axdata_source_tdx/downloader_registry.py +85 -0
  347. axdata_source_tdx/execution_utils.py +141 -0
  348. axdata_source_tdx/f10_executor.py +414 -0
  349. axdata_source_tdx/f10_normalize.py +169 -0
  350. axdata_source_tdx/f10_params.py +221 -0
  351. axdata_source_tdx/f10_postprocess.py +405 -0
  352. axdata_source_tdx/f10_render.py +29 -0
  353. axdata_source_tdx/f10_request.py +365 -0
  354. axdata_source_tdx/finance_fetch.py +514 -0
  355. axdata_source_tdx/finance_maps.py +377 -0
  356. axdata_source_tdx/finance_normalize.py +273 -0
  357. axdata_source_tdx/host_config.py +51 -0
  358. axdata_source_tdx/interface_sets.py +180 -0
  359. axdata_source_tdx/intraday_fetch.py +600 -0
  360. axdata_source_tdx/kline_helpers.py +333 -0
  361. axdata_source_tdx/limit_ladder_fetch.py +614 -0
  362. axdata_source_tdx/limit_ladder_topics.py +280 -0
  363. axdata_source_tdx/metadata.py +8 -0
  364. axdata_source_tdx/normalize_utils.py +264 -0
  365. axdata_source_tdx/options.py +195 -0
  366. axdata_source_tdx/price_limit_calendar.py +106 -0
  367. axdata_source_tdx/price_limit_fetch.py +264 -0
  368. axdata_source_tdx/price_limit_history.py +100 -0
  369. axdata_source_tdx/price_limits.py +142 -0
  370. axdata_source_tdx/provider.py +44 -0
  371. axdata_source_tdx/provider_bridge.py +43 -0
  372. axdata_source_tdx/quote_fetch.py +485 -0
  373. axdata_source_tdx/quote_identity.py +50 -0
  374. axdata_source_tdx/rank_fetch.py +316 -0
  375. axdata_source_tdx/rank_params.py +181 -0
  376. axdata_source_tdx/realtime_refresh.py +51 -0
  377. axdata_source_tdx/request_adapter.py +533 -0
  378. axdata_source_tdx/request_adapter_runtime.py +302 -0
  379. axdata_source_tdx/request_client.py +98 -0
  380. axdata_source_tdx/request_compat.py +432 -0
  381. axdata_source_tdx/request_dispatch.py +138 -0
  382. axdata_source_tdx/request_entrypoints.py +146 -0
  383. axdata_source_tdx/request_filters.py +154 -0
  384. axdata_source_tdx/request_host_config.py +103 -0
  385. axdata_source_tdx/request_limits.py +15 -0
  386. axdata_source_tdx/request_methods.py +1910 -0
  387. axdata_source_tdx/request_params.py +225 -0
  388. axdata_source_tdx/request_seams.py +534 -0
  389. axdata_source_tdx/resources/__init__.py +0 -0
  390. axdata_source_tdx/resources/finance_maps/__init__.py +1 -0
  391. axdata_source_tdx/resources/finance_maps/incon.dat +3702 -0
  392. axdata_source_tdx/resources/finance_maps/tdxhy.cfg +5620 -0
  393. axdata_source_tdx/resources/finance_maps/tdxzs.cfg +605 -0
  394. axdata_source_tdx/resources/tdx_extended_servers.json +22 -0
  395. axdata_source_tdx/resources/tdx_quote_servers.json +49 -0
  396. axdata_source_tdx/security_codes.py +127 -0
  397. axdata_source_tdx/series_history.py +348 -0
  398. axdata_source_tdx/server_cache.py +21 -0
  399. axdata_source_tdx/snapshot_normalize.py +232 -0
  400. axdata_source_tdx/source_adapter_registry.py +42 -0
  401. axdata_source_tdx/source_execution.py +22 -0
  402. axdata_source_tdx/source_execution_registry.py +43 -0
  403. axdata_source_tdx/stats_cache.py +150 -0
  404. axdata_source_tdx/stats_models.py +161 -0
  405. axdata_source_tdx/stats_resource.py +242 -0
  406. axdata_source_tdx/status_fetch.py +209 -0
  407. axdata_source_tdx/tdx_f10_catalog.py +957 -0
  408. axdata_source_tdx/tdx_f10_models.py +47 -0
  409. axdata_source_tdx/tdx_f10_names.py +48 -0
  410. axdata_source_tdx/tdx_f10_specs.py +1142 -0
  411. axdata_source_tdx/tdx_server_config.py +389 -0
  412. axdata_source_tdx/time_series_normalize.py +370 -0
  413. axdata_source_tdx/tqlex.py +138 -0
  414. axdata_source_tdx/wire.py +32 -0
  415. axdata_source_tdx/wire_requests.py +190 -0
  416. axdata_source_tdx_ext/__init__.py +15 -0
  417. axdata_source_tdx_ext/adapter.py +31 -0
  418. axdata_source_tdx_ext/axdata-provider.json +9424 -0
  419. axdata_source_tdx_ext/catalog.py +33 -0
  420. axdata_source_tdx_ext/metadata.py +8 -0
  421. axdata_source_tdx_ext/provider.py +44 -0
  422. axdata_source_tencent/__init__.py +15 -0
  423. axdata_source_tencent/adapter.py +31 -0
  424. axdata_source_tencent/axdata-provider.json +291 -0
  425. axdata_source_tencent/catalog.py +190 -0
  426. axdata_source_tencent/metadata.py +8 -0
  427. axdata_source_tencent/provider.py +41 -0
@@ -0,0 +1,89 @@
1
+ """Compatibility shim for axdata_core._tdx_wire.protocol.commands.price_limits.
2
+
3
+ The provider-owned TDX wire implementation lives in ``axdata_source_tdx._tdx_wire``.
4
+ Lightweight command code/layout facts are exposed without loading the full
5
+ price-limit command parser; other legacy names still load provider-first on demand.
6
+ """
7
+
8
+ from __future__ import annotations
9
+
10
+ import struct
11
+
12
+ from ..._shim import load_provider_first, load_provider_first_cached
13
+
14
+
15
+ _PROVIDER_MODULE = "axdata_source_tdx._tdx_wire.protocol.commands.price_limits"
16
+ _PROVIDER_CODES_MODULE = "axdata_source_tdx._tdx_wire._command_codes"
17
+ _PROVIDER_LAYOUTS_MODULE = "axdata_source_tdx._tdx_wire._command_layouts"
18
+
19
+
20
+ _codes_impl = None
21
+ _layout_impl = None
22
+ _command_impl = None
23
+
24
+
25
+ def _load_codes_impl():
26
+ return load_provider_first_cached(globals(), "_codes_impl", _PROVIDER_CODES_MODULE)
27
+
28
+
29
+ def _load_layout_impl():
30
+ return load_provider_first_cached(
31
+ globals(),
32
+ "_layout_impl",
33
+ _PROVIDER_LAYOUTS_MODULE,
34
+ )
35
+
36
+
37
+ def _command_codes() -> dict[str, int]:
38
+ command_codes = _load_codes_impl().COMMAND_CODES
39
+ globals()["COMMAND_CODES"] = command_codes
40
+ return command_codes
41
+
42
+
43
+ def _command_code(name: str) -> int:
44
+ return _load_codes_impl().command_code(name)
45
+
46
+ __all__ = [
47
+ "COMMAND_CODES",
48
+ "ID_TO_MARKET",
49
+ "PRICE_LIMIT_RECORD_SIZE",
50
+ "PriceLimitRecord",
51
+ "ProtocolError",
52
+ "RequestFrame",
53
+ "ResponseFrame",
54
+ "TYPE_PRICE_LIMITS",
55
+ "annotations",
56
+ "build_price_limits_frame",
57
+ "little_f32",
58
+ "little_u16",
59
+ "little_u32",
60
+ "parse_price_limits_payload",
61
+ "struct",
62
+ ]
63
+
64
+
65
+ def _load_command_impl():
66
+ global _command_impl
67
+ if _command_impl is None:
68
+ _command_impl = load_provider_first(_PROVIDER_MODULE)
69
+ return _command_impl
70
+
71
+
72
+ def __getattr__(name: str):
73
+ if name == "COMMAND_CODES":
74
+ return _command_codes()
75
+ if name == "PRICE_LIMIT_RECORD_SIZE":
76
+ value = _load_layout_impl().PRICE_LIMIT_RECORD_SIZE
77
+ elif name == "TYPE_PRICE_LIMITS":
78
+ value = _command_code("price_limits")
79
+ else:
80
+ if name.startswith("_"):
81
+ raise AttributeError(f"module {__name__!r} has no attribute {name!r}")
82
+ implementation = _load_command_impl()
83
+ value = getattr(implementation, name)
84
+ globals()[name] = value
85
+ return value
86
+
87
+
88
+ def __dir__() -> list[str]:
89
+ return sorted(set(globals()) | set(__all__))
@@ -0,0 +1,102 @@
1
+ """Compatibility shim for axdata_core._tdx_wire.protocol.commands.quotes.
2
+
3
+ The provider-owned TDX wire implementation lives in ``axdata_source_tdx._tdx_wire``.
4
+ Lightweight command code facts are exposed without loading the full quote
5
+ command parser; other legacy names still load provider-first on demand.
6
+ """
7
+
8
+ from __future__ import annotations
9
+
10
+ import struct
11
+ from collections.abc import Iterable, Sequence
12
+
13
+ from ..._shim import load_provider_first, load_provider_first_cached
14
+
15
+
16
+ _PROVIDER_MODULE = "axdata_source_tdx._tdx_wire.protocol.commands.quotes"
17
+ _PROVIDER_CODES_MODULE = "axdata_source_tdx._tdx_wire._command_codes"
18
+
19
+
20
+ _codes_impl = None
21
+ _command_impl = None
22
+
23
+
24
+ def _load_codes_impl():
25
+ return load_provider_first_cached(globals(), "_codes_impl", _PROVIDER_CODES_MODULE)
26
+
27
+
28
+ def _command_codes() -> dict[str, int]:
29
+ command_codes = _load_codes_impl().COMMAND_CODES
30
+ globals()["COMMAND_CODES"] = command_codes
31
+ return command_codes
32
+
33
+
34
+ def _command_code(name: str) -> int:
35
+ return _load_codes_impl().command_code(name)
36
+
37
+ __all__ = [
38
+ "COMMAND_CODES",
39
+ "CategoryQuote",
40
+ "CategoryQuotePage",
41
+ "ExplicitQuote",
42
+ "ID_TO_MARKET",
43
+ "Iterable",
44
+ "LegacyQuote",
45
+ "ProtocolError",
46
+ "QuoteLevel",
47
+ "QuoteRefreshBatch",
48
+ "QuoteRefreshRecord",
49
+ "RequestFrame",
50
+ "ResponseFrame",
51
+ "Sequence",
52
+ "TYPE_CATEGORY_QUOTES",
53
+ "TYPE_EXPLICIT_QUOTES",
54
+ "TYPE_LEGACY_QUOTES",
55
+ "TYPE_REFRESH_QUOTES",
56
+ "annotations",
57
+ "build_category_quotes_frame",
58
+ "build_explicit_quotes_frame",
59
+ "build_legacy_quotes_frame",
60
+ "build_refresh_quotes_frame",
61
+ "decode_compact_float",
62
+ "little_f32",
63
+ "little_u16",
64
+ "little_u32",
65
+ "market_to_id",
66
+ "parse_category_quotes_payload",
67
+ "parse_explicit_quotes_payload",
68
+ "parse_legacy_quotes_payload",
69
+ "parse_refresh_quotes_payload",
70
+ "struct",
71
+ ]
72
+
73
+
74
+ def _load_command_impl():
75
+ global _command_impl
76
+ if _command_impl is None:
77
+ _command_impl = load_provider_first(_PROVIDER_MODULE)
78
+ return _command_impl
79
+
80
+
81
+ def __getattr__(name: str):
82
+ if name == "COMMAND_CODES":
83
+ return _command_codes()
84
+ if name == "TYPE_CATEGORY_QUOTES":
85
+ value = _command_code("category_quotes")
86
+ elif name == "TYPE_EXPLICIT_QUOTES":
87
+ value = _command_code("explicit_quotes")
88
+ elif name == "TYPE_LEGACY_QUOTES":
89
+ value = _command_code("legacy_quotes")
90
+ elif name == "TYPE_REFRESH_QUOTES":
91
+ value = _command_code("refresh_quotes")
92
+ else:
93
+ if name.startswith("_"):
94
+ raise AttributeError(f"module {__name__!r} has no attribute {name!r}")
95
+ implementation = _load_command_impl()
96
+ value = getattr(implementation, name)
97
+ globals()[name] = value
98
+ return value
99
+
100
+
101
+ def __dir__() -> list[str]:
102
+ return sorted(set(globals()) | set(__all__))
@@ -0,0 +1,36 @@
1
+ """Compatibility shim for axdata_core._tdx_wire.protocol.commands.registry.
2
+
3
+ The provider-owned TDX wire implementation lives in ``axdata_source_tdx._tdx_wire``.
4
+ This module keeps old imports working by loading the TDX plugin on demand.
5
+ If the plugin is unavailable, attribute access raises a clear install/enable error.
6
+ """
7
+
8
+ from __future__ import annotations
9
+
10
+ from ..._shim import load_provider_first
11
+
12
+
13
+ _PROVIDER_MODULE = "axdata_source_tdx._tdx_wire._command_registry"
14
+
15
+ __all__ = ["COMMANDS", "CommandSpec", "command_code", "required_commands"]
16
+
17
+ _impl = None
18
+
19
+
20
+ def _load_impl():
21
+ global _impl
22
+ if _impl is None:
23
+ _impl = load_provider_first(_PROVIDER_MODULE)
24
+ return _impl
25
+
26
+
27
+ def __getattr__(name: str):
28
+ if name not in __all__:
29
+ raise AttributeError(f"module {__name__!r} has no attribute {name!r}")
30
+ value = getattr(_load_impl(), name)
31
+ globals()[name] = value
32
+ return value
33
+
34
+
35
+ def __dir__() -> list[str]:
36
+ return sorted(set(globals()) | set(__all__))
@@ -0,0 +1,99 @@
1
+ """Compatibility shim for axdata_core._tdx_wire.protocol.commands.resources.
2
+
3
+ The provider-owned TDX wire implementation lives in ``axdata_source_tdx._tdx_wire``.
4
+ Lightweight command/default facts are exposed without loading the full resource
5
+ command parser; other legacy names still load provider-first on demand.
6
+ """
7
+
8
+ from __future__ import annotations
9
+
10
+ from typing import Any
11
+
12
+ from ..._shim import load_provider_first, load_provider_first_cached
13
+
14
+
15
+ _PROVIDER_MODULE = "axdata_source_tdx._tdx_wire.protocol.commands.resources"
16
+ _PROVIDER_CODES_MODULE = "axdata_source_tdx._tdx_wire._command_codes"
17
+ _PROVIDER_COMMAND_DEFAULTS_MODULE = "axdata_source_tdx._tdx_wire._command_defaults"
18
+ _PROVIDER_REQUEST_DEFAULTS_MODULE = "axdata_source_tdx._tdx_wire._request_defaults"
19
+
20
+
21
+ _codes_impl = None
22
+ _command_defaults_impl = None
23
+ _request_defaults_impl = None
24
+ _command_impl = None
25
+
26
+
27
+ def _load_codes_impl():
28
+ return load_provider_first_cached(globals(), "_codes_impl", _PROVIDER_CODES_MODULE)
29
+
30
+
31
+ def _load_command_defaults_impl():
32
+ return load_provider_first_cached(
33
+ globals(),
34
+ "_command_defaults_impl",
35
+ _PROVIDER_COMMAND_DEFAULTS_MODULE,
36
+ )
37
+
38
+
39
+ def _load_request_defaults_impl():
40
+ return load_provider_first_cached(
41
+ globals(),
42
+ "_request_defaults_impl",
43
+ _PROVIDER_REQUEST_DEFAULTS_MODULE,
44
+ )
45
+
46
+
47
+ def _command_codes() -> dict[str, int]:
48
+ command_codes = _load_codes_impl().COMMAND_CODES
49
+ globals()["COMMAND_CODES"] = command_codes
50
+ return command_codes
51
+
52
+
53
+ def _command_code(name: str) -> int:
54
+ return _load_codes_impl().command_code(name)
55
+
56
+ __all__ = [
57
+ "Any",
58
+ "COMMAND_CODES",
59
+ "DEFAULT_FILE_CHUNK_SIZE",
60
+ "FILE_PATH_FIELD_SIZE",
61
+ "FileContentChunk",
62
+ "ProtocolError",
63
+ "RequestFrame",
64
+ "ResponseFrame",
65
+ "TYPE_FILE_CONTENT",
66
+ "annotations",
67
+ "build_file_content_frame",
68
+ "little_u32",
69
+ "parse_file_content_payload",
70
+ ]
71
+
72
+
73
+ def _load_command_impl():
74
+ global _command_impl
75
+ if _command_impl is None:
76
+ _command_impl = load_provider_first(_PROVIDER_MODULE)
77
+ return _command_impl
78
+
79
+
80
+ def __getattr__(name: str) -> Any:
81
+ if name == "COMMAND_CODES":
82
+ return _command_codes()
83
+ if name == "DEFAULT_FILE_CHUNK_SIZE":
84
+ value = _load_request_defaults_impl().DEFAULT_FILE_CHUNK_SIZE
85
+ elif name == "FILE_PATH_FIELD_SIZE":
86
+ value = _load_command_defaults_impl().FILE_PATH_FIELD_SIZE
87
+ elif name == "TYPE_FILE_CONTENT":
88
+ value = _command_code("file_content")
89
+ else:
90
+ if name.startswith("_"):
91
+ raise AttributeError(f"module {__name__!r} has no attribute {name!r}")
92
+ implementation = _load_command_impl()
93
+ value = getattr(implementation, name)
94
+ globals()[name] = value
95
+ return value
96
+
97
+
98
+ def __dir__() -> list[str]:
99
+ return sorted(set(globals()) | set(__all__))
@@ -0,0 +1,103 @@
1
+ """Compatibility shim for ``axdata_core._tdx_wire.protocol.commands.security``.
2
+
3
+ The provider-owned TDX wire implementation lives in ``axdata_source_tdx._tdx_wire``.
4
+ Lightweight classification helpers are exposed without loading the full security
5
+ command parser; other legacy names still load provider-first on demand.
6
+ """
7
+
8
+ from __future__ import annotations
9
+
10
+ from ..._shim import load_provider_first, load_provider_first_cached
11
+
12
+
13
+ _PROVIDER_MODULE = "axdata_source_tdx._tdx_wire.protocol.commands.security"
14
+ _PROVIDER_CLASSIFICATION_MODULE = "axdata_source_tdx._tdx_wire._security_classification"
15
+ _PROVIDER_LAYOUTS_MODULE = "axdata_source_tdx._tdx_wire._command_layouts"
16
+ _PROVIDER_CODES_MODULE = "axdata_source_tdx._tdx_wire._command_codes"
17
+ _CLASSIFICATION_EXPORTS = {"classify_board", "classify_security"}
18
+ _LAYOUT_EXPORTS = {
19
+ "CODE_RECORD_SIZE",
20
+ "ETF_PREFIXES",
21
+ "FUND_PREFIXES",
22
+ "INDEX_PREFIXES",
23
+ "SSE_A_SHARE_PREFIXES",
24
+ "SZSE_A_SHARE_PREFIXES",
25
+ }
26
+ _COMMAND_CODE_EXPORTS = {
27
+ "TYPE_SECURITY_COUNT": "security_count",
28
+ "TYPE_SECURITY_LIST": "security_list",
29
+ }
30
+
31
+
32
+ _classification_impl = None
33
+ _layout_impl = None
34
+ _codes_impl = None
35
+ _command_impl = None
36
+
37
+
38
+ def _load_classification_impl():
39
+ return load_provider_first_cached(
40
+ globals(),
41
+ "_classification_impl",
42
+ _PROVIDER_CLASSIFICATION_MODULE,
43
+ )
44
+
45
+
46
+ def _load_layout_impl():
47
+ return load_provider_first_cached(
48
+ globals(),
49
+ "_layout_impl",
50
+ _PROVIDER_LAYOUTS_MODULE,
51
+ )
52
+
53
+
54
+ def _load_codes_impl():
55
+ return load_provider_first_cached(globals(), "_codes_impl", _PROVIDER_CODES_MODULE)
56
+
57
+
58
+ def _command_code(name: str) -> int:
59
+ return _load_codes_impl().command_code(name)
60
+
61
+ __all__ = [
62
+ "CODE_RECORD_SIZE",
63
+ "ETF_PREFIXES",
64
+ "FUND_PREFIXES",
65
+ "INDEX_PREFIXES",
66
+ "SSE_A_SHARE_PREFIXES",
67
+ "SZSE_A_SHARE_PREFIXES",
68
+ "TYPE_SECURITY_COUNT",
69
+ "TYPE_SECURITY_LIST",
70
+ "build_security_count_frame",
71
+ "build_security_list_frame",
72
+ "classify_board",
73
+ "classify_security",
74
+ "parse_security_count_payload",
75
+ "parse_security_list_payload",
76
+ ]
77
+
78
+
79
+ def _load_command_impl():
80
+ global _command_impl
81
+ if _command_impl is None:
82
+ _command_impl = load_provider_first(_PROVIDER_MODULE)
83
+ return _command_impl
84
+
85
+
86
+ def __getattr__(name: str):
87
+ if name in _CLASSIFICATION_EXPORTS:
88
+ value = getattr(_load_classification_impl(), name)
89
+ elif name in _LAYOUT_EXPORTS:
90
+ value = getattr(_load_layout_impl(), name)
91
+ elif name in _COMMAND_CODE_EXPORTS:
92
+ value = _command_code(_COMMAND_CODE_EXPORTS[name])
93
+ else:
94
+ if name.startswith("_"):
95
+ raise AttributeError(f"module {__name__!r} has no attribute {name!r}")
96
+ implementation = _load_command_impl()
97
+ value = getattr(implementation, name)
98
+ globals()[name] = value
99
+ return value
100
+
101
+
102
+ def __dir__() -> list[str]:
103
+ return sorted(set(globals()) | set(__all__))
@@ -0,0 +1,82 @@
1
+ """Compatibility shim for axdata_core._tdx_wire.protocol.commands.session.
2
+
3
+ The provider-owned TDX wire implementation lives in ``axdata_source_tdx._tdx_wire``.
4
+ Lightweight session command codes are exposed without loading the full session
5
+ command parser; other legacy names still load provider-first on demand.
6
+ """
7
+
8
+ from __future__ import annotations
9
+
10
+ from datetime import datetime
11
+
12
+ from ..._shim import load_provider_first, load_provider_first_cached
13
+
14
+
15
+ _PROVIDER_MODULE = "axdata_source_tdx._tdx_wire.protocol.commands.session"
16
+ _PROVIDER_CODES_MODULE = "axdata_source_tdx._tdx_wire._command_codes"
17
+
18
+
19
+ _codes_impl = None
20
+ _command_impl = None
21
+
22
+
23
+ def _load_codes_impl():
24
+ return load_provider_first_cached(globals(), "_codes_impl", _PROVIDER_CODES_MODULE)
25
+
26
+
27
+ def _command_codes() -> dict[str, int]:
28
+ command_codes = _load_codes_impl().COMMAND_CODES
29
+ globals()["COMMAND_CODES"] = command_codes
30
+ return command_codes
31
+
32
+
33
+ def _command_code(name: str) -> int:
34
+ return _load_codes_impl().command_code(name)
35
+
36
+ __all__ = [
37
+ "COMMAND_CODES",
38
+ "HandshakeInfo",
39
+ "HeartbeatAck",
40
+ "ProtocolError",
41
+ "RequestFrame",
42
+ "ResponseFrame",
43
+ "TYPE_HANDSHAKE",
44
+ "TYPE_HEARTBEAT",
45
+ "annotations",
46
+ "build_handshake_frame",
47
+ "build_heartbeat_frame",
48
+ "date_from_yyyymmdd",
49
+ "datetime",
50
+ "decode_gbk_text",
51
+ "little_u16",
52
+ "little_u32",
53
+ "parse_handshake_payload",
54
+ "parse_heartbeat_payload",
55
+ ]
56
+
57
+
58
+ def _load_command_impl():
59
+ global _command_impl
60
+ if _command_impl is None:
61
+ _command_impl = load_provider_first(_PROVIDER_MODULE)
62
+ return _command_impl
63
+
64
+
65
+ def __getattr__(name: str):
66
+ if name == "COMMAND_CODES":
67
+ return _command_codes()
68
+ if name == "TYPE_HANDSHAKE":
69
+ value = _command_code("handshake")
70
+ elif name == "TYPE_HEARTBEAT":
71
+ value = _command_code("heartbeat")
72
+ else:
73
+ if name.startswith("_"):
74
+ raise AttributeError(f"module {__name__!r} has no attribute {name!r}")
75
+ implementation = _load_command_impl()
76
+ value = getattr(implementation, name)
77
+ globals()[name] = value
78
+ return value
79
+
80
+
81
+ def __dir__() -> list[str]:
82
+ return sorted(set(globals()) | set(__all__))
@@ -0,0 +1,97 @@
1
+ """Compatibility shim for axdata_core._tdx_wire.protocol.commands.subchart.
2
+
3
+ The provider-owned TDX wire implementation lives in ``axdata_source_tdx._tdx_wire``.
4
+ Lightweight command/layout facts are exposed without loading the full subchart
5
+ command parser; other legacy names still load provider-first on demand.
6
+ """
7
+
8
+ from __future__ import annotations
9
+
10
+ from typing import Any
11
+
12
+ from ..._shim import load_provider_first, load_provider_first_cached
13
+
14
+
15
+ _PROVIDER_MODULE = "axdata_source_tdx._tdx_wire.protocol.commands.subchart"
16
+ _PROVIDER_CODES_MODULE = "axdata_source_tdx._tdx_wire._command_codes"
17
+ _PROVIDER_LAYOUTS_MODULE = "axdata_source_tdx._tdx_wire._command_layouts"
18
+
19
+
20
+ _codes_impl = None
21
+ _layout_impl = None
22
+ _command_impl = None
23
+
24
+
25
+ def _load_codes_impl():
26
+ return load_provider_first_cached(globals(), "_codes_impl", _PROVIDER_CODES_MODULE)
27
+
28
+
29
+ def _load_layout_impl():
30
+ return load_provider_first_cached(
31
+ globals(),
32
+ "_layout_impl",
33
+ _PROVIDER_LAYOUTS_MODULE,
34
+ )
35
+
36
+
37
+ def _command_codes() -> dict[str, int]:
38
+ command_codes = _load_codes_impl().COMMAND_CODES
39
+ globals()["COMMAND_CODES"] = command_codes
40
+ return command_codes
41
+
42
+
43
+ def _command_code(name: str) -> int:
44
+ return _load_codes_impl().command_code(name)
45
+
46
+ __all__ = [
47
+ "Any",
48
+ "COMMAND_CODES",
49
+ "INTRADAY_SUBCHART_BUY_SELL_STRENGTH",
50
+ "INTRADAY_SUBCHART_SELECTOR_NAMES",
51
+ "INTRADAY_SUBCHART_VOLUME_COMPARISON",
52
+ "IntradaySubchartPoint",
53
+ "IntradaySubchartSeries",
54
+ "ProtocolError",
55
+ "RequestFrame",
56
+ "ResponseFrame",
57
+ "TYPE_INTRADAY_SUBCHART",
58
+ "annotations",
59
+ "build_intraday_subchart_frame",
60
+ "consume_tdx_signed_varint",
61
+ "little_f32",
62
+ "little_u16",
63
+ "normalize_intraday_subchart_selector",
64
+ "parse_intraday_subchart_payload",
65
+ "split_code",
66
+ ]
67
+
68
+
69
+ def _load_command_impl():
70
+ global _command_impl
71
+ if _command_impl is None:
72
+ _command_impl = load_provider_first(_PROVIDER_MODULE)
73
+ return _command_impl
74
+
75
+
76
+ def __getattr__(name: str) -> Any:
77
+ if name == "COMMAND_CODES":
78
+ return _command_codes()
79
+ if name == "INTRADAY_SUBCHART_BUY_SELL_STRENGTH":
80
+ value = _load_layout_impl().INTRADAY_SUBCHART_BUY_SELL_STRENGTH
81
+ elif name == "INTRADAY_SUBCHART_SELECTOR_NAMES":
82
+ value = _load_layout_impl().INTRADAY_SUBCHART_SELECTOR_NAMES
83
+ elif name == "INTRADAY_SUBCHART_VOLUME_COMPARISON":
84
+ value = _load_layout_impl().INTRADAY_SUBCHART_VOLUME_COMPARISON
85
+ elif name == "TYPE_INTRADAY_SUBCHART":
86
+ value = _command_code("intraday_subchart")
87
+ else:
88
+ if name.startswith("_"):
89
+ raise AttributeError(f"module {__name__!r} has no attribute {name!r}")
90
+ implementation = _load_command_impl()
91
+ value = getattr(implementation, name)
92
+ globals()[name] = value
93
+ return value
94
+
95
+
96
+ def __dir__() -> list[str]:
97
+ return sorted(set(globals()) | set(__all__))