Secure your code as it's written. Use Snyk Code to scan source code in minutes - no build needed - and fix issues immediately.
def test_slice_raises():
m = TopLevelTickStore(Mock())
with pytest.raises(UnhandledDtypeException) as e:
m._slice("abc", 1, 2)
assert("Can't persist type" in str(e.value))
def write(self, arctic_lib, version, symbol, item, previous_version, dtype=None):
collection = arctic_lib.get_top_level_collection()
if item.dtype.hasobject:
raise UnhandledDtypeException()
if not dtype:
dtype = item.dtype
version['dtype'] = str(dtype)
version['shape'] = (-1,) + item.shape[1:]
version['dtype_metadata'] = dict(dtype.metadata or {})
version['type'] = self.TYPE
version['up_to'] = len(item)
version['sha'] = self.checksum(item)
version[FW_POINTERS_CONFIG_KEY] = ARCTIC_FORWARD_POINTERS_CFG.name
# Create an empty entry to prevent cases where this field is accessed without being there. (#710)
if version[FW_POINTERS_CONFIG_KEY] != FwPointersCfg.DISABLED.name:
version[FW_POINTERS_REFS_KEY] = list()
if previous_version:
if 'sha' in previous_version \
def append(self, arctic_lib, version, symbol, item, previous_version, dtype=None, dirty_append=True):
collection = arctic_lib.get_top_level_collection()
if previous_version.get('shape', [-1]) != [-1, ] + list(item.shape)[1:]:
raise UnhandledDtypeException()
if not dtype:
dtype = item.dtype
if (self._dtype(previous_version['dtype']).fields is None) != (dtype.fields is None):
raise ValueError("type changes to or from structured array not supported")
if previous_version['up_to'] == 0:
dtype = dtype
elif len(item) == 0:
dtype = self._dtype(previous_version['dtype'])
else:
dtype = self._promote_types(dtype, previous_version['dtype'])
item = item.astype(dtype)
version['type'] = self.TYPE
def _str_dtype(dtype):
"""
Represent dtypes without byte order, as earlier Java tickstore code doesn't support explicit byte order.
"""
assert dtype.byteorder != '>'
if (dtype.kind) == 'i':
assert dtype.itemsize == 8
return 'int64'
elif (dtype.kind) == 'f':
assert dtype.itemsize == 8
return 'float64'
elif (dtype.kind) == 'U':
return 'U%d' % (dtype.itemsize / 4)
else:
raise UnhandledDtypeException("Bad dtype '%s'" % dtype)
def _ensure_supported_dtypes(array):
# We only support these types for now, as we need to read them in Java
if (array.dtype.kind) == 'i':
array = array.astype('
Dict of the initial image at the start of the document. If this contains a 'index' entry it is
assumed to be the time of the timestamp of the index
metadata: dict
optional user defined metadata - one per symbol
"""
pandas = False
# Check for overlapping data
if isinstance(data, list):
start = data[0]['index']
end = data[-1]['index']
elif isinstance(data, pd.DataFrame):
start = data.index[0].to_pydatetime()
end = data.index[-1].to_pydatetime()
pandas = True
else:
raise UnhandledDtypeException("Can't persist type %s to tickstore" % type(data))
self._assert_nonoverlapping_data(symbol, to_dt(start), to_dt(end))
if pandas:
buckets = self._pandas_to_buckets(data, symbol, initial_image)
else:
buckets = self._to_buckets(data, symbol, initial_image)
self._write(buckets)
if metadata:
ret = self._metadata.replace_one({SYMBOL: symbol},
{SYMBOL: symbol, META: metadata},
upsert=True)
def _slice(self, data, start, end):
if isinstance(data, list):
dictlist = DictList(data, 'index')
slice_start = bisect.bisect_left(dictlist, to_dt(start, mktz('UTC')))
slice_end = bisect.bisect_right(dictlist, to_dt(end, mktz('UTC')))
return data[slice_start:slice_end]
elif isinstance(data, pd.DataFrame):
return data[start:end]
else:
raise UnhandledDtypeException("Can't persist type %s to tickstore" % type(data))