def _get_output_data_source(self): return Mediator.get_database_source_picker().get_database_source( MarketRequest(data_store=self.data_store))
def fetch_table(self, data_request): """Fetches table from underlying DatabaseSource Parameters ---------- data_request : DataRequest Request for data with start/finish date etc. Returns ------- DataFrame """ # Fetch table from the underlying database (CSV, SQL or RESTful etc.) logger = LoggerManager().getLogger(__name__) data_norm = data_request.data_norm if data_norm is None: data_norm = Mediator.get_data_norm(version=self._version) # Where do we get data from? database_source = Mediator.get_database_source_picker( ).get_database_source(data_request) if database_source is None: Exception("User asked for an unsupported database source") # Extract the start/finish dates and ticker we wish to download data for start_date = data_request.start_date finish_date = data_request.finish_date ticker = data_request.ticker # Are we requesting market data or trade/order data of our own executions? if isinstance(data_request, MarketRequest): df = database_source.fetch_market_data( start_date=start_date, finish_date=finish_date, ticker=ticker, table_name=data_request.market_data_database_table) df = data_norm.normalize_market_data(df, None, data_request) elif isinstance(data_request, TradeRequest): trade_order_type = data_request.trade_order_type trade_order_mapping = data_request.trade_order_mapping trade_data_database_name = data_request.trade_data_database_name if data_request.data_store == 'csv' and trade_order_type != None and trade_order_mapping != None: df = database_source.fetch_trade_order_data( start_date=start_date, finish_date=finish_date, ticker=ticker, table_name=trade_order_mapping[trade_order_type]) elif trade_order_mapping is not None: df = database_source.fetch_trade_order_data( start_date=start_date, finish_date=finish_date, ticker=ticker, table_name=trade_order_mapping[trade_order_type], database_name=trade_data_database_name) else: # Otherwise we have a CSV file without any sort of mapping, which we assume only contains trade_df data df = database_source.fetch_trade_order_data( start_date=start_date, finish_date=finish_date, ticker=ticker) df = data_norm.normalize_trade_data(df, None, data_request) if df is None: pass if df is not None and df.empty: logger.warning('Dataframe empty for ticker ' + ticker) return df