neurostats-API 1.0.1rc1__tar.gz → 1.0.2rc2__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 (139) hide show
  1. {neurostats_api-1.0.1rc1 → neurostats_api-1.0.2rc2}/PKG-INFO +2 -2
  2. {neurostats_api-1.0.1rc1 → neurostats_api-1.0.2rc2}/README.md +1 -1
  3. {neurostats_api-1.0.1rc1 → neurostats_api-1.0.2rc2}/neurostats_API/__init__.py +3 -2
  4. {neurostats_api-1.0.1rc1 → neurostats_api-1.0.2rc2}/neurostats_API/async_mode/__init__.py +2 -1
  5. {neurostats_api-1.0.1rc1 → neurostats_api-1.0.2rc2}/neurostats_API/async_mode/db_extractors/__init__.py +2 -2
  6. {neurostats_api-1.0.1rc1 → neurostats_api-1.0.2rc2}/neurostats_API/async_mode/db_extractors/base.py +14 -1
  7. {neurostats_api-1.0.1rc1 → neurostats_api-1.0.2rc2}/neurostats_API/async_mode/db_extractors/daily/__init__.py +1 -1
  8. neurostats_api-1.0.2rc2/neurostats_API/async_mode/db_extractors/daily/us_chip.py +138 -0
  9. {neurostats_api-1.0.1rc1 → neurostats_api-1.0.2rc2}/neurostats_API/async_mode/fetchers/__init__.py +1 -1
  10. {neurostats_api-1.0.1rc1 → neurostats_api-1.0.2rc2}/neurostats_API/async_mode/fetchers/tech.py +9 -4
  11. {neurostats_api-1.0.1rc1 → neurostats_api-1.0.2rc2}/neurostats_API/async_mode/fetchers/us_chip.py +25 -2
  12. {neurostats_api-1.0.1rc1 → neurostats_api-1.0.2rc2}/neurostats_API/fetchers/tech.py +1 -1
  13. {neurostats_api-1.0.1rc1 → neurostats_api-1.0.2rc2}/neurostats_API/transformers/__init__.py +2 -1
  14. neurostats_api-1.0.2rc2/neurostats_API/transformers/daily_chip/__init__.py +2 -0
  15. {neurostats_api-1.0.1rc1 → neurostats_api-1.0.2rc2}/neurostats_API/transformers/daily_chip/us.py +26 -1
  16. neurostats_api-1.0.2rc2/neurostats_API/transformers/daily_chip/utils/security_lending.py +0 -0
  17. neurostats_api-1.0.2rc2/neurostats_API/transformers/tej/chip.py +0 -0
  18. neurostats_api-1.0.2rc2/neurostats_API/utils/datetime.py +52 -0
  19. {neurostats_api-1.0.1rc1 → neurostats_api-1.0.2rc2}/neurostats_API.egg-info/PKG-INFO +2 -2
  20. {neurostats_api-1.0.1rc1 → neurostats_api-1.0.2rc2}/neurostats_API.egg-info/SOURCES.txt +2 -0
  21. {neurostats_api-1.0.1rc1 → neurostats_api-1.0.2rc2}/setup.py +1 -1
  22. neurostats_api-1.0.1rc1/neurostats_API/async_mode/db_extractors/daily/us_chip.py +0 -66
  23. neurostats_api-1.0.1rc1/neurostats_API/transformers/daily_chip/__init__.py +0 -2
  24. neurostats_api-1.0.1rc1/neurostats_API/utils/datetime.py +0 -29
  25. {neurostats_api-1.0.1rc1 → neurostats_api-1.0.2rc2}/MANIFEST.in +0 -0
  26. {neurostats_api-1.0.1rc1 → neurostats_api-1.0.2rc2}/neurostats_API/async_mode/db/__init__.py +0 -0
  27. {neurostats_api-1.0.1rc1 → neurostats_api-1.0.2rc2}/neurostats_API/async_mode/db/base.py +0 -0
  28. {neurostats_api-1.0.1rc1 → neurostats_api-1.0.2rc2}/neurostats_API/async_mode/db/tej.py +0 -0
  29. {neurostats_api-1.0.1rc1 → neurostats_api-1.0.2rc2}/neurostats_API/async_mode/db/twse.py +0 -0
  30. {neurostats_api-1.0.1rc1 → neurostats_api-1.0.2rc2}/neurostats_API/async_mode/db/us.py +0 -0
  31. {neurostats_api-1.0.1rc1 → neurostats_api-1.0.2rc2}/neurostats_API/async_mode/db_extractors/daily/base.py +0 -0
  32. {neurostats_api-1.0.1rc1 → neurostats_api-1.0.2rc2}/neurostats_API/async_mode/db_extractors/daily/tej_chip.py +0 -0
  33. {neurostats_api-1.0.1rc1 → neurostats_api-1.0.2rc2}/neurostats_API/async_mode/db_extractors/daily/tej_tech.py +0 -0
  34. {neurostats_api-1.0.1rc1 → neurostats_api-1.0.2rc2}/neurostats_API/async_mode/db_extractors/daily/twse_chip.py +0 -0
  35. {neurostats_api-1.0.1rc1 → neurostats_api-1.0.2rc2}/neurostats_API/async_mode/db_extractors/daily/value.py +0 -0
  36. {neurostats_api-1.0.1rc1 → neurostats_api-1.0.2rc2}/neurostats_API/async_mode/db_extractors/daily/yf.py +0 -0
  37. {neurostats_api-1.0.1rc1 → neurostats_api-1.0.2rc2}/neurostats_API/async_mode/db_extractors/month_revenue/__init__.py +0 -0
  38. {neurostats_api-1.0.1rc1 → neurostats_api-1.0.2rc2}/neurostats_API/async_mode/db_extractors/month_revenue/base.py +0 -0
  39. {neurostats_api-1.0.1rc1 → neurostats_api-1.0.2rc2}/neurostats_API/async_mode/db_extractors/month_revenue/twse.py +0 -0
  40. {neurostats_api-1.0.1rc1 → neurostats_api-1.0.2rc2}/neurostats_API/async_mode/db_extractors/seasonal/__init__.py +0 -0
  41. {neurostats_api-1.0.1rc1 → neurostats_api-1.0.2rc2}/neurostats_API/async_mode/db_extractors/seasonal/balance_sheet.py +0 -0
  42. {neurostats_api-1.0.1rc1 → neurostats_api-1.0.2rc2}/neurostats_API/async_mode/db_extractors/seasonal/base.py +0 -0
  43. {neurostats_api-1.0.1rc1 → neurostats_api-1.0.2rc2}/neurostats_API/async_mode/db_extractors/seasonal/cashflow.py +0 -0
  44. {neurostats_api-1.0.1rc1 → neurostats_api-1.0.2rc2}/neurostats_API/async_mode/db_extractors/seasonal/profit_lose.py +0 -0
  45. {neurostats_api-1.0.1rc1 → neurostats_api-1.0.2rc2}/neurostats_API/async_mode/db_extractors/seasonal/tej.py +0 -0
  46. {neurostats_api-1.0.1rc1 → neurostats_api-1.0.2rc2}/neurostats_API/async_mode/factory/__init__.py +0 -0
  47. {neurostats_api-1.0.1rc1 → neurostats_api-1.0.2rc2}/neurostats_API/async_mode/factory/extractor_factory.py +0 -0
  48. {neurostats_api-1.0.1rc1 → neurostats_api-1.0.2rc2}/neurostats_API/async_mode/factory/transformer_factory.py +0 -0
  49. {neurostats_api-1.0.1rc1 → neurostats_api-1.0.2rc2}/neurostats_API/async_mode/fetchers/balance_sheet.py +0 -0
  50. {neurostats_api-1.0.1rc1 → neurostats_api-1.0.2rc2}/neurostats_API/async_mode/fetchers/base.py +0 -0
  51. {neurostats_api-1.0.1rc1 → neurostats_api-1.0.2rc2}/neurostats_API/async_mode/fetchers/cash_flow.py +0 -0
  52. {neurostats_api-1.0.1rc1 → neurostats_api-1.0.2rc2}/neurostats_API/async_mode/fetchers/finance_overview.py +0 -0
  53. {neurostats_api-1.0.1rc1 → neurostats_api-1.0.2rc2}/neurostats_API/async_mode/fetchers/month_revenue.py +0 -0
  54. {neurostats_api-1.0.1rc1 → neurostats_api-1.0.2rc2}/neurostats_API/async_mode/fetchers/profit_lose.py +0 -0
  55. {neurostats_api-1.0.1rc1 → neurostats_api-1.0.2rc2}/neurostats_API/async_mode/fetchers/tej/__init__.py +0 -0
  56. /neurostats_api-1.0.1rc1/neurostats_API/transformers/daily_chip/tej.py → /neurostats_api-1.0.2rc2/neurostats_API/async_mode/fetchers/tej/chip.py +0 -0
  57. {neurostats_api-1.0.1rc1 → neurostats_api-1.0.2rc2}/neurostats_API/async_mode/fetchers/tej/seasonal_data.py +0 -0
  58. {neurostats_api-1.0.1rc1 → neurostats_api-1.0.2rc2}/neurostats_API/async_mode/fetchers/tej/tech.py +0 -0
  59. {neurostats_api-1.0.1rc1 → neurostats_api-1.0.2rc2}/neurostats_API/async_mode/fetchers/twse_institution.py +0 -0
  60. {neurostats_api-1.0.1rc1 → neurostats_api-1.0.2rc2}/neurostats_API/async_mode/fetchers/twse_margin.py +0 -0
  61. {neurostats_api-1.0.1rc1 → neurostats_api-1.0.2rc2}/neurostats_API/async_mode/fetchers/value.py +0 -0
  62. {neurostats_api-1.0.1rc1 → neurostats_api-1.0.2rc2}/neurostats_API/cli.py +0 -0
  63. {neurostats_api-1.0.1rc1 → neurostats_api-1.0.2rc2}/neurostats_API/config/company_list/ticker_index_industry_map.json +0 -0
  64. {neurostats_api-1.0.1rc1 → neurostats_api-1.0.2rc2}/neurostats_API/config/company_list/ticker_to_cik.json +0 -0
  65. {neurostats_api-1.0.1rc1 → neurostats_api-1.0.2rc2}/neurostats_API/config/company_list/tw.json +0 -0
  66. {neurostats_api-1.0.1rc1 → neurostats_api-1.0.2rc2}/neurostats_API/config/company_list/us.json +0 -0
  67. {neurostats_api-1.0.1rc1 → neurostats_api-1.0.2rc2}/neurostats_API/config/company_list/us_TradingView_list.json +0 -0
  68. {neurostats_api-1.0.1rc1 → neurostats_api-1.0.2rc2}/neurostats_API/config/tej_db/tej_db_index.yaml +0 -0
  69. {neurostats_api-1.0.1rc1 → neurostats_api-1.0.2rc2}/neurostats_API/config/tej_db/tej_db_percent_index.yaml +0 -0
  70. {neurostats_api-1.0.1rc1 → neurostats_api-1.0.2rc2}/neurostats_API/config/tej_db/tej_db_skip_index.yaml +0 -0
  71. {neurostats_api-1.0.1rc1 → neurostats_api-1.0.2rc2}/neurostats_API/config/tej_db/tej_db_thousand_index.yaml +0 -0
  72. {neurostats_api-1.0.1rc1 → neurostats_api-1.0.2rc2}/neurostats_API/config/twse/balance_sheet.yaml +0 -0
  73. {neurostats_api-1.0.1rc1 → neurostats_api-1.0.2rc2}/neurostats_API/config/twse/cash_flow_percentage.yaml +0 -0
  74. {neurostats_api-1.0.1rc1 → neurostats_api-1.0.2rc2}/neurostats_API/config/twse/finance_overview_dict.yaml +0 -0
  75. {neurostats_api-1.0.1rc1 → neurostats_api-1.0.2rc2}/neurostats_API/config/twse/profit_lose.yaml +0 -0
  76. {neurostats_api-1.0.1rc1 → neurostats_api-1.0.2rc2}/neurostats_API/config/twse/seasonal_data_field_dict.txt +0 -0
  77. {neurostats_api-1.0.1rc1 → neurostats_api-1.0.2rc2}/neurostats_API/fetchers/__init__.py +0 -0
  78. {neurostats_api-1.0.1rc1 → neurostats_api-1.0.2rc2}/neurostats_API/fetchers/balance_sheet.py +0 -0
  79. {neurostats_api-1.0.1rc1 → neurostats_api-1.0.2rc2}/neurostats_API/fetchers/base.py +0 -0
  80. {neurostats_api-1.0.1rc1 → neurostats_api-1.0.2rc2}/neurostats_API/fetchers/cash_flow.py +0 -0
  81. {neurostats_api-1.0.1rc1 → neurostats_api-1.0.2rc2}/neurostats_API/fetchers/finance_overview.py +0 -0
  82. {neurostats_api-1.0.1rc1 → neurostats_api-1.0.2rc2}/neurostats_API/fetchers/institution.py +0 -0
  83. {neurostats_api-1.0.1rc1 → neurostats_api-1.0.2rc2}/neurostats_API/fetchers/margin_trading.py +0 -0
  84. {neurostats_api-1.0.1rc1 → neurostats_api-1.0.2rc2}/neurostats_API/fetchers/month_revenue.py +0 -0
  85. {neurostats_api-1.0.1rc1 → neurostats_api-1.0.2rc2}/neurostats_API/fetchers/profit_lose.py +0 -0
  86. {neurostats_api-1.0.1rc1 → neurostats_api-1.0.2rc2}/neurostats_API/fetchers/tej_finance_report.py +0 -0
  87. {neurostats_api-1.0.1rc1 → neurostats_api-1.0.2rc2}/neurostats_API/fetchers/value_invest.py +0 -0
  88. {neurostats_api-1.0.1rc1 → neurostats_api-1.0.2rc2}/neurostats_API/main.py +0 -0
  89. {neurostats_api-1.0.1rc1 → neurostats_api-1.0.2rc2}/neurostats_API/transformers/balance_sheet/__init__.py +0 -0
  90. {neurostats_api-1.0.1rc1 → neurostats_api-1.0.2rc2}/neurostats_API/transformers/balance_sheet/base.py +0 -0
  91. {neurostats_api-1.0.1rc1 → neurostats_api-1.0.2rc2}/neurostats_API/transformers/balance_sheet/twse.py +0 -0
  92. {neurostats_api-1.0.1rc1 → neurostats_api-1.0.2rc2}/neurostats_API/transformers/balance_sheet/us.py +0 -0
  93. {neurostats_api-1.0.1rc1 → neurostats_api-1.0.2rc2}/neurostats_API/transformers/base.py +0 -0
  94. {neurostats_api-1.0.1rc1 → neurostats_api-1.0.2rc2}/neurostats_API/transformers/cash_flow/__init__.py +0 -0
  95. {neurostats_api-1.0.1rc1 → neurostats_api-1.0.2rc2}/neurostats_API/transformers/cash_flow/base.py +0 -0
  96. {neurostats_api-1.0.1rc1 → neurostats_api-1.0.2rc2}/neurostats_API/transformers/cash_flow/twse.py +0 -0
  97. {neurostats_api-1.0.1rc1 → neurostats_api-1.0.2rc2}/neurostats_API/transformers/cash_flow/us.py +0 -0
  98. {neurostats_api-1.0.1rc1 → neurostats_api-1.0.2rc2}/neurostats_API/transformers/daily_chip/base.py +0 -0
  99. /neurostats_api-1.0.1rc1/neurostats_API/transformers/daily_chip/utils/__init__.py → /neurostats_api-1.0.2rc2/neurostats_API/transformers/daily_chip/tej.py +0 -0
  100. {neurostats_api-1.0.1rc1 → neurostats_api-1.0.2rc2}/neurostats_API/transformers/daily_chip/twse_chip.py +0 -0
  101. /neurostats_api-1.0.1rc1/neurostats_API/transformers/daily_chip/utils/security_lending.py → /neurostats_api-1.0.2rc2/neurostats_API/transformers/daily_chip/utils/__init__.py +0 -0
  102. {neurostats_api-1.0.1rc1 → neurostats_api-1.0.2rc2}/neurostats_API/transformers/daily_chip/utils/institution.py +0 -0
  103. {neurostats_api-1.0.1rc1 → neurostats_api-1.0.2rc2}/neurostats_API/transformers/daily_chip/utils/margin_trading.py +0 -0
  104. {neurostats_api-1.0.1rc1 → neurostats_api-1.0.2rc2}/neurostats_API/transformers/daily_tech/__init__.py +0 -0
  105. {neurostats_api-1.0.1rc1 → neurostats_api-1.0.2rc2}/neurostats_API/transformers/daily_tech/base.py +0 -0
  106. {neurostats_api-1.0.1rc1 → neurostats_api-1.0.2rc2}/neurostats_API/transformers/daily_tech/tech.py +0 -0
  107. {neurostats_api-1.0.1rc1 → neurostats_api-1.0.2rc2}/neurostats_API/transformers/daily_tech/utils/__init__.py +0 -0
  108. {neurostats_api-1.0.1rc1 → neurostats_api-1.0.2rc2}/neurostats_API/transformers/daily_tech/utils/processor.py +0 -0
  109. {neurostats_api-1.0.1rc1 → neurostats_api-1.0.2rc2}/neurostats_API/transformers/finance_overview/__init__.py +0 -0
  110. {neurostats_api-1.0.1rc1 → neurostats_api-1.0.2rc2}/neurostats_API/transformers/finance_overview/agent_overview.py +0 -0
  111. {neurostats_api-1.0.1rc1 → neurostats_api-1.0.2rc2}/neurostats_API/transformers/finance_overview/base.py +0 -0
  112. {neurostats_api-1.0.1rc1 → neurostats_api-1.0.2rc2}/neurostats_API/transformers/finance_overview/stats_overview.py +0 -0
  113. {neurostats_api-1.0.1rc1 → neurostats_api-1.0.2rc2}/neurostats_API/transformers/month_revenue/__init__.py +0 -0
  114. {neurostats_api-1.0.1rc1 → neurostats_api-1.0.2rc2}/neurostats_API/transformers/month_revenue/base.py +0 -0
  115. {neurostats_api-1.0.1rc1 → neurostats_api-1.0.2rc2}/neurostats_API/transformers/month_revenue/twse.py +0 -0
  116. {neurostats_api-1.0.1rc1 → neurostats_api-1.0.2rc2}/neurostats_API/transformers/profit_lose/__init__.py +0 -0
  117. {neurostats_api-1.0.1rc1 → neurostats_api-1.0.2rc2}/neurostats_API/transformers/profit_lose/base.py +0 -0
  118. {neurostats_api-1.0.1rc1 → neurostats_api-1.0.2rc2}/neurostats_API/transformers/profit_lose/twse.py +0 -0
  119. {neurostats_api-1.0.1rc1 → neurostats_api-1.0.2rc2}/neurostats_API/transformers/profit_lose/us.py +0 -0
  120. {neurostats_api-1.0.1rc1 → neurostats_api-1.0.2rc2}/neurostats_API/transformers/tej/__init__.py +0 -0
  121. {neurostats_api-1.0.1rc1 → neurostats_api-1.0.2rc2}/neurostats_API/transformers/tej/base.py +0 -0
  122. {neurostats_api-1.0.1rc1 → neurostats_api-1.0.2rc2}/neurostats_API/transformers/tej/finance_statement.py +0 -0
  123. {neurostats_api-1.0.1rc1 → neurostats_api-1.0.2rc2}/neurostats_API/transformers/value/__init__.py +0 -0
  124. {neurostats_api-1.0.1rc1 → neurostats_api-1.0.2rc2}/neurostats_API/transformers/value/base.py +0 -0
  125. {neurostats_api-1.0.1rc1 → neurostats_api-1.0.2rc2}/neurostats_API/transformers/value/tej.py +0 -0
  126. {neurostats_api-1.0.1rc1 → neurostats_api-1.0.2rc2}/neurostats_API/transformers/value/twse.py +0 -0
  127. {neurostats_api-1.0.1rc1 → neurostats_api-1.0.2rc2}/neurostats_API/utils/__init__.py +0 -0
  128. {neurostats_api-1.0.1rc1 → neurostats_api-1.0.2rc2}/neurostats_API/utils/calculate_value.py +0 -0
  129. {neurostats_api-1.0.1rc1 → neurostats_api-1.0.2rc2}/neurostats_API/utils/data_process.py +0 -0
  130. {neurostats_api-1.0.1rc1 → neurostats_api-1.0.2rc2}/neurostats_API/utils/db_client.py +0 -0
  131. {neurostats_api-1.0.1rc1 → neurostats_api-1.0.2rc2}/neurostats_API/utils/exception.py +0 -0
  132. {neurostats_api-1.0.1rc1 → neurostats_api-1.0.2rc2}/neurostats_API/utils/logger.py +0 -0
  133. {neurostats_api-1.0.1rc1 → neurostats_api-1.0.2rc2}/neurostats_API.egg-info/dependency_links.txt +0 -0
  134. {neurostats_api-1.0.1rc1 → neurostats_api-1.0.2rc2}/neurostats_API.egg-info/requires.txt +0 -0
  135. {neurostats_api-1.0.1rc1 → neurostats_api-1.0.2rc2}/neurostats_API.egg-info/top_level.txt +0 -0
  136. {neurostats_api-1.0.1rc1 → neurostats_api-1.0.2rc2}/setup.cfg +0 -0
  137. {neurostats_api-1.0.1rc1 → neurostats_api-1.0.2rc2}/test/test_async_fetcher.py +0 -0
  138. {neurostats_api-1.0.1rc1 → neurostats_api-1.0.2rc2}/test/test_fetchers.py +0 -0
  139. {neurostats_api-1.0.1rc1 → neurostats_api-1.0.2rc2}/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.1rc1
