Source code for analysis_engine.iex.extract_df_from_redis

"""
Extract an IEX dataset from Redis and
return it as a ``pandas.DataFrame`` or None

Please refer to the `Extraction API reference
for additional support <https://stock-analysis-engine.readthedocs.io/
en/latest/extract.html>`__

"""

import copy
import analysis_engine.consts as ae_consts
import analysis_engine.utils as ae_utils
import analysis_engine.api_requests as api_requests
import analysis_engine.iex.consts as iex_consts
import analysis_engine.extract_utils as extract_utils
import spylunking.log.setup_logging as log_utils

log = log_utils.build_colorized_logger(name=__name__)
keys = {
    'company': iex_consts.DATAFEED_COMPANY,
    'daily': iex_consts.DATAFEED_DAILY,
    'dividends': iex_consts.DATAFEED_DIVIDENDS,
    'earnings': iex_consts.DATAFEED_EARNINGS,
    'financials': iex_consts.DATAFEED_FINANCIALS,
    'minute': iex_consts.DATAFEED_MINUTE,
    'news1': iex_consts.DATAFEED_NEWS,
    'peers': iex_consts.DATAFEED_PEERS,
    'quote': iex_consts.DATAFEED_QUOTE,
    'stats': iex_consts.DATAFEED_STATS
}


