Add field diffing on failed push

vwap_backup
Tyler Goodlet 2020-11-18 09:46:48 -05:00
parent 757f02e6f7
commit 4fe8c4487a
1 changed files with 25 additions and 4 deletions

View File

@ -194,9 +194,30 @@ class ShmArray:
# TODO: use .index for actual ring logic? # TODO: use .index for actual ring logic?
index = self._i.value index = self._i.value
end = index + length end = index + length
try:
self._array[index:end] = data[:] self._array[index:end] = data[:]
self._i.value = end self._i.value = end
return end return end
except ValueError as err:
# reraise with any field discrepancy
our_fields, their_fields = (
set(self._array.dtype.fields),
set(data.dtype.fields),
)
only_in_ours = our_fields - their_fields
only_in_theirs = their_fields - our_fields
if only_in_ours:
raise TypeError(
f"Input array is missing field(s): {only_in_ours}"
)
elif only_in_theirs:
raise TypeError(
f"Input array has unknown field(s): {only_in_theirs}"
)
else:
raise err
def close(self) -> None: def close(self) -> None:
self._i._shm.close() self._i._shm.close()