Skip to content

Commit cb146b2

Browse files
committed
refactor get_info and include the work from get_data_info
1 parent bfb67d4 commit cb146b2

12 files changed

+61
-69
lines changed

arctic/store/_base_store.py

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -8,5 +8,3 @@ def write(self, lib, version, symbol, item, previous_version):
88
def get_info(self, lib, version, symbol, **kwargs):
99
pass
1010

11-
def get_data_info(self, version):
12-
pass

arctic/store/_ndarray_store.py

Lines changed: 8 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -152,26 +152,20 @@ def _index_range(self, version, symbol, from_version=None, **kwargs):
152152
return from_index, None
153153

154154
def get_info(self, arctic_lib, version, symbol, **kwargs):
155+
ret = {}
155156
collection = arctic_lib.get_top_level_collection()
156-
dtype = self._dtype(version['dtype'], version.get('dtype_metadata', {}))
157-
length = int(version['up_to'])
157+
ret['dtype'] = self._dtype(version['dtype'], version.get('dtype_metadata', {}))
158+
ret['length'] = int(version['up_to'])
158159

159160
spec = {'symbol': symbol,
160161
'parent': version.get('base_version_id', version['_id']),
161-
'segment': {'$lt': length}}
162-
163-
n_segments = collection.find(spec).count()
164-
165-
est_size = dtype.itemsize * length
166-
return """Handler: %s
167-
168-
dtype: %s
162+
'segment': {'$lt': ret['length']}}
169163

170-
%d rows in %d segments
171-
Data size: %s bytes
164+
ret['n_segments'] = collection.find(spec).count()
172165

173-
Version document:
174-
%s""" % (self.__class__.__name__, dtype, length, n_segments, est_size, pprint.pformat(version))
166+
ret['est_size'] = ret['dtype'].itemsize * ret['length']
167+
ret['handler'] = self.__class__.__name__
168+
return ret
175169

176170
def read(self, arctic_lib, version, symbol, read_preference=None, **kwargs):
177171
index_range = self._index_range(version, symbol, **kwargs)

