# -*- coding: utf-8 -*-
from __future__ import absolute_import, division, print_function, unicode_literals
from ..base import BaseLoader
from ..compat import *
"""
Chain loaders loads records from other loader(s).
"""
[ドキュメント]class MergeChainLoader(BaseLoader):
"""
MergeChainLoader merges multiple loaders.
"""
[ドキュメント] def __init__(self, *loaders):
self._loaders = loaders
[ドキュメント] def rows(self):
for ent in zip_longest(*self._loaders, fillvalue={}):
merged = {}
for d in ent:
merged.update(d)
yield merged
[ドキュメント]class ValueMapChainLoader(BaseLoader):
"""
ValueMapChainLoader is a loader to map value of the specified key in each
record loaded from another loader.
"""
[ドキュメント] def __init__(self, loader, key, mapping):
self._loader = loader
self._key = key
self._mapping = mapping
[ドキュメント] def rows(self):
for ent in self._loader:
ent[self._key] = self._mapping[ent[self._key]]
yield ent
[ドキュメント]class ConcatLoader(BaseLoader):
"""
ConcatLoader is a loader to concat multiple loaders.
"""
[ドキュメント] def __init__(self, *loaders):
self._loaders = loaders
[ドキュメント] def rows(self):
for loader in self._loaders:
for row in loader.rows():
yield row