3
+ Version: 1.0.2rc2
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.0
74
+ 1.0.2rc2
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.0
57
+ 1.0.2rc2
58
58
  ```
59
59
 
60
60
  ### 下載舊版
@@ -1,4 +1,4 @@
1
- __version__='1.0.0'
1
+ __version__='1.0.2rc2'
2
2
 
3
3
  from .fetchers import (
4
4
  AgentFinanceOverviewFetcher,
@@ -25,5 +25,6 @@ from .async_mode import (
25
25
  AsyncTEJSeasonalFetcher,
26
26
  AsyncTWSEInstitutionFetcher,
27
27
  AsyncTWSEMarginFetcher,
28
- AsyncTWSEStatsValueFetcher
28
+ AsyncTWSEStatsValueFetcher,
29
+ AsyncUSCelebrityFetcher
29
30
  )
@@ -9,5 +9,6 @@ from .fetchers import (
9
9
  AsyncTEJSeasonalFetcher,
10
10
  AsyncTWSEInstitutionFetcher,
11
11
  AsyncTWSEMarginFetcher,
12
- AsyncTWSEStatsValueFetcher
12
+ AsyncTWSEStatsValueFetcher,
13
+ AsyncUSCelebrityFetcher
13
14
  )
@@ -4,8 +4,8 @@ from .daily import (
4
4
  AsyncDailyValueDBExtractor,
5
5
  AsyncTEJDailyValueDBExtractor,
6
6
  AsyncTWSEChipDBExtractor,
7
- AsyncUS_F13DBExtractor
8
-
7
+ AsyncUS_F13DBExtractor,
8
+ AsyncUS_CelebrityDBExtractor
9
9
  )
10
10
 
11
11
  from .month_revenue import (
@@ -18,6 +18,19 @@ class BaseDBExtractor(abc.ABC):
18
18
  self.db_client = self._set_db_connection()
19
19
 
20
20
  def _set_company_name(self, ticker):
21
+
22
+ index_dict = {
23
+ "^TWII": ("台灣加權指數", 'tw'),
24
+ "^GSPC": ("S&P 500", 'us'),
25
+ "^DJI": ("Dow Jones Indices", 'us'),
26
+ "^IXIC": ("NASDAQ Composite", 'us')
27
+ }
28
+
29
+ for key, values in index_dict.items():
30
+ if (key == ticker):
31
+ company_name, zone = values
32
+ return company_name, zone
33
+
21
34
  company_lists = [
22
35
  (self.tw_company_list, 'tw'),
23
36
  (self.us_company_list, 'us')
@@ -28,6 +41,7 @@ class BaseDBExtractor(abc.ABC):
28
41
  if (company_name):
29
42
  return company_name, zone
30
43
  # 沒找到公司名稱
44
+
31
45
  raise NoCompanyError(f"Ticker-{ticker} not found in any company lists")
32
46
 
33
47
  def _set_db_connection(self):
@@ -38,7 +52,6 @@ class BaseDBExtractor(abc.ABC):
38
52
  db_client = db_map.get(self.zone, TWSEDBClient)
39
53
  return db_client(self.client)
40
54
 
41
-
42
55
 
43
56
  async def query_data(self):
44
57
  """
@@ -4,5 +4,5 @@ from .value import (
4
4
  AsyncDailyValueDBExtractor,
5
5
  AsyncTEJDailyValueDBExtractor
6
6
  )
7
- from .us_chip import AsyncUS_F13DBExtractor
7
+ from .us_chip import AsyncUS_F13DBExtractor, AsyncUS_CelebrityDBExtractor
8
8
  from .yf import AsyncYFDailyTechDBExtractor
@@ -0,0 +1,138 @@
1
+ from datetime import datetime, timedelta
2
+ from pymongo import ASCENDING, DESCENDING
3
+ from .base import BaseDailyTechDBExtractor
4
+ from neurostats_API.utils import (
5
+ NotSupportedError, StatsProcessor
6
+ )
7
+ from pymongo import AsyncMongoClient
8
+
9
+ class AsyncUS_F13DBExtractor(BaseDailyTechDBExtractor):
10
+
11
+ def __init__(self, ticker, client, managerTicker=None):
12
+ """
13
+ ticker: Issuer Ticker, 被持有的股票代碼
14
+ managerTicker: 持有者的股票代碼
15
+ """
16
+ super().__init__(ticker, client)
17
+ self.issuerTicker = ticker
18
+ self.managerTicker = managerTicker
19
+
20
+ if (self.get_zone() not in ['us']):
21
+ raise NotSupportedError("Supports US Company Only")
22
+
23
+ def _get_collection_name(self):
24
+ self.collection_name_map = {"us": "us_F13"}
25
+
26
+ return self.collection_name_map.get(self.zone, None)
27
+
28
+ def _prepare_query(self, start_date=None, end_date=None, get_latest=False):
29
+ query = {"issuerTicker": self.issuerTicker}
30
+
31
+ if (self.managerTicker):
32
+ query.update(
33
+ {
34
+ "managerTicker": self.managerTicker
35
+ }
36
+ )
37
+
38
+ query = self._update_query_with_date(query, start_date, end_date)
39
+
40
+ projection = {
41
+ "_id": 0,
42
+ }
43
+
44
+ if (get_latest):
45
+ sort = [("reportDate", DESCENDING)]
46
+ else:
47
+ sort = [("reportDate", ASCENDING)]
48
+
49
+ return query, projection, sort
50
+
51
+ def _update_query_with_date(self, query, start_date, end_date):
52
+ start_date = self._transform_date(start_date)
53
+ end_date = self._transform_date(end_date)
54
+
55
+ date_range = {"$gte": start_date, "$lte": end_date}
56
+
57
+ query.update({"reportDate": date_range})
58
+
59
+ return query
60
+
61
+ async def query_data(
62
+ self, start_date=None, end_date=None, get_latest=False
63
+ ):
64
+ result = await super().query_data(start_date, end_date, get_latest)
65
+
66
+ return result
67
+
68
+ class AsyncUS_CelebrityDBExtractor(AsyncUS_F13DBExtractor):
69
+ """
70
+ 用於查詢美國名人持股的專用extractor
71
+ """
72
+ def __init__(self, client:AsyncMongoClient, manager_name=None):
73
+ """
74
+ manager_name: 名人名稱
75
+ """
76
+ self.client = client
77
+ self.zone = "us"
78
+ self.manager = manager_name
79
+ self.collection_name_map = {"us": "us_F13"}
80
+ self.collection = self.client.get_database("company_us").get_collection("us_F13")
81
+
82
+
83
+ def _get_collection_name(self):
84
+
85
+ return self.collection_name_map.get(self.zone, None)
86
+
87
+ def _prepare_query(
88
+ self, start_date=None, end_date=None, get_latest=False,
89
+ value_throshold=None, title=None
90
+ ):
91
+ query = {"manager": self.manager}
92
+
93
+ if start_date:
94
+ start_date = self._transform_date(start_date)
95
+ if end_date:
96
+ end_date = self._transform_date(end_date)
97
+
98
+ if start_date or end_date:
99
+ date_range = {}
100
+ if start_date:
101
+ date_range["$gte"] = start_date
102
+ if end_date:
103
+ date_range["$lte"] = end_date
104
+ query["reportDate"] = date_range
105
+
106
+ if value_throshold:
107
+ query["value"] = {"$gt": value_throshold}
108
+
109
+ if title:
110
+ query["titleOfClass"] = title
111
+
112
+ projection = {"_id": 0}
113
+
114
+ if (get_latest):
115
+ sort = [("reportDate", DESCENDING)]
116
+ else:
117
+ sort = [("reportDate", ASCENDING)]
118
+
119
+ return query, projection, sort
120
+
121
+ async def query_data(
122
+ self, start_date=None, end_date=None, get_latest=False,
123
+ value_throshold=None, title=None
124
+ ):
125
+ query, projection, sort = self._prepare_query(
126
+ start_date=start_date, end_date=end_date, get_latest=get_latest,
127
+ value_throshold=value_throshold, title=title
128
+ )
129
+
130
+ if (get_latest):
131
+ cursor = self.collection.find(query, projection).sort(sort).limit(1)
132
+ else:
133
+ cursor = self.collection.find(query, projection).sort(sort)
134
+
135
+ fetched_data = [data async for data in cursor]
136
+
137
+ return fetched_data
138
+
@@ -8,4 +8,4 @@ from .month_revenue import AsyncMonthlyRevenueFetcher
8
8
  from .profit_lose import AsyncProfitLoseFetcher
9
9
  from .value import AsyncTWSEStatsValueFetcher
10
10
  from .tej import AsyncTEJDailyTechFetcher, AsyncTEJSeasonalFetcher
11
- from .us_chip import AsyncUSChipF13Fetcher
11
+ from .us_chip import AsyncUSChipF13Fetcher, AsyncUSCelebrityFetcher
@@ -7,6 +7,8 @@ from neurostats_API.async_mode.factory import get_extractor
7
7
  from neurostats_API.transformers import DailyTechTransformer
8
8
  from neurostats_API.utils import NotSupportedError
9
9
  import pandas as pd
10
+ from pytz import timezone
11
+ from neurostats_API.utils import StatsDateTime
10
12
  import yfinance as yf
11
13
 
12
14
 
@@ -79,9 +81,8 @@ class AsyncTechFetcher(AsyncBaseFetcher):
79
81
 
80
82
  async def _fetch_data(self, start_date, end_date):
81
83
 
82
- if (self.ticker in ['GSPC', 'IXIC', 'DJI', 'TWII']):
83
- full_tick = f'^{self.ticker}'
84
- df = self._conduct_yf_search(full_tick, start_date, end_date)
84
+ if (self.ticker in ['^GSPC', '^IXIC', '^DJI', '^TWII']):
85
+ df = self._conduct_yf_search(self.ticker, start_date, end_date)
85
86
 
86
87
  return df[self.required_cols]
87
88
 
@@ -97,11 +98,14 @@ class AsyncTechFetcher(AsyncBaseFetcher):
97
98
 
98
99
  def _conduct_yf_search(self, ticker, start_date, end_date):
99
100
  yf_ticker = yf.Ticker(ticker)
100
- origin_df = yf_ticker.history(period="10y")
101
+ origin_df = yf_ticker.history(period="max")
101
102
 
102
103
  if origin_df.empty:
103
104
  return origin_df
104
105
 
106
+ start_date = StatsDateTime.transform_date(start_date, tz=str(origin_df.index.tz)) # 跟隨yf搜尋結果的時區
107
+ end_date = StatsDateTime.transform_date(end_date, tz=str(origin_df.index.tz))
108
+
105
109
  origin_df = origin_df.reset_index()
106
110
  origin_df["Date"] = pd.to_datetime(origin_df["Date"])
107
111
  df = origin_df.rename(
@@ -116,6 +120,7 @@ class AsyncTechFetcher(AsyncBaseFetcher):
116
120
  )
117
121
 
118
122
  df = df.loc[(df['date'] >= start_date) & (df['date'] <= end_date)]
123
+ df['date'] = df['date'].dt.tz_convert("Asia/Taipei")
119
124
  return df
120
125
 
121
126
  async def _conduct_tw_db_search(self, start_date, end_date):
@@ -1,9 +1,9 @@
1
1
  from .base import AsyncBaseFetcher
2
2
  from ..db_extractors import (
3
- AsyncDailyValueDBExtractor, AsyncTEJDailyValueDBExtractor
3
+ AsyncDailyValueDBExtractor, AsyncTEJDailyValueDBExtractor, AsyncUS_CelebrityDBExtractor
4
4
  )
5
5
  from neurostats_API.async_mode.factory import get_extractor
6
- from neurostats_API.transformers import US_F13_Transformer
6
+ from neurostats_API.transformers import US_F13_Transformer, US_CelebrityTransformer
7
7
  from neurostats_API.utils import NotSupportedError
8
8
 
9
9
 
@@ -44,3 +44,26 @@ class AsyncUSChipF13Fetcher(AsyncBaseFetcher):
44
44
  )
45
45
 
46
46
  return transformed_data
47
+
48
+ class AsyncUSCelebrityFetcher(AsyncBaseFetcher):
49
+
50
+ def __init__(self, client, manager_name):
51
+ self.manager_name = manager_name
52
+ self.extractor = AsyncUS_CelebrityDBExtractor(client, manager_name)
53
+ self.transformer = US_CelebrityTransformer()
54
+
55
+ async def query_data(
56
+ self, start_date=None, end_date=None, get_latest=False,
57
+ value_threshold=None, title=None, strftime=None
58
+ ):
59
+ fetched_data = await self.extractor.query_data(
60
+ start_date, end_date, get_latest,
61
+ value_throshold=value_threshold, title=title
62
+ )
63
+
64
+ transformed_data = self.transformer.process_transform(
65
+ fetched_datas = list(fetched_data),
66
+ strftime = strftime
67
+ )
68
+
69
+ return transformed_data
@@ -8,7 +8,7 @@ class TechFetcher(StatsFetcher):
8
8
  def __init__(self, ticker: str, db_client):
9
9
  """
10
10
  The Capitalization-Weighted Index includes the following tickers:
11
- ['GSPC', 'IXIC', 'DJI', 'TWII']
11
+ ['^GSPC', '^IXIC', '^DJI', '^TWII']
12
12
  """
13
13
 
14
14
  super().__init__(ticker, db_client)
@@ -14,7 +14,8 @@ from .daily_tech import(
14
14
 
15
15
  from .daily_chip import(
16
16
  TWSEChipTransformer,
17
- US_F13_Transformer
17
+ US_F13_Transformer,
18
+ US_CelebrityTransformer
18
19
  )
19
20
 
20
21
  from .month_revenue import(
@@ -0,0 +1,2 @@
1
+ from .twse_chip import TWSEChipTransformer
2
+ from .us import US_F13_Transformer, US_CelebrityTransformer
@@ -4,6 +4,8 @@ import inspect
4
4
  import numpy as np
5
5
  import pandas as pd
6
6
  from neurostats_API.utils import StatsProcessor
7
+ from collections import defaultdict
8
+ from typing import List, Optional, Union
7
9
 
8
10
  class US_F13_Transformer(BaseChipTransformer):
9
11
  def __init__(self, ticker, company_name, zone):
@@ -37,4 +39,27 @@ class US_F13_Transformer(BaseChipTransformer):
37
39
 
38
40
  return return_dict
39
41
 
40
-
42
+ class US_CelebrityTransformer():
43
+
44
+ def __init__(self):
45
+ pass
46
+
47
+ def process_transform(
48
+ self,
49
+ fetched_datas: List[dict],
50
+ strftime: Optional[str] = None
51
+ ) -> dict[str, dict[Union[str, datetime], float]]:
52
+
53
+ result = defaultdict(lambda: defaultdict(dict))
54
+
55
+ for record in fetched_datas:
56
+ ticker = record.get("issuerTicker")
57
+ report_date = record.get("reportDate")
58
+ value = record.get("value")
59
+ title = record.get("titleOfClass")
60
+
61
+ if ticker and report_date and title:
62
+ key = report_date.strftime(strftime) if strftime else report_date
63
+ result.setdefault(ticker, {}).setdefault(title, {})[key] = value
64
+
65
+ return dict(result)
@@ -0,0 +1,52 @@
1
+ from datetime import datetime
2
+ from pytz import timezone
3
+
4
+ class StatsDateTime():
5
+
6
+ def __init__(self, date, year, month, day, season):
7
+ self.date = date
8
+ self.year = year
9
+ self.month = month
10
+ self.day = day
11
+ self.season = season
12
+
13
+ @classmethod
14
+ def get_today(cls):
15
+ today = datetime.today()
16
+ this_year = today.year
17
+ this_month = today.month
18
+ this_day = today.day
19
+ this_season = ((this_month - 1) // 3) + 1
20
+
21
+ return StatsDateTime(today, this_year, this_month, this_day,
22
+ this_season)
23
+
24
+ @classmethod
25
+ def get_latest_time(cls, ticker, collection):
26
+ return collection.find_one(
27
+ { "ticker" : ticker },
28
+ { "_id": 0, "last_update_time": 1 }
29
+ )
30
+
31
+ @classmethod
32
+ def transform_date(cls, date, tz:str = None):
33
+ if (isinstance(date, str)):
34
+ try:
35
+ date = datetime.strptime(date, "%Y-%m-%d")
36
+ if (tz):
37
+ date = date.astimezone(tz = timezone(tz))
38
+ return date
39
+ except Exception as e:
40
+ print(e)
41
+ raise ValueError(
42
+ "date string format imcompatible, should be \"YYYY-MM-DD\""
43
+ )
44
+ elif (isinstance(date, datetime)):
45
+ if (tz):
46
+ return date.astimezone(tz = timezone(tz))
47
+ else:
48
+ return date
49
+ else:
50
+ raise ValueError(
51
+ "date type imcompatible, should be string(\"YYYY-MM-DD\") or datetime.datetime"
52
+ )
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: neurostats_API
3
- Version: 1.0.1rc1
3
+ Version: 1.0.2rc2
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.0
74
+ 1.0.2rc2
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
@@ -115,6 +116,7 @@ neurostats_API/transformers/profit_lose/twse.py
115
116
  neurostats_API/transformers/profit_lose/us.py
116
117
  neurostats_API/transformers/tej/__init__.py
117
118
  neurostats_API/transformers/tej/base.py
119
+ neurostats_API/transformers/tej/chip.py
118
120
  neurostats_API/transformers/tej/finance_statement.py
119
121
  neurostats_API/transformers/value/__init__.py
120
122
  neurostats_API/transformers/value/base.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.1rc1',
5
+ version='1.0.2rc2',
6
6
  long_description=open('README.md', 'r', encoding='utf-8').read(),
7
7
  long_description_content_type='text/markdown',
8
8
  install_requires=[
@@ -1,66 +0,0 @@
1
- from datetime import datetime, timedelta
2
- from pymongo import ASCENDING, DESCENDING
3
- from .base import BaseDailyTechDBExtractor
4
- from neurostats_API.utils import (
5
- NotSupportedError, StatsProcessor
6
- )
7
-
8
-
9
- class AsyncUS_F13DBExtractor(BaseDailyTechDBExtractor):
10
-
11
- def __init__(self, ticker, client, managerTicker=None):
12
- """
13
- ticker: Issuer Ticker, 被持有的股票代碼
14
- managerTicker: 持有者的股票代碼
15
- """
16
- super().__init__(ticker, client)
17
- self.issuerTicker = ticker
18
- self.managerTicker = managerTicker
19
-
20
- if (self.get_zone() not in ['us']):
21
- raise NotSupportedError("Supports US Company Only")
22
-
23
- def _get_collection_name(self):
24
- self.collection_name_map = {"us": "us_F13"}
25
-
26
- return self.collection_name_map.get(self.zone, None)
27
-
28
- def _prepare_query(self, start_date=None, end_date=None, get_latest=False):
29
- query = {"issuerTicker": self.issuerTicker}
30
-
31
- if (self.managerTicker):
32
- query.update(
33
- {
34
- "managerTicker": self.managerTicker
35
- }
36
- )
37
-
38
- query = self._update_query_with_date(query, start_date, end_date)
39
-
40
- projection = {
41
- "_id": 0,
42
- }
43
-
44
- if (get_latest):
45
- sort = [("reportDate", DESCENDING)]
46
- else:
47
- sort = [("reportDate", ASCENDING)]
48
-
49
- return query, projection, sort
50
-
51
- def _update_query_with_date(self, query, start_date, end_date):
52
- start_date = self._transform_date(start_date)
53
- end_date = self._transform_date(end_date)
54
-
55
- date_range = {"$gte": start_date, "$lte": end_date}
56
-
57
- query.update({"reportDate": date_range})
58
-
59
- return query
60
-
61
- async def query_data(
62
- self, start_date=None, end_date=None, get_latest=False
63
- ):
64
- result = await super().query_data(start_date, end_date, get_latest)
65
-
66
- return result
@@ -1,2 +0,0 @@
1
- from .twse_chip import TWSEChipTransformer
2
- from .us import US_F13_Transformer
@@ -1,29 +0,0 @@
1
- from datetime import datetime
2
-
3
- class StatsDateTime():
4
-
5
- def __init__(self, date, year, month, day, season):
6
- self.date = date
7
- self.year = year
8
- self.month = month
9
- self.day = day
10
- self.season = season
11
-
12
- @classmethod
13
- def get_today(cls):
14
- today = datetime.today()
15
- this_year = today.year
16
- this_month = today.month
17
- this_day = today.day
18
- this_season = ((this_month - 1) // 3) + 1
19
-
20
- return StatsDateTime(today, this_year, this_month, this_day,
21
- this_season)
22
-
23
- @classmethod
24
- def get_latest_time(cls, ticker, collection):
25
- return collection.find_one(
26
- { "ticker" : ticker },
27
- { "_id": 0, "last_update_time": 1 }
28
- )
29
-