mirror of
https://github.com/OpenBB-finance/OpenBB.git
synced 2026-10-27 12:40:35 +00:00
[BugFix] Clean Out Files From Already Deprecated Endpoint (#6953)
* clean out files from already deprecated endpoint * decorator goes on the other side
This commit is contained in:
@@ -2,14 +2,13 @@
|
||||
|
||||
from typing import Optional
|
||||
|
||||
from pydantic import Field
|
||||
|
||||
from openbb_core.provider.abstract.data import Data
|
||||
from openbb_core.provider.abstract.query_params import QueryParams
|
||||
from openbb_core.provider.utils.descriptions import (
|
||||
DATA_DESCRIPTIONS,
|
||||
QUERY_DESCRIPTIONS,
|
||||
)
|
||||
from pydantic import Field, field_validator
|
||||
|
||||
|
||||
class IndexConstituentsQueryParams(QueryParams):
|
||||
@@ -17,6 +16,12 @@ class IndexConstituentsQueryParams(QueryParams):
|
||||
|
||||
symbol: str = Field(description=QUERY_DESCRIPTIONS.get("symbol", ""))
|
||||
|
||||
@classmethod
|
||||
@field_validator("symbol")
|
||||
def _to_upper(cls, v):
|
||||
"""Convert the symbol to uppercase."""
|
||||
return v.upper()
|
||||
|
||||
|
||||
class IndexConstituentsData(Data):
|
||||
"""Index Constituents Data."""
|
||||
|
||||
@@ -1,61 +0,0 @@
|
||||
"""Market Indices Standard Model."""
|
||||
|
||||
from datetime import (
|
||||
date as dateType,
|
||||
datetime,
|
||||
)
|
||||
from typing import Optional
|
||||
|
||||
from dateutil import parser
|
||||
from pydantic import Field, StrictFloat, field_validator
|
||||
|
||||
from openbb_core.provider.abstract.data import Data, ForceInt
|
||||
from openbb_core.provider.abstract.query_params import QueryParams
|
||||
from openbb_core.provider.utils.descriptions import (
|
||||
DATA_DESCRIPTIONS,
|
||||
QUERY_DESCRIPTIONS,
|
||||
)
|
||||
|
||||
|
||||
class MarketIndicesQueryParams(QueryParams):
|
||||
"""Market Indices Query."""
|
||||
|
||||
symbol: str = Field(description=QUERY_DESCRIPTIONS.get("symbol", ""))
|
||||
start_date: Optional[dateType] = Field(
|
||||
description=QUERY_DESCRIPTIONS.get("start_date", ""), default=None
|
||||
)
|
||||
end_date: Optional[dateType] = Field(
|
||||
description=QUERY_DESCRIPTIONS.get("end_date", ""), default=None
|
||||
)
|
||||
|
||||
@field_validator("symbol", mode="before", check_fields=False)
|
||||
@classmethod
|
||||
def to_upper(cls, v: str) -> str:
|
||||
"""Convert field to uppercase."""
|
||||
return v.upper()
|
||||
|
||||
|
||||
class MarketIndicesData(Data):
|
||||
"""Market Indices Data."""
|
||||
|
||||
date: datetime = Field(description=DATA_DESCRIPTIONS.get("date", ""))
|
||||
open: Optional[StrictFloat] = Field(
|
||||
default=None, description=DATA_DESCRIPTIONS.get("open", "")
|
||||
)
|
||||
high: Optional[StrictFloat] = Field(
|
||||
default=None, description=DATA_DESCRIPTIONS.get("high", "")
|
||||
)
|
||||
low: Optional[StrictFloat] = Field(
|
||||
default=None, description=DATA_DESCRIPTIONS.get("low", "")
|
||||
)
|
||||
close: Optional[StrictFloat] = Field(
|
||||
default=None, description=DATA_DESCRIPTIONS.get("close", "")
|
||||
)
|
||||
volume: Optional[ForceInt] = Field(
|
||||
default=None, description=DATA_DESCRIPTIONS.get("volume", "")
|
||||
)
|
||||
|
||||
@field_validator("date", mode="before", check_fields=False)
|
||||
def date_validate(cls, v): # pylint: disable=E0213
|
||||
"""Return formatted datetime."""
|
||||
return parser.isoparse(str(v))
|
||||
@@ -34,7 +34,6 @@ around the world.""",
|
||||
"IndexHistorical": CboeIndexHistoricalFetcher,
|
||||
"IndexSearch": CboeIndexSearchFetcher,
|
||||
"IndexSnapshots": CboeIndexSnapshotsFetcher,
|
||||
"MarketIndices": CboeIndexHistoricalFetcher,
|
||||
"OptionsChains": CboeOptionsChainsFetcher,
|
||||
},
|
||||
repr_name="Chicago Board Options Exchange (CBOE)",
|
||||
|
||||
@@ -125,7 +125,6 @@ stock market information (news, currencies, and stock prices).""",
|
||||
"InstitutionalOwnership": FMPInstitutionalOwnershipFetcher,
|
||||
"KeyExecutives": FMPKeyExecutivesFetcher,
|
||||
"KeyMetrics": FMPKeyMetricsFetcher,
|
||||
"MarketIndices": FMPIndexHistoricalFetcher,
|
||||
"MarketSnapshots": FMPMarketSnapshotsFetcher,
|
||||
"PricePerformance": FMPPricePerformanceFetcher,
|
||||
"PriceTarget": FMPPriceTargetFetcher,
|
||||
|
||||
@@ -1,114 +0,0 @@
|
||||
"""FMP Market Indices Model."""
|
||||
|
||||
# pylint: disable=unused-argument
|
||||
|
||||
from datetime import datetime
|
||||
from typing import Any, Dict, List, Literal, Optional
|
||||
|
||||
from dateutil.relativedelta import relativedelta
|
||||
from openbb_core.provider.abstract.fetcher import Fetcher
|
||||
from openbb_core.provider.standard_models.market_indices import (
|
||||
MarketIndicesData,
|
||||
MarketIndicesQueryParams,
|
||||
)
|
||||
from openbb_core.provider.utils.descriptions import DATA_DESCRIPTIONS
|
||||
from openbb_core.provider.utils.helpers import get_querystring
|
||||
from openbb_fmp.utils.helpers import get_data_many
|
||||
from pydantic import Field, NonNegativeInt
|
||||
|
||||
|
||||
class FMPMarketIndicesQueryParams(MarketIndicesQueryParams):
|
||||
"""FMP Market Indices Query.
|
||||
|
||||
Source: https://site.financialmodelingprep.com/developer/docs/historical-index-price-api/
|
||||
"""
|
||||
|
||||
__alias_dict__ = {"start_date": "from", "end_date": "to"}
|
||||
|
||||
timeseries: Optional[NonNegativeInt] = Field(
|
||||
default=None, description="Number of days to look back."
|
||||
)
|
||||
interval: Literal["1min", "5min", "15min", "30min", "1hour", "4hour", "1day"] = (
|
||||
Field(default="1day", description="Data granularity.")
|
||||
)
|
||||
sort: Literal["asc", "desc"] = Field(
|
||||
default="desc", description="Sort the data in ascending or descending order."
|
||||
)
|
||||
|
||||
|
||||
class FMPMarketIndicesData(MarketIndicesData):
|
||||
"""FMP Market Indices Data."""
|
||||
|
||||
adj_close: Optional[float] = Field(
|
||||
description=DATA_DESCRIPTIONS.get("adj_close", ""),
|
||||
default=None,
|
||||
)
|
||||
unadjusted_volume: Optional[float] = Field(
|
||||
description="Unadjusted volume of the symbol.",
|
||||
default=None,
|
||||
)
|
||||
change: Optional[float] = Field(
|
||||
description="Change in the price of the symbol from the previous day.",
|
||||
default=None,
|
||||
)
|
||||
change_percent: Optional[float] = Field(
|
||||
description="Change % in the price of the symbol.",
|
||||
default=None,
|
||||
)
|
||||
label: Optional[str] = Field(
|
||||
description="Human readable format of the date.", default=None
|
||||
)
|
||||
change_over_time: Optional[float] = Field(
|
||||
description="Change % in the price of the symbol over a period of time.",
|
||||
default=None,
|
||||
)
|
||||
|
||||
|
||||
class FMPMarketIndicesFetcher(
|
||||
Fetcher[
|
||||
FMPMarketIndicesQueryParams,
|
||||
List[FMPMarketIndicesData],
|
||||
]
|
||||
):
|
||||
"""Transform the query, extract and transform the data from the FMP endpoints."""
|
||||
|
||||
@staticmethod
|
||||
def transform_query(params: Dict[str, Any]) -> FMPMarketIndicesQueryParams:
|
||||
"""Transform the query params."""
|
||||
transformed_params = params
|
||||
|
||||
now = datetime.now().date()
|
||||
if params.get("start_date") is None:
|
||||
transformed_params["start_date"] = now - relativedelta(years=1)
|
||||
|
||||
if params.get("end_date") is None:
|
||||
transformed_params["end_date"] = now
|
||||
|
||||
return FMPMarketIndicesQueryParams.model_validate(transformed_params)
|
||||
|
||||
@staticmethod
|
||||
async def aextract_data(
|
||||
query: FMPMarketIndicesQueryParams,
|
||||
credentials: Optional[Dict[str, str]],
|
||||
**kwargs: Any,
|
||||
) -> List[Dict]:
|
||||
"""Return the raw data from the FMP endpoint."""
|
||||
api_key = credentials.get("fmp_api_key") if credentials else ""
|
||||
|
||||
base_url = "https://financialmodelingprep.com/api/v3"
|
||||
query_str = get_querystring(query.model_dump(), ["symbol", "interval", "sort"])
|
||||
|
||||
url_params = f"{query.symbol}?{query_str}&apikey={api_key}"
|
||||
url = f"{base_url}/historical-chart/{query.interval}/{url_params}"
|
||||
|
||||
return await get_data_many(url, "historical", **kwargs)
|
||||
|
||||
@staticmethod
|
||||
def transform_data(
|
||||
query: FMPMarketIndicesQueryParams, data: List[Dict], **kwargs: Any
|
||||
) -> List[FMPMarketIndicesData]:
|
||||
"""Return the transformed data."""
|
||||
if query.sort == "asc":
|
||||
data = sorted(data, key=lambda x: x["date"], reverse=True)
|
||||
|
||||
return [FMPMarketIndicesData.model_validate(d) for d in data]
|
||||
@@ -1,57 +0,0 @@
|
||||
interactions:
|
||||
- request:
|
||||
body: null
|
||||
headers:
|
||||
Accept:
|
||||
- application/json
|
||||
Accept-Encoding:
|
||||
- gzip, deflate
|
||||
Connection:
|
||||
- keep-alive
|
||||
method: GET
|
||||
uri: https://financialmodelingprep.com/api/v3/historical-chart/1day/%5EDJI?apikey=MOCK_API_KEY&from=2023-01-01&to=2023-01-10
|
||||
response:
|
||||
body:
|
||||
string: !!binary |
|
||||
H4sIAAAAAAAAA43SS07DMBAG4H1PEWXdjubhGXt6FcQCQUSRCkHitUDcHTcNcesopVGShX9b/jye
|
||||
m1XTfOevadqHu/eu3TYtI8sGaUPYEG8R89uuj1P61+4lTxFRMgjs5mOw77+G8cAECTGmcXz39Lgb
|
||||
gsgGKo42Bvf7/q07JhiAkPQv+ez3H8+HiC2xYX7y+M962Ym+7DQLcNiVa2eKYIZktdNFs8YlzZxK
|
||||
eUlIIdRO4ZjCNU5bdqIqyEndRie7xzN/qSfh2QGK0yQnJycoTsN4lVOXneQEkVLUypmIYfjXznrB
|
||||
5GTPznzgaUlxSnS+xhkuOC1fY5jfO4pASBhi7QzoZ11Y6snmEM1VZs7oQzn/dcoFZ0iQvDTVVE9F
|
||||
0IhCtVNy4yoVTXGSGBzawmdO1Vzr0bm6/QU7Pyuq8gMAAA==
|
||||
headers:
|
||||
Access-Control-Allow-Credentials:
|
||||
- 'true'
|
||||
Access-Control-Allow-Headers:
|
||||
- X-Requested-With, content-type, auth-token, Authorization, stripe-signature,
|
||||
APPS
|
||||
Access-Control-Allow-Methods:
|
||||
- GET, POST, OPTIONS
|
||||
Access-Control-Allow-Origin:
|
||||
- '*'
|
||||
Access-Control-Max-Age:
|
||||
- '3600'
|
||||
Connection:
|
||||
- keep-alive
|
||||
Content-Encoding:
|
||||
- gzip
|
||||
Content-Type:
|
||||
- application/json; charset=utf-8
|
||||
Date:
|
||||
- Fri, 01 Dec 2023 21:25:06 GMT
|
||||
Etag:
|
||||
- W/"3f2-y9+VxwqtePCRYovMzrv9Y2mmzrc"
|
||||
Server:
|
||||
- nginx/1.18.0 (Ubuntu)
|
||||
Transfer-Encoding:
|
||||
- chunked
|
||||
Vary:
|
||||
- Accept-Encoding
|
||||
X-Frame-Options:
|
||||
- SAMEORIGIN
|
||||
X-Powered-By:
|
||||
- Express
|
||||
status:
|
||||
code: 200
|
||||
message: OK
|
||||
version: 1
|
||||
@@ -1,57 +0,0 @@
|
||||
interactions:
|
||||
- request:
|
||||
body: null
|
||||
headers:
|
||||
Accept:
|
||||
- application/json
|
||||
Accept-Encoding:
|
||||
- gzip, deflate
|
||||
Connection:
|
||||
- keep-alive
|
||||
method: GET
|
||||
uri: https://financialmodelingprep.com/api/v3/historical-chart/1day/%5EDJI?apikey=MOCK_API_KEY&from=2023-01-01&to=2023-01-10
|
||||
response:
|
||||
body:
|
||||
string: !!binary |
|
||||
H4sIAAAAAAAAA43SzU6DQBAH8HufgnBuJ/O9O30V48FoY02qmPh1ML67CyWFgtQS4MB/N/ubYW5W
|
||||
VfVdnqqqH+7ed/W2qhlZNkgbwgpx2931+riked29lCUiRg7K4Tn3yaH56gJlgoyYMvXB/ulx3yWJ
|
||||
HUwCXfrk/tC87Y4RKhCSnaLP5vDx3GbsmR3LVb7/rJetGMtWd4X2XLapNSdwb8+dWkOsgEKSzaxG
|
||||
ZZNmlTy1Cqes11h92YpmIOP29VaOSOdFDH0lPK9isLqUaFzGYHVMV1lt2UpBkCinSVs5E0P3nlGn
|
||||
O05SjiJtq+a5VFLwNVK9IPXyO/WPCUAR0IzqMaUqxvlIDl1lD0geJjSzpuia+q9VLlg1Q47RfJ3a
|
||||
agiWUEimVilzbDQCDVYSh3ZCQmdWs9L03rq6/QXH+CSaCAQAAA==
|
||||
headers:
|
||||
Access-Control-Allow-Credentials:
|
||||
- 'true'
|
||||
Access-Control-Allow-Headers:
|
||||
- X-Requested-With, content-type, auth-token, Authorization, stripe-signature,
|
||||
APPS, publicauthkey, privateauthkey
|
||||
Access-Control-Allow-Methods:
|
||||
- GET, POST, OPTIONS
|
||||
Access-Control-Allow-Origin:
|
||||
- '*'
|
||||
Access-Control-Max-Age:
|
||||
- '3600'
|
||||
Connection:
|
||||
- keep-alive
|
||||
Content-Encoding:
|
||||
- gzip
|
||||
Content-Type:
|
||||
- application/json; charset=utf-8
|
||||
Date:
|
||||
- Thu, 27 Jun 2024 10:12:17 GMT
|
||||
Etag:
|
||||
- W/"408-glTYZ6Uxgu2pCgKN72yd6UNBr5A"
|
||||
Server:
|
||||
- nginx/1.18.0 (Ubuntu)
|
||||
Transfer-Encoding:
|
||||
- chunked
|
||||
Vary:
|
||||
- Accept-Encoding
|
||||
X-Frame-Options:
|
||||
- SAMEORIGIN
|
||||
X-Powered-By:
|
||||
- Express
|
||||
status:
|
||||
code: 200
|
||||
message: OK
|
||||
version: 1
|
||||
@@ -60,7 +60,6 @@ from openbb_fmp.models.insider_trading import FMPInsiderTradingFetcher
|
||||
from openbb_fmp.models.institutional_ownership import FMPInstitutionalOwnershipFetcher
|
||||
from openbb_fmp.models.key_executives import FMPKeyExecutivesFetcher
|
||||
from openbb_fmp.models.key_metrics import FMPKeyMetricsFetcher
|
||||
from openbb_fmp.models.market_indices import FMPMarketIndicesFetcher
|
||||
from openbb_fmp.models.market_snapshots import FMPMarketSnapshotsFetcher
|
||||
from openbb_fmp.models.price_performance import FMPPricePerformanceFetcher
|
||||
from openbb_fmp.models.price_target import FMPPriceTargetFetcher
|
||||
@@ -138,20 +137,6 @@ def test_fmp_currency_historical_fetcher(credentials=test_credentials):
|
||||
assert result is None
|
||||
|
||||
|
||||
@pytest.mark.record_http
|
||||
def test_fmp_market_indices_fetcher(credentials=test_credentials):
|
||||
"""Test FMP market indices fetcher."""
|
||||
params = {
|
||||
"symbol": "^DJI",
|
||||
"start_date": date(2023, 1, 1),
|
||||
"end_date": date(2023, 1, 10),
|
||||
}
|
||||
|
||||
fetcher = FMPMarketIndicesFetcher()
|
||||
result = fetcher.test(params, credentials)
|
||||
assert result is None
|
||||
|
||||
|
||||
@pytest.mark.record_http
|
||||
def test_fmp_index_historical_fetcher(credentials=test_credentials):
|
||||
"""Test FMP index historical fetcher."""
|
||||
|
||||
@@ -100,7 +100,6 @@ historical financial market data to businesses and developers through an API."""
|
||||
# "InstitutionalOwnership": IntrinioInstitutionalOwnershipFetcher, # Disabled due to unreliable Intrinio endpoint
|
||||
"KeyMetrics": IntrinioKeyMetricsFetcher,
|
||||
"LatestAttributes": IntrinioLatestAttributesFetcher,
|
||||
"MarketIndices": IntrinioIndexHistoricalFetcher,
|
||||
"MarketSnapshots": IntrinioMarketSnapshotsFetcher,
|
||||
"OptionsChains": IntrinioOptionsChainsFetcher,
|
||||
"OptionsSnapshots": IntrinioOptionsSnapshotsFetcher,
|
||||
|
||||
@@ -1,91 +0,0 @@
|
||||
"""Intrinio Market Indices Model."""
|
||||
|
||||
from datetime import datetime
|
||||
from typing import Any, Dict, List, Literal, Optional
|
||||
|
||||
from dateutil.relativedelta import relativedelta
|
||||
from openbb_core.provider.abstract.fetcher import Fetcher
|
||||
from openbb_core.provider.standard_models.market_indices import (
|
||||
MarketIndicesData,
|
||||
MarketIndicesQueryParams,
|
||||
)
|
||||
from openbb_core.provider.utils.descriptions import QUERY_DESCRIPTIONS
|
||||
from openbb_core.provider.utils.helpers import get_querystring
|
||||
from openbb_intrinio.utils.helpers import get_data_many
|
||||
from pydantic import Field, NonNegativeInt
|
||||
|
||||
|
||||
class IntrinioMarketIndicesQueryParams(MarketIndicesQueryParams):
|
||||
"""Intrinio Market Indices Query.
|
||||
|
||||
Source: https://docs.intrinio.com/documentation/web_api/get_stock_market_index_historical_data_v2
|
||||
"""
|
||||
|
||||
tag: Optional[str] = Field(default="level", description="Index tag.")
|
||||
type: Optional[str] = Field(
|
||||
default=None,
|
||||
description="Index type.",
|
||||
)
|
||||
sort: Literal["asc", "desc"] = Field(
|
||||
default="desc",
|
||||
description="Sort order.",
|
||||
alias="sort_order",
|
||||
)
|
||||
limit: NonNegativeInt = Field(
|
||||
default=1000,
|
||||
description=QUERY_DESCRIPTIONS.get("limit", ""),
|
||||
alias="page_size",
|
||||
)
|
||||
|
||||
|
||||
class IntrinioMarketIndicesData(MarketIndicesData):
|
||||
"""Intrinio Market Indices Data."""
|
||||
|
||||
__alias_dict__ = {"close": "value"}
|
||||
|
||||
|
||||
class IntrinioMarketIndicesFetcher(
|
||||
Fetcher[
|
||||
IntrinioMarketIndicesQueryParams,
|
||||
List[IntrinioMarketIndicesData],
|
||||
]
|
||||
):
|
||||
"""Transform the query, extract and transform the data from the Intrinio endpoints."""
|
||||
|
||||
@staticmethod
|
||||
def transform_query(params: Dict[str, Any]) -> IntrinioMarketIndicesQueryParams:
|
||||
"""Transform the query params."""
|
||||
transformed_params = params
|
||||
|
||||
now = datetime.now().date()
|
||||
if params.get("start_date") is None:
|
||||
transformed_params["start_date"] = now - relativedelta(years=1)
|
||||
|
||||
if params.get("end_date") is None:
|
||||
transformed_params["end_date"] = now
|
||||
|
||||
return IntrinioMarketIndicesQueryParams(**transformed_params)
|
||||
|
||||
@staticmethod
|
||||
async def aextract_data(
|
||||
query: IntrinioMarketIndicesQueryParams,
|
||||
credentials: Optional[Dict[str, str]],
|
||||
**kwargs: Any,
|
||||
) -> List[Dict]:
|
||||
"""Return the raw data from the Intrinio endpoint."""
|
||||
api_key = credentials.get("intrinio_api_key") if credentials else ""
|
||||
|
||||
base_url = "https://api-v2.intrinio.com/indices/stock_market"
|
||||
query_str = get_querystring(query.model_dump(by_alias=True), ["symbol", "tag"])
|
||||
url = f"{base_url}/{query.symbol}/historical_data/{query.tag}?{query_str}&api_key={api_key}"
|
||||
|
||||
return await get_data_many(url, "historical_data", **kwargs)
|
||||
|
||||
@staticmethod
|
||||
def transform_data(
|
||||
query: IntrinioMarketIndicesQueryParams, # pylint: disable=unused-argument
|
||||
data: List[Dict],
|
||||
**kwargs: Any,
|
||||
) -> List[IntrinioMarketIndicesData]:
|
||||
"""Return the transformed data."""
|
||||
return [IntrinioMarketIndicesData.model_validate(d) for d in data]
|
||||
@@ -1,52 +0,0 @@
|
||||
interactions:
|
||||
- request:
|
||||
body: null
|
||||
headers:
|
||||
Accept:
|
||||
- '*/*'
|
||||
Accept-Encoding:
|
||||
- gzip, deflate, br
|
||||
Connection:
|
||||
- keep-alive
|
||||
method: GET
|
||||
uri: https://api-v2.intrinio.com/indices/stock_market/$DJI/historical_data/level?api_key=MOCK_API_KEY&end_date=2023-06-06&page_size=1000&sort_order=desc&start_date=2023-01-01
|
||||
response:
|
||||
body:
|
||||
string: !!binary |
|
||||
H4sIAGQlZWUAA3RYTW8bRwz9K4LQoz0YkvPpm4FckkMubS8tCmFjbRoB8iqVVm4cI/+93KRFlzPP
|
||||
gA6W9oEzfOQj3/pl++lwmU/nw8Nw3O2Hedje/f6y1T/G7d2WPcutT/rZ3myfhuNVfxSJWRyXbzc9
|
||||
LBpYYlcSgvEalhWWIYzWMJ/IxdzB4q2sYVx9cQxh3kQLemifQrzl+j9suh6PCGLI8FWcBARbk8E5
|
||||
BZciggUDq9VVRjAxh8boIiGYoZZLchFlSXUNC5xcEgQrpp4SXUWHUrbRvMuoAmR5I3aEeCPTRBKK
|
||||
65tDUSZR8d4lRBuRhVVMG3mbKDlBfPhq+5tcQdG8oS2RZlARzCSacnCCauXXDSLE2WVEmzcNEig4
|
||||
hjDDWyrBRZjpmrfgI7m+ouGWi0HV4qivlcJMfxTtNgxLtlbKLjzUDhnxrvQZBKsrKTm6ng5Fmf4o
|
||||
OjwqvJrpj6yyAt0WGlmVmp3v+yM0sqoZqi80sqolO+r7Q2E2Ub1bQLSRmFpxRU0ZGl2loAMEoajt
|
||||
ogyDWVkt0wjR5leJwpkbmgUUSnSMDrSSCkWHPDzQUKZkIOWFRlJJG5J6MsQuIB3h4RXYmgwusTrf
|
||||
V13MAtJglMH4E6s8lqpqR2ca5XEQdr5PVJodxJLRUBC7g5h8fOXQdQuxV4FSrwKx0uOYPE7UsMYh
|
||||
oIUmVitUdDJXCEs2mjYkysCsICpaUeA8xCqPKaIRI1Z4VKiitSdWK1R1UyUEMyuIOQZkscSuIHUV
|
||||
BV7NZ9uSOjpgMCs+3Y4BRjNykepdRazZDeS9YHLNBuK07Nr+UG6EkDSFPhg3OihFtdePD250UCgh
|
||||
L8aNF6MoyBZx48V8iK8casYH6WCOELbqDzgkuVkYy54FI54bH5ZqcqUXAVsRBOLiPIStOQteqQX2
|
||||
m5v1w0pG7UcMNxujpFeiWSOW1DSXXu7cGLEaKtrHbGUQKL7Cm5VBqeQ86g4rg6pVwIey4W1pItTf
|
||||
jRGrjAwK2R2kVdBD+2jUvAQtywW0JDWGreaC1gY1hm2hN/SZUmPYchCkZGoMWxbBmVrxpUUuEGYy
|
||||
lcX+oUytY/PLekHRrGNjlQy8W+PYyCNlkREglDI1chF1KAlRa9xaIBUfGLnU2LWqr++gJakRX/Zq
|
||||
ZACqeQlaDApK0qolqQuAGRjHxlVhsNWsY2OdC+AVkxrtkSQnEMZNAf642R6m/fhle/eyPewVqd92
|
||||
/PXp/dd7RV6eHz+cjvrrT2/evdXv0/C4RHtz+nvz7jSNl83baX+9zOfDcNzcP43n4c9RUQ+naT5M
|
||||
4zQr9P3pPH/a3D+Oy79Zvj+7TvP5WZ/8Oh3mcb/5edYbXjanjyvQ9fNy7d3H8/jXdZweFvR+OByf
|
||||
9dFxuMy7H8/3/+VFi9J+8XS3fLTC3v+myNOHy3h+GubDadpd5uE8f4fTv/AGME4mWth+02THL/Pu
|
||||
85LSD6r+AQAA//8DAAVlFaAwEgAA
|
||||
headers:
|
||||
Connection:
|
||||
- keep-alive
|
||||
Content-Encoding:
|
||||
- gzip
|
||||
Content-Type:
|
||||
- application/json
|
||||
Date:
|
||||
- Mon, 27 Nov 2023 23:25:24 GMT
|
||||
Transfer-Encoding:
|
||||
- chunked
|
||||
Vary:
|
||||
- Origin,Accept-Encoding
|
||||
status:
|
||||
code: 200
|
||||
message: OK
|
||||
version: 1
|
||||
@@ -1,52 +0,0 @@
|
||||
interactions:
|
||||
- request:
|
||||
body: null
|
||||
headers:
|
||||
Accept:
|
||||
- application/json
|
||||
Accept-Encoding:
|
||||
- gzip, deflate
|
||||
Connection:
|
||||
- keep-alive
|
||||
method: GET
|
||||
uri: https://api-v2.intrinio.com/indices/stock_market/$DJI/historical_data/level?api_key=MOCK_API_KEY&end_date=2023-06-06&page_size=1000&sort_order=desc&start_date=2023-01-01
|
||||
response:
|
||||
body:
|
||||
string: !!binary |
|
||||
H4sIAGs7fWYAA3RYTW8bRwz9K8KiR3swJOfTNwO5JIdc2l5aFIJibRIB8iqVVm4cI/+93KRAlzPP
|
||||
gA+W9oEcvuEj3+pl+Hy4zKfz4WF33O538264+/Nl0H/G4W5gz3Lrk/4NN8PT7njVL0ViFsfl+00P
|
||||
iwaW2JWEYLyGZYVlCKM1zCdyMXeweCtrGFdfHEOYN9GCJu1LiLdc/4dN1+MRQQwZvoqTgGBrMjin
|
||||
4FJEsGBgtbrKCCYmaYwuEoIZarkkF1GVVNewwMklQbBi7lOiqygpZRvNu4xugCxvxI4Qb2SaSEJx
|
||||
fXMoyhQq3ruEaCOysIppI28LJSeID19tf5MrKJo3tCXSCiqCmUJTDk7QXfl1gwhxdhnR5k2DBAqO
|
||||
IczwlkpwEVa65i34SK6/0XDLxaBqcdTflcJMfxTtNgxL9q6UXZjUDhnxrvQVBKsrKTm6ng5Fmf4o
|
||||
OjwqPJrpj6yyAt0WGlmVmp3v+yM0sqoZqi80sqolO+r7Q2G2UD1bQLSRmLviipoyNLpKQQcIQlHb
|
||||
RRkGs7JaphGiza8KhTM3NAsolOgYJbSSCkWHPExoKFMykPJCI6mkDUk9GWIXkI7w8ApsTQaXWJ3v
|
||||
b13MAtJglMH4E6s8lqpqRzmN8jgIO98XKs0OYsloKIjdQUw+vpJ03ULsVaDUq0Cs9Dgmjws1rHEI
|
||||
aKGJ1QoVncwVwpKNpg2JKjAriIreKHAeYpXHFNGIESs8KlTR2hOrFaq6qRKCmRXEHAOyWGJXkLqK
|
||||
Ao/ms21JHR0wmBWfbscAoxm5SPWuItbsBvJeMLlmA3Fadm2flBshJC2hD8aNDkpR7fXjgxsdFErI
|
||||
i3HjxSgKskXceDEf4itJzfggHcwRwlb9AYckNwtj2bNgxHPjw1JNrvQiYCuCQFych7A1Z8ErtcB+
|
||||
c7N+WMmo/YjhZmOU9Eo0a8SSmubSy50bI1ZDRfuYrQwCxVd4szIolZxH3WFlUPUWcFI2vC1NhPq7
|
||||
MWKVkUEhu4P0FjRpH42al6BluYCWpMaw1VzQ2qDGsC30hr5SagxbDoKUTI1hyyK4Uiu+tMgFwkyl
|
||||
stg/VKl1bH5ZLyiadWyskoFnaxwbeaQsMgKEUqZGLqIOJSFqjVsLpOIDI5cau1b19R20JDXiy16N
|
||||
DEA1L0GLQUFFWrUkdQGwAuPYuCoMtpp1bKxzAbxiUqM9kuQEwri5gL9uhsO0H78Ody/DYa9I/bTl
|
||||
b0/vv90r8vL8+OF01G9/efPurX6edo9LtDenfzbvTtN42byd9tfLfD7sjpv7p/G8+zQq6uE0zYdp
|
||||
nGaFvj+d58+b+8dx+Znlx7PrNJ+f9cnv02Ee95tfZz3hZXP6uAJdvyzH3n48j39fx+lhQe93h+Oz
|
||||
PjruLvP25/P9z7oWi6y6/c37O6K7oML2/g9Fnj5cxvPTbj6cpu1l3p3nH3D6D94AxslES8N3LXb8
|
||||
Om+/LCX9pOpfAAAA//8DALlCfsAwEgAA
|
||||
headers:
|
||||
Connection:
|
||||
- keep-alive
|
||||
Content-Encoding:
|
||||
- gzip
|
||||
Content-Type:
|
||||
- application/json
|
||||
Date:
|
||||
- Thu, 27 Jun 2024 10:14:03 GMT
|
||||
Transfer-Encoding:
|
||||
- chunked
|
||||
Vary:
|
||||
- Origin,Accept-Encoding
|
||||
status:
|
||||
code: 200
|
||||
message: OK
|
||||
version: 1
|
||||
@@ -53,7 +53,6 @@ from openbb_intrinio.models.insider_trading import IntrinioInsiderTradingFetcher
|
||||
# )
|
||||
from openbb_intrinio.models.key_metrics import IntrinioKeyMetricsFetcher
|
||||
from openbb_intrinio.models.latest_attributes import IntrinioLatestAttributesFetcher
|
||||
from openbb_intrinio.models.market_indices import IntrinioMarketIndicesFetcher
|
||||
from openbb_intrinio.models.market_snapshots import IntrinioMarketSnapshotsFetcher
|
||||
from openbb_intrinio.models.options_chains import IntrinioOptionsChainsFetcher
|
||||
from openbb_intrinio.models.options_snapshots import IntrinioOptionsSnapshotsFetcher
|
||||
@@ -300,21 +299,6 @@ def test_intrinio_equity_info_fetcher(credentials=test_credentials):
|
||||
assert result is None
|
||||
|
||||
|
||||
@pytest.mark.record_http
|
||||
def test_intrinio_market_indices_fetcher(credentials=test_credentials):
|
||||
"""Test market indices fetcher."""
|
||||
params = {
|
||||
"symbol": "$DJI",
|
||||
"tag": "level",
|
||||
"start_date": date(2023, 1, 1),
|
||||
"end_date": date(2023, 6, 6),
|
||||
}
|
||||
|
||||
fetcher = IntrinioMarketIndicesFetcher()
|
||||
result = fetcher.test(params, credentials)
|
||||
assert result is None
|
||||
|
||||
|
||||
@pytest.mark.record_http
|
||||
def test_intrinio_index_historical_fetcher(credentials=test_credentials):
|
||||
"""Test index historical fetcher."""
|
||||
|
||||
@@ -36,7 +36,6 @@ company financials, stock market holidays, corporate actions, and more.""",
|
||||
"EtfHistorical": PolygonEquityHistoricalFetcher,
|
||||
"IncomeStatement": PolygonIncomeStatementFetcher,
|
||||
"IndexHistorical": PolygonIndexHistoricalFetcher,
|
||||
"MarketIndices": PolygonIndexHistoricalFetcher,
|
||||
"MarketSnapshots": PolygonMarketSnapshotsFetcher,
|
||||
},
|
||||
repr_name="Polygon.io",
|
||||
|
||||
@@ -1,118 +0,0 @@
|
||||
"""Polygon Market Indices Model."""
|
||||
|
||||
from datetime import (
|
||||
datetime,
|
||||
)
|
||||
from typing import Any, Dict, List, Literal, Optional
|
||||
|
||||
from openbb_core.provider.abstract.fetcher import Fetcher
|
||||
from openbb_core.provider.standard_models.market_indices import (
|
||||
MarketIndicesData,
|
||||
MarketIndicesQueryParams,
|
||||
)
|
||||
from openbb_core.provider.utils.descriptions import QUERY_DESCRIPTIONS
|
||||
from pydantic import Field, PositiveInt
|
||||
|
||||
|
||||
class PolygonMarketIndicesQueryParams(MarketIndicesQueryParams):
|
||||
"""Polygon Market Indices Query.
|
||||
|
||||
Source: https://polygon.io/docs/indices/getting-started
|
||||
"""
|
||||
|
||||
timespan: Literal["minute", "hour", "day", "week", "month", "quarter", "year"] = (
|
||||
Field(default="day", description="Timespan of the data.")
|
||||
)
|
||||
sort: Literal["asc", "desc"] = Field(
|
||||
default="desc", description="Sort order of the data."
|
||||
)
|
||||
limit: PositiveInt = Field(
|
||||
default=49999, description=QUERY_DESCRIPTIONS.get("limit", "")
|
||||
)
|
||||
adjusted: bool = Field(default=True, description="Whether the data is adjusted.")
|
||||
multiplier: PositiveInt = Field(
|
||||
default=1, description="Multiplier of the timespan."
|
||||
)
|
||||
|
||||
|
||||
class PolygonMarketIndicesData(MarketIndicesData):
|
||||
"""Polygon Market Indices Data."""
|
||||
|
||||
__alias_dict__ = {
|
||||
"date": "t",
|
||||
"open": "o",
|
||||
"high": "h",
|
||||
"low": "l",
|
||||
"close": "c",
|
||||
"volume": "v",
|
||||
"vwap": "vw",
|
||||
}
|
||||
|
||||
transactions: Optional[PositiveInt] = Field(
|
||||
default=None,
|
||||
description="Number of transactions for the symbol in the time period.",
|
||||
alias="n",
|
||||
)
|
||||
|
||||
|
||||
class PolygonMarketIndicesFetcher(
|
||||
Fetcher[
|
||||
PolygonMarketIndicesQueryParams,
|
||||
List[PolygonMarketIndicesData],
|
||||
]
|
||||
):
|
||||
"""Polygon Market Indices Fetcher."""
|
||||
|
||||
@staticmethod
|
||||
def transform_query(params: Dict[str, Any]) -> PolygonMarketIndicesQueryParams:
|
||||
"""Transform the query params."""
|
||||
# pylint: disable=import-outside-toplevel
|
||||
from dateutil.relativedelta import relativedelta
|
||||
|
||||
now = datetime.now().date()
|
||||
transformed_params = params
|
||||
if params.get("start_date") is None:
|
||||
transformed_params["start_date"] = now - relativedelta(years=1)
|
||||
|
||||
if params.get("end_date") is None:
|
||||
transformed_params["end_date"] = now
|
||||
|
||||
return PolygonMarketIndicesQueryParams(**transformed_params)
|
||||
|
||||
@staticmethod
|
||||
async def aextract_data(
|
||||
query: PolygonMarketIndicesQueryParams,
|
||||
credentials: Optional[Dict[str, str]],
|
||||
**kwargs: Any,
|
||||
) -> dict:
|
||||
"""Extract raw data from the Polygon endpoint."""
|
||||
# pylint: disable=import-outside-toplevel
|
||||
from openbb_core.provider.utils.helpers import safe_fromtimestamp
|
||||
from openbb_polygon.utils.helpers import get_data_many
|
||||
|
||||
api_key = credentials.get("polygon_api_key") if credentials else ""
|
||||
|
||||
request_url = (
|
||||
f"https://api.polygon.io/v2/aggs/ticker/"
|
||||
f"I:{query.symbol}/range/{query.multiplier}/{query.timespan}/"
|
||||
f"{query.start_date}/{query.end_date}?adjusted={query.adjusted}"
|
||||
f"&sort={query.sort}&limit={query.limit}&apiKey={api_key}"
|
||||
)
|
||||
data = await get_data_many(request_url, "results", **kwargs)
|
||||
|
||||
for d in data:
|
||||
v = d["t"] / 1000 # milliseconds to seconds
|
||||
d["t"] = safe_fromtimestamp(v)
|
||||
if query.timespan not in ["minute", "hour"]:
|
||||
d["t"] = d["t"].date()
|
||||
|
||||
return data
|
||||
|
||||
@staticmethod
|
||||
def transform_data(
|
||||
query: PolygonMarketIndicesQueryParams,
|
||||
data: dict,
|
||||
**kwargs: Any,
|
||||
) -> List[PolygonMarketIndicesData]:
|
||||
"""Transform the data."""
|
||||
return [PolygonMarketIndicesData.model_validate(d) for d in data]
|
||||
@@ -1,79 +0,0 @@
|
||||
interactions:
|
||||
- request:
|
||||
body: null
|
||||
headers:
|
||||
Accept:
|
||||
- '*/*'
|
||||
Accept-Encoding:
|
||||
- gzip, deflate
|
||||
Connection:
|
||||
- keep-alive
|
||||
method: GET
|
||||
uri: https://api.polygon.io/v2/aggs/ticker/I:NDX/range/1/day/2023-01-01/2023-05-10?adjusted=True&apiKey=MOCK_API_KEY&limit=49999&sort=desc
|
||||
response:
|
||||
body:
|
||||
string: !!binary |
|
||||
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
|
||||
6MuXkeHjdjyvr+B//C8AAP//XVlGICgXAAA=
|
||||
headers:
|
||||
Connection:
|
||||
- keep-alive
|
||||
Content-Encoding:
|
||||
- gzip
|
||||
Content-Type:
|
||||
- application/json
|
||||
Date:
|
||||
- Tue, 26 Sep 2023 19:08:14 GMT
|
||||
Server:
|
||||
- nginx/1.19.2
|
||||
Strict-Transport-Security:
|
||||
- max-age=15724800; includeSubDomains
|
||||
Transfer-Encoding:
|
||||
- chunked
|
||||
Vary:
|
||||
- Accept-Encoding
|
||||
X-Request-Id:
|
||||
- c575e02a0c39113007f40f41a2ea4115
|
||||
status:
|
||||
code: 200
|
||||
message: OK
|
||||
version: 1
|
||||
@@ -1,79 +0,0 @@
|
||||
interactions:
|
||||
- request:
|
||||
body: null
|
||||
headers:
|
||||
Accept:
|
||||
- application/json
|
||||
Accept-Encoding:
|
||||
- gzip, deflate
|
||||
Connection:
|
||||
- keep-alive
|
||||
method: GET
|
||||
uri: https://api.polygon.io/v2/aggs/ticker/I:NDX/range/1/day/2023-01-01/2023-05-10?adjusted=True&apiKey=MOCK_API_KEY&limit=49999&sort=desc
|
||||
response:
|
||||
body:
|
||||
string: !!binary |
|
||||
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
|
||||
6j94y9PxcDytr+C//xEAAP//Ujf+pSgXAAA=
|
||||
headers:
|
||||
Connection:
|
||||
- keep-alive
|
||||
Content-Encoding:
|
||||
- gzip
|
||||
Content-Type:
|
||||
- application/json
|
||||
Date:
|
||||
- Thu, 27 Jun 2024 10:14:47 GMT
|
||||
Server:
|
||||
- nginx/1.19.2
|
||||
Strict-Transport-Security:
|
||||
- max-age=15724800; includeSubDomains
|
||||
Transfer-Encoding:
|
||||
- chunked
|
||||
Vary:
|
||||
- Accept-Encoding
|
||||
X-Request-Id:
|
||||
- d796bbcbe18450171f812290e24a491c
|
||||
status:
|
||||
code: 200
|
||||
message: OK
|
||||
version: 1
|
||||
@@ -17,9 +17,6 @@ from openbb_polygon.models.income_statement import PolygonIncomeStatementFetcher
|
||||
from openbb_polygon.models.index_historical import (
|
||||
PolygonIndexHistoricalFetcher,
|
||||
)
|
||||
from openbb_polygon.models.market_indices import (
|
||||
PolygonMarketIndicesFetcher,
|
||||
)
|
||||
from openbb_polygon.models.market_snapshots import PolygonMarketSnapshotsFetcher
|
||||
|
||||
test_credentials = UserService().default_user_settings.credentials.model_dump(
|
||||
@@ -53,20 +50,6 @@ def test_polygon_equity_historical_fetcher(credentials=test_credentials):
|
||||
assert result is None
|
||||
|
||||
|
||||
@pytest.mark.record_http
|
||||
def test_polygon_market_indices_fetcher(credentials=test_credentials):
|
||||
"""Test the Polygon Market Indices fetcher."""
|
||||
params = {
|
||||
"symbol": "NDX",
|
||||
"start_date": date(2023, 1, 1),
|
||||
"end_date": date(2023, 5, 10),
|
||||
}
|
||||
|
||||
fetcher = PolygonMarketIndicesFetcher()
|
||||
result = fetcher.test(params, credentials)
|
||||
assert result is None
|
||||
|
||||
|
||||
@pytest.mark.record_http
|
||||
def test_polygon_index_historical_fetcher(credentials=test_credentials):
|
||||
"""Test the Polygon Index Historical fetcher."""
|
||||
|
||||
@@ -69,7 +69,6 @@ financial markets and assets.""",
|
||||
"IndexHistorical": YFinanceIndexHistoricalFetcher,
|
||||
"KeyExecutives": YFinanceKeyExecutivesFetcher,
|
||||
"KeyMetrics": YFinanceKeyMetricsFetcher,
|
||||
"MarketIndices": YFinanceIndexHistoricalFetcher,
|
||||
"OptionsChains": YFinanceOptionsChainsFetcher,
|
||||
"PriceTargetConsensus": YFinancePriceTargetConsensusFetcher,
|
||||
"ShareStatistics": YFinanceShareStatisticsFetcher,
|
||||
|
||||
@@ -1,141 +0,0 @@
|
||||
"""Yahoo Finance Market Indices Model."""
|
||||
|
||||
from datetime import datetime, timedelta
|
||||
from typing import Any, Dict, List, Optional
|
||||
|
||||
from openbb_core.provider.abstract.fetcher import Fetcher
|
||||
from openbb_core.provider.standard_models.market_indices import (
|
||||
MarketIndicesData,
|
||||
MarketIndicesQueryParams,
|
||||
)
|
||||
from openbb_core.provider.utils.descriptions import QUERY_DESCRIPTIONS
|
||||
from openbb_core.provider.utils.errors import EmptyDataError
|
||||
from openbb_yfinance.utils.references import INDICES, INTERVALS, PERIODS
|
||||
from pydantic import Field
|
||||
|
||||
|
||||
class YFinanceMarketIndicesQueryParams(MarketIndicesQueryParams):
|
||||
"""YFinance Market Indices Query.
|
||||
|
||||
Source: https://finance.yahoo.com/world-indices
|
||||
"""
|
||||
|
||||
__json_schema_extra__ = {"symbol": {"multiple_items_allowed": True}}
|
||||
|
||||
interval: Optional[INTERVALS] = Field(default="1d", description="Data granularity.")
|
||||
period: Optional[PERIODS] = Field(
|
||||
default="max", description=QUERY_DESCRIPTIONS.get("period", "")
|
||||
)
|
||||
prepost: bool = Field(default=True, description="Include Pre and Post market data.")
|
||||
rounding: bool = Field(default=True, description="Round prices to two decimals?")
|
||||
|
||||
|
||||
class YFinanceMarketIndicesData(MarketIndicesData):
|
||||
"""YFinance Market Indices Data."""
|
||||
|
||||
|
||||
class YFinanceMarketIndicesFetcher(
|
||||
Fetcher[
|
||||
YFinanceMarketIndicesQueryParams,
|
||||
List[YFinanceMarketIndicesData],
|
||||
]
|
||||
):
|
||||
"""Transform the query, extract and transform the data from the Yahoo Finance endpoints."""
|
||||
|
||||
@staticmethod
|
||||
def transform_query(params: Dict[str, Any]) -> YFinanceMarketIndicesQueryParams:
|
||||
"""Transform the query."""
|
||||
# pylint: disable=import-outside-toplevel
|
||||
from dateutil.relativedelta import relativedelta
|
||||
from pandas import DataFrame
|
||||
|
||||
transformed_params = params
|
||||
now = datetime.now().date()
|
||||
|
||||
if params.get("start_date") is None:
|
||||
transformed_params["start_date"] = now - relativedelta(years=1)
|
||||
|
||||
if params.get("end_date") is None:
|
||||
transformed_params["end_date"] = now
|
||||
|
||||
tickers = params.get("symbol", "").lower().split(",")
|
||||
|
||||
new_tickers = []
|
||||
for ticker in tickers:
|
||||
_ticker = ""
|
||||
indices = DataFrame(INDICES).transpose().reset_index()
|
||||
indices.columns = ["code", "name", "symbol"]
|
||||
|
||||
if ticker in indices["code"].values:
|
||||
_ticker = indices[indices["code"] == ticker]["symbol"].values[0]
|
||||
|
||||
if ticker.title() in indices["name"].values:
|
||||
_ticker = indices[indices["name"] == ticker.title()]["symbol"].values[0]
|
||||
|
||||
if "^" + ticker.upper() in indices["symbol"].values:
|
||||
_ticker = "^" + ticker.upper()
|
||||
|
||||
if ticker.upper() in indices["symbol"].values:
|
||||
_ticker = ticker.upper()
|
||||
|
||||
if _ticker != "":
|
||||
new_tickers.append(_ticker)
|
||||
|
||||
transformed_params["symbol"] = ",".join(new_tickers)
|
||||
|
||||
return YFinanceMarketIndicesQueryParams(**params)
|
||||
|
||||
# pylint: disable=unused-argument
|
||||
@staticmethod
|
||||
def extract_data(
|
||||
query: YFinanceMarketIndicesQueryParams,
|
||||
credentials: Optional[Dict[str, str]],
|
||||
**kwargs: Any,
|
||||
) -> List[dict]:
|
||||
"""Return the raw data from the Yahoo Finance endpoint."""
|
||||
# pylint: disable=import-outside-toplevel
|
||||
from openbb_yfinance.utils.helpers import yf_download
|
||||
from pandas import to_datetime
|
||||
|
||||
data = yf_download(
|
||||
symbol=query.symbol,
|
||||
start_date=query.start_date,
|
||||
end_date=query.end_date,
|
||||
interval=query.interval,
|
||||
period=query.period,
|
||||
prepost=query.prepost,
|
||||
rounding=query.rounding,
|
||||
)
|
||||
|
||||
if data.empty:
|
||||
raise EmptyDataError()
|
||||
|
||||
days = (
|
||||
1
|
||||
if query.interval in ["1m", "2m", "5m", "15m", "30m", "60m", "1h", "90m"]
|
||||
else 0
|
||||
)
|
||||
|
||||
if query.start_date:
|
||||
if "date" in data.columns:
|
||||
data.set_index("date", inplace=True)
|
||||
data.index = to_datetime(data.index)
|
||||
|
||||
data = data[
|
||||
(data.index >= to_datetime(query.start_date))
|
||||
& (data.index <= to_datetime(query.end_date + timedelta(days=days))) # type: ignore[operator]
|
||||
]
|
||||
|
||||
data.reset_index(inplace=True)
|
||||
data.rename(columns={"index": "date"}, inplace=True)
|
||||
|
||||
return data.to_dict("records")
|
||||
|
||||
@staticmethod
|
||||
def transform_data(
|
||||
query: YFinanceMarketIndicesQueryParams,
|
||||
data: dict,
|
||||
**kwargs: Any,
|
||||
) -> List[YFinanceMarketIndicesData]:
|
||||
"""Transform the data to the standard format."""
|
||||
return [YFinanceMarketIndicesData.model_validate(d) for d in data]
|
||||
@@ -1,265 +0,0 @@
|
||||
interactions:
|
||||
- request:
|
||||
body: null
|
||||
headers:
|
||||
Accept:
|
||||
- '*/*'
|
||||
Accept-Encoding:
|
||||
- gzip, deflate
|
||||
Connection:
|
||||
- keep-alive
|
||||
Cookie:
|
||||
- MOCK_COOKIE
|
||||
method: GET
|
||||
uri: https://query2.finance.yahoo.com/v8/finance/chart/%5EGSPC?crumb=MOCK_CRUMB&events=div%2Csplits%2CcapitalGains&includePrePost=True&interval=1d&period1=MOCK_PERIOD_1&period2=MOCK_PERIOD_2
|
||||
response:
|
||||
body:
|
||||
string: !!binary |
|
||||
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
|
||||
Cy1i/rgAAA==
|
||||
headers:
|
||||
Age:
|
||||
- '0'
|
||||
Connection:
|
||||
- keep-alive
|
||||
Referrer-Policy:
|
||||
- no-referrer-when-downgrade
|
||||
Strict-Transport-Security:
|
||||
- max-age=31536000
|
||||
Transfer-Encoding:
|
||||
- chunked
|
||||
X-Content-Type-Options:
|
||||
- nosniff
|
||||
X-Frame-Options:
|
||||
- SAMEORIGIN
|
||||
X-XSS-Protection:
|
||||
- 1; mode=block
|
||||
cache-control:
|
||||
- public, max-age=10, stale-while-revalidate=20
|
||||
content-encoding:
|
||||
- gzip
|
||||
content-type:
|
||||
- application/json;charset=utf-8
|
||||
date:
|
||||
- Thu, 24 Oct 2024 05:32:53 GMT
|
||||
server:
|
||||
- ATS
|
||||
vary:
|
||||
- Origin,Accept-Encoding
|
||||
x-envoy-decorator-operation:
|
||||
- finance-chart-api--mtls-production-gq1.finance-k8s.svc.yahoo.local:4080/*
|
||||
x-envoy-upstream-service-time:
|
||||
- '6'
|
||||
y-rid:
|
||||
- 33fn0d9jhjn05
|
||||
status:
|
||||
code: 200
|
||||
message: OK
|
||||
version: 1
|
||||
File diff suppressed because one or more lines are too long
@@ -30,9 +30,6 @@ from openbb_yfinance.models.index_historical import (
|
||||
from openbb_yfinance.models.key_executives import YFinanceKeyExecutivesFetcher
|
||||
from openbb_yfinance.models.key_metrics import YFinanceKeyMetricsFetcher
|
||||
from openbb_yfinance.models.losers import YFLosersFetcher
|
||||
from openbb_yfinance.models.market_indices import (
|
||||
YFinanceMarketIndicesFetcher,
|
||||
)
|
||||
from openbb_yfinance.models.options_chains import YFinanceOptionsChainsFetcher
|
||||
from openbb_yfinance.models.price_target_consensus import (
|
||||
YFinancePriceTargetConsensusFetcher,
|
||||
@@ -133,20 +130,6 @@ def test_y_finance_historical_dividends_fetcher(credentials=test_credentials):
|
||||
assert result is None
|
||||
|
||||
|
||||
@pytest.mark.record_http
|
||||
def test_y_finance_market_indices_fetcher(credentials=test_credentials):
|
||||
"""Test YFinanceMarketIndicesFetcher."""
|
||||
params = {
|
||||
"symbol": "^GSPC",
|
||||
"start_date": date(2023, 1, 1),
|
||||
"end_date": date(2023, 1, 10),
|
||||
}
|
||||
|
||||
fetcher = YFinanceMarketIndicesFetcher()
|
||||
result = fetcher.test(params, credentials)
|
||||
assert result is None
|
||||
|
||||
|
||||
@pytest.mark.record_http
|
||||
def test_y_finance_futures_historical_fetcher(credentials=test_credentials):
|
||||
"""Test YFinanceFuturesHistoricalFetcher."""
|
||||
|
||||
Reference in New Issue
Block a user