Represents the output of a task. An output can be a blob, a list of blob, or a record.
| 352 | |
| 353 | |
| 354 | class TaskOutput: |
| 355 | """ |
| 356 | Represents the output of a task. An output can be a blob, |
| 357 | a list of blob, or a record. |
| 358 | """ |
| 359 | |
| 360 | def __init__(self, names): |
| 361 | self._schema = None |
| 362 | self._is_scalar = False |
| 363 | if isinstance(names, Field): |
| 364 | self._schema = names |
| 365 | names = self._schema.field_blobs() |
| 366 | self._is_scalar = type(names) not in (tuple, list) |
| 367 | if self._is_scalar: |
| 368 | names = [names] |
| 369 | self.names = names |
| 370 | self._values = None |
| 371 | |
| 372 | def set(self, values, _fetch_func=None): |
| 373 | assert len(values) == len(self.names) |
| 374 | self._values = values |
| 375 | self._fetch_func = _fetch_func |
| 376 | |
| 377 | def get(self): |
| 378 | assert self._values is not None, 'Output value not set yet.' |
| 379 | if self._is_scalar: |
| 380 | return self._values[0] |
| 381 | elif self._schema: |
| 382 | return from_blob_list(self._schema, self._values) |
| 383 | else: |
| 384 | return self._values |
| 385 | |
| 386 | def fetch(self): |
| 387 | assert self._fetch_func is not None, ( |
| 388 | 'Cannot fetch value for this output.') |
| 389 | fetched_vals = [self._fetch_func(v) for v in self._values] |
| 390 | if self._is_scalar: |
| 391 | return fetched_vals[0] |
| 392 | elif self._schema: |
| 393 | return from_blob_list(self._schema, fetched_vals) |
| 394 | else: |
| 395 | return fetched_vals |
| 396 | |
| 397 | def __repr__(self): |
| 398 | return "TaskOutput(names={}, values={})".format(self.names, self._values) |
| 399 | |
| 400 | |
| 401 | def final_output(blob_or_record): |
no outgoing calls
no test coverage detected
searching dependent graphs…