@@ -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+
323364class WebServiceContainer :
324365 def query (
325366 self ,
0 commit comments