示例#1
0
 def _get_output_data_source(self):
     return Mediator.get_database_source_picker().get_database_source(
         MarketRequest(data_store=self.data_store))
示例#2
0
    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