arctic/store/_pandas_ndarray_store.py

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -195,11 +195,10 @@ def read(self, arctic_lib, version, symbol, read_preference=None, date_range=Non
195195
item = self._daterange(item, date_range)
196196
return item
197197

198-
def get_data_info(self, version):
199-
ret = {}
198+
def get_info(self, arctic_lib, version, symbol, **kwargs):
199+
ret = super(PandasStore, self).get_info(arctic_lib, version, symbol, **kwargs)
200200
ret['type'] = version['type']
201201
ret['col_names'] = version['dtype_metadata']
202-
ret['col_dtypes'] = version['dtype']
203202
return ret
204203

205204

arctic/store/_pickle_store.py

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -22,11 +22,14 @@ def initialize_library(cls, *args, **kwargs):
2222
pass
2323

2424
def get_info(self, arctic_lib, version, symbol, **kwargs):
25+
ret = {}
2526
if 'blob' in version:
2627
if version['blob'] != _MAGIC_CHUNKED:
2728
version['blob'] = "<Compressed pickle.....>"
2829

29-
return """Handler: %s\n\nVersion document:\n%s""" % (self.__class__.__name__, pprint.pformat(version))
30+
ret['handler'] = self.__class__.__name__
31+
ret['type'] = 'blob'
32+
return ret
3033

3134
def read(self, mongoose_lib, version, symbol, **kwargs):
3235
blob = version.get("blob")

arctic/store/audit.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -84,7 +84,7 @@ def __init__(self, version_store, symbol, user, log, modify_timeseries=None, *ar
8484
versions = [x['version'] for x in self._version_store.list_versions(self._symbol, latest_only=True)]
8585
versions.append(0)
8686
self.base_ts = VersionedItem(symbol=self._symbol, library=None,
87-
version=versions[0], metadata=None, data=None, data_info=None)
87+
version=versions[0], metadata=None, data=None, info=None)
8888
except OperationFailure:
8989
#TODO: Current errors in mongo "Incorrect Number of Segments Returned"
9090
# This workaround should be removed once underlying problem is resolved.

arctic/store/version_store.py

Lines changed: 10 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -352,21 +352,19 @@ def _show_info(self, symbol, as_of=None):
352352
"""
353353
print self._get_info(symbol, as_of)
354354

355-
def _get_info(self, symbol, as_of=None):
356-
_version = self._read_metadata(symbol, as_of=as_of)
357-
handler = self._read_handler(_version, symbol)
358-
if hasattr(handler, "get_info"):
359-
return handler.get_info(self._arctic_lib, _version, symbol)
360-
else:
361-
return """Handler: %s\n\nVersion document:\n%s""" % (handler.__class__.__name__, pprint.pformat(_version))
355+
def _get_info(self, symbol, as_of=None, version=None):
356+
if not version:
357+
version = self._read_metadata(symbol, as_of=as_of)
358+
handler = self._read_handler(version, symbol)
359+
return handler.get_info(self._arctic_lib, version, symbol)
362360

363361
def _do_read(self, symbol, version, from_version=None, **kwargs):
364362
handler = self._read_handler(version, symbol)
365363
data = handler.read(self._arctic_lib, version, symbol, from_version=from_version, **kwargs)
366364
if data is None:
367365
raise NoDataFoundException("No data found for %s in library %s" % (symbol, self._arctic_lib.get_name()))
368366
return VersionedItem(symbol=symbol, library=self._arctic_lib.get_name(), version=version['version'],
369-
metadata=version.pop('metadata', None), data=data, data_info=handler.get_data_info(version))
367+
metadata=version.pop('metadata', None), data=data, info=self._get_info(symbol, version=version))
370368
_do_read_retry = mongo_retry(_do_read)
371369

372370
@mongo_retry
@@ -393,7 +391,7 @@ def read_metadata(self, symbol, as_of=None, allow_secondary=None):
393391
_version = self._read_metadata(symbol, as_of=as_of, read_preference=self._read_preference(allow_secondary))
394392
handler = self._read_handler(_version, symbol)
395393
return VersionedItem(symbol=symbol, library=self._arctic_lib.get_name(), version=_version['version'],
396-
metadata=_version.pop('metadata', None), data=None, data_info=handler.get_data_info(_version))
394+
metadata=_version.pop('metadata', None), data=None, info=self._get_info(symbol, version=_version))
397395

398396
def _read_metadata(self, symbol, as_of=None, read_preference=None):
399397
if read_preference is None:
@@ -464,7 +462,7 @@ def append(self, symbol, data, metadata=None, prune_previous_version=True, upser
464462
if len(data) == 0 and previous_version is not None:
465463
handler = self._read_handler(previous_version, symbol)
466464
return VersionedItem(symbol=symbol, library=self._arctic_lib.get_name(), version=previous_version,
467-
metadata=version.pop('metadata', None), data=None, data_info=handler.get_data_info(previous_version))
465+
metadata=version.pop('metadata', None), data=None, info=self._get_info(symbol, version=previous_version))
468466

469467
if upsert and previous_version is None:
470468
return self.write(symbol=symbol, data=data, prune_previous_version=prune_previous_version, metadata=metadata)
@@ -516,7 +514,7 @@ def append(self, symbol, data, metadata=None, prune_previous_version=True, upser
516514
handler = self._read_handler(version, symbol)
517515

518516
return VersionedItem(symbol=symbol, library=self._arctic_lib.get_name(), version=version['version'],
519-
metadata=version.pop('metadata', None), data=None, data_info=handler.get_data_info(version))
517+
metadata=version.pop('metadata', None), data=None, info=self._get_info(symbol, version=version))
520518

521519
def _publish_change(self, symbol, version):
522520
if self._publish_changes:
@@ -574,7 +572,7 @@ def write(self, symbol, data, metadata=None, prune_previous_version=True, **kwar
574572
self._publish_change(symbol, version)
575573

576574
return VersionedItem(symbol=symbol, library=self._arctic_lib.get_name(), version=version['version'],
577-
metadata=version.pop('metadata', None), data=None, data_info=handler.get_data_info(version))
575+
metadata=version.pop('metadata', None), data=None, info=self._get_info(symbol, version=version))
578576

579577
def _prune_previous_versions(self, symbol, keep_mins=120):
580578
"""

arctic/store/versioned_item.py

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,20 +1,20 @@
11
from collections import namedtuple
22

33

4-
class VersionedItem(namedtuple('VersionedItem', ['symbol', 'library', 'data', 'version', 'metadata', 'data_info'])):
4+
class VersionedItem(namedtuple('VersionedItem', ['symbol', 'library', 'data', 'version', 'metadata', 'info'])):
55
"""
66
Class representing a Versioned object in VersionStore.
77
"""
88
def metadata_dict(self):
99
return {'symbol': self.symbol, 'library': self.library, 'version': self.version,
10-
'data_info': self.data_info}
10+
'info': self.info}
1111

1212
def __repr__(self):
1313
return str(self)
1414

1515
def __str__(self):
16-
return "VersionedItem(symbol=%s,library=%s,data=%s,version=%s,metadata=%s" % \
17-
(self.symbol, self.library, type(self.data), self.version, self.metadata)
16+
return "VersionedItem(symbol=%s,library=%s,data=%s,version=%s,metadata=%s,info=%s" % \
17+
(self.symbol, self.library, type(self.data), self.version, self.metadata, self.info)
1818

1919

2020
ChangedItem = namedtuple('ChangedItem', ['symbol', 'orig_version', 'new_version', 'changes'])

