90c267103a
Yahoo's markettime endpoint silently ignores the `market` parameter and
always returns U.S. data, so `Market("EUROPE").status` previously returned
U.S. status while pretending to be European. The summary endpoint does
honor the parameter and is unaffected.
- Introduce `MarketRegion(str, Enum)` as the single source of truth for
the supported region values, exposed as `yfinance.MarketRegion`.
- Validate `Market(...)` input against the enum and raise `ValueError`
on unknown regions.
- Detect the markettime mismatch: when a non-`US` region is requested
but the response id is `us`, set `status` to `None` and log a warning
rather than returning misleading data.
- Document the markettime limitation and add tests covering validation
and the EUROPE/US fetch behavior.
Closes #2784
62 lines
2.3 KiB
Python
62 lines
2.3 KiB
Python
#!/usr/bin/env python
|
|
# -*- coding: utf-8 -*-
|
|
#
|
|
# yfinance - market data downloader
|
|
# https://github.com/ranaroussi/yfinance
|
|
#
|
|
# Copyright 2017-2019 Ran Aroussi
|
|
#
|
|
# Licensed under the Apache License, Version 2.0 (the "License");
|
|
# you may not use this file except in compliance with the License.
|
|
# You may obtain a copy of the License at
|
|
#
|
|
# http://www.apache.org/licenses/LICENSE-2.0
|
|
#
|
|
# Unless required by applicable law or agreed to in writing, software
|
|
# distributed under the License is distributed on an "AS IS" BASIS,
|
|
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
# See the License for the specific language governing permissions and
|
|
# limitations under the License.
|
|
#
|
|
|
|
from . import version
|
|
from .search import Search
|
|
from .lookup import Lookup
|
|
from .ticker import Ticker
|
|
from .calendars import Calendars
|
|
from .tickers import Tickers
|
|
from .multi import download
|
|
from .live import WebSocket, AsyncWebSocket
|
|
from .utils import enable_debug_mode
|
|
from .cache import set_tz_cache_location
|
|
from .domain.sector import Sector
|
|
from .domain.industry import Industry
|
|
from .domain.market import Market, MarketRegion
|
|
from .config import YfConfig as config
|
|
from .data import Auth
|
|
|
|
from .screener.query import EquityQuery, FundQuery, ETFQuery
|
|
from .screener.screener import screen, PREDEFINED_SCREENER_QUERIES
|
|
|
|
__version__ = version.version
|
|
__author__ = "Ran Aroussi"
|
|
|
|
import warnings
|
|
warnings.filterwarnings('default', category=DeprecationWarning, module='^yfinance')
|
|
|
|
__all__ = ['download', 'Market', 'MarketRegion', 'Search', 'Lookup', 'Ticker', 'Tickers', 'enable_debug_mode', 'set_tz_cache_location',
|
|
'Sector', 'Industry', 'WebSocket', 'AsyncWebSocket', 'Calendars', 'Auth']
|
|
# screener stuff:
|
|
__all__ += ['EquityQuery', 'FundQuery', 'ETFQuery', 'screen', 'PREDEFINED_SCREENER_QUERIES']
|
|
|
|
# Config stuff:
|
|
_NOTSET=object()
|
|
def set_config(proxy=_NOTSET, retries=_NOTSET):
|
|
if proxy is not _NOTSET:
|
|
warnings.warn("Set proxy via new config control: yf.config.network.proxy = proxy", DeprecationWarning)
|
|
config.network.proxy = proxy
|
|
if retries is not _NOTSET:
|
|
warnings.warn("Set retries via new config control: yf.config.network.retries = retries", DeprecationWarning)
|
|
config.network.retries = retries
|
|
__all__ += ['config', 'set_config']
|