neurostats-API 1.0.2rc1__py3-none-any.whl → 1.0.2rc2__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.
@@ -1,4 +1,4 @@
1
- __version__='1.0.2rc1'
1
+ __version__='1.0.2rc2'
2
2
 
3
3
  from .fetchers import (
4
4
  AgentFinanceOverviewFetcher,
@@ -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
  """
@@ -88,14 +88,20 @@ class AsyncUS_CelebrityDBExtractor(AsyncUS_F13DBExtractor):
88
88
  self, start_date=None, end_date=None, get_latest=False,
89
89
  value_throshold=None, title=None
90
90
  ):
91
-
92
- start_date = self._transform_date(start_date)
93
- end_date = self._transform_date(end_date)
94
-
95
- query = {
96
- "manager": self.manager,
97
- "reportDate": {"$gte": start_date, "$lte": end_date}
98
- }
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
99
105
 
100
106
  if value_throshold:
101
107
  query["value"] = {"$gt": value_throshold}
@@ -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):
File without changes
@@ -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)
File without changes
@@ -1,4 +1,5 @@
1
1
  from datetime import datetime
2
+ from pytz import timezone
2
3
 
3
4
  class StatsDateTime():
4
5
 
@@ -27,3 +28,25 @@ class StatsDateTime():
27
28
  { "_id": 0, "last_update_time": 1 }
28
29
  )
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.2rc1
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.2rc1
74
+ 1.0.2rc2
75
75
  ```
76
76
 
77
77
  ### 下載舊版
@@ -1,4 +1,4 @@
1
- neurostats_API/__init__.py,sha256=rYPiKrSMClreRwkPjRz5Rfn1wyJ82TiNAkOvNUUamEY,704
1
+ neurostats_API/__init__.py,sha256=oH2hrua3CZYdbrjGZRXlGCJfijzllr_fZ6yKSj5t8gk,704
2
2
  neurostats_API/cli.py,sha256=UJSWLIw03P24p-gkBb6JSEI5dW5U12UvLf1L8HjQD-o,873
3
3
  neurostats_API/main.py,sha256=QcsfmWivg2Dnqw3MTJWiI0QvEiRs0VuH-BjwQHFCv00,677
4
4
  neurostats_API/async_mode/__init__.py,sha256=8tsW_UDLJXuwzWdZJSacOqZatwzqr7v60hRk0PbgB-w,377
@@ -8,13 +8,13 @@ neurostats_API/async_mode/db/tej.py,sha256=ku7CfhrSJ8gfUQ_NRjyjSz-OFmqyCGGnXz8Tp
8
8
  neurostats_API/async_mode/db/twse.py,sha256=YZA-NUZ01EAUKPsaNEaZn3cuzeL9n1fi03aBiHUJGAA,220
9
9
  neurostats_API/async_mode/db/us.py,sha256=SgoU_OpSkpmrlBiNvy5xgyssb7-xK8ptezi4SR00t4I,271
10
10
  neurostats_API/async_mode/db_extractors/__init__.py,sha256=S6-lz6SZGzsSem-Kicr8UKsbPcuUA3Wyu276yMJN0tg,512
11
- neurostats_API/async_mode/db_extractors/base.py,sha256=3Xgdl6A5x93Qg7zMyJJFdE9ZMxsSDFtmXQ-i3gmnpjQ,1831
11
+ neurostats_API/async_mode/db_extractors/base.py,sha256=DLtNONV5F9Lj3OlXeGm_bnR6AMA5d6tL3r7na4H7FRE,2221
12
12
  neurostats_API/async_mode/db_extractors/daily/__init__.py,sha256=8vw8W8AZ_zi_hSshlobN4ITK9qaFVoNy66OmOT7cNj4,306
13
13
  neurostats_API/async_mode/db_extractors/daily/base.py,sha256=ePvYxqOypy0F9VI33nSJQGpG5zMNO_EGZ3owVUeKFLw,3204
14
14
  neurostats_API/async_mode/db_extractors/daily/tej_chip.py,sha256=Ywc0iIIPWw1VdtVc2_s1CNrgj0_G1wOaGzrgyVTN2k8,414
15
15
  neurostats_API/async_mode/db_extractors/daily/tej_tech.py,sha256=M3k1pmv48DfiUaIfDKx5gk85C5JpmuXdQhRcNzgOhPI,349
16
16
  neurostats_API/async_mode/db_extractors/daily/twse_chip.py,sha256=WICwcsy2m_2ua9UnIjs_SZGFq7m2-UByx9x7TCk_rlY,1490
17
- neurostats_API/async_mode/db_extractors/daily/us_chip.py,sha256=CMaKFsL5ryohvvmoq1jOrSE4DLWDD0nXeGCuXJc2gZo,3936
17
+ neurostats_API/async_mode/db_extractors/daily/us_chip.py,sha256=0Ycuqy3lqwA0kxAhv-KVqMUEMGQhOV3YMbHarWWT2PQ,4154
18
18
  neurostats_API/async_mode/db_extractors/daily/value.py,sha256=j5QjFOhmvVum0D10prcZZ7_sxrojA-b8sP72Ge9lOnY,2859
19
19
  neurostats_API/async_mode/db_extractors/daily/yf.py,sha256=GewIRJ7_baBc9QL7BHVdnxQ0uXYpFNeiPuwKxzByULg,377
20
20
  neurostats_API/async_mode/db_extractors/month_revenue/__init__.py,sha256=VXjEn4xnXsPpt8lq7egSM_3sLnhtOIQG2lNedDC_Shw,50
@@ -36,12 +36,13 @@ neurostats_API/async_mode/fetchers/cash_flow.py,sha256=uj2JEbilgn595yJcMNvlTZHdk
36
36
  neurostats_API/async_mode/fetchers/finance_overview.py,sha256=YETx7uxS6OQgzJ0v_3JMJoUfuWciWmKAzitm91XffHk,4441
37
37
  neurostats_API/async_mode/fetchers/month_revenue.py,sha256=GDrFrjTe81uAzeKvd5HghH9iPXouXL8JTt8hfaFkig4,1258
38
38
  neurostats_API/async_mode/fetchers/profit_lose.py,sha256=-YMqO6hEbGntAeAf9y66LX56fj6VrHWr1_IIbQ_bUBQ,1483
39
- neurostats_API/async_mode/fetchers/tech.py,sha256=xj6LRnexMePi4Nc9P0lduAjJwjcVOp1xInIFjrRMrbM,6686
39
+ neurostats_API/async_mode/fetchers/tech.py,sha256=fQChyVBPzT4oSOSeCZ5Et6nKf1XUA1U-RxFaezkUr0Y,6993
40
40
  neurostats_API/async_mode/fetchers/twse_institution.py,sha256=DKyecoIa_2-CUfDXKp2dBFJk0lfCBIr2steVVa-jq9o,2055
41
41
  neurostats_API/async_mode/fetchers/twse_margin.py,sha256=wra84uFh9ooCoyFWhRuV4vP3Uhojc13XHx51UD90uYo,3173
42
42
  neurostats_API/async_mode/fetchers/us_chip.py,sha256=1C7wsdgXkf4SOHUyqGKNEsr0Ijds7l4jLLsPMYyMRQo,2365
43
43
  neurostats_API/async_mode/fetchers/value.py,sha256=7FpO0_BOOvq4ZlwwaIfSD8xO_s1O8ykxz147fkiZIt4,2883
44
44
  neurostats_API/async_mode/fetchers/tej/__init__.py,sha256=QNXGg1gE_bnkZWybulRZXtcCPWV6Aj1nLz7r0Mo4BN0,93
45
+ neurostats_API/async_mode/fetchers/tej/chip.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
45
46
  neurostats_API/async_mode/fetchers/tej/seasonal_data.py,sha256=oeMpj4GMzw22KHjVDTcVO2hwVfxmnO291N6O_dKp0sw,2836
46
47
  neurostats_API/async_mode/fetchers/tej/tech.py,sha256=0wG2bep_nJp3kBS0nIzH6191R5bwEeS-upK40DTGpjU,1110
47
48
  neurostats_API/config/company_list/ticker_index_industry_map.json,sha256=JPSrkMrxOg5GB6HoOhOKeCatznvGAFJpWt92iAhutak,162681
@@ -67,7 +68,7 @@ neurostats_API/fetchers/institution.py,sha256=YsPRnM2M25plhrgSQ6ckO7gj_toydBXYlR
67
68
  neurostats_API/fetchers/margin_trading.py,sha256=0enMPpq0J55uts0nJFHOylXvLEMWZYSb-gt1BH5_gBM,11430
68
69
  neurostats_API/fetchers/month_revenue.py,sha256=K1WZct6vLU3y_8uaXR3po5jzx2w3EYb2v3XkIX2_pBE,8313
69
70
  neurostats_API/fetchers/profit_lose.py,sha256=MUTPPXHWZhhvcq1YzrY1dalFIXljUUG3UugXQimFy-Y,9170
70
- neurostats_API/fetchers/tech.py,sha256=TsS8m25Otc3_2jTYITFe-wNHlDWcfWsHIxhOrqL8qMY,16016
71
+ neurostats_API/fetchers/tech.py,sha256=_718Na2r3K3c9f-3cIx42jIg5g_mDHNrV6aZYFFba8A,16020
71
72
  neurostats_API/fetchers/tej_finance_report.py,sha256=mlIm2Qzs8-Xlzeb8uET8qGPWD3VGUx3g8qFFcY4UbAw,13022
72
73
  neurostats_API/fetchers/value_invest.py,sha256=QxQS2GcoLIU9ZBDEo8iRK2yHd8YLmBS70Bq42F3IsSw,8295
73
74
  neurostats_API/transformers/__init__.py,sha256=sePY-KavG_7xMA-dvWiC_Z6gXGZUmoCoMeuJCcZSe6A,729
@@ -107,6 +108,7 @@ neurostats_API/transformers/profit_lose/twse.py,sha256=RwAJWQBdsjFaLlW-HL6oUGxLA
107
108
  neurostats_API/transformers/profit_lose/us.py,sha256=q7Vbxp_xzB0SUsxIqQYENi3RayfqR6Nfynvt7p-KHlI,847
108
109
  neurostats_API/transformers/tej/__init__.py,sha256=WihARZhphkvApsKr4U0--68m1M-Dc_rpV7xoV2fUV7E,61
109
110
  neurostats_API/transformers/tej/base.py,sha256=YD6M3Iok-KXb5EDhqa_fUzJ-zWXLeoXPsavdDJD-ks4,5436
111
+ neurostats_API/transformers/tej/chip.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
110
112
  neurostats_API/transformers/tej/finance_statement.py,sha256=rE-Kc94hzW8-xcKn6ry8LwwT8dSoGRKGsmvd5W4_SUs,2798
111
113
  neurostats_API/transformers/value/__init__.py,sha256=D8qMk0aLsv7CBBJHo5zsq_UuBKmZYNyqS3s-RWfhvy8,73
112
114
  neurostats_API/transformers/value/base.py,sha256=wR2LDiwGET126mwrPxYoApyl4lwx1MjWxFpOKLso_As,186
@@ -115,11 +117,11 @@ neurostats_API/transformers/value/twse.py,sha256=uNGLkxCIfQhzRkalSn6o2kgPT-uw41K
115
117
  neurostats_API/utils/__init__.py,sha256=pmOZSjSJ8434GbofV1Wx4GAzcDabOK80LFVS4y3T6-A,223
116
118
  neurostats_API/utils/calculate_value.py,sha256=ioPV5VWitJ2NylBi5vwfs-payAUYxWhAiS7aaJjzQKQ,4305
117
119
  neurostats_API/utils/data_process.py,sha256=cD1Vzv8oDpsd1Y7qCALTyM-AP1nkwqhfOgDY0KQpXec,10442
118
- neurostats_API/utils/datetime.py,sha256=XJya4G8b_-ZOaBbMXgQjWh2MC4wc-o6goQ7EQJQMWrQ,773
120
+ neurostats_API/utils/datetime.py,sha256=e6p2XIXaDMOWNJ2qnwqZBScC9J6kB6h0Ef1A7fuWq-w,1607
119
121
  neurostats_API/utils/db_client.py,sha256=OYe6yazcR4Aa6jYmy47JrryUeh2NnKGqY2K_lSZe6i8,455
120
122
  neurostats_API/utils/exception.py,sha256=yv92GVh5uHV1BgRmO4DwJcX_PtE0-TSgQoo3VnZ5hOQ,277
121
123
  neurostats_API/utils/logger.py,sha256=egBiiPGTi5l1FoX_o6EvdGh81R0_k8hFPctSxq8RCoo,693
122
- neurostats_API-1.0.2rc1.dist-info/METADATA,sha256=3wWTuXmARFNpWZvrk1lwRdcVVWOAJ62UXeaLXX-sD_8,2964
123
- neurostats_API-1.0.2rc1.dist-info/WHEEL,sha256=R06PA3UVYHThwHvxuRWMqaGcr-PuniXahwjmQRFMEkY,91
124
- neurostats_API-1.0.2rc1.dist-info/top_level.txt,sha256=nSlQPMG0VtXivJyedp4Bkf86EOy2TpW10VGxolXrqnU,15
125
- neurostats_API-1.0.2rc1.dist-info/RECORD,,
124
+ neurostats_API-1.0.2rc2.dist-info/METADATA,sha256=x-b56LcvMZHRcsM-4rQcwfGkzs5CFDkfFIDi9UBZeDE,2964
125
+ neurostats_API-1.0.2rc2.dist-info/WHEEL,sha256=R06PA3UVYHThwHvxuRWMqaGcr-PuniXahwjmQRFMEkY,91
126
+ neurostats_API-1.0.2rc2.dist-info/top_level.txt,sha256=nSlQPMG0VtXivJyedp4Bkf86EOy2TpW10VGxolXrqnU,15
127
+ neurostats_API-1.0.2rc2.dist-info/RECORD,,