neurostats-API 1.0.2rc3__tar.gz → 1.0.3rc1__tar.gz

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 (142) hide show
  1. {neurostats_api-1.0.2rc3 → neurostats_api-1.0.3rc1}/PKG-INFO +2 -2
  2. {neurostats_api-1.0.2rc3 → neurostats_api-1.0.3rc1}/README.md +1 -1
  3. {neurostats_api-1.0.2rc3 → neurostats_api-1.0.3rc1}/neurostats_API/__init__.py +3 -2
  4. {neurostats_api-1.0.2rc3 → neurostats_api-1.0.3rc1}/neurostats_API/async_mode/__init__.py +3 -1
  5. {neurostats_api-1.0.2rc3 → neurostats_api-1.0.3rc1}/neurostats_API/async_mode/db_extractors/__init__.py +3 -1
  6. {neurostats_api-1.0.2rc3 → neurostats_api-1.0.3rc1}/neurostats_API/async_mode/db_extractors/daily/__init__.py +2 -1
  7. neurostats_api-1.0.3rc1/neurostats_API/async_mode/db_extractors/daily/tej_tech.py +86 -0
  8. {neurostats_api-1.0.2rc3 → neurostats_api-1.0.3rc1}/neurostats_API/async_mode/factory/extractor_factory.py +16 -7
  9. {neurostats_api-1.0.2rc3 → neurostats_api-1.0.3rc1}/neurostats_API/async_mode/fetchers/__init__.py +2 -2
  10. {neurostats_api-1.0.2rc3 → neurostats_api-1.0.3rc1}/neurostats_API/async_mode/fetchers/tech.py +30 -3
  11. neurostats_api-1.0.3rc1/neurostats_API/async_mode/fetchers/tej/__init__.py +3 -0
  12. neurostats_api-1.0.3rc1/neurostats_API/async_mode/fetchers/tej/chip.py +42 -0
  13. {neurostats_api-1.0.2rc3 → neurostats_api-1.0.3rc1}/neurostats_API/async_mode/fetchers/tej/tech.py +17 -9
  14. {neurostats_api-1.0.2rc3 → neurostats_api-1.0.3rc1}/neurostats_API/transformers/__init__.py +5 -2
  15. neurostats_api-1.0.3rc1/neurostats_API/transformers/daily_tech/__init__.py +1 -0
  16. {neurostats_api-1.0.2rc3 → neurostats_api-1.0.3rc1}/neurostats_API/transformers/daily_tech/tech.py +34 -3
  17. neurostats_api-1.0.3rc1/neurostats_API/transformers/tej/__init__.py +3 -0
  18. neurostats_api-1.0.3rc1/neurostats_API/transformers/tej/chip.py +23 -0
  19. neurostats_api-1.0.3rc1/neurostats_API/transformers/tej/tech.py +24 -0
  20. {neurostats_api-1.0.2rc3 → neurostats_api-1.0.3rc1}/neurostats_API.egg-info/PKG-INFO +2 -2
  21. {neurostats_api-1.0.2rc3 → neurostats_api-1.0.3rc1}/neurostats_API.egg-info/SOURCES.txt +2 -1
  22. {neurostats_api-1.0.2rc3 → neurostats_api-1.0.3rc1}/setup.py +1 -1
  23. {neurostats_api-1.0.2rc3 → neurostats_api-1.0.3rc1}/test/test_async_fetcher.py +21 -1
  24. neurostats_api-1.0.2rc3/neurostats_API/async_mode/db_extractors/daily/tej_tech.py +0 -12
  25. neurostats_api-1.0.2rc3/neurostats_API/async_mode/fetchers/tej/__init__.py +0 -2
  26. neurostats_api-1.0.2rc3/neurostats_API/transformers/daily_chip/tej.py +0 -0
  27. neurostats_api-1.0.2rc3/neurostats_API/transformers/daily_tech/__init__.py +0 -1
  28. neurostats_api-1.0.2rc3/neurostats_API/transformers/tej/__init__.py +0 -1
  29. neurostats_api-1.0.2rc3/neurostats_API/transformers/tej/chip.py +0 -0
  30. {neurostats_api-1.0.2rc3 → neurostats_api-1.0.3rc1}/MANIFEST.in +0 -0
  31. {neurostats_api-1.0.2rc3 → neurostats_api-1.0.3rc1}/neurostats_API/async_mode/db/__init__.py +0 -0
  32. {neurostats_api-1.0.2rc3 → neurostats_api-1.0.3rc1}/neurostats_API/async_mode/db/base.py +0 -0
  33. {neurostats_api-1.0.2rc3 → neurostats_api-1.0.3rc1}/neurostats_API/async_mode/db/tej.py +0 -0
  34. {neurostats_api-1.0.2rc3 → neurostats_api-1.0.3rc1}/neurostats_API/async_mode/db/twse.py +0 -0
  35. {neurostats_api-1.0.2rc3 → neurostats_api-1.0.3rc1}/neurostats_API/async_mode/db/us.py +0 -0
  36. {neurostats_api-1.0.2rc3 → neurostats_api-1.0.3rc1}/neurostats_API/async_mode/db_extractors/base.py +0 -0
  37. {neurostats_api-1.0.2rc3 → neurostats_api-1.0.3rc1}/neurostats_API/async_mode/db_extractors/daily/base.py +0 -0
  38. {neurostats_api-1.0.2rc3 → neurostats_api-1.0.3rc1}/neurostats_API/async_mode/db_extractors/daily/tej_chip.py +0 -0
  39. {neurostats_api-1.0.2rc3 → neurostats_api-1.0.3rc1}/neurostats_API/async_mode/db_extractors/daily/twse_chip.py +0 -0
  40. {neurostats_api-1.0.2rc3 → neurostats_api-1.0.3rc1}/neurostats_API/async_mode/db_extractors/daily/us_chip.py +0 -0
  41. {neurostats_api-1.0.2rc3 → neurostats_api-1.0.3rc1}/neurostats_API/async_mode/db_extractors/daily/value.py +0 -0
  42. {neurostats_api-1.0.2rc3 → neurostats_api-1.0.3rc1}/neurostats_API/async_mode/db_extractors/daily/yf.py +0 -0
  43. {neurostats_api-1.0.2rc3 → neurostats_api-1.0.3rc1}/neurostats_API/async_mode/db_extractors/month_revenue/__init__.py +0 -0
  44. {neurostats_api-1.0.2rc3 → neurostats_api-1.0.3rc1}/neurostats_API/async_mode/db_extractors/month_revenue/base.py +0 -0
  45. {neurostats_api-1.0.2rc3 → neurostats_api-1.0.3rc1}/neurostats_API/async_mode/db_extractors/month_revenue/twse.py +0 -0
  46. {neurostats_api-1.0.2rc3 → neurostats_api-1.0.3rc1}/neurostats_API/async_mode/db_extractors/seasonal/__init__.py +0 -0
  47. {neurostats_api-1.0.2rc3 → neurostats_api-1.0.3rc1}/neurostats_API/async_mode/db_extractors/seasonal/balance_sheet.py +0 -0
  48. {neurostats_api-1.0.2rc3 → neurostats_api-1.0.3rc1}/neurostats_API/async_mode/db_extractors/seasonal/base.py +0 -0
  49. {neurostats_api-1.0.2rc3 → neurostats_api-1.0.3rc1}/neurostats_API/async_mode/db_extractors/seasonal/cashflow.py +0 -0
  50. {neurostats_api-1.0.2rc3 → neurostats_api-1.0.3rc1}/neurostats_API/async_mode/db_extractors/seasonal/profit_lose.py +0 -0
  51. {neurostats_api-1.0.2rc3 → neurostats_api-1.0.3rc1}/neurostats_API/async_mode/db_extractors/seasonal/tej.py +0 -0
  52. {neurostats_api-1.0.2rc3 → neurostats_api-1.0.3rc1}/neurostats_API/async_mode/factory/__init__.py +0 -0
  53. {neurostats_api-1.0.2rc3 → neurostats_api-1.0.3rc1}/neurostats_API/async_mode/factory/transformer_factory.py +0 -0
  54. {neurostats_api-1.0.2rc3 → neurostats_api-1.0.3rc1}/neurostats_API/async_mode/fetchers/balance_sheet.py +0 -0
  55. {neurostats_api-1.0.2rc3 → neurostats_api-1.0.3rc1}/neurostats_API/async_mode/fetchers/base.py +0 -0
  56. {neurostats_api-1.0.2rc3 → neurostats_api-1.0.3rc1}/neurostats_API/async_mode/fetchers/cash_flow.py +0 -0
  57. {neurostats_api-1.0.2rc3 → neurostats_api-1.0.3rc1}/neurostats_API/async_mode/fetchers/finance_overview.py +0 -0
  58. {neurostats_api-1.0.2rc3 → neurostats_api-1.0.3rc1}/neurostats_API/async_mode/fetchers/month_revenue.py +0 -0
  59. {neurostats_api-1.0.2rc3 → neurostats_api-1.0.3rc1}/neurostats_API/async_mode/fetchers/profit_lose.py +0 -0
  60. {neurostats_api-1.0.2rc3 → neurostats_api-1.0.3rc1}/neurostats_API/async_mode/fetchers/tej/seasonal_data.py +0 -0
  61. {neurostats_api-1.0.2rc3 → neurostats_api-1.0.3rc1}/neurostats_API/async_mode/fetchers/twse_institution.py +0 -0
  62. {neurostats_api-1.0.2rc3 → neurostats_api-1.0.3rc1}/neurostats_API/async_mode/fetchers/twse_margin.py +0 -0
  63. {neurostats_api-1.0.2rc3 → neurostats_api-1.0.3rc1}/neurostats_API/async_mode/fetchers/us_chip.py +0 -0
  64. {neurostats_api-1.0.2rc3 → neurostats_api-1.0.3rc1}/neurostats_API/async_mode/fetchers/value.py +0 -0
  65. {neurostats_api-1.0.2rc3 → neurostats_api-1.0.3rc1}/neurostats_API/cli.py +0 -0
  66. {neurostats_api-1.0.2rc3 → neurostats_api-1.0.3rc1}/neurostats_API/config/company_list/ticker_index_industry_map.json +0 -0
  67. {neurostats_api-1.0.2rc3 → neurostats_api-1.0.3rc1}/neurostats_API/config/company_list/ticker_to_cik.json +0 -0
  68. {neurostats_api-1.0.2rc3 → neurostats_api-1.0.3rc1}/neurostats_API/config/company_list/tw.json +0 -0
  69. {neurostats_api-1.0.2rc3 → neurostats_api-1.0.3rc1}/neurostats_API/config/company_list/us.json +0 -0
  70. {neurostats_api-1.0.2rc3 → neurostats_api-1.0.3rc1}/neurostats_API/config/company_list/us_TradingView_list.json +0 -0
  71. {neurostats_api-1.0.2rc3 → neurostats_api-1.0.3rc1}/neurostats_API/config/tej_db/tej_db_index.yaml +0 -0
  72. {neurostats_api-1.0.2rc3 → neurostats_api-1.0.3rc1}/neurostats_API/config/tej_db/tej_db_percent_index.yaml +0 -0
  73. {neurostats_api-1.0.2rc3 → neurostats_api-1.0.3rc1}/neurostats_API/config/tej_db/tej_db_skip_index.yaml +0 -0
  74. {neurostats_api-1.0.2rc3 → neurostats_api-1.0.3rc1}/neurostats_API/config/tej_db/tej_db_thousand_index.yaml +0 -0
  75. {neurostats_api-1.0.2rc3 → neurostats_api-1.0.3rc1}/neurostats_API/config/twse/balance_sheet.yaml +0 -0
  76. {neurostats_api-1.0.2rc3 → neurostats_api-1.0.3rc1}/neurostats_API/config/twse/cash_flow_percentage.yaml +0 -0
  77. {neurostats_api-1.0.2rc3 → neurostats_api-1.0.3rc1}/neurostats_API/config/twse/finance_overview_dict.yaml +0 -0
  78. {neurostats_api-1.0.2rc3 → neurostats_api-1.0.3rc1}/neurostats_API/config/twse/profit_lose.yaml +0 -0
  79. {neurostats_api-1.0.2rc3 → neurostats_api-1.0.3rc1}/neurostats_API/config/twse/seasonal_data_field_dict.txt +0 -0
  80. {neurostats_api-1.0.2rc3 → neurostats_api-1.0.3rc1}/neurostats_API/fetchers/__init__.py +0 -0
  81. {neurostats_api-1.0.2rc3 → neurostats_api-1.0.3rc1}/neurostats_API/fetchers/balance_sheet.py +0 -0
  82. {neurostats_api-1.0.2rc3 → neurostats_api-1.0.3rc1}/neurostats_API/fetchers/base.py +0 -0
  83. {neurostats_api-1.0.2rc3 → neurostats_api-1.0.3rc1}/neurostats_API/fetchers/cash_flow.py +0 -0
  84. {neurostats_api-1.0.2rc3 → neurostats_api-1.0.3rc1}/neurostats_API/fetchers/finance_overview.py +0 -0
  85. {neurostats_api-1.0.2rc3 → neurostats_api-1.0.3rc1}/neurostats_API/fetchers/institution.py +0 -0
  86. {neurostats_api-1.0.2rc3 → neurostats_api-1.0.3rc1}/neurostats_API/fetchers/margin_trading.py +0 -0
  87. {neurostats_api-1.0.2rc3 → neurostats_api-1.0.3rc1}/neurostats_API/fetchers/month_revenue.py +0 -0
  88. {neurostats_api-1.0.2rc3 → neurostats_api-1.0.3rc1}/neurostats_API/fetchers/profit_lose.py +0 -0
  89. {neurostats_api-1.0.2rc3 → neurostats_api-1.0.3rc1}/neurostats_API/fetchers/tech.py +0 -0
  90. {neurostats_api-1.0.2rc3 → neurostats_api-1.0.3rc1}/neurostats_API/fetchers/tej_finance_report.py +0 -0
  91. {neurostats_api-1.0.2rc3 → neurostats_api-1.0.3rc1}/neurostats_API/fetchers/value_invest.py +0 -0
  92. {neurostats_api-1.0.2rc3 → neurostats_api-1.0.3rc1}/neurostats_API/main.py +0 -0
  93. {neurostats_api-1.0.2rc3 → neurostats_api-1.0.3rc1}/neurostats_API/transformers/balance_sheet/__init__.py +0 -0
  94. {neurostats_api-1.0.2rc3 → neurostats_api-1.0.3rc1}/neurostats_API/transformers/balance_sheet/base.py +0 -0
  95. {neurostats_api-1.0.2rc3 → neurostats_api-1.0.3rc1}/neurostats_API/transformers/balance_sheet/twse.py +0 -0
  96. {neurostats_api-1.0.2rc3 → neurostats_api-1.0.3rc1}/neurostats_API/transformers/balance_sheet/us.py +0 -0
  97. {neurostats_api-1.0.2rc3 → neurostats_api-1.0.3rc1}/neurostats_API/transformers/base.py +0 -0
  98. {neurostats_api-1.0.2rc3 → neurostats_api-1.0.3rc1}/neurostats_API/transformers/cash_flow/__init__.py +0 -0
  99. {neurostats_api-1.0.2rc3 → neurostats_api-1.0.3rc1}/neurostats_API/transformers/cash_flow/base.py +0 -0
  100. {neurostats_api-1.0.2rc3 → neurostats_api-1.0.3rc1}/neurostats_API/transformers/cash_flow/twse.py +0 -0
  101. {neurostats_api-1.0.2rc3 → neurostats_api-1.0.3rc1}/neurostats_API/transformers/cash_flow/us.py +0 -0
  102. {neurostats_api-1.0.2rc3 → neurostats_api-1.0.3rc1}/neurostats_API/transformers/daily_chip/__init__.py +0 -0
  103. {neurostats_api-1.0.2rc3 → neurostats_api-1.0.3rc1}/neurostats_API/transformers/daily_chip/base.py +0 -0
  104. {neurostats_api-1.0.2rc3 → neurostats_api-1.0.3rc1}/neurostats_API/transformers/daily_chip/twse_chip.py +0 -0
  105. {neurostats_api-1.0.2rc3 → neurostats_api-1.0.3rc1}/neurostats_API/transformers/daily_chip/us.py +0 -0
  106. {neurostats_api-1.0.2rc3 → neurostats_api-1.0.3rc1}/neurostats_API/transformers/daily_chip/utils/__init__.py +0 -0
  107. {neurostats_api-1.0.2rc3 → neurostats_api-1.0.3rc1}/neurostats_API/transformers/daily_chip/utils/institution.py +0 -0
  108. {neurostats_api-1.0.2rc3 → neurostats_api-1.0.3rc1}/neurostats_API/transformers/daily_chip/utils/margin_trading.py +0 -0
  109. {neurostats_api-1.0.2rc3 → neurostats_api-1.0.3rc1}/neurostats_API/transformers/daily_chip/utils/security_lending.py +0 -0
  110. {neurostats_api-1.0.2rc3 → neurostats_api-1.0.3rc1}/neurostats_API/transformers/daily_tech/base.py +0 -0
  111. {neurostats_api-1.0.2rc3 → neurostats_api-1.0.3rc1}/neurostats_API/transformers/daily_tech/utils/__init__.py +0 -0
  112. {neurostats_api-1.0.2rc3 → neurostats_api-1.0.3rc1}/neurostats_API/transformers/daily_tech/utils/processor.py +0 -0
  113. {neurostats_api-1.0.2rc3 → neurostats_api-1.0.3rc1}/neurostats_API/transformers/finance_overview/__init__.py +0 -0
  114. {neurostats_api-1.0.2rc3 → neurostats_api-1.0.3rc1}/neurostats_API/transformers/finance_overview/agent_overview.py +0 -0
  115. {neurostats_api-1.0.2rc3 → neurostats_api-1.0.3rc1}/neurostats_API/transformers/finance_overview/base.py +0 -0
  116. {neurostats_api-1.0.2rc3 → neurostats_api-1.0.3rc1}/neurostats_API/transformers/finance_overview/stats_overview.py +0 -0
  117. {neurostats_api-1.0.2rc3 → neurostats_api-1.0.3rc1}/neurostats_API/transformers/month_revenue/__init__.py +0 -0
  118. {neurostats_api-1.0.2rc3 → neurostats_api-1.0.3rc1}/neurostats_API/transformers/month_revenue/base.py +0 -0
  119. {neurostats_api-1.0.2rc3 → neurostats_api-1.0.3rc1}/neurostats_API/transformers/month_revenue/twse.py +0 -0
  120. {neurostats_api-1.0.2rc3 → neurostats_api-1.0.3rc1}/neurostats_API/transformers/profit_lose/__init__.py +0 -0
  121. {neurostats_api-1.0.2rc3 → neurostats_api-1.0.3rc1}/neurostats_API/transformers/profit_lose/base.py +0 -0
  122. {neurostats_api-1.0.2rc3 → neurostats_api-1.0.3rc1}/neurostats_API/transformers/profit_lose/twse.py +0 -0
  123. {neurostats_api-1.0.2rc3 → neurostats_api-1.0.3rc1}/neurostats_API/transformers/profit_lose/us.py +0 -0
  124. {neurostats_api-1.0.2rc3 → neurostats_api-1.0.3rc1}/neurostats_API/transformers/tej/base.py +0 -0
  125. {neurostats_api-1.0.2rc3 → neurostats_api-1.0.3rc1}/neurostats_API/transformers/tej/finance_statement.py +0 -0
  126. {neurostats_api-1.0.2rc3 → neurostats_api-1.0.3rc1}/neurostats_API/transformers/value/__init__.py +0 -0
  127. {neurostats_api-1.0.2rc3 → neurostats_api-1.0.3rc1}/neurostats_API/transformers/value/base.py +0 -0
  128. {neurostats_api-1.0.2rc3 → neurostats_api-1.0.3rc1}/neurostats_API/transformers/value/tej.py +0 -0
  129. {neurostats_api-1.0.2rc3 → neurostats_api-1.0.3rc1}/neurostats_API/transformers/value/twse.py +0 -0
  130. {neurostats_api-1.0.2rc3 → neurostats_api-1.0.3rc1}/neurostats_API/utils/__init__.py +0 -0
  131. {neurostats_api-1.0.2rc3 → neurostats_api-1.0.3rc1}/neurostats_API/utils/calculate_value.py +0 -0
  132. {neurostats_api-1.0.2rc3 → neurostats_api-1.0.3rc1}/neurostats_API/utils/data_process.py +0 -0
  133. {neurostats_api-1.0.2rc3 → neurostats_api-1.0.3rc1}/neurostats_API/utils/datetime.py +0 -0
  134. {neurostats_api-1.0.2rc3 → neurostats_api-1.0.3rc1}/neurostats_API/utils/db_client.py +0 -0
  135. {neurostats_api-1.0.2rc3 → neurostats_api-1.0.3rc1}/neurostats_API/utils/exception.py +0 -0
  136. {neurostats_api-1.0.2rc3 → neurostats_api-1.0.3rc1}/neurostats_API/utils/logger.py +0 -0
  137. {neurostats_api-1.0.2rc3 → neurostats_api-1.0.3rc1}/neurostats_API.egg-info/dependency_links.txt +0 -0
  138. {neurostats_api-1.0.2rc3 → neurostats_api-1.0.3rc1}/neurostats_API.egg-info/requires.txt +0 -0
  139. {neurostats_api-1.0.2rc3 → neurostats_api-1.0.3rc1}/neurostats_API.egg-info/top_level.txt +0 -0
  140. {neurostats_api-1.0.2rc3 → neurostats_api-1.0.3rc1}/setup.cfg +0 -0
  141. {neurostats_api-1.0.2rc3 → neurostats_api-1.0.3rc1}/test/test_fetchers.py +0 -0
  142. {neurostats_api-1.0.2rc3 → neurostats_api-1.0.3rc1}/test/test_tej.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: neurostats_API
