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)
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)
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)
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')
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)