lib-x17-fintech 2.1.3__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 (282) hide show
  1. lib_x17_fintech-2.1.3.dist-info/METADATA +633 -0
  2. lib_x17_fintech-2.1.3.dist-info/RECORD +282 -0
  3. lib_x17_fintech-2.1.3.dist-info/WHEEL +5 -0
  4. lib_x17_fintech-2.1.3.dist-info/licenses/LICENSE +1 -0
  5. lib_x17_fintech-2.1.3.dist-info/top_level.txt +1 -0
  6. xfintech/__init__.py +0 -0
  7. xfintech/connect/__init__.py +18 -0
  8. xfintech/connect/artifact/__init__.py +5 -0
  9. xfintech/connect/artifact/artifact.py +168 -0
  10. xfintech/connect/artifact/tests/__init__.py +3 -0
  11. xfintech/connect/artifact/tests/test_class_artifact_all.py +564 -0
  12. xfintech/connect/common/__init__.py +12 -0
  13. xfintech/connect/common/connect.py +49 -0
  14. xfintech/connect/common/connectref.py +119 -0
  15. xfintech/connect/common/error.py +62 -0
  16. xfintech/connect/common/tests/__init__.py +1 -0
  17. xfintech/connect/common/tests/test_class_connectlike_all.py +544 -0
  18. xfintech/connect/common/tests/test_class_connectref_all.py +586 -0
  19. xfintech/connect/common/tests/test_class_errors_all.py +524 -0
  20. xfintech/connect/instance/__init__.py +7 -0
  21. xfintech/connect/instance/macos.py +121 -0
  22. xfintech/connect/instance/s3.py +176 -0
  23. xfintech/connect/instance/tests/__init__.py +1 -0
  24. xfintech/connect/instance/tests/test_class_macosconnect_all.py +692 -0
  25. xfintech/connect/instance/tests/test_class_s3connect_all.py +603 -0
  26. xfintech/data/__init__.py +20 -0
  27. xfintech/data/common/__init__.py +15 -0
  28. xfintech/data/common/cache.py +186 -0
  29. xfintech/data/common/coolant.py +171 -0
  30. xfintech/data/common/metric.py +138 -0
  31. xfintech/data/common/paginate.py +132 -0
  32. xfintech/data/common/params.py +162 -0
  33. xfintech/data/common/retry.py +201 -0
  34. xfintech/data/common/tests/__init__.py +1 -0
  35. xfintech/data/common/tests/test_class_cache_all.py +681 -0
  36. xfintech/data/common/tests/test_class_coolant_all.py +534 -0
  37. xfintech/data/common/tests/test_class_metric_all.py +705 -0
  38. xfintech/data/common/tests/test_class_paginate_all.py +508 -0
  39. xfintech/data/common/tests/test_class_params_all.py +891 -0
  40. xfintech/data/common/tests/test_class_retry_all.py +714 -0
  41. xfintech/data/job/__init__.py +17 -0
  42. xfintech/data/job/errors.py +112 -0
  43. xfintech/data/job/house.py +156 -0
  44. xfintech/data/job/job.py +247 -0
  45. xfintech/data/job/joblike.py +47 -0
  46. xfintech/data/job/tests/__init__.py +1 -0
  47. xfintech/data/job/tests/test_class_errors_all.py +275 -0
  48. xfintech/data/job/tests/test_class_house_all.py +801 -0
  49. xfintech/data/job/tests/test_class_job_all.py +684 -0
  50. xfintech/data/job/tests/test_class_joblike_all.py +482 -0
  51. xfintech/data/relay/__init__.py +7 -0
  52. xfintech/data/relay/client.py +114 -0
  53. xfintech/data/relay/clientlike.py +45 -0
  54. xfintech/data/relay/tests/test_class_relayclient_all.py +484 -0
  55. xfintech/data/relay/tests/test_class_relayclientlike_all.py +500 -0
  56. xfintech/data/source/__init__.py +7 -0
  57. xfintech/data/source/baostock/__init__.py +21 -0
  58. xfintech/data/source/baostock/job/__init__.py +5 -0
  59. xfintech/data/source/baostock/job/job.py +217 -0
  60. xfintech/data/source/baostock/job/tests/__init__.py +0 -0
  61. xfintech/data/source/baostock/job/tests/test_class_baostockjob_all.py +547 -0
  62. xfintech/data/source/baostock/session/__init__.py +8 -0
  63. xfintech/data/source/baostock/session/relay.py +223 -0
  64. xfintech/data/source/baostock/session/session.py +241 -0
  65. xfintech/data/source/baostock/session/tests/__init__.py +0 -0
  66. xfintech/data/source/baostock/session/tests/test_class_relay_all.py +694 -0
  67. xfintech/data/source/baostock/session/tests/test_class_session_all.py +505 -0
  68. xfintech/data/source/baostock/stock/__init__.py +0 -0
  69. xfintech/data/source/baostock/stock/hs300stock/__init__.py +3 -0
  70. xfintech/data/source/baostock/stock/hs300stock/constant.py +49 -0
  71. xfintech/data/source/baostock/stock/hs300stock/hs300stock.py +133 -0
  72. xfintech/data/source/baostock/stock/hs300stock/tests/__init__.py +1 -0
  73. xfintech/data/source/baostock/stock/hs300stock/tests/test_class_hs300index_all.py +413 -0
  74. xfintech/data/source/baostock/stock/minuteline/__init__.py +19 -0
  75. xfintech/data/source/baostock/stock/minuteline/constant.py +89 -0
  76. xfintech/data/source/baostock/stock/minuteline/minuteline.py +163 -0
  77. xfintech/data/source/baostock/stock/minuteline/tests/__init__.py +0 -0
  78. xfintech/data/source/baostock/stock/minuteline/tests/test_class_minuteline_all.py +582 -0
  79. xfintech/data/source/baostock/stock/stock/__init__.py +19 -0
  80. xfintech/data/source/baostock/stock/stock/constant.py +55 -0
  81. xfintech/data/source/baostock/stock/stock/stock.py +149 -0
  82. xfintech/data/source/baostock/stock/stock/tests/__init__.py +0 -0
  83. xfintech/data/source/baostock/stock/stock/tests/test_class_stock_all.py +508 -0
  84. xfintech/data/source/baostock/stock/stockinfo/__init__.py +5 -0
  85. xfintech/data/source/baostock/stock/stockinfo/constant.py +66 -0
  86. xfintech/data/source/baostock/stock/stockinfo/stockinfo.py +176 -0
  87. xfintech/data/source/baostock/stock/stockinfo/tests/__init__.py +1 -0
  88. xfintech/data/source/baostock/stock/stockinfo/tests/test_class_stockinfo_all.py +617 -0
  89. xfintech/data/source/baostock/stock/sz50stock/__init__.py +3 -0
  90. xfintech/data/source/baostock/stock/sz50stock/constant.py +49 -0
  91. xfintech/data/source/baostock/stock/sz50stock/sz50stock.py +133 -0
  92. xfintech/data/source/baostock/stock/sz50stock/tests/__init__.py +1 -0
  93. xfintech/data/source/baostock/stock/sz50stock/tests/test_class_sz50stock_all.py +397 -0
  94. xfintech/data/source/baostock/stock/tradedate/__init__.py +19 -0
  95. xfintech/data/source/baostock/stock/tradedate/constant.py +72 -0
  96. xfintech/data/source/baostock/stock/tradedate/tests/__init__.py +0 -0
  97. xfintech/data/source/baostock/stock/tradedate/tests/test_class_tradedate_all.py +695 -0
  98. xfintech/data/source/baostock/stock/tradedate/tradedate.py +208 -0
  99. xfintech/data/source/baostock/stock/zz500stock/__init__.py +3 -0
  100. xfintech/data/source/baostock/stock/zz500stock/constant.py +55 -0
  101. xfintech/data/source/baostock/stock/zz500stock/tests/__init__.py +1 -0
  102. xfintech/data/source/baostock/stock/zz500stock/tests/test_class_zz500stock_all.py +421 -0
  103. xfintech/data/source/baostock/stock/zz500stock/zz500stock.py +133 -0
  104. xfintech/data/source/tushare/__init__.py +61 -0
  105. xfintech/data/source/tushare/job/__init__.py +5 -0
  106. xfintech/data/source/tushare/job/job.py +257 -0
  107. xfintech/data/source/tushare/job/tests/test_class_tusharejob_all.py +589 -0
  108. xfintech/data/source/tushare/session/__init__.py +5 -0
  109. xfintech/data/source/tushare/session/relay.py +231 -0
  110. xfintech/data/source/tushare/session/session.py +239 -0
  111. xfintech/data/source/tushare/session/tests/test_class_relay_all.py +719 -0
  112. xfintech/data/source/tushare/session/tests/test_class_session_all.py +705 -0
  113. xfintech/data/source/tushare/stock/__init__.py +55 -0
  114. xfintech/data/source/tushare/stock/adjfactor/__init__.py +19 -0
  115. xfintech/data/source/tushare/stock/adjfactor/adjfactor.py +150 -0
  116. xfintech/data/source/tushare/stock/adjfactor/constant.py +71 -0
  117. xfintech/data/source/tushare/stock/adjfactor/tests/__init__.py +0 -0
  118. xfintech/data/source/tushare/stock/adjfactor/tests/test_class_adjfactor_all.py +372 -0
  119. xfintech/data/source/tushare/stock/capflow/__init__.py +19 -0
  120. xfintech/data/source/tushare/stock/capflow/capflow.py +171 -0
  121. xfintech/data/source/tushare/stock/capflow/constant.py +105 -0
  122. xfintech/data/source/tushare/stock/capflow/tests/__init__.py +0 -0
  123. xfintech/data/source/tushare/stock/capflow/tests/test_class_capflow_all.py +589 -0
  124. xfintech/data/source/tushare/stock/capflowdc/__init__.py +19 -0
  125. xfintech/data/source/tushare/stock/capflowdc/capflowdc.py +167 -0
  126. xfintech/data/source/tushare/stock/capflowdc/constant.py +95 -0
  127. xfintech/data/source/tushare/stock/capflowdc/tests/__init__.py +0 -0
  128. xfintech/data/source/tushare/stock/capflowdc/tests/test_class_capflowdc_all.py +814 -0
  129. xfintech/data/source/tushare/stock/capflowths/__init__.py +19 -0
  130. xfintech/data/source/tushare/stock/capflowths/capflowths.py +173 -0
  131. xfintech/data/source/tushare/stock/capflowths/constant.py +92 -0
  132. xfintech/data/source/tushare/stock/capflowths/tests/__init__.py +0 -0
  133. xfintech/data/source/tushare/stock/capflowths/tests/test_class_capflowths_all.py +551 -0
  134. xfintech/data/source/tushare/stock/company/__init__.py +19 -0
  135. xfintech/data/source/tushare/stock/company/company.py +188 -0
  136. xfintech/data/source/tushare/stock/company/constant.py +92 -0
  137. xfintech/data/source/tushare/stock/company/tests/__init__.py +1 -0
  138. xfintech/data/source/tushare/stock/company/tests/test_class_company_all.py +829 -0
  139. xfintech/data/source/tushare/stock/companybusiness/__init__.py +21 -0
  140. xfintech/data/source/tushare/stock/companybusiness/companybusiness.py +183 -0
  141. xfintech/data/source/tushare/stock/companybusiness/constant.py +91 -0
  142. xfintech/data/source/tushare/stock/companybusiness/tests/__init__.py +0 -0
  143. xfintech/data/source/tushare/stock/companybusiness/tests/test_class_companybusiness_all.py +633 -0
  144. xfintech/data/source/tushare/stock/companycashflow/__init__.py +21 -0
  145. xfintech/data/source/tushare/stock/companycashflow/companycashflow.py +277 -0
  146. xfintech/data/source/tushare/stock/companycashflow/constant.py +293 -0
  147. xfintech/data/source/tushare/stock/companycashflow/tests/__init__.py +0 -0
  148. xfintech/data/source/tushare/stock/companycashflow/tests/test_class_companycashflow_all.py +619 -0
  149. xfintech/data/source/tushare/stock/companydebt/__init__.py +19 -0
  150. xfintech/data/source/tushare/stock/companydebt/companydebt.py +339 -0
  151. xfintech/data/source/tushare/stock/companydebt/constant.py +403 -0
  152. xfintech/data/source/tushare/stock/companydebt/tests/__init__.py +0 -0
  153. xfintech/data/source/tushare/stock/companydebt/tests/test_class_companydebt_all.py +655 -0
  154. xfintech/data/source/tushare/stock/companyoverview/__init__.py +21 -0
  155. xfintech/data/source/tushare/stock/companyoverview/companyoverview.py +214 -0
  156. xfintech/data/source/tushare/stock/companyoverview/constant.py +152 -0
  157. xfintech/data/source/tushare/stock/companyoverview/tests/__init__.py +0 -0
  158. xfintech/data/source/tushare/stock/companyoverview/tests/test_class_companyoverview_all.py +647 -0
  159. xfintech/data/source/tushare/stock/companyprofit/__init__.py +21 -0
  160. xfintech/data/source/tushare/stock/companyprofit/companyprofit.py +272 -0
  161. xfintech/data/source/tushare/stock/companyprofit/constant.py +259 -0
  162. xfintech/data/source/tushare/stock/companyprofit/tests/__init__.py +0 -0
  163. xfintech/data/source/tushare/stock/companyprofit/tests/test_class_companyprofit_all.py +635 -0
  164. xfintech/data/source/tushare/stock/conceptcapflowdc/__init__.py +21 -0
  165. xfintech/data/source/tushare/stock/conceptcapflowdc/conceptcapflowdc.py +175 -0
  166. xfintech/data/source/tushare/stock/conceptcapflowdc/constant.py +106 -0
  167. xfintech/data/source/tushare/stock/conceptcapflowdc/tests/__init__.py +0 -0
  168. xfintech/data/source/tushare/stock/conceptcapflowdc/tests/test_class_conceptcapflowdc_all.py +568 -0
  169. xfintech/data/source/tushare/stock/conceptcapflowths/__init__.py +21 -0
  170. xfintech/data/source/tushare/stock/conceptcapflowths/conceptcapflowths.py +188 -0
  171. xfintech/data/source/tushare/stock/conceptcapflowths/constant.py +89 -0
  172. xfintech/data/source/tushare/stock/conceptcapflowths/tests/__init__.py +0 -0
  173. xfintech/data/source/tushare/stock/conceptcapflowths/tests/test_class_conceptcapflowths_all.py +516 -0
  174. xfintech/data/source/tushare/stock/dayline/__init__.py +19 -0
  175. xfintech/data/source/tushare/stock/dayline/constant.py +87 -0
  176. xfintech/data/source/tushare/stock/dayline/dayline.py +177 -0
  177. xfintech/data/source/tushare/stock/dayline/tests/__init__.py +0 -0
  178. xfintech/data/source/tushare/stock/dayline/tests/test_class_dayline_all.py +585 -0
  179. xfintech/data/source/tushare/stock/industrycapflowths/__init__.py +21 -0
  180. xfintech/data/source/tushare/stock/industrycapflowths/constant.py +89 -0
  181. xfintech/data/source/tushare/stock/industrycapflowths/industrycapflowths.py +192 -0
  182. xfintech/data/source/tushare/stock/industrycapflowths/tests/__init__.py +0 -0
  183. xfintech/data/source/tushare/stock/industrycapflowths/tests/test_class_industrycapflowths_all.py +683 -0
  184. xfintech/data/source/tushare/stock/marketindexcapflowdc/__init__.py +21 -0
  185. xfintech/data/source/tushare/stock/marketindexcapflowdc/constant.py +90 -0
  186. xfintech/data/source/tushare/stock/marketindexcapflowdc/marketindexcapflowdc.py +173 -0
  187. xfintech/data/source/tushare/stock/marketindexcapflowdc/tests/__init__.py +0 -0
  188. xfintech/data/source/tushare/stock/marketindexcapflowdc/tests/test_class_marketindexcapflowdc_all.py +793 -0
  189. xfintech/data/source/tushare/stock/monthline/__init__.py +19 -0
  190. xfintech/data/source/tushare/stock/monthline/constant.py +87 -0
  191. xfintech/data/source/tushare/stock/monthline/monthline.py +180 -0
  192. xfintech/data/source/tushare/stock/monthline/tests/__init__.py +0 -0
  193. xfintech/data/source/tushare/stock/monthline/tests/test_class_monthline_all.py +574 -0
  194. xfintech/data/source/tushare/stock/stock/__init__.py +19 -0
  195. xfintech/data/source/tushare/stock/stock/constant.py +105 -0
  196. xfintech/data/source/tushare/stock/stock/stock.py +193 -0
  197. xfintech/data/source/tushare/stock/stock/tests/__init__.py +0 -0
  198. xfintech/data/source/tushare/stock/stock/tests/test_class_stock_all.py +788 -0
  199. xfintech/data/source/tushare/stock/stockdividend/__init__.py +21 -0
  200. xfintech/data/source/tushare/stock/stockdividend/constant.py +111 -0
  201. xfintech/data/source/tushare/stock/stockdividend/stockdividend.py +180 -0
  202. xfintech/data/source/tushare/stock/stockdividend/tests/__init__.py +0 -0
  203. xfintech/data/source/tushare/stock/stockdividend/tests/test_class_stockdividend_all.py +725 -0
  204. xfintech/data/source/tushare/stock/stockinfo/__init__.py +19 -0
  205. xfintech/data/source/tushare/stock/stockinfo/constant.py +104 -0
  206. xfintech/data/source/tushare/stock/stockinfo/stockinfo.py +208 -0
  207. xfintech/data/source/tushare/stock/stockinfo/tests/__init__.py +0 -0
  208. xfintech/data/source/tushare/stock/stockinfo/tests/test_class_stockinfo_all.py +881 -0
  209. xfintech/data/source/tushare/stock/stockipo/__init__.py +19 -0
  210. xfintech/data/source/tushare/stock/stockipo/constant.py +90 -0
  211. xfintech/data/source/tushare/stock/stockipo/stockipo.py +234 -0
  212. xfintech/data/source/tushare/stock/stockipo/tests/__init__.py +1 -0
  213. xfintech/data/source/tushare/stock/stockipo/tests/test_class_stockipo_all.py +750 -0
  214. xfintech/data/source/tushare/stock/stockpledge/__init__.py +19 -0
  215. xfintech/data/source/tushare/stock/stockpledge/constant.py +72 -0
  216. xfintech/data/source/tushare/stock/stockpledge/stockpledge.py +158 -0
  217. xfintech/data/source/tushare/stock/stockpledge/tests/__init__.py +0 -0
  218. xfintech/data/source/tushare/stock/stockpledge/tests/test_class_stockpledge_all.py +664 -0
  219. xfintech/data/source/tushare/stock/stockpledgedetail/__init__.py +21 -0
  220. xfintech/data/source/tushare/stock/stockpledgedetail/constant.py +85 -0
  221. xfintech/data/source/tushare/stock/stockpledgedetail/stockpledgedetail.py +171 -0
  222. xfintech/data/source/tushare/stock/stockpledgedetail/tests/__init__.py +0 -0
  223. xfintech/data/source/tushare/stock/stockpledgedetail/tests/test_class_stockpledgedetail_all.py +112 -0
  224. xfintech/data/source/tushare/stock/stockst/__init__.py +19 -0
  225. xfintech/data/source/tushare/stock/stockst/constant.py +80 -0
  226. xfintech/data/source/tushare/stock/stockst/stockst.py +189 -0
  227. xfintech/data/source/tushare/stock/stockst/tests/__init__.py +0 -0
  228. xfintech/data/source/tushare/stock/stockst/tests/test_class_stockst_all.py +693 -0
  229. xfintech/data/source/tushare/stock/stocksuspend/__init__.py +21 -0
  230. xfintech/data/source/tushare/stock/stocksuspend/constant.py +75 -0
  231. xfintech/data/source/tushare/stock/stocksuspend/stocksuspend.py +151 -0
  232. xfintech/data/source/tushare/stock/stocksuspend/tests/__init__.py +0 -0
  233. xfintech/data/source/tushare/stock/stocksuspend/tests/test_class_stocksuspend_all.py +626 -0
  234. xfintech/data/source/tushare/stock/techindex/__init__.py +19 -0
  235. xfintech/data/source/tushare/stock/techindex/constant.py +600 -0
  236. xfintech/data/source/tushare/stock/techindex/techindex.py +314 -0
  237. xfintech/data/source/tushare/stock/techindex/tests/__init__.py +0 -0
  238. xfintech/data/source/tushare/stock/techindex/tests/test_class_techindex_all.py +576 -0
  239. xfintech/data/source/tushare/stock/tradedate/__init__.py +19 -0
  240. xfintech/data/source/tushare/stock/tradedate/constant.py +93 -0
  241. xfintech/data/source/tushare/stock/tradedate/tests/__init__.py +0 -0
  242. xfintech/data/source/tushare/stock/tradedate/tests/test_class_tradedate_all.py +947 -0
  243. xfintech/data/source/tushare/stock/tradedate/tradedate.py +234 -0
  244. xfintech/data/source/tushare/stock/weekline/__init__.py +19 -0
  245. xfintech/data/source/tushare/stock/weekline/constant.py +87 -0
  246. xfintech/data/source/tushare/stock/weekline/tests/__init__.py +0 -0
  247. xfintech/data/source/tushare/stock/weekline/tests/test_class_weekline_all.py +575 -0
  248. xfintech/data/source/tushare/stock/weekline/weekline.py +182 -0
  249. xfintech/fabric/__init__.py +18 -0
  250. xfintech/fabric/column/__init__.py +7 -0
  251. xfintech/fabric/column/info.py +202 -0
  252. xfintech/fabric/column/kind.py +102 -0
  253. xfintech/fabric/column/tests/__init__.py +0 -0
  254. xfintech/fabric/column/tests/test_class_info_all.py +207 -0
  255. xfintech/fabric/column/tests/test_class_kind_all.py +80 -0
  256. xfintech/fabric/table/__init__.py +5 -0
  257. xfintech/fabric/table/info.py +263 -0
  258. xfintech/fabric/table/tests/__init__.py +0 -0
  259. xfintech/fabric/table/tests/test_class_info_all.py +547 -0
  260. xfintech/serde/__init__.py +35 -0
  261. xfintech/serde/common/__init__.py +9 -0
  262. xfintech/serde/common/dataformat.py +78 -0
  263. xfintech/serde/common/deserialiserlike.py +38 -0
  264. xfintech/serde/common/error.py +182 -0
  265. xfintech/serde/common/serialiserlike.py +38 -0
  266. xfintech/serde/common/tests/__init__.py +1 -0
  267. xfintech/serde/common/tests/test_class_dataformat_all.py +694 -0
  268. xfintech/serde/common/tests/test_class_deserialiserlike_all.py +500 -0
  269. xfintech/serde/common/tests/test_class_errors_all.py +518 -0
  270. xfintech/serde/common/tests/test_class_serialiserlike_all.py +401 -0
  271. xfintech/serde/deserialiser/__init__.py +7 -0
  272. xfintech/serde/deserialiser/pandas.py +113 -0
  273. xfintech/serde/deserialiser/python.py +68 -0
  274. xfintech/serde/deserialiser/tests/__init__.py +1 -0
  275. xfintech/serde/deserialiser/tests/test_class_pandasdeserialiser_all.py +503 -0
  276. xfintech/serde/deserialiser/tests/test_class_pythondeserialiser_all.py +570 -0
  277. xfintech/serde/serialiser/__init__.py +7 -0
  278. xfintech/serde/serialiser/pandas.py +116 -0
  279. xfintech/serde/serialiser/python.py +71 -0
  280. xfintech/serde/serialiser/tests/__init__.py +1 -0
  281. xfintech/serde/serialiser/tests/test_class_pandasserialiser_all.py +474 -0
  282. xfintech/serde/serialiser/tests/test_class_pythonserialiser_all.py +508 -0