[docs]def extract_daily_dataset( ticker=None, date=None, work_dict=None, scrub_mode='sort-by-date', verbose=False): """extract_daily_dataset Extract the IEX daily data for a ticker from Redis and return it as a tuple (status, ``pandas.Dataframe``) .. code-block:: python import analysis_engine.iex.extract_df_from_redis as iex_extract # extract by historical date is also supported as an arg # date='2019-02-15' daily_status, daily_df = iex_extract.extract_daily_dataset( ticker='SPY') print(daily_df) :param ticker: string ticker to extract :param date: optional - string date to extract formatted ``YYYY-MM-DD`` :param work_dict: dictionary of args :param scrub_mode: type of scrubbing handler to run :param verbose: optional - boolean for turning on logging """ return extract_dataset( key='daily', work_dict=work_dict, ticker=ticker, date=date, scrub_mode=scrub_mode, verbose=verbose)
# end of extract_daily_dataset
[docs]def extract_minute_dataset( ticker=None, date=None, work_dict=None, scrub_mode='sort-by-date', verbose=False): """extract_minute_dataset Extract the IEX minute intraday data for a ticker from Redis and return it as a tuple (status, ``pandas.Dataframe``) .. code-block:: python import analysis_engine.iex.extract_df_from_redis as iex_extract # extract by historical date is also supported as an arg # date='2019-02-15' minute_status, minute_df = iex_extract.extract_minute_dataset( ticker='SPY') print(minute_df) :param ticker: string ticker to extract :param date: optional - string date to extract formatted ``YYYY-MM-DD`` :param scrub_mode: type of scrubbing handler to run :param work_dict: dictionary of args :param verbose: optional - boolean for turning on logging """ return extract_dataset( key='minute', work_dict=work_dict, ticker=ticker, date=date, scrub_mode=scrub_mode, verbose=verbose)
# end of extract_minute_dataset
[docs]def extract_quote_dataset( ticker=None, date=None, work_dict=None, scrub_mode='sort-by-date', verbose=False): """extract_quote_dataset Extract the IEX quote data for a ticker from Redis and return it as a tuple (status, ``pandas.Dataframe``) .. code-block:: python import analysis_engine.iex.extract_df_from_redis as iex_extract # extract by historical date is also supported as an arg # date='2019-02-15' quote_status, quote_df = iex_extract.extract_quote_dataset( ticker='SPY') print(quote_df) :param ticker: string ticker to extract :param date: optional - string date to extract formatted ``YYYY-MM-DD`` :param work_dict: dictionary of args :param scrub_mode: type of scrubbing handler to run :param verbose: optional - boolean for turning on logging """ return extract_dataset( key='quote', work_dict=work_dict, ticker=ticker, date=date, scrub_mode=scrub_mode, verbose=verbose)
# end of extract_quote_dataset
[docs]def extract_stats_dataset( ticker=None, date=None, work_dict=None, scrub_mode='sort-by-date', verbose=False): """extract_stats_dataset Extract the IEX statistics data for a ticker from Redis and return it as a tuple (status, ``pandas.Dataframe``) .. code-block:: python import analysis_engine.iex.extract_df_from_redis as iex_extract # extract by historical date is also supported as an arg # date='2019-02-15' stats_status, stats_df = iex_extract.extract_stats_dataset( ticker='SPY') print(stats_df) :param ticker: string ticker to extract :param date: optional - string date to extract formatted ``YYYY-MM-DD`` :param work_dict: dictionary of args :param scrub_mode: type of scrubbing handler to run :param verbose: optional - boolean for turning on logging """ return extract_dataset( key='stats', work_dict=work_dict, ticker=ticker, date=date, scrub_mode=scrub_mode, verbose=verbose)
# end of extract_stats_dataset
[docs]def extract_peers_dataset( ticker=None, date=None, work_dict=None, scrub_mode='sort-by-date', verbose=False): """extract_peers_dataset Extract the IEX peers data for a ticker from Redis and return it as a tuple (status, ``pandas.Dataframe``) .. code-block:: python import analysis_engine.iex.extract_df_from_redis as iex_extract # extract by historical date is also supported as an arg # date='2019-02-15' peers_status, peers_df = iex_extract.extract_peers_dataset( ticker='SPY') print(peers_df) :param ticker: string ticker to extract :param date: optional - string date to extract formatted ``YYYY-MM-DD`` :param work_dict: dictionary of args :param scrub_mode: type of scrubbing handler to run :param verbose: optional - boolean for turning on logging """ return extract_dataset( key='peers', work_dict=work_dict, ticker=ticker, date=date, scrub_mode=scrub_mode, verbose=verbose)
# end of extract_peers_dataset
[docs]def extract_news_dataset( ticker=None, date=None, work_dict=None, scrub_mode='sort-by-date', verbose=False): """extract_news_dataset Extract the IEX news data for a ticker from Redis and return it as a tuple (status, ``pandas.Dataframe``) .. code-block:: python import analysis_engine.iex.extract_df_from_redis as iex_extract # extract by historical date is also supported as an arg # date='2019-02-15' news_status, news_df = iex_extract.extract_news_dataset( ticker='SPY') print(news_df) :param ticker: string ticker to extract :param date: optional - string date to extract formatted ``YYYY-MM-DD`` :param work_dict: dictionary of args :param scrub_mode: type of scrubbing handler to run :param verbose: optional - boolean for turning on logging """ return extract_dataset( key='news1', work_dict=work_dict, ticker=ticker, date=date, scrub_mode=scrub_mode, verbose=verbose)
# end of extract_news_dataset
[docs]def extract_financials_dataset( ticker=None, date=None, work_dict=None, scrub_mode='sort-by-date', verbose=False): """extract_financials_dataset Extract the IEX financial data for a ticker from Redis and return it as a tuple (status, ``pandas.Dataframe``) .. code-block:: python import analysis_engine.iex.extract_df_from_redis as iex_extract # extract by historical date is also supported as an arg # date='2019-02-15' fin_status, fin_df = iex_extract.extract_financials_dataset( ticker='SPY') print(fin_df) :param ticker: string ticker to extract :param date: optional - string date to extract formatted ``YYYY-MM-DD`` :param work_dict: dictionary of args :param scrub_mode: type of scrubbing handler to run :param verbose: optional - boolean for turning on logging """ return extract_dataset( key='financials', work_dict=work_dict, ticker=ticker, date=date, scrub_mode=scrub_mode, verbose=verbose)
# end of extract_financials_dataset
[docs]def extract_earnings_dataset( ticker=None, date=None, work_dict=None, scrub_mode='sort-by-date', verbose=False): """extract_earnings_dataset Extract the IEX earnings data for a ticker from Redis and return it as a tuple (status, ``pandas.Dataframe``) .. code-block:: python import analysis_engine.iex.extract_df_from_redis as iex_extract # extract by historical date is also supported as an arg # date='2019-02-15' earn_status, earn_df = iex_extract.extract_earnings_dataset( ticker='SPY') print(earn_df) :param ticker: string ticker to extract :param date: optional - string date to extract formatted ``YYYY-MM-DD`` :param work_dict: dictionary of args :param scrub_mode: type of scrubbing handler to run :param verbose: optional - boolean for turning on logging """ return extract_dataset( key='earnings', work_dict=work_dict, ticker=ticker, date=date, scrub_mode=scrub_mode, verbose=verbose)
# end of extract_earnings_dataset
[docs]def extract_dividends_dataset( ticker=None, date=None, work_dict=None, scrub_mode='sort-by-date', verbose=False): """extract_dividends_dataset Extract the IEX dividends data for a ticker from Redis and return it as a tuple (status, ``pandas.Dataframe``) .. code-block:: python import analysis_engine.iex.extract_df_from_redis as iex_extract # extract by historical date is also supported as an arg # date='2019-02-15' div_status, div_df = iex_extract.extract_dividends_dataset( ticker='SPY') print(div_df) :param ticker: string ticker to extract :param date: optional - string date to extract formatted ``YYYY-MM-DD`` :param work_dict: dictionary of args :param scrub_mode: type of scrubbing handler to run :param verbose: optional - boolean for turning on logging """ return extract_dataset( key='dividends', work_dict=work_dict, ticker=ticker, date=date, scrub_mode=scrub_mode, verbose=verbose)
# end of extract_dividends_dataset
[docs]def extract_company_dataset( ticker=None, date=None, work_dict=None, scrub_mode='NO_SORT', verbose=False): """extract_company_dataset Extract the IEX company data for a ticker from Redis and return it as a tuple (status, ``pandas.Dataframe``) .. code-block:: python import analysis_engine.iex.extract_df_from_redis as iex_extract # extract by historical date is also supported as an arg # date='2019-02-15' comp_status, comp_df = iex_extract.extract_company_dataset( ticker='SPY') print(comp_df) :param ticker: string ticker to extract :param date: optional - string date to extract formatted ``YYYY-MM-DD`` :param work_dict: dictionary of args :param scrub_mode: type of scrubbing handler to run :param verbose: optional - boolean for turning on logging """ return extract_dataset( key='company', work_dict=work_dict, ticker=ticker, date=date, scrub_mode=scrub_mode, verbose=verbose)
# end of extract_company_dataset def extract_dataset( key, ticker=None, date=None, work_dict=None, scrub_mode='NO_SORT', verbose=False): """extract_dataset Extract the IEX key data for a ticker from Redis and return it as a tuple (status, ``pandas.Dataframe``) :param key: IEX dataset key :param ticker: string ticker to extract :param date: optional - string date to extract formatted ``YYYY-MM-DD`` :param work_dict: dictionary of args :param scrub_mode: type of scrubbing handler to run :param verbose: optional - boolean for turning on logging """ if not key or key not in keys: log.error( f'unsupported extract key={key} in keys={keys}') return None label = key df_type = keys[key] df_str = iex_consts.get_datafeed_str(df_type=df_type) latest_close_date = ae_utils.get_last_close_str() use_date = date if work_dict: if not ticker: ticker = work_dict.get('ticker', None) if not work_dict: work_dict = api_requests.get_ds_dict( ticker=ticker) req = copy.deepcopy(work_dict) if not use_date: use_date = latest_close_date redis_key = f'{ticker}_{use_date}_{key}' req['redis_key'] = redis_key req['s3_key'] = redis_key if verbose: log.info( f'{label} - {df_str} - ' f'date={date} ' f'redis_key={req["redis_key"]} ' f's3_key={req["s3_key"]} ' f'{ae_consts.ppj(req)}') return extract_utils.perform_extract( df_type=df_type, df_str=df_str, work_dict=req, scrub_mode=scrub_mode, verbose=verbose) # end of extract_dataset