Fetch mapper for lists, tuples, and namedtuples.
| 368 | |
| 369 | |
| 370 | class _ListFetchMapper(_FetchMapper): |
| 371 | """Fetch mapper for lists, tuples, and namedtuples.""" |
| 372 | |
| 373 | def __init__(self, fetches): |
| 374 | """Creates a _ListFetchMapper. |
| 375 | |
| 376 | Args: |
| 377 | fetches: List, tuple, or namedtuple of fetches. |
| 378 | """ |
| 379 | self._fetch_type = type(fetches) |
| 380 | self._mappers = [_FetchMapper.for_fetch(fetch) for fetch in fetches] |
| 381 | self._unique_fetches, self._value_indices = _uniquify_fetches(self._mappers) |
| 382 | |
| 383 | def unique_fetches(self): |
| 384 | return self._unique_fetches |
| 385 | |
| 386 | def build_results(self, values): |
| 387 | # Create the list of results for each mapper. |
| 388 | results = [] |
| 389 | for m, vi in zip(self._mappers, self._value_indices): |
| 390 | results.append(m.build_results([values[j] for j in vi])) |
| 391 | # Return a value of the original type of the fetches. |
| 392 | if issubclass(self._fetch_type, list): |
| 393 | return results |
| 394 | elif self._fetch_type == tuple: |
| 395 | return tuple(results) |
| 396 | else: |
| 397 | # This is the code path for namedtuple. |
| 398 | return self._fetch_type(*results) |
| 399 | |
| 400 | |
| 401 | class _DictFetchMapper(_FetchMapper): |