tests/integration/store/test_ndarray_store.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -79,7 +79,7 @@ def test_save_read_big_2darray(library):
7979
def test_get_info_bson_object(library):
8080
ndarr = np.ones(1000)
8181
library.write('MYARR', ndarr)
82-
assert library._get_info('MYARR').startswith('''Handler: NdarrayStore''')
82+
assert library._get_info('MYARR')['handler'] == 'NdarrayStore'
8383

8484

8585
def test_save_read_ndarray_with_array_field(library):

tests/integration/store/test_pandas_store.py

Lines changed: 9 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@
99
import itertools
1010
from mock import Mock, patch
1111
import string
12+
from numpy import dtype as dtype
1213

1314
from arctic.date import DateRange, mktz
1415
from arctic._compression import decompress
@@ -799,23 +800,22 @@ def test_daterange_fails_with_timezone_start(library):
799800
def test_data_info_series(library):
800801
s = Series(data=[1, 2, 3], index=[4, 5, 6])
801802
library.write('pandas', s)
802-
md = library.read('pandas').data_info
803-
assert md == library.read_metadata('pandas').data_info
804-
assert md == {'col_dtypes': "[('index', '<i8'), ('values', '<i8')]", 'col_names': {'columns': ['values'], 'index': ['index']}, 'type': 'pandasseries'}
803+
md = library.read('pandas').info
804+
assert md == library.read_metadata('pandas').info
805+
assert md == {'dtype': dtype([('index', '<i8'), ('values', '<i8')]), 'length': 3, 'handler': 'PandasSeriesStore', 'est_size': 48, 'col_names': {u'index': [u'index'], u'columns': [u'values']}, 'n_segments': 1, 'type': u'pandasseries'}
805806

806807

807808
def test_data_info_df(library):
808809
s = DataFrame(data=[1, 2, 3], index=[4, 5, 6])
809810
library.write('pandas', s)
810-
md = library.read('pandas').data_info
811-
assert md == library.read_metadata('pandas').data_info
812-
assert md == {'col_dtypes': "[('index', '<i8'), ('0', '<i8')]", 'col_names': {'columns': ['0'], 'index': ['index']}, 'type': 'pandasdf'}
811+
md = library.read('pandas').info
812+
assert md == library.read_metadata('pandas').info
813+
assert md == {'dtype': dtype([('index', '<i8'), ('0', '<i8')]), 'length': 3, 'handler': 'PandasDataFrameStore', 'est_size': 48, 'col_names': {u'index': [u'index'], u'columns': [u'0']}, 'n_segments': 1, 'type': u'pandasdf'}
813814

814815

815816
def test_data_info_cols(library):
816817
i = MultiIndex.from_tuples([(1, "ab"), (2, "bb"), (3, "cb")])
817818
s = DataFrame(data=[100, 200, 300], index=i)
818819
library.write('test_data', s)
819-
library.read("test_data")
820-
md = library.read_metadata('test_data').data_info
821-
assert md == {'col_dtypes': "[('level_0', '<i8'), ('level_1', 'S2'), ('0', '<i8')]", 'col_names': {'columns': ['0'], 'index': ['level_0', 'level_1']}, 'type': 'pandasdf'}
820+
md = library.read_metadata('test_data').info
821+
assert md == {'dtype': dtype([('level_0', '<i8'), ('level_1', 'S2'), ('0', '<i8')]), 'length': 3, 'handler': 'PandasDataFrameStore', 'est_size': 54, 'col_names': {u'index': [u'level_0', u'level_1'], u'columns': [u'0']}, 'n_segments': 1, 'type': u'pandasdf'}

tests/integration/store/test_pickle_store.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -31,7 +31,7 @@ def test_save_read_bson_object(library):
3131
def test_get_info_bson_object(library):
3232
blob = {'foo': dt(2015, 1, 1), 'object': Arctic}
3333
library.write('BLOB', blob)
34-
assert library._get_info('BLOB').startswith('Handler: PickleStore')
34+
assert library._get_info('BLOB')['handler'] == 'PickleStore'
3535

3636

3737
def test_bson_large_object(library):

tests/unit/store/test_version_item.py

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -9,10 +9,10 @@ def test_versioned_item_str():
99
data=pd.DataFrame(),
1010
version=1.0,
1111
metadata={'metadata': 'foo'},
12-
data_info=None)
12+
info=None)
1313

1414
expected = "VersionedItem(symbol=sym,library=ONEMINUTE," + \
15-
"data=<class 'pandas.core.frame.DataFrame'>,version=1.0,metadata={'metadata': 'foo'}"
15+
"data=<class 'pandas.core.frame.DataFrame'>,version=1.0,metadata={'metadata': 'foo'},info=None"
1616
assert str(item) == expected
1717
assert repr(item) == expected
1818

@@ -23,6 +23,6 @@ def test_versioned_item_str_handles_none():
2323
data=None,
2424
version=None,
2525
metadata=None,
26-
data_info=None)
26+
info=None)
2727

2828
assert str(item)

0 commit comments

Comments
 (0)