@@ -0,0 +1,234 @@
1
+ from __future__ import annotations
2
+
3
+ from datetime import date, datetime
4
+ from typing import Any, Dict, Optional
5
+
6
+ import pandas as pd
7
+
8
+ from xfintech.data.common.cache import Cache
9
+ from xfintech.data.common.coolant import Coolant
10
+ from xfintech.data.common.params import Params
11
+ from xfintech.data.common.retry import Retry
12
+ from xfintech.data.job import JobHouse
13
+ from xfintech.data.source.tushare.job import TushareJob
14
+ from xfintech.data.source.tushare.session.session import Session
15
+ from xfintech.data.source.tushare.stock.tradedate.constant import (
16
+ KEY,
17
+ NAME,
18
+ PAGINATE,
19
+ SOURCE,
20
+ TARGET,
21
+ )
22
+
23
+
24
+ @JobHouse.register(KEY, alias=KEY)
25
+ class TradeDate(TushareJob):
26
+ """
27
+ 描述:
28
+ - 交易日历数据,包括交易所的交易日期和非交易日期
29
+ - API文档: https://tushare.pro/document/2?doc_id=26
30
+
31
+ 属性:
32
+ - name: 模块名称 = "tradedate"
33
+ - key: 模块键 = "/tushare/tradedate"
34
+ - source: 源数据表结构
35
+ - target: 目标数据表结构
36
+ - paginate: 分页设置 (pagesize=1000, pagelimit=10)
37
+
38
+ 参数:
39
+ - session: Session, 必需, Tushare会话对象
40
+ - params: Params | dict, 可选, 查询参数
41
+ - exchange: str, 可选, 交易所代码 (SSE/SZSE/CFFEX/SHFE/CZCE/DCE/INE)
42
+ - year: str | int, 可选, 年份 (YYYY)
43
+ - start_date: str, 可选, 开始日期 (YYYYMMDD)
44
+ - end_date: str, 可选, 结束日期 (YYYYMMDD)
45
+ - is_open: str | int, 可选, 是否交易日 (0=休市, 1=交易)
46
+ - coolant: Coolant | dict, 可选, 请求冷却配置
47
+ - retry: Retry | dict, 可选, 重试配置
48
+ - cache: Cache | dict | bool, 可选, 缓存配置
49
+
50
+ 方法:
51
+ - run() -> pd.DataFrame: 运行作业并返回数据
52
+ - transform(data: pd.DataFrame) -> pd.DataFrame: 转换数据格式
53
+ - list_dates() -> list[str]: 返回所有日期列表
54
+ - list_datecodes() -> list[str]: 返回所有日期代码列表
55
+ - list_open_dates() -> list[str]: 返回交易日列表
56
+ - list_open_datecodes() -> list[str]: 返回交易日代码列表
57
+ - check(session, value) -> bool: 检查指定日期是否为交易日
58
+
59
+ 例子:
60
+ ```python
61
+ from xfintech.data.source.tushare.session import Session
62
+ from xfintech.data.source.tushare.stock.tradedate import TradeDate
63
+
64
+ session = Session(credential="your_token")
65
+
66
+ # 获取2023年交易日历
67
+ job = TradeDate(session=session, params={"year": "2023"})
68
+ df = job.run()
69
+
70
+ # 获取指定日期范围
71
+ job = TradeDate(
72
+ session=session,
73
+ params={
74
+ "start_date": "20230101",
75
+ "end_date": "20231231",
76
+ "exchange": "SSE"
77
+ }
78
+ )
79
+ df = job.run()
80
+
81
+ # 获取交易日列表
82
+ dates = job.list_open_dates()
83
+
84
+ # 检查是否为交易日
85
+ is_trading = TradeDate.check(session, "2023-01-03")
86
+ ```
87
+ """
88
+
89
+ @classmethod
90
+ def check(
91
+ cls,
92
+ session: Session,
93
+ value: Optional[datetime | date | str] = None,
94
+ ) -> bool:
95
+ if isinstance(value, datetime):
96
+ value = value.date()
97
+ elif isinstance(value, date):
98
+ pass
99
+ elif isinstance(value, str):
100
+ if "-" in value:
101
+ value = datetime.strptime(value, "%Y-%m-%d").date()
102
+ else:
103
+ value = datetime.strptime(value, "%Y%m%d").date()
104
+ else:
105
+ value = datetime.now().date()
106
+
107
+ datecode = value.strftime("%Y%m%d")
108
+ job = cls(
109
+ session=session,
110
+ params={
111
+ "start_date": datecode,
112
+ "end_date": datecode,
113
+ "is_open": "1",
114
+ },
115
+ )
116
+ result = job.run()
117
+ return not result.empty and datecode in result["datecode"].values
118
+
119
+ def __init__(
120
+ self,
121
+ session: Session,
122
+ params: Optional[Params | Dict[str, Any]] = None,
123
+ coolant: Optional[Coolant | Dict[str, Any]] = None,
124
+ retry: Optional[Retry | Dict[str, Any]] = None,
125
+ cache: Optional[Cache | Dict[str, Any] | bool] = None,
126
+ ) -> None:
127
+ super().__init__(
128
+ session=session,
129
+ name=NAME,
130
+ key=KEY,
131
+ source=SOURCE,
132
+ target=TARGET,
133
+ params=params,
134
+ paginate=PAGINATE,
135
+ coolant=coolant,
136
+ retry=retry,
137
+ cache=cache,
138
+ )
139
+
140
+ def _run(self) -> pd.DataFrame:
141
+ cached = self._load_cache()
142
+ if cached is not None:
143
+ return cached
144
+
145
+ payload = self.params.to_dict()
146
+ payload = self._parse_date_params(
147
+ payload,
148
+ keys=["start_date", "end_date"],
149
+ )
150
+ payload = self._parse_year_params(
151
+ payload,
152
+ key="year",
153
+ )
154
+ fields = SOURCE.list_column_names()
155
+ payload["fields"] = ",".join(fields)
156
+
157
+ # Fetch data based on is_open parameter
158
+ if "is_open" in payload:
159
+ df = self._fetchall(
160
+ api=self.connection.trade_cal,
161
+ **payload,
162
+ )
163
+ else:
164
+ # Fetch both trading and non-trading days
165
+ df_open = self._fetchall(
166
+ api=self.connection.trade_cal,
167
+ is_open="1",
168
+ **payload,
169
+ )
170
+ df_close = self._fetchall(
171
+ api=self.connection.trade_cal,
172
+ is_open="0",
173
+ **payload,
174
+ )
175
+ df = pd.concat([df_open, df_close], ignore_index=True)
176
+
177
+ result = self.transform(df)
178
+ self._save_cache(result)
179
+ return result
180
+
181
+ # Transform logic
182
+ def transform(
183
+ self,
184
+ data: pd.DataFrame,
185
+ ) -> pd.DataFrame:
186
+ cols = self.target.list_column_names()
187
+ if data is None or data.empty:
188
+ return pd.DataFrame(columns=cols)
189
+
190
+ out = data.copy()
191
+ out["dt"] = pd.to_datetime(
192
+ out["cal_date"],
193
+ format="%Y%m%d",
194
+ errors="coerce",
195
+ )
196
+ out["date"] = out["dt"].dt.strftime("%Y-%m-%d")
197
+ out["datecode"] = out["cal_date"].astype(str)
198
+ out["is_open"] = out["is_open"].astype(int).eq(1)
199
+ out["previous"] = pd.to_datetime(
200
+ out["pretrade_date"],
201
+ format="%Y%m%d",
202
+ errors="coerce",
203
+ ).dt.strftime("%Y-%m-%d")
204
+ out["exchange"] = "ALL"
205
+ out["year"] = out["dt"].dt.year.fillna(0).astype(int)
206
+ out["month"] = out["dt"].dt.month.fillna(0).astype(int)
207
+ out["day"] = out["dt"].dt.day.fillna(0).astype(int)
208
+ out["week"] = out["dt"].dt.isocalendar().week.fillna(0).astype(int)
209
+ out["weekday"] = out["dt"].dt.day_name().fillna("").str[:3]
210
+ out["quarter"] = out["dt"].dt.quarter.fillna(0).astype(int)
211
+
212
+ # Clean up temporary columns
213
+ out.drop(columns=["dt"], inplace=True)
214
+ out = out[cols].drop_duplicates()
215
+ out = out.sort_values(by=["datecode"])
216
+ out = out.reset_index(drop=True)
217
+ self.markpoint("transform[OK]")
218
+ return out
219
+
220
+ def list_dates(self) -> list[str]:
221
+ df = self.run()
222
+ return sorted(df["date"].unique().tolist())
223
+
224
+ def list_datecodes(self) -> list[str]:
225
+ df = self.run()
226
+ return sorted(df["datecode"].unique().tolist())
227
+
228
+ def list_open_dates(self) -> list[str]:
229
+ df = self.run()
230
+ return sorted(df.loc[df["is_open"], "date"].unique().tolist())
231
+
232
+ def list_open_datecodes(self) -> list[str]:
233
+ df = self.run()
234
+ return sorted(df.loc[df["is_open"], "datecode"].unique().tolist())
@@ -0,0 +1,19 @@
1
+ from __future__ import annotations
2
+
3
+ from xfintech.data.source.tushare.stock.weekline.constant import (
4
+ KEY,
5
+ NAME,
6
+ PAGINATE,
7
+ SOURCE,
8
+ TARGET,
9
+ )
10
+ from xfintech.data.source.tushare.stock.weekline.weekline import Weekline
11
+
12
+ __all__ = [
13
+ "Weekline",
14
+ "KEY",
15
+ "NAME",
16
+ "PAGINATE",
17
+ "SOURCE",
18
+ "TARGET",
19
+ ]
@@ -0,0 +1,87 @@
1
+ from __future__ import annotations
2
+
3
+ from xfintech.data.common.paginate import Paginate
4
+ from xfintech.fabric.column.info import ColumnInfo
5
+ from xfintech.fabric.column.kind import ColumnKind
6
+ from xfintech.fabric.table.info import TableInfo
7
+
8
+ PROVIDER = "tushare"
9
+ SOURCE_NAME = "weekly"
10
+ URL = "https://tushare.pro/document/2?doc_id=144"
11
+ ARGS = {
12
+ "ts_code": {
13
+ "type": ColumnKind.STRING,
14
+ "required": "N",
15
+ "desc": "股票代码",
16
+ },
17
+ "trade_date": {
18
+ "type": ColumnKind.STRING,
19
+ "required": "N",
20
+ "desc": "交易日期(YYYYMMDD)",
21
+ },
22
+ "start_date": {
23
+ "type": ColumnKind.STRING,
24
+ "required": "N",
25
+ "desc": "开始日期(YYYYMMDD)",
26
+ },
27
+ "end_date": {
28
+ "type": ColumnKind.STRING,
29
+ "required": "N",
30
+ "desc": "结束日期(YYYYMMDD)",
31
+ },
32
+ }
33
+
34
+ # Exported constants
35
+ NAME = "weekline"
36
+ KEY = "/tushare/weekline"
37
+ PAGINATE = Paginate(
38
+ pagesize=6000,
39
+ pagelimit=1000,
40
+ )
41
+ SOURCE = TableInfo(
42
+ desc="A股周线行情数据(Tushare格式)",
43
+ meta={
44
+ "provider": PROVIDER,
45
+ "source": SOURCE_NAME,
46
+ "url": URL,
47
+ "args": ARGS,
48
+ "type": "partitioned",
49
+ "scale": "crosssection",
50
+ },
51
+ columns=[
52
+ ColumnInfo(name="ts_code", kind=ColumnKind.STRING, desc="股票代码"),
53
+ ColumnInfo(name="trade_date", kind=ColumnKind.STRING, desc="交易日期"),
54
+ ColumnInfo(name="open", kind=ColumnKind.FLOAT, desc="周开盘价"),
55
+ ColumnInfo(name="high", kind=ColumnKind.FLOAT, desc="周最高价"),
56
+ ColumnInfo(name="low", kind=ColumnKind.FLOAT, desc="周最低价"),
57
+ ColumnInfo(name="close", kind=ColumnKind.FLOAT, desc="周收盘价"),
58
+ ColumnInfo(name="pre_close", kind=ColumnKind.FLOAT, desc="上周收盘价"),
59
+ ColumnInfo(name="change", kind=ColumnKind.FLOAT, desc="周涨跌额"),
60
+ ColumnInfo(name="pct_chg", kind=ColumnKind.FLOAT, desc="周涨跌幅"),
61
+ ColumnInfo(name="vol", kind=ColumnKind.FLOAT, desc="周成交量(手)"),
62
+ ColumnInfo(name="amount", kind=ColumnKind.FLOAT, desc="周成交额(千元)"),
63
+ ],
64
+ )
65
+ TARGET = TableInfo(
66
+ desc="A股周线行情数据(xfintech格式)",
67
+ meta={
68
+ "key": KEY,
69
+ "name": NAME,
70
+ "type": "partitioned",
71
+ "scale": "crosssection",
72
+ },
73
+ columns=[
74
+ ColumnInfo(name="code", kind=ColumnKind.STRING, desc="股票代码"),
75
+ ColumnInfo(name="date", kind=ColumnKind.STRING, desc="交易日期"),
76
+ ColumnInfo(name="datecode", kind=ColumnKind.STRING, desc="交易日期代码(YYYYMMDD)"),
77
+ ColumnInfo(name="open", kind=ColumnKind.FLOAT, desc="开盘价(元)"),
78
+ ColumnInfo(name="high", kind=ColumnKind.FLOAT, desc="最高价(元)"),
79
+ ColumnInfo(name="low", kind=ColumnKind.FLOAT, desc="最低价(元)"),
80
+ ColumnInfo(name="close", kind=ColumnKind.FLOAT, desc="收盘价(元)"),
81
+ ColumnInfo(name="pre_close", kind=ColumnKind.FLOAT, desc="昨收价(元)"),
82
+ ColumnInfo(name="change", kind=ColumnKind.FLOAT, desc="涨跌额(元)"),
83
+ ColumnInfo(name="percent_change", kind=ColumnKind.FLOAT, desc="涨跌幅(%)"),
84
+ ColumnInfo(name="volume", kind=ColumnKind.FLOAT, desc="成交量(手)"),
85
+ ColumnInfo(name="amount", kind=ColumnKind.FLOAT, desc="成交额(千元)"),
86
+ ],
87
+ )