Skip to content

Commit af8cef5

Browse files
committed
ENH: add renaming and union type containers
1 parent 2fded06 commit af8cef5

File tree

1 file changed

+41
-0
lines changed

1 file changed

+41
-0
lines changed

data_prototype/containers.py

Lines changed: 41 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -320,6 +320,47 @@ def describe(self) -> Dict[str, Desc]:
320320
return dict(self._desc)
321321

322322

323+
class ReNamer:
324+
def __init__(self, data: DataContainer, mapping: Dict[str, str]):
325+
# TODO: check all the asked for key exist
326+
self._data = data
327+
self._mapping = mapping
328+
329+
def query(
330+
self,
331+
transform: _Transform,
332+
size: Tuple[int, int],
333+
) -> Tuple[Dict[str, Any], Union[str, int]]:
334+
base, cache_key = self._data.query(transform, size)
335+
return {v: base[k] for k, v in self._mapping.items()}, cache_key
336+
337+
def describe(self):
338+
base = self._data.describe()
339+
return {v: base[k] for k, v in self._mapping.items()}
340+
341+
342+
class DataUnion:
343+
def __init__(self, *data: DataContainer):
344+
# TODO check no collisions
345+
self._datas = data
346+
347+
def query(
348+
self,
349+
transform: _Transform,
350+
size: Tuple[int, int],
351+
) -> Tuple[Dict[str, Any], Union[str, int]]:
352+
cache_keys = []
353+
ret = {}
354+
for data in self._datas:
355+
base, cache_key = data.query(transform, size)
356+
ret.update(base)
357+
cache_keys.append(cache_key)
358+
return ret, hash(tuple(cache_keys))
359+
360+
def describe(self):
361+
return {k: v for d in self._datas for k, v in d.describe().items()}
362+
363+
323364
class WebServiceContainer:
324365
def query(
325366
self,

0 commit comments

Comments
 (0)