result metadata for in-memory collections.
| 244 | |
| 245 | |
| 246 | class SimpleResultMetaData(ResultMetaData): |
| 247 | """result metadata for in-memory collections.""" |
| 248 | |
| 249 | __slots__ = ( |
| 250 | "_keys", |
| 251 | "_keymap", |
| 252 | "_processors", |
| 253 | "_tuplefilter", |
| 254 | "_translated_indexes", |
| 255 | "_create_unique_filters", |
| 256 | "_key_to_index", |
| 257 | "_ambiguous_keys", |
| 258 | ) |
| 259 | |
| 260 | _keys: Sequence[str] |
| 261 | |
| 262 | def __init__( |
| 263 | self, |
| 264 | keys: Sequence[str], |
| 265 | extra: Optional[Sequence[Any]] = None, |
| 266 | _processors: Optional[_ProcessorsType] = None, |
| 267 | _tuplefilter: Optional[_TupleGetterType] = None, |
| 268 | _translated_indexes: Optional[Sequence[int]] = None, |
| 269 | _create_unique_filters: Optional[ |
| 270 | Callable[ |
| 271 | [Any], |
| 272 | Sequence[Optional[Callable[[Any], Any]]], |
| 273 | ] |
| 274 | ] = None, |
| 275 | _ambiguous_keys: Optional[frozenset[str]] = None, |
| 276 | ): |
| 277 | self._keys = list(keys) |
| 278 | self._tuplefilter = _tuplefilter |
| 279 | self._translated_indexes = _translated_indexes |
| 280 | self._create_unique_filters = _create_unique_filters |
| 281 | if extra: |
| 282 | assert len(self._keys) == len(extra) |
| 283 | recs_names = [ |
| 284 | ( |
| 285 | (name,) + (extras if extras else ()), |
| 286 | (index, name, extras), |
| 287 | ) |
| 288 | for index, (name, extras) in enumerate(zip(self._keys, extra)) |
| 289 | ] |
| 290 | else: |
| 291 | recs_names = [ |
| 292 | ((name,), (index, name, ())) |
| 293 | for index, name in enumerate(self._keys) |
| 294 | ] |
| 295 | |
| 296 | self._keymap = {key: rec for keys, rec in recs_names for key in keys} |
| 297 | |
| 298 | if _ambiguous_keys: |
| 299 | for name in _ambiguous_keys.intersection(self._keymap): |
| 300 | rec = self._keymap[name] |
| 301 | self._keymap[name] = (None,) + rec[1:] |
| 302 | |
| 303 | self._processors = _processors |
no outgoing calls