3
- Version: 1.0.2rc3
3
+ Version: 1.0.3rc1
4
4
  Summary: The service of NeuroStats website
5
5
  Home-page: https://github.com/NeurowattStats/NeuroStats_API.git
6
6
  Author: JasonWang@Neurowatt
@@ -71,7 +71,7 @@ pip install neurostats-API
71
71
  ```Python
72
72
  >>> import neurostats_API
73
73
  >>> print(neurostats_API.__version__)
74
- 1.0.2rc3
74
+ 1.0.3rc1
75
75
  ```
76
76
 
77
77
  ### 下載舊版
@@ -54,7 +54,7 @@ pip install neurostats-API
54
54
  ```Python
55
55
  >>> import neurostats_API
56
56
  >>> print(neurostats_API.__version__)
57
- 1.0.2rc3
57
+ 1.0.3rc1
58
58
  ```
59
59
 
60
60
  ### 下載舊版
@@ -1,4 +1,4 @@
1
- __version__='1.0.2rc3'
1
+ __version__='1.0.3rc1'
2
2
 
3
3
  from .fetchers import (
4
4
  AgentFinanceOverviewFetcher,
@@ -26,5 +26,6 @@ from .async_mode import (
26
26
  AsyncTWSEInstitutionFetcher,
27
27
  AsyncTWSEMarginFetcher,
28
28
  AsyncTWSEStatsValueFetcher,
29
- AsyncUSCelebrityFetcher
29
+ AsyncUSCelebrityFetcher,
30
+ AsyncBatchTechFetcher
30
31
  )
@@ -5,10 +5,12 @@ from .fetchers import (
5
5
  AsyncFinanceOverviewFetcher,
6
6
  AsyncMonthlyRevenueFetcher,
7
7
  AsyncProfitLoseFetcher,
8
+ AsyncTEJChipFetcher,
8
9
  AsyncTechFetcher,
9
10
  AsyncTEJSeasonalFetcher,
10
11
  AsyncTWSEInstitutionFetcher,
11
12
  AsyncTWSEMarginFetcher,
12
13
  AsyncTWSEStatsValueFetcher,
13
- AsyncUSCelebrityFetcher
14
+ AsyncUSCelebrityFetcher,
15
+ AsyncBatchTechFetcher
14
16
  )
@@ -1,11 +1,13 @@
1
1
  from .daily import (
2
+ AsyncTEJDailyChipDBExtractor,
2
3
  AsyncTEJDailyTechDBExtractor,
3
4
  AsyncYFDailyTechDBExtractor,
4
5
  AsyncDailyValueDBExtractor,
5
6
  AsyncTEJDailyValueDBExtractor,
6
7
  AsyncTWSEChipDBExtractor,
7
8
  AsyncUS_F13DBExtractor,
8
- AsyncUS_CelebrityDBExtractor
9
+ AsyncUS_CelebrityDBExtractor,
10
+ AsyncBatchTechDBExtractor
9
11
  )
10
12
 
11
13
  from .month_revenue import (
@@ -1,4 +1,5 @@
1
- from .tej_tech import AsyncTEJDailyTechDBExtractor
1
+ from .tej_chip import AsyncTEJDailyChipDBExtractor
2
+ from .tej_tech import AsyncTEJDailyTechDBExtractor, AsyncBatchTechDBExtractor
2
3
  from .twse_chip import AsyncTWSEChipDBExtractor
3
4
  from .value import (
4
5
  AsyncDailyValueDBExtractor,
@@ -0,0 +1,86 @@
1
+ from .base import BaseDailyTechDBExtractor
2
+ from pymongo import AsyncMongoClient, ASCENDING, DESCENDING
3
+
4
+ class AsyncTEJDailyTechDBExtractor(BaseDailyTechDBExtractor):
5
+
6
+ def __init__(self, ticker, client):
7
+ super().__init__(ticker, client)
8
+
9
+ def _get_collection_name(self):
10
+ self.collection_name_map = {"tw": "TEJ_share_price"}
11
+
12
+ return self.collection_name_map.get(self.zone, None)
13
+
14
+ class AsyncBatchTechDBExtractor(BaseDailyTechDBExtractor):
15
+
16
+ def __init__(self, ticker:list, client: AsyncMongoClient, zone:str):
17
+ self.tickers = ticker
18
+ self.zone = zone
19
+ self.client = client
20
+
21
+ self.collection_map = {
22
+ 'tw':{
23
+ 'db': "company_test",
24
+ 'collection': "twse_daily_share_price"
25
+ },
26
+ 'us':{
27
+ 'db': "company_us",
28
+ 'collection': "us_technical"
29
+ },
30
+ }
31
+
32
+ db_name = self.collection_map.get(self.zone).get('db')
33
+ collection_name = self.collection_map.get(self.zone).get('collection')
34
+ self.collection = self.client.get_database(db_name).get_collection(collection_name)
35
+
36
+ def _prepare_query(
37
+ self, start_date=None, end_date=None, get_latest=False
38
+ ):
39
+ query = {"ticker":{"$in": self.tickers}}
40
+
41
+ if start_date:
42
+ start_date = self._transform_date(start_date)
43
+ if end_date:
44
+ end_date = self._transform_date(end_date)
45
+
46
+ if start_date or end_date:
47
+ date_range = {}
48
+ if start_date:
49
+ date_range["$gte"] = start_date
50
+ if end_date:
51
+ date_range["$lte"] = end_date
52
+ query["date"] = date_range
53
+
54
+ projection = {
55
+ "_id": 0,
56
+ "ticker": 1,
57
+ "date": 1,
58
+ "open": 1,
59
+ "high": 1,
60
+ "low": 1,
61
+ "close": 1,
62
+ "volume": 1
63
+ }
64
+
65
+ if (get_latest):
66
+ sort = [("date", DESCENDING)]
67
+ else:
68
+ sort = [("date", ASCENDING)]
69
+
70
+ return query, projection, sort
71
+
72
+ async def query_data(
73
+ self, start_date=None, end_date=None, get_latest=False
74
+ ):
75
+ query, projection, sort = self._prepare_query(
76
+ start_date=start_date, end_date=end_date, get_latest=get_latest
77
+ )
78
+
79
+ if (get_latest):
80
+ cursor = self.collection.find(query, projection).sort(sort).limit(1)
81
+ else:
82
+ cursor = self.collection.find(query, projection).sort(sort)
83
+
84
+ fetched_data = [data async for data in cursor]
85
+
86
+ return fetched_data
@@ -2,10 +2,11 @@ from typing import Type, TypedDict, Optional
2
2
  from neurostats_API.async_mode.db_extractors import (
3
3
  AsyncTEJDailyTechDBExtractor, AsyncYFDailyTechDBExtractor,
4
4
  AsyncDailyValueDBExtractor, AsyncTEJDailyValueDBExtractor,
5
- AsyncTWSEChipDBExtractor, AsyncTWSEMonthlyRevenueExtractor,
6
- AsyncBalanceSheetExtractor, AsyncProfitLoseExtractor,
7
- AsyncCashFlowExtractor, AsyncTEJFinanceStatementDBExtractor,
8
- AsyncTEJSelfSettlementDBExtractor, AsyncUS_F13DBExtractor
5
+ AsyncTEJDailyChipDBExtractor, AsyncTWSEChipDBExtractor,
6
+ AsyncTWSEMonthlyRevenueExtractor, AsyncBalanceSheetExtractor,
7
+ AsyncProfitLoseExtractor, AsyncCashFlowExtractor,
8
+ AsyncTEJFinanceStatementDBExtractor, AsyncTEJSelfSettlementDBExtractor,
9
+ AsyncUS_F13DBExtractor
9
10
  )
10
11
  from neurostats_API.utils import NotSupportedError
11
12
 
@@ -92,6 +93,16 @@ EXTRACTOR_MAP: dict[str, ExtractorConfig] = {
92
93
  開高低收
93
94
  """
94
95
  },
96
+ "TEJ_Chip": {
97
+ "class_":
98
+ AsyncTEJDailyChipDBExtractor,
99
+ "default_kwargs": {},
100
+ "description":
101
+ """
102
+ DB_collection: TEJ_chip
103
+ TWSE的評價面
104
+ """
105
+ },
95
106
  "TEJ_tech": {
96
107
  "class_":
97
108
  AsyncTEJDailyTechDBExtractor,
@@ -140,8 +151,6 @@ EXTRACTOR_MAP: dict[str, ExtractorConfig] = {
140
151
  TWSE的評價面
141
152
  """
142
153
  },
143
-
144
-
145
154
  "US_Chip_F13": {
146
155
  "class_":
147
156
  AsyncUS_F13DBExtractor,
@@ -151,7 +160,7 @@ EXTRACTOR_MAP: dict[str, ExtractorConfig] = {
151
160
  DB_collection: "us_F13_flat"
152
161
  US籌碼面(F13)
153
162
  """
154
- },
163
+ }
155
164
  }
156
165
 
157
166
 
@@ -1,11 +1,11 @@
1
1
  from .balance_sheet import AsyncBalanceSheetFetcher
2
2
  from .cash_flow import AsyncCashFlowFetcher
3
3
  from .finance_overview import AsyncFinanceOverviewFetcher, AsyncAgentOverviewFetcher
4
- from .tech import AsyncTechFetcher
4
+ from .tech import AsyncTechFetcher, AsyncBatchTechFetcher
5
5
  from .twse_institution import AsyncTWSEInstitutionFetcher
6
6
  from .twse_margin import AsyncTWSEMarginFetcher
7
7
  from .month_revenue import AsyncMonthlyRevenueFetcher
8
8
  from .profit_lose import AsyncProfitLoseFetcher
9
9
  from .value import AsyncTWSEStatsValueFetcher
10
- from .tej import AsyncTEJDailyTechFetcher, AsyncTEJSeasonalFetcher
10
+ from .tej import AsyncTEJChipFetcher, AsyncTEJDailyTechFetcher, AsyncTEJSeasonalFetcher
11
11
  from .us_chip import AsyncUSChipF13Fetcher, AsyncUSCelebrityFetcher
@@ -1,16 +1,17 @@
1
1
  from .base import AsyncBaseFetcher
2
2
  from datetime import datetime
3
3
  from ..db_extractors import (
4
- AsyncYFDailyTechDBExtractor, AsyncTEJDailyTechDBExtractor
4
+ AsyncYFDailyTechDBExtractor, AsyncTEJDailyTechDBExtractor,
5
+ AsyncBatchTechDBExtractor
5
6
  )
6
7
  from neurostats_API.async_mode.factory import get_extractor
7
- from neurostats_API.transformers import DailyTechTransformer
8
+ from neurostats_API.transformers import DailyTechTransformer, BatchTechTransformer
8
9
  from neurostats_API.utils import NotSupportedError
9
10
  import pandas as pd
10
11
  from pytz import timezone
11
12
  from neurostats_API.utils import StatsDateTime
12
13
  import yfinance as yf
13
-
14
+ from pymongo import AsyncMongoClient
14
15
 
15
16
  class AsyncTechFetcher(AsyncBaseFetcher):
16
17
 
@@ -208,3 +209,29 @@ class AsyncTechFetcher(AsyncBaseFetcher):
208
209
  df = pd.DataFrame(columns=self.required_cols)
209
210
 
210
211
  return df
212
+
213
+ class AsyncBatchTechFetcher(AsyncBaseFetcher):
214
+ def __init__(
215
+ self, client:AsyncMongoClient, tickers:list,
216
+ zone:str, strftime: str = "%Y-%m-%d"
217
+ ):
218
+ super().__init__()
219
+ self.tickers = tickers
220
+ self.zone = zone
221
+ self.extractor = AsyncBatchTechDBExtractor(
222
+ ticker=self.tickers, client=client, zone=zone
223
+ )
224
+ self.transformer = BatchTechTransformer(strftime=strftime)
225
+
226
+ async def query_data(
227
+ self, start_date=None, end_date=None, get_latest=False,
228
+ ):
229
+ fetched_data = await self.extractor.query_data(
230
+ start_date, end_date, get_latest,
231
+ )
232
+
233
+ transformed_data = self.transformer.process_transform(
234
+ fetched_datas = list(fetched_data),
235
+ )
236
+
237
+ return transformed_data
@@ -0,0 +1,3 @@
1
+ from .chip import AsyncTEJChipFetcher
2
+ from .seasonal_data import AsyncTEJSeasonalFetcher
3
+ from .tech import AsyncTEJDailyTechFetcher
@@ -0,0 +1,42 @@
1
+ from datetime import datetime
2
+
3
+ from neurostats_API.async_mode.fetchers.base import AsyncBaseFetcher
4
+
5
+ from neurostats_API.async_mode.factory import get_extractor
6
+ from neurostats_API.transformers import TEJChipTransformer
7
+ from neurostats_API.utils import NotSupportedError
8
+
9
+ class AsyncTEJChipFetcher(AsyncBaseFetcher):
10
+ def __init__(
11
+ self,
12
+ ticker,
13
+ client
14
+ ):
15
+ self.ticker = ticker
16
+ self.transformer_map = {"tw": TEJChipTransformer}
17
+ try:
18
+ self.extractor = get_extractor("TEJ_Chip", ticker, client)
19
+
20
+ company_name = self.extractor.get_company_name()
21
+ zone = self.extractor.get_zone()
22
+
23
+ transformer = self.get_transformer(zone)
24
+ self.transformer = transformer(ticker, company_name, zone)
25
+
26
+ except NotSupportedError as e:
27
+ raise NotSupportedError(
28
+ f"{self.__class__.__name__} only support {list(self.transformer_map.keys())} companies now, {ticker} is not available"
29
+ ) from e
30
+
31
+ async def query_data(
32
+ self, start_date=None, end_date=None, get_latest=False
33
+ ):
34
+ fetched_data = await self.extractor.query_data(
35
+ start_date, end_date, get_latest
36
+ )
37
+
38
+ transformed_data = self.transformer.process_transform(
39
+ fetched_data = fetched_data
40
+ )
41
+
42
+ return transformed_data
@@ -1,10 +1,12 @@
1
1
  import pandas as pd
2
2
  from neurostats_API.async_mode.fetchers.base import AsyncBaseFetcher
3
3
  from neurostats_API.async_mode.factory import get_extractor
4
+ from neurostats_API.transformers import TEJTechTransformer
4
5
  from neurostats_API.utils import NotSupportedError
5
6
 
7
+
6
8
  class AsyncTEJDailyTechFetcher(AsyncBaseFetcher):
7
-
9
+
8
10
  def __init__(
9
11
  self,
10
12
  ticker,
@@ -17,18 +19,24 @@ class AsyncTEJDailyTechFetcher(AsyncBaseFetcher):
17
19
  self.company_name = self.extractor.get_company_name()
18
20
  self.zone = self.extractor.get_zone()
19
21
 
22
+ self.transformer = TEJTechTransformer(
23
+ ticker, self.company_name, self.zone
24
+ )
25
+
20
26
  except NotSupportedError as e:
21
27
  raise NotSupportedError(
22
28
  f"{self.__class__.__name__} only support TW companies now, {ticker} is not available"
23
29
  ) from e
24
-
30
+
25
31
  async def query_data(self, start_date, end_date):
26
32
  data = await self.extractor.query_data(start_date, end_date)
27
33
  df = pd.DataFrame(data)
28
- return df.rename(columns={
29
- "open_d": "open",
30
- "high_d": "high",
31
- "low_d": "low",
32
- "close_d": "close",
33
- "vol": "volume"
34
- })
34
+ return df.rename(
35
+ columns={
36
+ "open_d": "open",
37
+ "high_d": "high",
38
+ "low_d": "low",
39
+ "close_d": "close",
40
+ "vol": "volume"
41
+ }
42
+ )
@@ -9,7 +9,8 @@ from .cash_flow import (
9
9
  )
10
10
 
11
11
  from .daily_tech import(
12
- DailyTechTransformer
12
+ DailyTechTransformer,
13
+ BatchTechTransformer
13
14
  )
14
15
 
15
16
  from .daily_chip import(
@@ -28,7 +29,9 @@ from .profit_lose import (
28
29
  )
29
30
 
30
31
  from .tej import (
31
- TEJFinanceStatementTransformer
32
+ TEJChipTransformer,
33
+ TEJFinanceStatementTransformer,
34
+ TEJTechTransformer
32
35
  )
33
36
 
34
37
  from .value import (
@@ -0,0 +1 @@
1
+ from .tech import DailyTechTransformer, BatchTechTransformer
@@ -1,8 +1,11 @@
1
1
  from .base import BaseDailyTransformer
2
- import inspect
3
- import pandas as pd
4
2
  from .utils import TechProcessor
5
3
 
4
+ import inspect
5
+ import pandas as pd
6
+ from datetime import datetime
7
+ from typing import List, Optional, Union
8
+ from collections import defaultdict
6
9
 
7
10
  class DailyTechTransformer(BaseDailyTransformer):
8
11
  def __init__(self, ticker, company_name, zone):
@@ -81,4 +84,32 @@ class DailyTechTransformer(BaseDailyTransformer):
81
84
  """
82
85
  回傳年線資料
83
86
  """
84
- return self._get_resampled("YE")
87
+ return self._get_resampled("YE")
88
+
89
+ class BatchTechTransformer(BaseDailyTransformer):
90
+ def __init__(self, strftime:str="%Y-%m-%d"):
91
+ self.date_format = strftime
92
+
93
+ def process_transform(
94
+ self,
95
+ fetched_datas: List[dict],
96
+ ) -> dict[str, dict[Union[str, datetime], float]]:
97
+
98
+ result = defaultdict(lambda: defaultdict(dict))
99
+
100
+ for record in fetched_datas:
101
+ ticker = record.get("ticker")
102
+ date = record.get("date")
103
+ if isinstance(date, str):
104
+ date = datetime.fromisoformat(date)
105
+ date_str = date.strftime(self.date_format)
106
+
107
+ result[ticker][date_str] = {
108
+ "open": record.get("open"),
109
+ "high": record.get("high"),
110
+ "low": record.get("low"),
111
+ "close": record.get("close"),
112
+ "volume": record.get("volume"),
113
+ }
114
+
115
+ return dict(result)
@@ -0,0 +1,3 @@
1
+ from .chip import TEJChipTransformer
2
+ from .finance_statement import TEJFinanceStatementTransformer
3
+ from .tech import TEJTechTransformer
@@ -0,0 +1,23 @@
1
+ from .base import BaseTEJTransformer
2
+ import pandas as pd
3
+
4
+ class TEJChipTransformer(BaseTEJTransformer):
5
+ def __init__(self, ticker, company_name, zone):
6
+ super().__init__(ticker, company_name, zone)
7
+ self.return_keys = ["chip_data"]
8
+
9
+
10
+ def process_transform(
11
+ self,
12
+ fetched_data
13
+ ):
14
+ if (not fetched_data):
15
+ return self._get_empty_structure()
16
+
17
+ fetched_data = pd.DataFrame(fetched_data)
18
+
19
+ return {
20
+ "ticker": self.ticker,
21
+ "company_name": self.company_name,
22
+ "chip_data": fetched_data
23
+ }
@@ -0,0 +1,24 @@
1
+ from .base import BaseTEJTransformer
2
+ import pandas as pd
3
+
4
+
5
+ class TEJTechTransformer(BaseTEJTransformer):
6
+
7
+ def __init__(self, ticker, company_name, zone):
8
+ super().__init__(ticker, company_name, zone)
9
+ self.fetched_data = None
10
+
11
+ def process_transform(self, fetched_data):
12
+ self.fetched_data = pd.DataFrame(fetched_data)
13
+
14
+ self.fetched_data = self.fetched_data.rename(
15
+ columns={
16
+ "open_d": "open",
17
+ "high_d": "high",
18
+ "low_d": "low",
19
+ "close_d": "close",
20
+ "vol": "volume"
21
+ }
22
+ )
23
+
24
+ return self.fetched_data
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: neurostats_API
3
- Version: 1.0.2rc3
3
+ Version: 1.0.3rc1
4
4
  Summary: The service of NeuroStats website
5
5
  Home-page: https://github.com/NeurowattStats/NeuroStats_API.git
6
6
  Author: JasonWang@Neurowatt
@@ -71,7 +71,7 @@ pip install neurostats-API
71
71
  ```Python
72
72
  >>> import neurostats_API
73
73
  >>> print(neurostats_API.__version__)
74
- 1.0.2rc3
74
+ 1.0.3rc1
75
75
  ```
76
76
 
77
77
  ### 下載舊版
@@ -50,6 +50,7 @@ neurostats_API/async_mode/fetchers/twse_margin.py
50
50
  neurostats_API/async_mode/fetchers/us_chip.py
51
51
  neurostats_API/async_mode/fetchers/value.py
52
52
  neurostats_API/async_mode/fetchers/tej/__init__.py
53
+ neurostats_API/async_mode/fetchers/tej/chip.py
53
54
  neurostats_API/async_mode/fetchers/tej/seasonal_data.py
54
55
  neurostats_API/async_mode/fetchers/tej/tech.py
55
56
  neurostats_API/config/company_list/ticker_index_industry_map.json
@@ -90,7 +91,6 @@ neurostats_API/transformers/cash_flow/twse.py
90
91
  neurostats_API/transformers/cash_flow/us.py
91
92
  neurostats_API/transformers/daily_chip/__init__.py
92
93
  neurostats_API/transformers/daily_chip/base.py
93
- neurostats_API/transformers/daily_chip/tej.py
94
94
  neurostats_API/transformers/daily_chip/twse_chip.py
95
95
  neurostats_API/transformers/daily_chip/us.py
96
96
  neurostats_API/transformers/daily_chip/utils/__init__.py
@@ -117,6 +117,7 @@ neurostats_API/transformers/tej/__init__.py
117
117
  neurostats_API/transformers/tej/base.py
118
118
  neurostats_API/transformers/tej/chip.py
119
119
  neurostats_API/transformers/tej/finance_statement.py
120
+ neurostats_API/transformers/tej/tech.py
120
121
  neurostats_API/transformers/value/__init__.py
121
122
  neurostats_API/transformers/value/base.py
122
123
  neurostats_API/transformers/value/tej.py
@@ -2,7 +2,7 @@ from setuptools import setup, find_packages
2
2
 
3
3
  setup(
4
4
  name='neurostats_API',
5
- version='1.0.2rc3',
5
+ version='1.0.3rc1',
6
6
  long_description=open('README.md', 'r', encoding='utf-8').read(),
7
7
  long_description_content_type='text/markdown',
8
8
  install_requires=[
@@ -105,7 +105,7 @@ async def test_tech():
105
105
 
106
106
  test_fns = [
107
107
  fetcher.get_daily, fetcher.get_weekly, fetcher.get_monthly,
108
- fetcher.get_quarterly, fetcher.get_yearly, fetcher.get_tej
108
+ fetcher.get_quarterly, fetcher.get_yearly
109
109
  ]
110
110
 
111
111
  for fetch_fn in test_fns:
@@ -249,6 +249,26 @@ async def test_us_chip():
249
249
  print(e)
250
250
  print('========================================')
251
251
 
252
+ @pytest.mark.asyncio
253
+ async def test_tej_chip():
254
+ print(f"# Agents overview")
255
+ from neurostats_API.async_mode.fetchers import AsyncTEJChipFetcher
256
+
257
+ for ticker in tickers:
258
+ try:
259
+ fetcher = AsyncTEJChipFetcher(ticker, client)
260
+
261
+ test_fn = [fetcher.query_data]
262
+
263
+ for fetch_fn in test_fn:
264
+ data = await fetch_fn()
265
+
266
+ print_dict_summary(data)
267
+ print('========================================')
268
+
269
+ except Exception as e:
270
+ print(str(e))
271
+
252
272
  def print_dict_summary(data: dict, indent: int = 1):
253
273
  prefix = " " * indent
254
274
  for key, value in data.items():
@@ -1,12 +0,0 @@
1
- from .base import BaseDailyTechDBExtractor
2
-
3
-
4
- class AsyncTEJDailyTechDBExtractor(BaseDailyTechDBExtractor):
5
-
6
- def __init__(self, ticker, client):
7
- super().__init__(ticker, client)
8
-
9
- def _get_collection_name(self):
10
- self.collection_name_map = {"tw": "TEJ_share_price"}
11
-
12
- return self.collection_name_map.get(self.zone, None)
@@ -1,2 +0,0 @@
1
- from .seasonal_data import AsyncTEJSeasonalFetcher
2
- from .tech import AsyncTEJDailyTechFetcher
@@ -1 +0,0 @@
1
- from .tech import DailyTechTransformer
@@ -1 +0,0 @@
1
- from .finance_statement import TEJFinanceStatementTransformer