class FinancialDataRangesCacheTestCase(unittest.TestCase):
    def setUp(self):
        self.mock_data_getter = mock.Mock()
        self.mock_db = mock.Mock()
        self.date_range_cache = FinancialIntervalCache(get_data=self.mock_data_getter,
                                                         database=self.mock_db)
        
    def test_get_cache_hit(self):
        symbol = 'ABC'
        date = datetime.datetime(2012, 12, 1)
        value = 100.
        self.mock_db.get.return_value = value
        cache_value = self.date_range_cache.get(symbol=symbol, dates=[date]).next()
        self.assertEqual(cache_value, value)

        
    def test_cache_miss(self):
        symbol = 'ABC'
        date = datetime.datetime(2012, 12, 1)
        self.mock_db.get.return_value = None
        mock_get_set = mock.Mock()
        self.date_range_cache._get_set = mock_get_set
        self.mock_db.get.return_value = None
        self.date_range_cache.get(symbol=symbol, dates=[date]).next()
        mock_get_set.assert_called_once_with(symbol=symbol, date=date)
 def setUp(self):
     super(MongoDataRangesIntegrationTestCase, self).setUp()
     self.mock_getter = mock.Mock()
     self.mongo_db = MongoIntervalseries(mongo_collection=self.collection,
                                         metric=self.metric)
     self.cache = FinancialIntervalCache(get_data=self.mock_getter,
                                         database=self.mongo_db)
class FinancialDataRangesCacheTestCase(unittest.TestCase):
    def setUp(self):
        self.mock_data_getter = mock.Mock()
        self.mock_db = mock.Mock()
        self.date_range_cache = FinancialIntervalCache(
            get_data=self.mock_data_getter, database=self.mock_db)

    def test_get_cache_hit(self):
        symbol = 'ABC'
        date = datetime.datetime(2012, 12, 1)
        value = 100.
        self.mock_db.get.return_value = value
        cache_value = self.date_range_cache.get(symbol=symbol,
                                                dates=[date]).next()
        self.assertEqual(cache_value, value)

    def test_cache_miss(self):
        symbol = 'ABC'
        date = datetime.datetime(2012, 12, 1)
        self.mock_db.get.return_value = None
        mock_get_set = mock.Mock()
        self.date_range_cache._get_set = mock_get_set
        self.mock_db.get.return_value = None
        self.date_range_cache.get(symbol=symbol, dates=[date]).next()
        mock_get_set.assert_called_once_with(symbol=symbol, date=date)
 def setUp(self):
     super(MongoDataRangesIntegrationTestCase, self).setUp()
     self.mock_getter = mock.Mock()
     self.mongo_db = MongoIntervalseries(mongo_collection=self.collection,
                                         metric=self.metric)
     self.cache = FinancialIntervalCache(get_data=self.mock_getter, 
                                           database=self.mongo_db)
class MongoDataRangesIntegrationTestCase(MongoTestCase):
    metric = 'price'
    collection_name = 'price'
    def setUp(self):
        super(MongoDataRangesIntegrationTestCase, self).setUp()
        self.mock_getter = mock.Mock()
        self.mongo_db = MongoIntervalseries(mongo_collection=self.collection,
                                            metric=self.metric)
        self.cache = FinancialIntervalCache(get_data=self.mock_getter, 
                                              database=self.mongo_db)
        
    def test_init(self):
        self.assertIs(self.cache._database, self.mongo_db)
    
    def test_set(self):
        price = 100.
        symbol = 'ABC'
        date = datetime.datetime(2012, 12, 15, tzinfo=pytz.UTC)
        range_start, range_end = datetime.datetime(2012, 12, 1), datetime.datetime(2012, 12, 31)
        self.mock_getter.return_value = (range_start,
                                         price,
                                         range_end)
        cache_price = self.cache.get(symbol=symbol, dates=[date]).next()
        self.assertEqual(cache_price, price)
        self.assertEqual(self.collection.find({'start' : range_start,
                                               'end' : range_end,
                                               'symbol' : symbol}).next()['price'], price)
class MongoDataRangesIntegrationTestCase(MongoTestCase):
    metric = 'price'

    def setUp(self):
        super(MongoDataRangesIntegrationTestCase, self).setUp()
        self.mock_getter = mock.Mock()
        self.mongo_db = MongoIntervalseries(mongo_collection=self.collection,
                                            metric=self.metric)
        self.cache = FinancialIntervalCache(get_data=self.mock_getter,
                                            database=self.mongo_db)

    def test_init(self):
        self.assertIs(self.cache._database, self.mongo_db)

    def test_set(self):
        price = 100.
        symbol = 'ABC'
        date = datetime.datetime(2012, 12, 15, tzinfo=pytz.UTC)
        range_start, range_end = datetime.datetime(2012, 12,
                                                   1), datetime.datetime(
                                                       2012, 12, 31)
        self.mock_getter.return_value = (range_start, price, range_end)
        cache_price = self.cache.get(symbol=symbol, dates=[date]).next()
        self.assertEqual(cache_price, price)
        self.assertEqual(
            self.collection.find({
                'start': range_start,
                'end': range_end,
                'symbol': symbol
            }).next()['price'], price)
