neurostats-API 1.0.0rc3__tar.gz → 1.0.0rc5__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.
- {neurostats_api-1.0.0rc3 → neurostats_api-1.0.0rc5}/PKG-INFO +2 -2
- {neurostats_api-1.0.0rc3 → neurostats_api-1.0.0rc5}/README.md +1 -1
- neurostats_api-1.0.0rc5/neurostats_API/__init__.py +29 -0
- {neurostats_api-1.0.0rc3 → neurostats_api-1.0.0rc5}/neurostats_API/async_mode/fetchers/tech.py +2 -2
- {neurostats_api-1.0.0rc3 → neurostats_api-1.0.0rc5}/neurostats_API/transformers/balance_sheet/twse.py +23 -18
- {neurostats_api-1.0.0rc3 → neurostats_api-1.0.0rc5}/neurostats_API/transformers/balance_sheet/us.py +17 -9
- neurostats_api-1.0.0rc5/neurostats_API/transformers/base.py +158 -0
- {neurostats_api-1.0.0rc3 → neurostats_api-1.0.0rc5}/neurostats_API/transformers/cash_flow/twse.py +2 -0
- {neurostats_api-1.0.0rc3 → neurostats_api-1.0.0rc5}/neurostats_API/transformers/daily_chip/twse_chip.py +1 -1
- {neurostats_api-1.0.0rc3 → neurostats_api-1.0.0rc5}/neurostats_API/transformers/finance_overview/stats_overview.py +19 -4
- {neurostats_api-1.0.0rc3 → neurostats_api-1.0.0rc5}/neurostats_API/transformers/month_revenue/twse.py +6 -1
- {neurostats_api-1.0.0rc3 → neurostats_api-1.0.0rc5}/neurostats_API/transformers/profit_lose/twse.py +1 -1
- {neurostats_api-1.0.0rc3 → neurostats_api-1.0.0rc5}/neurostats_API/transformers/profit_lose/us.py +1 -0
- {neurostats_api-1.0.0rc3 → neurostats_api-1.0.0rc5}/neurostats_API/transformers/tej/finance_statement.py +1 -1
- {neurostats_api-1.0.0rc3 → neurostats_api-1.0.0rc5}/neurostats_API/transformers/value/twse.py +1 -1
- {neurostats_api-1.0.0rc3 → neurostats_api-1.0.0rc5}/neurostats_API.egg-info/PKG-INFO +2 -2
- {neurostats_api-1.0.0rc3 → neurostats_api-1.0.0rc5}/setup.py +1 -1
- neurostats_api-1.0.0rc3/neurostats_API/__init__.py +0 -15
- neurostats_api-1.0.0rc3/neurostats_API/transformers/base.py +0 -110
- {neurostats_api-1.0.0rc3 → neurostats_api-1.0.0rc5}/MANIFEST.in +0 -0
- {neurostats_api-1.0.0rc3 → neurostats_api-1.0.0rc5}/neurostats_API/async_mode/__init__.py +0 -0
- {neurostats_api-1.0.0rc3 → neurostats_api-1.0.0rc5}/neurostats_API/async_mode/db/__init__.py +0 -0
- {neurostats_api-1.0.0rc3 → neurostats_api-1.0.0rc5}/neurostats_API/async_mode/db/base.py +0 -0
- {neurostats_api-1.0.0rc3 → neurostats_api-1.0.0rc5}/neurostats_API/async_mode/db/tej.py +0 -0
- {neurostats_api-1.0.0rc3 → neurostats_api-1.0.0rc5}/neurostats_API/async_mode/db/twse.py +0 -0
- {neurostats_api-1.0.0rc3 → neurostats_api-1.0.0rc5}/neurostats_API/async_mode/db/us.py +0 -0
- {neurostats_api-1.0.0rc3 → neurostats_api-1.0.0rc5}/neurostats_API/async_mode/db_extractors/__init__.py +0 -0
- {neurostats_api-1.0.0rc3 → neurostats_api-1.0.0rc5}/neurostats_API/async_mode/db_extractors/base.py +0 -0
- {neurostats_api-1.0.0rc3 → neurostats_api-1.0.0rc5}/neurostats_API/async_mode/db_extractors/daily/__init__.py +0 -0
- {neurostats_api-1.0.0rc3 → neurostats_api-1.0.0rc5}/neurostats_API/async_mode/db_extractors/daily/base.py +0 -0
- {neurostats_api-1.0.0rc3 → neurostats_api-1.0.0rc5}/neurostats_API/async_mode/db_extractors/daily/tej_chip.py +0 -0
- {neurostats_api-1.0.0rc3 → neurostats_api-1.0.0rc5}/neurostats_API/async_mode/db_extractors/daily/tej_tech.py +0 -0
- {neurostats_api-1.0.0rc3 → neurostats_api-1.0.0rc5}/neurostats_API/async_mode/db_extractors/daily/twse_chip.py +0 -0
- {neurostats_api-1.0.0rc3 → neurostats_api-1.0.0rc5}/neurostats_API/async_mode/db_extractors/daily/value.py +0 -0
- {neurostats_api-1.0.0rc3 → neurostats_api-1.0.0rc5}/neurostats_API/async_mode/db_extractors/daily/yf.py +0 -0
- {neurostats_api-1.0.0rc3 → neurostats_api-1.0.0rc5}/neurostats_API/async_mode/db_extractors/month_revenue/__init__.py +0 -0
- {neurostats_api-1.0.0rc3 → neurostats_api-1.0.0rc5}/neurostats_API/async_mode/db_extractors/month_revenue/base.py +0 -0
- {neurostats_api-1.0.0rc3 → neurostats_api-1.0.0rc5}/neurostats_API/async_mode/db_extractors/month_revenue/twse.py +0 -0
- {neurostats_api-1.0.0rc3 → neurostats_api-1.0.0rc5}/neurostats_API/async_mode/db_extractors/seasonal/__init__.py +0 -0
- {neurostats_api-1.0.0rc3 → neurostats_api-1.0.0rc5}/neurostats_API/async_mode/db_extractors/seasonal/balance_sheet.py +0 -0
- {neurostats_api-1.0.0rc3 → neurostats_api-1.0.0rc5}/neurostats_API/async_mode/db_extractors/seasonal/base.py +0 -0
- {neurostats_api-1.0.0rc3 → neurostats_api-1.0.0rc5}/neurostats_API/async_mode/db_extractors/seasonal/cashflow.py +0 -0
- {neurostats_api-1.0.0rc3 → neurostats_api-1.0.0rc5}/neurostats_API/async_mode/db_extractors/seasonal/profit_lose.py +0 -0
- {neurostats_api-1.0.0rc3 → neurostats_api-1.0.0rc5}/neurostats_API/async_mode/db_extractors/seasonal/tej.py +0 -0
- {neurostats_api-1.0.0rc3 → neurostats_api-1.0.0rc5}/neurostats_API/async_mode/factory/__init__.py +0 -0
- {neurostats_api-1.0.0rc3 → neurostats_api-1.0.0rc5}/neurostats_API/async_mode/factory/extractor_factory.py +0 -0
- {neurostats_api-1.0.0rc3 → neurostats_api-1.0.0rc5}/neurostats_API/async_mode/factory/transformer_factory.py +0 -0
- {neurostats_api-1.0.0rc3 → neurostats_api-1.0.0rc5}/neurostats_API/async_mode/fetchers/__init__.py +0 -0
- {neurostats_api-1.0.0rc3 → neurostats_api-1.0.0rc5}/neurostats_API/async_mode/fetchers/balance_sheet.py +0 -0
- {neurostats_api-1.0.0rc3 → neurostats_api-1.0.0rc5}/neurostats_API/async_mode/fetchers/base.py +0 -0
- {neurostats_api-1.0.0rc3 → neurostats_api-1.0.0rc5}/neurostats_API/async_mode/fetchers/cash_flow.py +0 -0
- {neurostats_api-1.0.0rc3 → neurostats_api-1.0.0rc5}/neurostats_API/async_mode/fetchers/finance_overview.py +0 -0
- {neurostats_api-1.0.0rc3 → neurostats_api-1.0.0rc5}/neurostats_API/async_mode/fetchers/month_revenue.py +0 -0
- {neurostats_api-1.0.0rc3 → neurostats_api-1.0.0rc5}/neurostats_API/async_mode/fetchers/profit_lose.py +0 -0
- {neurostats_api-1.0.0rc3 → neurostats_api-1.0.0rc5}/neurostats_API/async_mode/fetchers/tej.py +0 -0
- {neurostats_api-1.0.0rc3 → neurostats_api-1.0.0rc5}/neurostats_API/async_mode/fetchers/twse_institution.py +0 -0
- {neurostats_api-1.0.0rc3 → neurostats_api-1.0.0rc5}/neurostats_API/async_mode/fetchers/twse_margin.py +0 -0
- {neurostats_api-1.0.0rc3 → neurostats_api-1.0.0rc5}/neurostats_API/async_mode/fetchers/value.py +0 -0
- {neurostats_api-1.0.0rc3 → neurostats_api-1.0.0rc5}/neurostats_API/cli.py +0 -0
- {neurostats_api-1.0.0rc3 → neurostats_api-1.0.0rc5}/neurostats_API/config/company_list/ticker_index_industry_map.json +0 -0
- {neurostats_api-1.0.0rc3 → neurostats_api-1.0.0rc5}/neurostats_API/config/company_list/tw.json +0 -0
- {neurostats_api-1.0.0rc3 → neurostats_api-1.0.0rc5}/neurostats_API/config/company_list/us.json +0 -0
- {neurostats_api-1.0.0rc3 → neurostats_api-1.0.0rc5}/neurostats_API/config/company_list/us_TradingView_list.json +0 -0
- {neurostats_api-1.0.0rc3 → neurostats_api-1.0.0rc5}/neurostats_API/config/tej_db/tej_db_index.yaml +0 -0
- {neurostats_api-1.0.0rc3 → neurostats_api-1.0.0rc5}/neurostats_API/config/tej_db/tej_db_percent_index.yaml +0 -0
- {neurostats_api-1.0.0rc3 → neurostats_api-1.0.0rc5}/neurostats_API/config/tej_db/tej_db_skip_index.yaml +0 -0
- {neurostats_api-1.0.0rc3 → neurostats_api-1.0.0rc5}/neurostats_API/config/tej_db/tej_db_thousand_index.yaml +0 -0
- {neurostats_api-1.0.0rc3 → neurostats_api-1.0.0rc5}/neurostats_API/config/twse/balance_sheet.yaml +0 -0
- {neurostats_api-1.0.0rc3 → neurostats_api-1.0.0rc5}/neurostats_API/config/twse/cash_flow_percentage.yaml +0 -0
- {neurostats_api-1.0.0rc3 → neurostats_api-1.0.0rc5}/neurostats_API/config/twse/finance_overview_dict.yaml +0 -0
- {neurostats_api-1.0.0rc3 → neurostats_api-1.0.0rc5}/neurostats_API/config/twse/profit_lose.yaml +0 -0
- {neurostats_api-1.0.0rc3 → neurostats_api-1.0.0rc5}/neurostats_API/config/twse/seasonal_data_field_dict.txt +0 -0
- {neurostats_api-1.0.0rc3 → neurostats_api-1.0.0rc5}/neurostats_API/fetchers/__init__.py +0 -0
- {neurostats_api-1.0.0rc3 → neurostats_api-1.0.0rc5}/neurostats_API/fetchers/balance_sheet.py +0 -0
- {neurostats_api-1.0.0rc3 → neurostats_api-1.0.0rc5}/neurostats_API/fetchers/base.py +0 -0
- {neurostats_api-1.0.0rc3 → neurostats_api-1.0.0rc5}/neurostats_API/fetchers/cash_flow.py +0 -0
- {neurostats_api-1.0.0rc3 → neurostats_api-1.0.0rc5}/neurostats_API/fetchers/finance_overview.py +0 -0
- {neurostats_api-1.0.0rc3 → neurostats_api-1.0.0rc5}/neurostats_API/fetchers/institution.py +0 -0
- {neurostats_api-1.0.0rc3 → neurostats_api-1.0.0rc5}/neurostats_API/fetchers/margin_trading.py +0 -0
- {neurostats_api-1.0.0rc3 → neurostats_api-1.0.0rc5}/neurostats_API/fetchers/month_revenue.py +0 -0
- {neurostats_api-1.0.0rc3 → neurostats_api-1.0.0rc5}/neurostats_API/fetchers/profit_lose.py +0 -0
- {neurostats_api-1.0.0rc3 → neurostats_api-1.0.0rc5}/neurostats_API/fetchers/tech.py +0 -0
- {neurostats_api-1.0.0rc3 → neurostats_api-1.0.0rc5}/neurostats_API/fetchers/tej_finance_report.py +0 -0
- {neurostats_api-1.0.0rc3 → neurostats_api-1.0.0rc5}/neurostats_API/fetchers/value_invest.py +0 -0
- {neurostats_api-1.0.0rc3 → neurostats_api-1.0.0rc5}/neurostats_API/main.py +0 -0
- {neurostats_api-1.0.0rc3 → neurostats_api-1.0.0rc5}/neurostats_API/transformers/__init__.py +0 -0
- {neurostats_api-1.0.0rc3 → neurostats_api-1.0.0rc5}/neurostats_API/transformers/balance_sheet/__init__.py +0 -0
- {neurostats_api-1.0.0rc3 → neurostats_api-1.0.0rc5}/neurostats_API/transformers/balance_sheet/base.py +0 -0
- {neurostats_api-1.0.0rc3 → neurostats_api-1.0.0rc5}/neurostats_API/transformers/cash_flow/__init__.py +0 -0
- {neurostats_api-1.0.0rc3 → neurostats_api-1.0.0rc5}/neurostats_API/transformers/cash_flow/base.py +0 -0
- {neurostats_api-1.0.0rc3 → neurostats_api-1.0.0rc5}/neurostats_API/transformers/cash_flow/us.py +0 -0
- {neurostats_api-1.0.0rc3 → neurostats_api-1.0.0rc5}/neurostats_API/transformers/daily_chip/__init__.py +0 -0
- {neurostats_api-1.0.0rc3 → neurostats_api-1.0.0rc5}/neurostats_API/transformers/daily_chip/base.py +0 -0
- {neurostats_api-1.0.0rc3 → neurostats_api-1.0.0rc5}/neurostats_API/transformers/daily_chip/tej.py +0 -0
- {neurostats_api-1.0.0rc3 → neurostats_api-1.0.0rc5}/neurostats_API/transformers/daily_chip/utils/__init__.py +0 -0
- {neurostats_api-1.0.0rc3 → neurostats_api-1.0.0rc5}/neurostats_API/transformers/daily_chip/utils/institution.py +0 -0
- {neurostats_api-1.0.0rc3 → neurostats_api-1.0.0rc5}/neurostats_API/transformers/daily_chip/utils/margin_trading.py +0 -0
- {neurostats_api-1.0.0rc3 → neurostats_api-1.0.0rc5}/neurostats_API/transformers/daily_chip/utils/security_lending.py +0 -0
- {neurostats_api-1.0.0rc3 → neurostats_api-1.0.0rc5}/neurostats_API/transformers/daily_tech/__init__.py +0 -0
- {neurostats_api-1.0.0rc3 → neurostats_api-1.0.0rc5}/neurostats_API/transformers/daily_tech/base.py +0 -0
- {neurostats_api-1.0.0rc3 → neurostats_api-1.0.0rc5}/neurostats_API/transformers/daily_tech/tech.py +0 -0
- {neurostats_api-1.0.0rc3 → neurostats_api-1.0.0rc5}/neurostats_API/transformers/daily_tech/utils/__init__.py +0 -0
- {neurostats_api-1.0.0rc3 → neurostats_api-1.0.0rc5}/neurostats_API/transformers/daily_tech/utils/processor.py +0 -0
- {neurostats_api-1.0.0rc3 → neurostats_api-1.0.0rc5}/neurostats_API/transformers/finance_overview/__init__.py +0 -0
- {neurostats_api-1.0.0rc3 → neurostats_api-1.0.0rc5}/neurostats_API/transformers/finance_overview/agent_overview.py +0 -0
- {neurostats_api-1.0.0rc3 → neurostats_api-1.0.0rc5}/neurostats_API/transformers/finance_overview/base.py +0 -0
- {neurostats_api-1.0.0rc3 → neurostats_api-1.0.0rc5}/neurostats_API/transformers/month_revenue/__init__.py +0 -0
- {neurostats_api-1.0.0rc3 → neurostats_api-1.0.0rc5}/neurostats_API/transformers/month_revenue/base.py +0 -0
- {neurostats_api-1.0.0rc3 → neurostats_api-1.0.0rc5}/neurostats_API/transformers/profit_lose/__init__.py +0 -0
- {neurostats_api-1.0.0rc3 → neurostats_api-1.0.0rc5}/neurostats_API/transformers/profit_lose/base.py +0 -0
- {neurostats_api-1.0.0rc3 → neurostats_api-1.0.0rc5}/neurostats_API/transformers/tej/__init__.py +0 -0
- {neurostats_api-1.0.0rc3 → neurostats_api-1.0.0rc5}/neurostats_API/transformers/tej/base.py +0 -0
- {neurostats_api-1.0.0rc3 → neurostats_api-1.0.0rc5}/neurostats_API/transformers/value/__init__.py +0 -0
- {neurostats_api-1.0.0rc3 → neurostats_api-1.0.0rc5}/neurostats_API/transformers/value/base.py +0 -0
- {neurostats_api-1.0.0rc3 → neurostats_api-1.0.0rc5}/neurostats_API/transformers/value/tej.py +0 -0
- {neurostats_api-1.0.0rc3 → neurostats_api-1.0.0rc5}/neurostats_API/utils/__init__.py +0 -0
- {neurostats_api-1.0.0rc3 → neurostats_api-1.0.0rc5}/neurostats_API/utils/calculate_value.py +0 -0
- {neurostats_api-1.0.0rc3 → neurostats_api-1.0.0rc5}/neurostats_API/utils/data_process.py +0 -0
- {neurostats_api-1.0.0rc3 → neurostats_api-1.0.0rc5}/neurostats_API/utils/datetime.py +0 -0
- {neurostats_api-1.0.0rc3 → neurostats_api-1.0.0rc5}/neurostats_API/utils/db_client.py +0 -0
- {neurostats_api-1.0.0rc3 → neurostats_api-1.0.0rc5}/neurostats_API/utils/exception.py +0 -0
- {neurostats_api-1.0.0rc3 → neurostats_api-1.0.0rc5}/neurostats_API/utils/logger.py +0 -0
- {neurostats_api-1.0.0rc3 → neurostats_api-1.0.0rc5}/neurostats_API.egg-info/SOURCES.txt +0 -0
- {neurostats_api-1.0.0rc3 → neurostats_api-1.0.0rc5}/neurostats_API.egg-info/dependency_links.txt +0 -0
- {neurostats_api-1.0.0rc3 → neurostats_api-1.0.0rc5}/neurostats_API.egg-info/requires.txt +0 -0
- {neurostats_api-1.0.0rc3 → neurostats_api-1.0.0rc5}/neurostats_API.egg-info/top_level.txt +0 -0
- {neurostats_api-1.0.0rc3 → neurostats_api-1.0.0rc5}/setup.cfg +0 -0
- {neurostats_api-1.0.0rc3 → neurostats_api-1.0.0rc5}/test/test_async_fetcher.py +0 -0
- {neurostats_api-1.0.0rc3 → neurostats_api-1.0.0rc5}/test/test_fetchers.py +0 -0
- {neurostats_api-1.0.0rc3 → neurostats_api-1.0.0rc5}/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.
|
3
|
+
Version: 1.0.0rc5
|
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.
|
74
|
+
1.0.0rc5
|
75
75
|
```
|
76
76
|
|
77
77
|
### 下載舊版
|
@@ -0,0 +1,29 @@
|
|
1
|
+
__version__='1.0.0rc5'
|
2
|
+
|
3
|
+
from .fetchers import (
|
4
|
+
AgentFinanceOverviewFetcher,
|
5
|
+
BalanceSheetFetcher,
|
6
|
+
CashFlowFetcher,
|
7
|
+
FinanceOverviewFetcher,
|
8
|
+
FinanceReportFetcher,
|
9
|
+
InstitutionFetcher,
|
10
|
+
MarginTradingFetcher,
|
11
|
+
MonthRevenueFetcher,
|
12
|
+
TechFetcher,
|
13
|
+
TEJStockPriceFetcher,
|
14
|
+
ProfitLoseFetcher,
|
15
|
+
)
|
16
|
+
|
17
|
+
from .async_mode import (
|
18
|
+
AsyncAgentOverviewFetcher,
|
19
|
+
AsyncBalanceSheetFetcher,
|
20
|
+
AsyncCashFlowFetcher,
|
21
|
+
AsyncFinanceOverviewFetcher,
|
22
|
+
AsyncMonthlyRevenueFetcher,
|
23
|
+
AsyncProfitLoseFetcher,
|
24
|
+
AsyncTechFetcher,
|
25
|
+
AsyncTEJSeasonalFetcher,
|
26
|
+
AsyncTWSEInstitutionFetcher,
|
27
|
+
AsyncTWSEMarginFetcher,
|
28
|
+
AsyncTWSEStatsValueFetcher
|
29
|
+
)
|
{neurostats_api-1.0.0rc3 → neurostats_api-1.0.0rc5}/neurostats_API/async_mode/fetchers/tech.py
RENAMED
@@ -157,7 +157,7 @@ class AsyncTechFetcher(AsyncBaseFetcher):
|
|
157
157
|
start_date, end_date
|
158
158
|
)
|
159
159
|
|
160
|
-
if (
|
160
|
+
if (fetched_data):
|
161
161
|
df = pd.DataFrame(fetched_data)
|
162
162
|
return df
|
163
163
|
else:
|
@@ -171,7 +171,7 @@ class AsyncTechFetcher(AsyncBaseFetcher):
|
|
171
171
|
start_date, end_date
|
172
172
|
)
|
173
173
|
|
174
|
-
if (
|
174
|
+
if (fetched_data):
|
175
175
|
df = pd.DataFrame(fetched_data)
|
176
176
|
df = df.rename(
|
177
177
|
columns={
|
@@ -1,19 +1,24 @@
|
|
1
1
|
from .base import BaseBalanceSheetTransformer
|
2
2
|
from neurostats_API.utils import StatsProcessor
|
3
3
|
|
4
|
+
|
4
5
|
class TWSEBalanceSheetTransformer(BaseBalanceSheetTransformer):
|
6
|
+
|
5
7
|
def __init__(self, ticker, company_name, zone):
|
6
8
|
super().__init__(ticker, company_name, zone)
|
7
9
|
|
8
|
-
self.table_settings = StatsProcessor.load_yaml(
|
10
|
+
self.table_settings = StatsProcessor.load_yaml(
|
11
|
+
"twse/balance_sheet.yaml"
|
12
|
+
)
|
9
13
|
self.return_keys = [
|
10
|
-
'balance_sheet', 'total_asset', 'current_asset',
|
11
|
-
'
|
14
|
+
'balance_sheet', 'total_asset', 'current_asset',
|
15
|
+
'non_current_asset', 'current_debt', 'non_current_debt', 'equity',
|
16
|
+
'balance_sheet_all', 'balance_sheet_YoY'
|
12
17
|
]
|
13
18
|
|
14
19
|
self.stats_df = None
|
15
20
|
self.new_df = None
|
16
|
-
|
21
|
+
|
17
22
|
def process_transform(self, fetched_data):
|
18
23
|
if (not fetched_data):
|
19
24
|
return self._get_empty_structure()
|
@@ -21,12 +26,10 @@ class TWSEBalanceSheetTransformer(BaseBalanceSheetTransformer):
|
|
21
26
|
processed_data = self._process_fn(fetched_data)
|
22
27
|
|
23
28
|
return processed_data
|
29
|
+
|
24
30
|
def _process_fn(self, fetched_data):
|
25
|
-
|
26
|
-
return_dict = {
|
27
|
-
"ticker": self.ticker,
|
28
|
-
"company_name": self.company_name
|
29
|
-
}
|
31
|
+
|
32
|
+
return_dict = {"ticker": self.ticker, "company_name": self.company_name}
|
30
33
|
|
31
34
|
target_season = fetched_data[0]['season']
|
32
35
|
|
@@ -36,18 +39,22 @@ class TWSEBalanceSheetTransformer(BaseBalanceSheetTransformer):
|
|
36
39
|
# 轉換格式 (元 / 千元 / %)
|
37
40
|
self.stats_df = StatsProcessor.expand_value_percentage(self.stats_df)
|
38
41
|
self.stats_df = self._apply_process_unit_pipeline(
|
39
|
-
self.stats_df,
|
40
|
-
postfix_list=['_value', "_percentage"]
|
42
|
+
self.stats_df, postfix_list=['_value', "_percentage"]
|
41
43
|
)
|
42
44
|
|
43
45
|
self.new_df = self._process_twse_to_tej_format(fetched_data)
|
44
46
|
# 轉換格式 (元 / 千元 / %)
|
45
47
|
self.new_df = self._apply_process_unit_pipeline(
|
46
|
-
self.new_df,
|
47
|
-
postfix_list=['_value', "_percentage"]
|
48
|
+
self.new_df, postfix_list=['_value', "_percentage"]
|
48
49
|
)
|
49
50
|
|
50
|
-
|
51
|
+
self.new_dict = self.new_df.to_dict()
|
52
|
+
self.new_df = self._cal_QoQ(self.new_dict)
|
53
|
+
self.new_df = self.new_df.T
|
54
|
+
|
55
|
+
total_table_YoY = self._slice_target_season(
|
56
|
+
self.new_df, target_season
|
57
|
+
)
|
51
58
|
|
52
59
|
return_dict.update(
|
53
60
|
{
|
@@ -60,17 +67,15 @@ class TWSEBalanceSheetTransformer(BaseBalanceSheetTransformer):
|
|
60
67
|
self._process_target_columns(return_dict, self.stats_df)
|
61
68
|
|
62
69
|
return return_dict
|
63
|
-
|
70
|
+
|
64
71
|
def _process_target_columns(self, return_dict, stats_df):
|
65
72
|
for name, setting in self.table_settings.items():
|
66
73
|
target_indexes = setting.get('target_index', [None])
|
67
74
|
for target_index in target_indexes:
|
68
75
|
try:
|
69
76
|
return_dict[name] = StatsProcessor.slice_old_table(
|
70
|
-
total_table=stats_df,
|
71
|
-
target_index=target_index
|
77
|
+
total_table=stats_df, target_index=target_index
|
72
78
|
)
|
73
79
|
break
|
74
80
|
except Exception as e:
|
75
81
|
continue
|
76
|
-
|
{neurostats_api-1.0.0rc3 → neurostats_api-1.0.0rc5}/neurostats_API/transformers/balance_sheet/us.py
RENAMED
@@ -1,24 +1,32 @@
|
|
1
1
|
from .base import BaseBalanceSheetTransformer
|
2
2
|
from neurostats_API.utils import StatsProcessor
|
3
3
|
|
4
|
+
|
4
5
|
class USBalanceSheetTransformer(BaseBalanceSheetTransformer):
|
5
|
-
|
6
|
+
|
7
|
+
def __init__(self, ticker, company_name, zone):
|
6
8
|
super().__init__(ticker, company_name, zone)
|
7
9
|
|
8
10
|
self.data_df = None
|
9
|
-
|
11
|
+
self.return_keys = [
|
12
|
+
'balance_sheet',
|
13
|
+
'balance_sheet_YoY'
|
14
|
+
]
|
15
|
+
|
10
16
|
def process_transform(self, fetched_data):
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
-
}
|
17
|
+
if (not fetched_data):
|
18
|
+
return self._get_empty_structure()
|
19
|
+
|
20
|
+
return_dict = {"ticker": self.ticker, "company_name": self.company_name}
|
15
21
|
|
16
22
|
# QoQ表格
|
17
23
|
self.data_df = self._process_us_format(fetched_data)
|
18
|
-
|
24
|
+
|
19
25
|
# YoY表格
|
20
26
|
target_season = fetched_data[0]['season']
|
21
|
-
total_table_YoY = self._slice_target_season(
|
27
|
+
total_table_YoY = self._slice_target_season(
|
28
|
+
self.data_df.T, target_season
|
29
|
+
)
|
22
30
|
|
23
31
|
return_dict.update(
|
24
32
|
{
|
@@ -27,4 +35,4 @@ class USBalanceSheetTransformer(BaseBalanceSheetTransformer):
|
|
27
35
|
}
|
28
36
|
)
|
29
37
|
|
30
|
-
return return_dict
|
38
|
+
return return_dict
|
@@ -0,0 +1,158 @@
|
|
1
|
+
import abc
|
2
|
+
from neurostats_API.utils import StatsProcessor, YoY_Calculator
|
3
|
+
import pandas as pd
|
4
|
+
|
5
|
+
|
6
|
+
class BaseTransformer(abc.ABC):
|
7
|
+
"""
|
8
|
+
Transformer用途: 轉換資料為fetcher可使用的格式
|
9
|
+
"""
|
10
|
+
|
11
|
+
def __init__(self, ticker, company_name, zone):
|
12
|
+
self.ticker = ticker
|
13
|
+
self.company_name = company_name
|
14
|
+
|
15
|
+
self.zone = zone
|
16
|
+
self.return_keys = []
|
17
|
+
|
18
|
+
@abc.abstractmethod
|
19
|
+
def process_transform(self):
|
20
|
+
pass
|
21
|
+
|
22
|
+
@classmethod
|
23
|
+
def flatten_dict(cls, value_dict, target_keys):
|
24
|
+
indexes = value_dict.keys()
|
25
|
+
new_dict = {}
|
26
|
+
|
27
|
+
for key in indexes:
|
28
|
+
new_dict.update(
|
29
|
+
{
|
30
|
+
f"{key}_{sub_key}": value_dict[key].get(sub_key, None)
|
31
|
+
for sub_key in target_keys
|
32
|
+
}
|
33
|
+
)
|
34
|
+
|
35
|
+
return new_dict
|
36
|
+
|
37
|
+
@staticmethod
|
38
|
+
def _process_unit(data_df, postfix):
|
39
|
+
|
40
|
+
lambda_map = {
|
41
|
+
"_value":
|
42
|
+
lambda x: StatsProcessor.cal_non_percentage(x, postfix="千元"),
|
43
|
+
"_percentage":
|
44
|
+
lambda x: StatsProcessor.
|
45
|
+
cal_non_percentage(x, to_str=True, postfix="%"),
|
46
|
+
'_growth':
|
47
|
+
lambda x: StatsProcessor.
|
48
|
+
cal_non_percentage(x, to_str=True, postfix="%"),
|
49
|
+
"_YoY_1":
|
50
|
+
StatsProcessor.cal_percentage,
|
51
|
+
"_YoY_3":
|
52
|
+
StatsProcessor.cal_percentage,
|
53
|
+
"_YoY_5":
|
54
|
+
StatsProcessor.cal_percentage,
|
55
|
+
"_YoY_10":
|
56
|
+
StatsProcessor.cal_percentage
|
57
|
+
}
|
58
|
+
|
59
|
+
process_fn = lambda_map.get(postfix)
|
60
|
+
postfix_cols = data_df.columns.str.endswith(postfix)
|
61
|
+
postfix_cols = data_df.loc[:, postfix_cols].columns
|
62
|
+
|
63
|
+
if (postfix == "_value"):
|
64
|
+
postfix_cols = [
|
65
|
+
col for col in postfix_cols
|
66
|
+
if not ("eps" in col or "每股盈餘" in col)
|
67
|
+
]
|
68
|
+
|
69
|
+
if (postfix == '_growth'):
|
70
|
+
data_df[postfix_cols] = data_df[postfix_cols].map(
|
71
|
+
lambda x: x * 100.0 if isinstance(x, float) else x
|
72
|
+
)
|
73
|
+
|
74
|
+
data_df[postfix_cols] = (data_df[postfix_cols].map(process_fn))
|
75
|
+
|
76
|
+
return data_df
|
77
|
+
|
78
|
+
def _apply_process_unit_pipeline(
|
79
|
+
self, data_df, postfix_list=["_value", "percentage"]
|
80
|
+
):
|
81
|
+
for postfix in postfix_list:
|
82
|
+
data_df = self._process_unit(data_df, postfix)
|
83
|
+
return data_df
|
84
|
+
|
85
|
+
@staticmethod
|
86
|
+
def _slice_target_season(stats_df, target_season):
|
87
|
+
target_season_columns = stats_df.columns.str.endswith(
|
88
|
+
f"Q{target_season}"
|
89
|
+
)
|
90
|
+
stats_df = stats_df.loc[:, target_season_columns]
|
91
|
+
|
92
|
+
return stats_df
|
93
|
+
|
94
|
+
def _get_empty_structure(self):
|
95
|
+
return_dict = {
|
96
|
+
"warning": "No data fetched",
|
97
|
+
"ticker": self.ticker,
|
98
|
+
"company_name": self.company_name
|
99
|
+
}
|
100
|
+
|
101
|
+
return_dict.update(
|
102
|
+
{
|
103
|
+
key: pd.DataFrame(columns=pd.Index([], name='index'))
|
104
|
+
for key in self.return_keys
|
105
|
+
}
|
106
|
+
)
|
107
|
+
return return_dict
|
108
|
+
|
109
|
+
def _process_value(self, value):
|
110
|
+
if isinstance(value, str) and "%" in value:
|
111
|
+
value = value.replace("%", "")
|
112
|
+
try:
|
113
|
+
return float(value)
|
114
|
+
except (ValueError, TypeError):
|
115
|
+
return None
|
116
|
+
|
117
|
+
def _calculate_growth(self, this_value, last_value, delta):
|
118
|
+
try:
|
119
|
+
return YoY_Calculator.cal_growth(
|
120
|
+
this_value, last_value, delta
|
121
|
+
) * 100
|
122
|
+
except Exception:
|
123
|
+
return None
|
124
|
+
|
125
|
+
def _cal_QoQ(self, data_dict):
|
126
|
+
"""
|
127
|
+
data_dict: {"<key>_value": {"2020Q1": <value>, ....}, "<key>_percentage": {"2020Q1": <value>, ....}}
|
128
|
+
"""
|
129
|
+
|
130
|
+
return_dict = data_dict.copy()
|
131
|
+
|
132
|
+
for key, datas in data_dict.items():
|
133
|
+
if (key.endswith("_value")):
|
134
|
+
main_key = key.split("_")[0]
|
135
|
+
temp_growth_dict = dict()
|
136
|
+
for year_season, value in datas.items():
|
137
|
+
|
138
|
+
year, season = year_season.split('Q')
|
139
|
+
year, season = int(year), int(season)
|
140
|
+
|
141
|
+
last_year, last_season = (
|
142
|
+
year, season - 1
|
143
|
+
) if season != 1 else (year - 1, 4)
|
144
|
+
|
145
|
+
last_value = datas.get(f"{last_year}Q{last_season}", None)
|
146
|
+
|
147
|
+
growth = YoY_Calculator.cal_growth(
|
148
|
+
value, last_value, delta=1
|
149
|
+
)
|
150
|
+
if (growth):
|
151
|
+
growth = growth * 100
|
152
|
+
growth = f"{growth:.2f}%"
|
153
|
+
|
154
|
+
temp_growth_dict[year_season] = growth
|
155
|
+
|
156
|
+
return_dict[f"{main_key}_growth"] = growth
|
157
|
+
return_df = pd.DataFrame.from_dict(return_dict)
|
158
|
+
return return_df
|
{neurostats_api-1.0.0rc3 → neurostats_api-1.0.0rc5}/neurostats_API/transformers/cash_flow/twse.py
RENAMED
@@ -52,6 +52,8 @@ class TWSECashFlowTransformer(BaseCashFlowTransformer):
|
|
52
52
|
return self._get_empty_structure()
|
53
53
|
|
54
54
|
data_df = self._process_twse_to_tej_format(fetched_data)
|
55
|
+
data_df = self._cal_QoQ(data_df.T.to_dict())
|
56
|
+
data_df = data_df.T
|
55
57
|
target_season = fetched_data[0]['season']
|
56
58
|
|
57
59
|
data_df_YoY = self._slice_target_season(data_df, target_season)
|
@@ -35,7 +35,7 @@ class TWSEChipTransformer(BaseChipTransformer):
|
|
35
35
|
|
36
36
|
tech_dict = {data['date']: data for data in tech_data}
|
37
37
|
latest_tech = tech_data[-1]
|
38
|
-
if (
|
38
|
+
if (not fetched_data):
|
39
39
|
return_dict['latest_trading'].update(
|
40
40
|
self._process_latest({}, latest_tech, key)
|
41
41
|
)
|
@@ -27,12 +27,27 @@ class FinanceOverviewTransformer(BaseFinanceOverviewTransformer):
|
|
27
27
|
return processed_data_dict
|
28
28
|
|
29
29
|
def _filter_target_data(self, balance_sheet, profit_lose, cash_flow):
|
30
|
+
balance_sheet = balance_sheet[-1]
|
31
|
+
cash_flow = cash_flow[-1]
|
32
|
+
profit_lose = profit_lose[-1]
|
33
|
+
seasons = [
|
34
|
+
(int(report['year']), int(report['season']))
|
35
|
+
for report in (balance_sheet, profit_lose, cash_flow)
|
36
|
+
]
|
37
|
+
|
38
|
+
max_date = max(seasons)
|
39
|
+
year, season = max_date
|
40
|
+
|
30
41
|
data_dict = {
|
31
|
-
'balance_sheet': balance_sheet[
|
32
|
-
'profit_lose': profit_lose[
|
33
|
-
"cash_flow": cash_flow[
|
42
|
+
'balance_sheet': balance_sheet['balance_sheet'],
|
43
|
+
'profit_lose': profit_lose['profit_lose'],
|
44
|
+
"cash_flow": cash_flow['cash_flow']
|
34
45
|
}
|
35
|
-
filtered_dict = {
|
46
|
+
filtered_dict = {
|
47
|
+
"year": year,
|
48
|
+
"season": season
|
49
|
+
}
|
50
|
+
|
36
51
|
|
37
52
|
for key, target_sets in self.target_fields.items():
|
38
53
|
try:
|
@@ -1,4 +1,5 @@
|
|
1
1
|
from .base import BaseMonthRevenueTransformer
|
2
|
+
from datetime import datetime
|
2
3
|
from neurostats_API.utils import StatsProcessor, YoY_Calculator
|
3
4
|
import pandas as pd
|
4
5
|
|
@@ -8,6 +9,8 @@ class TWSEMonthlyRevenueTransformer(BaseMonthRevenueTransformer):
|
|
8
9
|
|
9
10
|
self.data_df = None
|
10
11
|
def process_transform(self, fetched_data):
|
12
|
+
if (not fetched_data):
|
13
|
+
return self._get_empty_structure()
|
11
14
|
self.data_df = self._process_data(fetched_data)
|
12
15
|
target_month = fetched_data[0]['month']
|
13
16
|
|
@@ -97,10 +100,12 @@ class TWSEMonthlyRevenueTransformer(BaseMonthRevenueTransformer):
|
|
97
100
|
return df[df['date'] != "0/0"].set_index('date').T
|
98
101
|
|
99
102
|
|
100
|
-
def _get_empty_structure(self
|
103
|
+
def _get_empty_structure(self):
|
101
104
|
"""
|
102
105
|
Exception 發生時回傳
|
103
106
|
"""
|
107
|
+
target_date = datetime.today()
|
108
|
+
target_year, target_month = target_date.year, target_date.month
|
104
109
|
recent_date = [f"{target_year}/{target_month}"]
|
105
110
|
for _ in range(11):
|
106
111
|
target_year, target_month = (target_year - 1, 12) if target_month == 1 else (target_year, target_month - 1)
|
{neurostats_api-1.0.0rc3 → neurostats_api-1.0.0rc5}/neurostats_API/transformers/profit_lose/twse.py
RENAMED
@@ -105,7 +105,7 @@ class TWSEProfitLoseTransformer(BaseProfitLoseTransformer):
|
|
105
105
|
return_dict.update({
|
106
106
|
"profit_lose": stats_main_page_df,
|
107
107
|
"grand_total_profit_lose": stats_grand_total_df,
|
108
|
-
"profit_lose_all": self.new_df
|
108
|
+
"profit_lose_all": self.new_df,
|
109
109
|
"profit_lose_YoY": new_df_YoY
|
110
110
|
})
|
111
111
|
|
@@ -35,7 +35,7 @@ class TEJFinanceStatementTransformer(BaseTEJTransformer):
|
|
35
35
|
use_cal=True,
|
36
36
|
indexes=None
|
37
37
|
):
|
38
|
-
if (
|
38
|
+
if (not fetched_data):
|
39
39
|
raise NoDataError(f"No data found in collection: TEJ_finance_statement, ticker={self.ticker}")
|
40
40
|
|
41
41
|
target_season = fetched_data[-1]['season']
|
@@ -1,6 +1,6 @@
|
|
1
1
|
Metadata-Version: 2.1
|
2
2
|
Name: neurostats_API
|
3
|
-
Version: 1.0.
|
3
|
+
Version: 1.0.0rc5
|
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.
|
74
|
+
1.0.0rc5
|
75
75
|
```
|
76
76
|
|
77
77
|
### 下載舊版
|
@@ -1,15 +0,0 @@
|
|
1
|
-
__version__='1.0.0rc3'
|
2
|
-
|
3
|
-
from .fetchers import (
|
4
|
-
AgentFinanceOverviewFetcher,
|
5
|
-
BalanceSheetFetcher,
|
6
|
-
CashFlowFetcher,
|
7
|
-
FinanceOverviewFetcher,
|
8
|
-
FinanceReportFetcher,
|
9
|
-
InstitutionFetcher,
|
10
|
-
MarginTradingFetcher,
|
11
|
-
MonthRevenueFetcher,
|
12
|
-
TechFetcher,
|
13
|
-
TEJStockPriceFetcher,
|
14
|
-
ProfitLoseFetcher,
|
15
|
-
)
|
@@ -1,110 +0,0 @@
|
|
1
|
-
import abc
|
2
|
-
from neurostats_API.utils import StatsProcessor, YoY_Calculator
|
3
|
-
import pandas as pd
|
4
|
-
|
5
|
-
class BaseTransformer(abc.ABC):
|
6
|
-
"""
|
7
|
-
Transformer用途: 轉換資料為fetcher可使用的格式
|
8
|
-
"""
|
9
|
-
def __init__(self, ticker, company_name, zone):
|
10
|
-
self.ticker = ticker
|
11
|
-
self.company_name = company_name
|
12
|
-
|
13
|
-
self.zone = zone
|
14
|
-
self.return_keys = []
|
15
|
-
|
16
|
-
|
17
|
-
@abc.abstractmethod
|
18
|
-
def process_transform(self):
|
19
|
-
pass
|
20
|
-
|
21
|
-
@classmethod
|
22
|
-
def flatten_dict(cls, value_dict, target_keys):
|
23
|
-
indexes = value_dict.keys()
|
24
|
-
new_dict = {}
|
25
|
-
|
26
|
-
|
27
|
-
for key in indexes:
|
28
|
-
new_dict.update(
|
29
|
-
{
|
30
|
-
f"{key}_{sub_key}": value_dict[key].get(sub_key, None)
|
31
|
-
for sub_key in target_keys
|
32
|
-
}
|
33
|
-
)
|
34
|
-
return new_dict
|
35
|
-
|
36
|
-
@staticmethod
|
37
|
-
def _process_unit(data_df, postfix):
|
38
|
-
|
39
|
-
lambda_map = {
|
40
|
-
"_value": lambda x: StatsProcessor.cal_non_percentage(x, postfix="千元"),
|
41
|
-
"_percentage": lambda x : StatsProcessor.cal_non_percentage(x, to_str=True, postfix="%"),
|
42
|
-
'_growth': lambda x : StatsProcessor.cal_non_percentage(x, to_str=True, postfix="%"),
|
43
|
-
"_YoY_1": StatsProcessor.cal_percentage,
|
44
|
-
"_YoY_3": StatsProcessor.cal_percentage,
|
45
|
-
"_YoY_5": StatsProcessor.cal_percentage,
|
46
|
-
"_YoY_10": StatsProcessor.cal_percentage
|
47
|
-
}
|
48
|
-
|
49
|
-
process_fn = lambda_map.get(postfix)
|
50
|
-
postfix_cols = data_df.columns.str.endswith(postfix)
|
51
|
-
postfix_cols = data_df.loc[:, postfix_cols].columns
|
52
|
-
|
53
|
-
if (postfix == "_value"):
|
54
|
-
postfix_cols = [col for col in postfix_cols if not ("eps" in col or "每股盈餘" in col)]
|
55
|
-
|
56
|
-
if (postfix == '_growth'):
|
57
|
-
data_df[postfix_cols] =data_df[postfix_cols].map(
|
58
|
-
lambda x: x * 100.0 if isinstance(x, float) else x
|
59
|
-
)
|
60
|
-
|
61
|
-
data_df[postfix_cols] = (
|
62
|
-
data_df[postfix_cols].map(
|
63
|
-
process_fn
|
64
|
-
)
|
65
|
-
)
|
66
|
-
|
67
|
-
return data_df
|
68
|
-
|
69
|
-
def _apply_process_unit_pipeline(self, data_df, postfix_list = ["_value", "percentage"]):
|
70
|
-
for postfix in postfix_list:
|
71
|
-
data_df = self._process_unit(data_df, postfix)
|
72
|
-
return data_df
|
73
|
-
|
74
|
-
@staticmethod
|
75
|
-
def _slice_target_season(stats_df, target_season):
|
76
|
-
target_season_columns = stats_df.columns.str.endswith(f"Q{target_season}")
|
77
|
-
stats_df = stats_df.loc[:, target_season_columns]
|
78
|
-
|
79
|
-
return stats_df
|
80
|
-
|
81
|
-
def _get_empty_structure(self):
|
82
|
-
return_dict = {
|
83
|
-
"warning": "No data fetched",
|
84
|
-
"ticker": self.ticker,
|
85
|
-
"company_name": self.company_name
|
86
|
-
}
|
87
|
-
|
88
|
-
return_dict.update(
|
89
|
-
{
|
90
|
-
key: pd.DataFrame(columns= pd.Index([], name = 'date')) for key in self.return_keys
|
91
|
-
}
|
92
|
-
)
|
93
|
-
return return_dict
|
94
|
-
|
95
|
-
def _process_value(self, value):
|
96
|
-
if isinstance(value, str) and "%" in value:
|
97
|
-
value = value.replace("%", "")
|
98
|
-
try:
|
99
|
-
return float(value)
|
100
|
-
except (ValueError, TypeError):
|
101
|
-
return None
|
102
|
-
|
103
|
-
def _calculate_growth(self, this_value, last_value, delta):
|
104
|
-
try:
|
105
|
-
return YoY_Calculator.cal_growth(
|
106
|
-
this_value, last_value, delta
|
107
|
-
) * 100
|
108
|
-
except Exception:
|
109
|
-
return None
|
110
|
-
|
File without changes
|
File without changes
|
{neurostats_api-1.0.0rc3 → neurostats_api-1.0.0rc5}/neurostats_API/async_mode/db/__init__.py
RENAMED
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
{neurostats_api-1.0.0rc3 → neurostats_api-1.0.0rc5}/neurostats_API/async_mode/db_extractors/base.py
RENAMED
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
{neurostats_api-1.0.0rc3 → neurostats_api-1.0.0rc5}/neurostats_API/async_mode/factory/__init__.py
RENAMED
File without changes
|
File without changes
|
File without changes
|
{neurostats_api-1.0.0rc3 → neurostats_api-1.0.0rc5}/neurostats_API/async_mode/fetchers/__init__.py
RENAMED
File without changes
|
File without changes
|
{neurostats_api-1.0.0rc3 → neurostats_api-1.0.0rc5}/neurostats_API/async_mode/fetchers/base.py
RENAMED
File without changes
|
{neurostats_api-1.0.0rc3 → neurostats_api-1.0.0rc5}/neurostats_API/async_mode/fetchers/cash_flow.py
RENAMED
File without changes
|
File without changes
|
File without changes
|
File without changes
|
{neurostats_api-1.0.0rc3 → neurostats_api-1.0.0rc5}/neurostats_API/async_mode/fetchers/tej.py
RENAMED
File without changes
|
File without changes
|
File without changes
|
{neurostats_api-1.0.0rc3 → neurostats_api-1.0.0rc5}/neurostats_API/async_mode/fetchers/value.py
RENAMED
File without changes
|
File without changes
|
File without changes
|
{neurostats_api-1.0.0rc3 → neurostats_api-1.0.0rc5}/neurostats_API/config/company_list/tw.json
RENAMED
File without changes
|
{neurostats_api-1.0.0rc3 → neurostats_api-1.0.0rc5}/neurostats_API/config/company_list/us.json
RENAMED
File without changes
|
File without changes
|
{neurostats_api-1.0.0rc3 → neurostats_api-1.0.0rc5}/neurostats_API/config/tej_db/tej_db_index.yaml
RENAMED
File without changes
|
File without changes
|
File without changes
|
File without changes
|
{neurostats_api-1.0.0rc3 → neurostats_api-1.0.0rc5}/neurostats_API/config/twse/balance_sheet.yaml
RENAMED
File without changes
|
File without changes
|
File without changes
|
{neurostats_api-1.0.0rc3 → neurostats_api-1.0.0rc5}/neurostats_API/config/twse/profit_lose.yaml
RENAMED
File without changes
|
File without changes
|
File without changes
|
{neurostats_api-1.0.0rc3 → neurostats_api-1.0.0rc5}/neurostats_API/fetchers/balance_sheet.py
RENAMED
File without changes
|
File without changes
|
File without changes
|
{neurostats_api-1.0.0rc3 → neurostats_api-1.0.0rc5}/neurostats_API/fetchers/finance_overview.py
RENAMED
File without changes
|
File without changes
|
{neurostats_api-1.0.0rc3 → neurostats_api-1.0.0rc5}/neurostats_API/fetchers/margin_trading.py
RENAMED
File without changes
|
{neurostats_api-1.0.0rc3 → neurostats_api-1.0.0rc5}/neurostats_API/fetchers/month_revenue.py
RENAMED
File without changes
|
File without changes
|
File without changes
|
{neurostats_api-1.0.0rc3 → neurostats_api-1.0.0rc5}/neurostats_API/fetchers/tej_finance_report.py
RENAMED
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
{neurostats_api-1.0.0rc3 → neurostats_api-1.0.0rc5}/neurostats_API/transformers/cash_flow/base.py
RENAMED
File without changes
|
{neurostats_api-1.0.0rc3 → neurostats_api-1.0.0rc5}/neurostats_API/transformers/cash_flow/us.py
RENAMED
File without changes
|
File without changes
|
{neurostats_api-1.0.0rc3 → neurostats_api-1.0.0rc5}/neurostats_API/transformers/daily_chip/base.py
RENAMED
File without changes
|
{neurostats_api-1.0.0rc3 → neurostats_api-1.0.0rc5}/neurostats_API/transformers/daily_chip/tej.py
RENAMED
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
{neurostats_api-1.0.0rc3 → neurostats_api-1.0.0rc5}/neurostats_API/transformers/daily_tech/base.py
RENAMED
File without changes
|
{neurostats_api-1.0.0rc3 → neurostats_api-1.0.0rc5}/neurostats_API/transformers/daily_tech/tech.py
RENAMED
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
{neurostats_api-1.0.0rc3 → neurostats_api-1.0.0rc5}/neurostats_API/transformers/profit_lose/base.py
RENAMED
File without changes
|
{neurostats_api-1.0.0rc3 → neurostats_api-1.0.0rc5}/neurostats_API/transformers/tej/__init__.py
RENAMED
File without changes
|
File without changes
|
{neurostats_api-1.0.0rc3 → neurostats_api-1.0.0rc5}/neurostats_API/transformers/value/__init__.py
RENAMED
File without changes
|
{neurostats_api-1.0.0rc3 → neurostats_api-1.0.0rc5}/neurostats_API/transformers/value/base.py
RENAMED
File without changes
|
{neurostats_api-1.0.0rc3 → neurostats_api-1.0.0rc5}/neurostats_API/transformers/value/tej.py
RENAMED
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
{neurostats_api-1.0.0rc3 → neurostats_api-1.0.0rc5}/neurostats_API.egg-info/dependency_links.txt
RENAMED
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|