示例#7
0
def mongo_fundamentals_cache(metric, mongo_host='localhost', mongo_port=27017,
                             filing_getter=HTMLEdgarDriver):
    mongo_client = pymongo.MongoClient(mongo_host, mongo_port)
    mongo_collection = mongo_client.fundamentals.fundamentals
    db = MongoIntervalseries(mongo_collection=mongo_collection, 
                         metric=metric.name)
    metric_getter = AccountingMetricGetter(metric=metric,
                                           filing_getter=filing_getter)
    cache = FinancialIntervalCache(get_data=metric_getter.get_data, database=db)
    return cache
 def test_border_behavior(self):
     '''Fundamentals were being inserted twice because of an off by one error.'''
     metric = QUARTERLY_EPS
     symbol = 'CSCO'
     connection = sqlite3.connect(':memory:', detect_types=sqlite3.PARSE_DECLTYPES)
     driver = SQLiteIntervalseries(connection=connection,
                                  table='fundamentals',
                                  metric=metric.name)
     metric_getter = AccountingMetricGetter(metric=metric, 
                                        filing_getter=HTMLEdgarDriver)
     cache = FinancialIntervalCache(get_data=metric_getter.get_data, database=driver)
     dates = {datetime.datetime(2010, 2, 17)}
     list(cache.get(symbol, dates=dates))
     
     count_query = "SELECT COUNT(*)  AS count FROM fundamentals WHERE symbol = '{}'".format(symbol)
     count = connection.execute(count_query).next()['count']
     self.assertEqual(count, 1)
     list(cache.get(symbol, dates=dates))
     count = connection.execute(count_query).next()['count']
     self.assertEqual(count, 1)
示例#9
0
 def test_border_behavior(self):
     '''Fundamentals were being inserted twice because of an off by one error.'''
     metric = accounting_metrics.QuarterlyEPS
     symbol = 'CSCO'
     connection = sqlite3.connect(':memory:', detect_types=sqlite3.PARSE_DECLTYPES)
     driver = SQLiteIntervalseries(connection=connection,
                                  table='fundamentals',
                                  metric=metric.name)
     metric_getter = AccountingMetricGetter(metric=metric, 
                                        filing_getter=HTMLEdgarDriver)
     cache = FinancialIntervalCache(get_data=metric_getter.get_data, database=driver)
     dates = {datetime.datetime(2010, 2, 17)}
     list(cache.get(symbol, dates=dates))
     
     count_query = "SELECT COUNT(*)  AS count FROM fundamentals WHERE symbol = '{}'".format(symbol)
     count = connection.execute(count_query).next()['count']
     self.assertEqual(count, 1)
     list(cache.get(symbol, dates=dates))
     count = connection.execute(count_query).next()['count']
     self.assertEqual(count, 1)
class FinancialDataRangesCacheTestCase(unittest.TestCase):
    def setUp(self):
        self.mock_data_getter = mock.Mock()
        self.mock_db = mock.Mock()
        self.date_range_cache = FinancialIntervalCache(get_data=self.mock_data_getter,
                                                         database=self.mock_db)
        
    def test_get_cache_hit(self):
        symbol = 'ABC'
        date = datetime.datetime(2012, 12, 1)
        value = 100.
        self.mock_db.get.return_value = value
        cache_value = self.date_range_cache.get(symbol=symbol, dates=[date]).next()
        self.assertEqual(cache_value, value)

        
    def test_cache_miss(self):
        symbol = 'ABC'
        date = datetime.datetime(2012, 12, 1)
        self.mock_db.get.return_value = None
        mock_get_set = mock.Mock()
        self.date_range_cache._get_set = mock_get_set
        self.mock_db.get.return_value = None
        self.date_range_cache.get(symbol=symbol, dates=[date]).next()
        mock_get_set.assert_called_once_with(symbol=symbol, date=date)
        
    def test_no_data_exception(self):
        symbol = 'XYZ'
        start_date, end_date = datetime.datetime(2012, 9, 1, tzinfo=pytz.UTC), datetime.datetime(2012, 12, 1, tzinfo=pytz.UTC)
        mock_getter = mock.Mock()
        mock_getter.side_effect = NoDataForStockForRange(start=start_date,
                                                         end=end_date)
        self.date_range_cache._get_data = mock_getter
        mock_database = mock.Mock()
        self.date_range_cache._database = mock_database
        value = self.date_range_cache._get_set(symbol=symbol, date=None) 
        self.assertTrue(np.isnan(value))
        mock_database.set_interval.assert_called_with(symbol=symbol,
                                                      start=start_date,
                                                      end=end_date,
                                                      value='NaN')
示例#11
0
def sqlite_fundamentals_cache(metric, 
                              db_file_path=DEFAULT_FUNDAMENTALS_PATH, 
                              filing_getter=HTMLEdgarDriver):
    connection = sqlite_drivers.SQLiteIntervalseries.connect(db_file_path)
    driver = sqlite_drivers.SQLiteIntervalseries(connection=connection,
                                                 table='fundamentals',
                                                 metric=metric.name)
    metric_getter = AccountingMetricGetter(metric=metric, 
                                           filing_getter=filing_getter)
    
    cache = FinancialIntervalCache(get_data=metric_getter.get_data, 
                                     database=driver)
    return cache
 def setUp(self):
     self.mock_data_getter = mock.Mock()
     self.mock_db = mock.Mock()
     self.date_range_cache = FinancialIntervalCache(get_data=self.mock_data_getter,
                                                      database=self.mock_db)
 def setUp(self):
     self.mock_data_getter = mock.Mock()
     self.mock_db = mock.Mock()
     self.date_range_cache = FinancialIntervalCache(
         get_data=self.mock_data_getter, database=self.mock_db)