tilebox-workflows 0.47.0__py3-none-any.whl → 0.49.0b1__py3-none-any.whl

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1,13 +1,17 @@
1
+ import contextlib
1
2
  import warnings
2
3
  from abc import ABC, abstractmethod
3
4
  from collections.abc import Iterator
4
5
  from io import BytesIO
5
6
  from pathlib import Path
7
+ from pathlib import PurePosixPath as ObjectPath
6
8
 
7
9
  import boto3
8
10
  from botocore.exceptions import ClientError
9
11
  from google.cloud.exceptions import NotFound
10
12
  from google.cloud.storage import Blob, Bucket
13
+ from obstore.exceptions import GenericError
14
+ from obstore.store import ObjectStore
11
15
 
12
16
 
13
17
  class JobCache(ABC):
@@ -62,6 +66,56 @@ class NoCache(JobCache):
62
66
  return self
63
67
 
64
68
 
69
+ class ObstoreCache(JobCache):
70
+ def __init__(self, store: ObjectStore, prefix: str | ObjectPath = ObjectPath(".")) -> None:
71
+ """A cache implementation backed by an obstore ObjectStore.
72
+
73
+ This cache implementation is the recommended way of working with the cache, as it provides a unified interface
74
+ for working with different object stores, while also providing a way to transparently work with local files
75
+ as well.
76
+
77
+ Args:
78
+ store: The object store to use for the cache.
79
+ prefix: A path prefix to append to all objects stored in the cache. Defaults to no prefix.
80
+ """
81
+ self.store = store
82
+ self.prefix = ObjectPath(prefix)
83
+
84
+ def __contains__(self, key: str) -> bool:
85
+ with contextlib.suppress(OSError):
86
+ self.store.get(str(self.prefix / key))
87
+ return True # if get is successful, we know the key is in the cache
88
+
89
+ return False
90
+
91
+ def __setitem__(self, key: str, value: bytes) -> None:
92
+ self.store.put(str(self.prefix / key), value)
93
+
94
+ def __delitem__(self, key: str) -> None:
95
+ try:
96
+ self.store.delete(str(self.prefix / key))
97
+ except OSError:
98
+ raise KeyError(f"{key} is not cached!") from None
99
+
100
+ def __getitem__(self, key: str) -> bytes:
101
+ try:
102
+ entry = self.store.get(str(self.prefix / key))
103
+ return bytes(entry.bytes())
104
+ except (OSError, GenericError):
105
+ # GenericError is raised if the key contains separator characters, but one of the parents is a file
106
+ # instead of a directory
107
+ raise KeyError(f"{key} is not cached!") from None
108
+
109
+ def __iter__(self) -> Iterator[str]:
110
+ prefix = "" if self.prefix == ObjectPath(".") else str(self.prefix)
111
+ for obj in self.store.list_with_delimiter(prefix)["objects"]:
112
+ path: str = obj["path"]
113
+ yield path.removeprefix(str(self.prefix) + "/")
114
+
115
+ def group(self, key: str) -> "ObstoreCache":
116
+ return ObstoreCache(self.store, prefix=str(self.prefix / key))
117
+
118
+
65
119
  class InMemoryCache(JobCache):
66
120
  def __init__(self) -> None:
67
121
  """A simple in-memory cache implementation.
@@ -153,7 +207,7 @@ class LocalFileSystemCache(JobCache):
153
207
  Args:
154
208
  root: File system path where the cache will be stored. Defaults to "cache" in the current working directory.
155
209
  """
156
- self.root = root if isinstance(root, Path) else Path(root)
210
+ self.root = Path(root)
157
211
 
158
212
  def __contains__(self, key: str) -> bool:
159
213
  return (self.root / key).exists()
@@ -184,7 +238,7 @@ class LocalFileSystemCache(JobCache):
184
238
 
185
239
 
186
240
  class GoogleStorageCache(JobCache):
187
- def __init__(self, bucket: Bucket, prefix: str = "jobs") -> None:
241
+ def __init__(self, bucket: Bucket, prefix: str | ObjectPath = "jobs") -> None:
188
242
  """A cache implementation that stores data in Google Cloud Storage.
189
243
 
190
244
  Args:
@@ -192,7 +246,9 @@ class GoogleStorageCache(JobCache):
192
246
  prefix: A path prefix to append to all objects stored in the cache. Defaults to "jobs".
193
247
  """
194
248
  self.bucket = bucket
195
- self.prefix = Path(prefix) # we still use pathlib here, because it's easier to work with when joining paths
249
+ self.prefix = ObjectPath(
250
+ prefix
251
+ ) # we still use pathlib here, because it's easier to work with when joining paths
196
252
 
197
253
  def _blob(self, key: str) -> Blob:
198
254
  return self.bucket.blob(str(self.prefix / key))
@@ -228,14 +284,14 @@ class GoogleStorageCache(JobCache):
228
284
 
229
285
  # make the names relative to the cache prefix (but including the key in the name)
230
286
  for blob in blobs:
231
- yield str(Path(blob.name).relative_to(self.prefix))
287
+ yield str(ObjectPath(blob.name).relative_to(self.prefix))
232
288
 
233
289
  def group(self, key: str) -> "GoogleStorageCache":
234
290
  return GoogleStorageCache(self.bucket, prefix=str(self.prefix / key))
235
291
 
236
292
 
237
293
  class AmazonS3Cache(JobCache):
238
- def __init__(self, bucket: str, prefix: str = "jobs") -> None:
294
+ def __init__(self, bucket: str, prefix: str | ObjectPath = "jobs") -> None:
239
295
  """A cache implementation that stores data in Amazon S3.
240
296
 
241
297
  Args:
@@ -243,7 +299,7 @@ class AmazonS3Cache(JobCache):
243
299
  prefix: A path prefix to append to all objects stored in the cache. Defaults to "jobs".
244
300
  """
245
301
  self.bucket = bucket
246
- self.prefix = Path(prefix)
302
+ self.prefix = ObjectPath(prefix)
247
303
  with warnings.catch_warnings():
248
304
  # https://github.com/boto/boto3/issues/3889
249
305
  warnings.filterwarnings("ignore", category=DeprecationWarning, message=".*datetime.utcnow.*")
tilebox/workflows/data.py CHANGED
@@ -45,7 +45,8 @@ class TaskState(Enum):
45
45
  RUNNING = 2
46
46
  COMPUTED = 3
47
47
  FAILED = 4
48
- CANCELLED = 5
48
+ SKIPPED = 5
49
+ FAILED_OPTIONAL = 6
49
50
 
50
51
 
51
52
  _TASK_STATES = {state.value: state for state in TaskState}
@@ -349,6 +350,7 @@ class TaskSubmissionGroup:
349
350
  cluster_slug_pointers: list[int] = field(default_factory=list)
350
351
  display_pointers: list[int] = field(default_factory=list)
351
352
  max_retries_values: list[int] = field(default_factory=list)
353
+ optional_values: list[bool] = field(default_factory=list)
352
354
 
353
355
  @classmethod
354
356
  def from_message(cls, group: core_pb2.TaskSubmissionGroup) -> "TaskSubmissionGroup":
@@ -360,6 +362,7 @@ class TaskSubmissionGroup:
360
362
  cluster_slug_pointers=list(group.cluster_slug_pointers),
361
363
  display_pointers=list(group.display_pointers),
362
364
  max_retries_values=list(group.max_retries_values),
365
+ optional_values=list(group.optional_values),
363
366
  )
364
367
 
365
368
  def to_message(self) -> core_pb2.TaskSubmissionGroup:
@@ -371,6 +374,7 @@ class TaskSubmissionGroup:
371
374
  cluster_slug_pointers=self.cluster_slug_pointers,
372
375
  display_pointers=self.display_pointers,
373
376
  max_retries_values=self.max_retries_values,
377
+ optional_values=self.optional_values,
374
378
  )
375
379
 
376
380
 
@@ -735,6 +739,7 @@ class QueryFilters:
735
739
  automation_ids: list[UUID]
736
740
  job_states: list[JobState]
737
741
  name: str | None
742
+ task_states: list[TaskState]
738
743
 
739
744
  @classmethod
740
745
  def from_message(cls, filters: job_pb2.QueryFilters) -> "QueryFilters":
@@ -746,6 +751,7 @@ class QueryFilters:
746
751
  automation_ids=[uuid_message_to_uuid(uuid) for uuid in filters.automation_ids],
747
752
  job_states=[_JOB_STATES[state] for state in filters.states],
748
753
  name=filters.name or None,
754
+ task_states=[_TASK_STATES[state] for state in filters.task_states],
749
755
  )
750
756
 
751
757
  def to_message(self) -> job_pb2.QueryFilters:
@@ -757,4 +763,7 @@ class QueryFilters:
757
763
  else None,
758
764
  states=[cast(core_pb2.JobState, state.value) for state in self.job_states] if self.job_states else None,
759
765
  name=self.name or None, # empty string becomes None
766
+ task_states=[cast(core_pb2.TaskState, state.value) for state in self.task_states]
767
+ if self.task_states
768
+ else None,
760
769
  )
@@ -12,6 +12,7 @@ from tilebox.workflows.data import (
12
12
  JobState,
13
13
  QueryFilters,
14
14
  QueryJobsResponse,
15
+ TaskState,
15
16
  )
16
17
  from tilebox.workflows.jobs.service import JobService
17
18
  from tilebox.workflows.observability.tracing import WorkflowTracer, get_trace_parent_of_current_span
@@ -35,10 +36,10 @@ JobIDLike: TypeAlias = Job | UUID | str
35
36
  class JobClient:
36
37
  def __init__(self, service: JobService, tracer: WorkflowTracer | None = None) -> None:
37
38
  """Create a new job client.
38
-
39
- Args:
40
- service: The service to use for job operations.
41
- tracer: The tracer to use for tracing.
39
+ z
40
+ Args:
41
+ service: The service to use for job operations.
42
+ tracer: The tracer to use for tracing.
42
43
  """
43
44
  self._service = service
44
45
  self._tracer = tracer or WorkflowTracer()
@@ -77,7 +78,9 @@ class JobClient:
77
78
  f"or exactly one cluster per task. But got {len(tasks)} tasks and {len(slugs)} clusters."
78
79
  )
79
80
 
80
- task_submissions = [FutureTask(i, task, [], slugs[i], max_retries) for i, task in enumerate(tasks)]
81
+ task_submissions = [
82
+ FutureTask(i, task, [], slugs[i], max_retries, optional=False) for i, task in enumerate(tasks)
83
+ ]
81
84
  submissions_merged = merge_future_tasks_to_submissions(task_submissions, default_cluster)
82
85
  if submissions_merged is None:
83
86
  raise ValueError("At least one task must be submitted.")
@@ -163,6 +166,7 @@ class JobClient:
163
166
  automation_ids: UUID | list[UUID] | None = None,
164
167
  job_states: JobState | list[JobState] | None = None,
165
168
  name: str | None = None,
169
+ task_states: TaskState | list[TaskState] | None = None,
166
170
  ) -> list[Job]:
167
171
  """List jobs in the given temporal extent.
168
172
 
@@ -185,6 +189,9 @@ class JobClient:
185
189
  selected states are returned.
186
190
  name: A name to filter jobs by. If specified, only jobs with a matching name are returned. The match is
187
191
  case-insensitive and uses a fuzzy matching scheme.
192
+ task_states: A task state or list of task states to filter jobs by. If specified, only jobs that have at
193
+ least one task in any of the selected states are returned.
194
+
188
195
  Returns:
189
196
  A list of jobs matching the given filters.
190
197
  """
@@ -227,12 +234,17 @@ class JobClient:
227
234
  if not isinstance(job_states, list):
228
235
  job_states = [job_states]
229
236
 
237
+ task_states = task_states or []
238
+ if not isinstance(task_states, list):
239
+ task_states = [task_states]
240
+
230
241
  filters = QueryFilters(
231
242
  time_interval=time_interval,
232
243
  id_interval=id_interval,
233
244
  automation_ids=automation_ids,
234
245
  job_states=job_states,
235
246
  name=name,
247
+ task_states=task_states,
236
248
  )
237
249
 
238
250
  def request(page: PaginationProtocol) -> QueryJobsResponse:
@@ -534,6 +534,7 @@ class ExecutionContext(ExecutionContextBase):
534
534
  depends_on: FutureTask | list[FutureTask] | None = None,
535
535
  cluster: str | None = None,
536
536
  max_retries: int = 0,
537
+ optional: bool = False,
537
538
  ) -> FutureTask:
538
539
  dependencies: list[int] = []
539
540
 
@@ -557,6 +558,7 @@ class ExecutionContext(ExecutionContextBase):
557
558
  depends_on=dependencies,
558
559
  cluster=cluster,
559
560
  max_retries=max_retries,
561
+ optional=optional,
560
562
  )
561
563
  self._sub_tasks.append(subtask)
562
564
  return subtask
@@ -567,9 +569,13 @@ class ExecutionContext(ExecutionContextBase):
567
569
  depends_on: FutureTask | list[FutureTask] | None = None,
568
570
  cluster: str | None = None,
569
571
  max_retries: int = 0,
572
+ optional: bool = False,
570
573
  ) -> list[FutureTask]:
571
574
  return [
572
- self.submit_subtask(task, cluster=cluster, max_retries=max_retries, depends_on=depends_on) for task in tasks
575
+ self.submit_subtask(
576
+ task, cluster=cluster, max_retries=max_retries, depends_on=depends_on, optional=optional
577
+ )
578
+ for task in tasks
573
579
  ]
574
580
 
575
581
  def submit_batch(
tilebox/workflows/task.py CHANGED
@@ -227,6 +227,7 @@ class FutureTask:
227
227
  depends_on: list[int]
228
228
  cluster: str | None
229
229
  max_retries: int
230
+ optional: bool
230
231
 
231
232
  def identifier(self) -> TaskIdentifier:
232
233
  return _task_meta(self.task).identifier
@@ -313,6 +314,7 @@ def merge_future_tasks_to_submissions(future_tasks: list[FutureTask], fallback_c
313
314
  group.cluster_slug_pointers.append(cluster_slugs.append_if_unique(task.cluster or fallback_cluster))
314
315
  group.display_pointers.append(displays.append_if_unique(task.display()))
315
316
  group.max_retries_values.append(task.max_retries)
317
+ group.optional_values.append(task.optional)
316
318
 
317
319
  return TaskSubmissions(
318
320
  task_groups=groups,
@@ -361,6 +363,7 @@ class ExecutionContext(ABC):
361
363
  depends_on: FutureTask | list[FutureTask] | None = None,
362
364
  cluster: str | None = None,
363
365
  max_retries: int = 0,
366
+ optional: bool = False,
364
367
  ) -> FutureTask:
365
368
  """Submit a subtask of the current task.
366
369
 
@@ -371,6 +374,9 @@ class ExecutionContext(ABC):
371
374
  cluster: Slug of the cluster to submit the subtask to. Defaults to None, which means the same cluster as the
372
375
  task runner will be used.
373
376
  max_retries: The maximum number of retries for the subtask in case of failure. Defaults to 0.
377
+ optional: Whether the subtask is optional. If True, the subtask will not fail the job if it fails. Also
378
+ tasks that depend on this task will still execute after this task even if this task failed. Defaults
379
+ to False.
374
380
 
375
381
  Returns:
376
382
  Submitted subtask.
@@ -383,6 +389,7 @@ class ExecutionContext(ABC):
383
389
  depends_on: FutureTask | list[FutureTask] | None = None,
384
390
  cluster: str | None = None,
385
391
  max_retries: int = 0,
392
+ optional: bool = False,
386
393
  ) -> list[FutureTask]:
387
394
  """Submit a batch of subtasks of the current task. Similar to `submit_subtask`, but for multiple tasks."""
388
395
 
@@ -28,7 +28,7 @@ from google.protobuf import timestamp_pb2 as google_dot_protobuf_dot_timestamp__
28
28
  from tilebox.datasets.tilebox.v1 import id_pb2 as tilebox_dot_v1_dot_id__pb2
29
29
 
30
30
 
31
- DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n\x17workflows/v1/core.proto\x12\x0cworkflows.v1\x1a\x1b\x62uf/validate/validate.proto\x1a\x1egoogle/protobuf/duration.proto\x1a\x1fgoogle/protobuf/timestamp.proto\x1a\x13tilebox/v1/id.proto\"^\n\x07\x43luster\x12\x12\n\x04slug\x18\x02 \x01(\tR\x04slug\x12!\n\x0c\x64isplay_name\x18\x03 \x01(\tR\x0b\x64isplayName\x12\x1c\n\tdeletable\x18\x04 \x01(\x08R\tdeletable\"\xe5\x04\n\x03Job\x12\x1e\n\x02id\x18\x01 \x01(\x0b\x32\x0e.tilebox.v1.IDR\x02id\x12\x12\n\x04name\x18\x02 \x01(\tR\x04name\x12!\n\x0ctrace_parent\x18\x03 \x01(\tR\x0btraceParent\x12\x1e\n\x08\x63\x61nceled\x18\x05 \x01(\x08\x42\x02\x18\x01R\x08\x63\x61nceled\x12\x43\n\x0clegacy_state\x18\x06 \x01(\x0e\x32\x1c.workflows.v1.LegacyJobStateB\x02\x18\x01R\x0blegacyState\x12=\n\x0csubmitted_at\x18\x07 \x01(\x0b\x32\x1a.google.protobuf.TimestampR\x0bsubmittedAt\x12=\n\nstarted_at\x18\x08 \x01(\x0b\x32\x1a.google.protobuf.TimestampB\x02\x18\x01R\tstartedAt\x12@\n\x0etask_summaries\x18\t \x03(\x0b\x32\x19.workflows.v1.TaskSummaryR\rtaskSummaries\x12\x33\n\rautomation_id\x18\n \x01(\x0b\x32\x0e.tilebox.v1.IDR\x0c\x61utomationId\x12\x32\n\x08progress\x18\x0b \x03(\x0b\x32\x16.workflows.v1.ProgressR\x08progress\x12,\n\x05state\x18\x0c \x01(\x0e\x32\x16.workflows.v1.JobStateR\x05state\x12\x45\n\x0f\x65xecution_stats\x18\r \x01(\x0b\x32\x1c.workflows.v1.ExecutionStatsR\x0e\x65xecutionStatsJ\x04\x08\x04\x10\x05\"\xaf\x03\n\x0e\x45xecutionStats\x12M\n\x15\x66irst_task_started_at\x18\x01 \x01(\x0b\x32\x1a.google.protobuf.TimestampR\x12\x66irstTaskStartedAt\x12K\n\x14last_task_stopped_at\x18\x02 \x01(\x0b\x32\x1a.google.protobuf.TimestampR\x11lastTaskStoppedAt\x12<\n\x0c\x63ompute_time\x18\x03 \x01(\x0b\x32\x19.google.protobuf.DurationR\x0b\x63omputeTime\x12<\n\x0c\x65lapsed_time\x18\x04 \x01(\x0b\x32\x19.google.protobuf.DurationR\x0b\x65lapsedTime\x12 \n\x0bparallelism\x18\x05 \x01(\x01R\x0bparallelism\x12\x1f\n\x0btotal_tasks\x18\x06 \x01(\x04R\ntotalTasks\x12\x42\n\x0etasks_by_state\x18\x07 \x03(\x0b\x32\x1c.workflows.v1.TaskStateCountR\x0ctasksByState\"U\n\x0eTaskStateCount\x12-\n\x05state\x18\x01 \x01(\x0e\x32\x17.workflows.v1.TaskStateR\x05state\x12\x14\n\x05\x63ount\x18\x02 \x01(\x04R\x05\x63ount\"\x9f\x02\n\x0bTaskSummary\x12\x1e\n\x02id\x18\x01 \x01(\x0b\x32\x0e.tilebox.v1.IDR\x02id\x12\x18\n\x07\x64isplay\x18\x02 \x01(\tR\x07\x64isplay\x12-\n\x05state\x18\x03 \x01(\x0e\x32\x17.workflows.v1.TaskStateR\x05state\x12+\n\tparent_id\x18\x04 \x01(\x0b\x32\x0e.tilebox.v1.IDR\x08parentId\x12\x39\n\nstarted_at\x18\x06 \x01(\x0b\x32\x1a.google.protobuf.TimestampR\tstartedAt\x12\x39\n\nstopped_at\x18\x07 \x01(\x0b\x32\x1a.google.protobuf.TimestampR\tstoppedAtJ\x04\x08\x05\x10\x06\"S\n\x08Progress\x12\x1d\n\x05label\x18\x01 \x01(\tB\x07\xbaH\x04r\x02\x18\x64R\x05label\x12\x14\n\x05total\x18\x02 \x01(\x04R\x05total\x12\x12\n\x04\x64one\x18\x03 \x01(\x04R\x04\x64one\"\xa2\x03\n\x04Task\x12\x1e\n\x02id\x18\x01 \x01(\x0b\x32\x0e.tilebox.v1.IDR\x02id\x12<\n\nidentifier\x18\x02 \x01(\x0b\x32\x1c.workflows.v1.TaskIdentifierR\nidentifier\x12-\n\x05state\x18\x03 \x01(\x0e\x32\x17.workflows.v1.TaskStateR\x05state\x12\x1b\n\x05input\x18\x04 \x01(\x0c\x42\x05\xaa\x01\x02\x08\x01R\x05input\x12\x1f\n\x07\x64isplay\x18\x05 \x01(\tB\x05\xaa\x01\x02\x08\x01R\x07\x64isplay\x12#\n\x03job\x18\x06 \x01(\x0b\x32\x11.workflows.v1.JobR\x03job\x12+\n\tparent_id\x18\x07 \x01(\x0b\x32\x0e.tilebox.v1.IDR\x08parentId\x12-\n\ndepends_on\x18\x08 \x03(\x0b\x32\x0e.tilebox.v1.IDR\tdependsOn\x12-\n\x05lease\x18\t \x01(\x0b\x32\x17.workflows.v1.TaskLeaseR\x05lease\x12\x1f\n\x0bretry_count\x18\n \x01(\x03R\nretryCount\"d\n\x0eTaskIdentifier\x12\x1e\n\x04name\x18\x01 \x01(\tB\n\xbaH\x07r\x05 \x01(\x80\x02R\x04name\x12\x32\n\x07version\x18\x02 \x01(\tB\x18\xbaH\x15r\x13 \x01\x32\x0f^v(\\d+)\\.(\\d+)$R\x07version\"1\n\x05Tasks\x12(\n\x05tasks\x18\x01 \x03(\x0b\x32\x12.workflows.v1.TaskR\x05tasks\"\x98\x02\n\x14SingleTaskSubmission\x12!\n\x0c\x63luster_slug\x18\x01 \x01(\tR\x0b\x63lusterSlug\x12<\n\nidentifier\x18\x02 \x01(\x0b\x32\x1c.workflows.v1.TaskIdentifierR\nidentifier\x12!\n\x07\x64isplay\x18\x04 \x01(\tB\x07\xbaH\x04r\x02\x10\x01R\x07\x64isplay\x12\x32\n\x0c\x64\x65pendencies\x18\x05 \x03(\x03\x42\x0e\xbaH\x0b\x92\x01\x08\"\x06\"\x04\x18?(\x00R\x0c\x64\x65pendencies\x12(\n\x0bmax_retries\x18\x06 \x01(\x03\x42\x07\xbaH\x04\"\x02(\x00R\nmaxRetries\x12\x1e\n\x05input\x18\x03 \x01(\x0c\x42\x08\xbaH\x05z\x03\x18\x80\x10R\x05input\"\x91\x02\n\x0fTaskSubmissions\x12N\n\x0btask_groups\x18\x01 \x03(\x0b\x32!.workflows.v1.TaskSubmissionGroupB\n\xbaH\x07\x92\x01\x04\x08\x01\x10@R\ntaskGroups\x12.\n\x13\x63luster_slug_lookup\x18\x02 \x03(\tR\x11\x63lusterSlugLookup\x12I\n\x11identifier_lookup\x18\x03 \x03(\x0b\x32\x1c.workflows.v1.TaskIdentifierR\x10identifierLookup\x12\x33\n\x0e\x64isplay_lookup\x18\x04 \x03(\tB\x0c\xbaH\t\x92\x01\x06\"\x04r\x02\x10\x01R\rdisplayLookup\"\xe2\x07\n\x13TaskSubmissionGroup\x12?\n\x1c\x64\x65pendencies_on_other_groups\x18\x01 \x03(\rR\x19\x64\x65pendenciesOnOtherGroups\x12%\n\x06inputs\x18\x02 \x03(\x0c\x42\r\xbaH\n\x92\x01\x07\"\x05z\x03\x18\x80\x10R\x06inputs\x12/\n\x13identifier_pointers\x18\x03 \x03(\x04R\x12identifierPointers\x12\x32\n\x15\x63luster_slug_pointers\x18\x04 \x03(\x04R\x13\x63lusterSlugPointers\x12)\n\x10\x64isplay_pointers\x18\x05 \x03(\x04R\x0f\x64isplayPointers\x12,\n\x12max_retries_values\x18\x06 \x03(\x03R\x10maxRetriesValues:\xa4\x05\xbaH\xa0\x05\x1a\xa6\x01\n,task_submission_group.identifiers_size_match\x12?The number of inputs must match the number of task identifiers.\x1a\x35this.inputs.size() == this.identifier_pointers.size()\x1a\xa7\x01\n.task_submission_group.cluster_slugs_size_match\x12<The number of cluster slugs must match the number of inputs.\x1a\x37this.inputs.size() == this.cluster_slug_pointers.size()\x1a\xa0\x01\n)task_submission_group.displays_size_match\x12?The number of display pointers must match the number of inputs.\x1a\x32this.inputs.size() == this.display_pointers.size()\x1a\xa7\x01\n,task_submission_group.max_retries_size_match\x12\x41The number of max_retries_values must match the number of inputs.\x1a\x34this.inputs.size() == this.max_retries_values.size()\"\xa9\x01\n\tTaskLease\x12/\n\x05lease\x18\x01 \x01(\x0b\x32\x19.google.protobuf.DurationR\x05lease\x12k\n%recommended_wait_until_next_extension\x18\x02 \x01(\x0b\x32\x19.google.protobuf.DurationR!recommendedWaitUntilNextExtension*\x8d\x01\n\x0eLegacyJobState\x12 \n\x1cLEGACY_JOB_STATE_UNSPECIFIED\x10\x00\x12\x1b\n\x17LEGACY_JOB_STATE_QUEUED\x10\x01\x12\x1c\n\x18LEGACY_JOB_STATE_STARTED\x10\x02\x12\x1e\n\x1aLEGACY_JOB_STATE_COMPLETED\x10\x03*\xb3\x01\n\x08JobState\x12\x19\n\x15JOB_STATE_UNSPECIFIED\x10\x00\x12\x17\n\x13JOB_STATE_SUBMITTED\x10\x01\x12\x15\n\x11JOB_STATE_RUNNING\x10\x02\x12\x15\n\x11JOB_STATE_STARTED\x10\x03\x12\x17\n\x13JOB_STATE_COMPLETED\x10\x04\x12\x14\n\x10JOB_STATE_FAILED\x10\x05\x12\x16\n\x12JOB_STATE_CANCELED\x10\x06*\x86\x01\n\tTaskState\x12\x1a\n\x16TASK_STATE_UNSPECIFIED\x10\x00\x12\x15\n\x11TASK_STATE_QUEUED\x10\x01\x12\x16\n\x12TASK_STATE_RUNNING\x10\x02\x12\x17\n\x13TASK_STATE_COMPUTED\x10\x03\x12\x15\n\x11TASK_STATE_FAILED\x10\x04\x42s\n\x10\x63om.workflows.v1B\tCoreProtoP\x01\xa2\x02\x03WXX\xaa\x02\x0cWorkflows.V1\xca\x02\x0cWorkflows\\V1\xe2\x02\x18Workflows\\V1\\GPBMetadata\xea\x02\rWorkflows::V1\x92\x03\x02\x08\x02\x62\x08\x65\x64itionsp\xe8\x07')
31
+ DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n\x17workflows/v1/core.proto\x12\x0cworkflows.v1\x1a\x1b\x62uf/validate/validate.proto\x1a\x1egoogle/protobuf/duration.proto\x1a\x1fgoogle/protobuf/timestamp.proto\x1a\x13tilebox/v1/id.proto\"d\n\x07\x43luster\x12\x12\n\x04slug\x18\x02 \x01(\tR\x04slug\x12!\n\x0c\x64isplay_name\x18\x03 \x01(\tR\x0b\x64isplayName\x12\x1c\n\tdeletable\x18\x04 \x01(\x08R\tdeletableJ\x04\x08\x01\x10\x02\"\xe5\x04\n\x03Job\x12\x1e\n\x02id\x18\x01 \x01(\x0b\x32\x0e.tilebox.v1.IDR\x02id\x12\x12\n\x04name\x18\x02 \x01(\tR\x04name\x12!\n\x0ctrace_parent\x18\x03 \x01(\tR\x0btraceParent\x12\x1e\n\x08\x63\x61nceled\x18\x05 \x01(\x08\x42\x02\x18\x01R\x08\x63\x61nceled\x12\x43\n\x0clegacy_state\x18\x06 \x01(\x0e\x32\x1c.workflows.v1.LegacyJobStateB\x02\x18\x01R\x0blegacyState\x12=\n\x0csubmitted_at\x18\x07 \x01(\x0b\x32\x1a.google.protobuf.TimestampR\x0bsubmittedAt\x12=\n\nstarted_at\x18\x08 \x01(\x0b\x32\x1a.google.protobuf.TimestampB\x02\x18\x01R\tstartedAt\x12@\n\x0etask_summaries\x18\t \x03(\x0b\x32\x19.workflows.v1.TaskSummaryR\rtaskSummaries\x12\x33\n\rautomation_id\x18\n \x01(\x0b\x32\x0e.tilebox.v1.IDR\x0c\x61utomationId\x12\x32\n\x08progress\x18\x0b \x03(\x0b\x32\x16.workflows.v1.ProgressR\x08progress\x12,\n\x05state\x18\x0c \x01(\x0e\x32\x16.workflows.v1.JobStateR\x05state\x12\x45\n\x0f\x65xecution_stats\x18\r \x01(\x0b\x32\x1c.workflows.v1.ExecutionStatsR\x0e\x65xecutionStatsJ\x04\x08\x04\x10\x05\"\xaf\x03\n\x0e\x45xecutionStats\x12M\n\x15\x66irst_task_started_at\x18\x01 \x01(\x0b\x32\x1a.google.protobuf.TimestampR\x12\x66irstTaskStartedAt\x12K\n\x14last_task_stopped_at\x18\x02 \x01(\x0b\x32\x1a.google.protobuf.TimestampR\x11lastTaskStoppedAt\x12<\n\x0c\x63ompute_time\x18\x03 \x01(\x0b\x32\x19.google.protobuf.DurationR\x0b\x63omputeTime\x12<\n\x0c\x65lapsed_time\x18\x04 \x01(\x0b\x32\x19.google.protobuf.DurationR\x0b\x65lapsedTime\x12 \n\x0bparallelism\x18\x05 \x01(\x01R\x0bparallelism\x12\x1f\n\x0btotal_tasks\x18\x06 \x01(\x04R\ntotalTasks\x12\x42\n\x0etasks_by_state\x18\x07 \x03(\x0b\x32\x1c.workflows.v1.TaskStateCountR\x0ctasksByState\"U\n\x0eTaskStateCount\x12-\n\x05state\x18\x01 \x01(\x0e\x32\x17.workflows.v1.TaskStateR\x05state\x12\x14\n\x05\x63ount\x18\x02 \x01(\x04R\x05\x63ount\"\x9f\x02\n\x0bTaskSummary\x12\x1e\n\x02id\x18\x01 \x01(\x0b\x32\x0e.tilebox.v1.IDR\x02id\x12\x18\n\x07\x64isplay\x18\x02 \x01(\tR\x07\x64isplay\x12-\n\x05state\x18\x03 \x01(\x0e\x32\x17.workflows.v1.TaskStateR\x05state\x12+\n\tparent_id\x18\x04 \x01(\x0b\x32\x0e.tilebox.v1.IDR\x08parentId\x12\x39\n\nstarted_at\x18\x06 \x01(\x0b\x32\x1a.google.protobuf.TimestampR\tstartedAt\x12\x39\n\nstopped_at\x18\x07 \x01(\x0b\x32\x1a.google.protobuf.TimestampR\tstoppedAtJ\x04\x08\x05\x10\x06\"S\n\x08Progress\x12\x1d\n\x05label\x18\x01 \x01(\tB\x07\xbaH\x04r\x02\x18\x64R\x05label\x12\x14\n\x05total\x18\x02 \x01(\x04R\x05total\x12\x12\n\x04\x64one\x18\x03 \x01(\x04R\x04\x64one\"\xa2\x03\n\x04Task\x12\x1e\n\x02id\x18\x01 \x01(\x0b\x32\x0e.tilebox.v1.IDR\x02id\x12<\n\nidentifier\x18\x02 \x01(\x0b\x32\x1c.workflows.v1.TaskIdentifierR\nidentifier\x12-\n\x05state\x18\x03 \x01(\x0e\x32\x17.workflows.v1.TaskStateR\x05state\x12\x1b\n\x05input\x18\x04 \x01(\x0c\x42\x05\xaa\x01\x02\x08\x01R\x05input\x12\x1f\n\x07\x64isplay\x18\x05 \x01(\tB\x05\xaa\x01\x02\x08\x01R\x07\x64isplay\x12#\n\x03job\x18\x06 \x01(\x0b\x32\x11.workflows.v1.JobR\x03job\x12+\n\tparent_id\x18\x07 \x01(\x0b\x32\x0e.tilebox.v1.IDR\x08parentId\x12-\n\ndepends_on\x18\x08 \x03(\x0b\x32\x0e.tilebox.v1.IDR\tdependsOn\x12-\n\x05lease\x18\t \x01(\x0b\x32\x17.workflows.v1.TaskLeaseR\x05lease\x12\x1f\n\x0bretry_count\x18\n \x01(\x03R\nretryCount\"d\n\x0eTaskIdentifier\x12\x1e\n\x04name\x18\x01 \x01(\tB\n\xbaH\x07r\x05 \x01(\x80\x02R\x04name\x12\x32\n\x07version\x18\x02 \x01(\tB\x18\xbaH\x15r\x13 \x01\x32\x0f^v(\\d+)\\.(\\d+)$R\x07version\"1\n\x05Tasks\x12(\n\x05tasks\x18\x01 \x03(\x0b\x32\x12.workflows.v1.TaskR\x05tasks\"\x98\x02\n\x14SingleTaskSubmission\x12!\n\x0c\x63luster_slug\x18\x01 \x01(\tR\x0b\x63lusterSlug\x12<\n\nidentifier\x18\x02 \x01(\x0b\x32\x1c.workflows.v1.TaskIdentifierR\nidentifier\x12!\n\x07\x64isplay\x18\x04 \x01(\tB\x07\xbaH\x04r\x02\x10\x01R\x07\x64isplay\x12\x32\n\x0c\x64\x65pendencies\x18\x05 \x03(\x03\x42\x0e\xbaH\x0b\x92\x01\x08\"\x06\"\x04\x18?(\x00R\x0c\x64\x65pendencies\x12(\n\x0bmax_retries\x18\x06 \x01(\x03\x42\x07\xbaH\x04\"\x02(\x00R\nmaxRetries\x12\x1e\n\x05input\x18\x03 \x01(\x0c\x42\x08\xbaH\x05z\x03\x18\x80\x10R\x05input\"\x91\x02\n\x0fTaskSubmissions\x12N\n\x0btask_groups\x18\x01 \x03(\x0b\x32!.workflows.v1.TaskSubmissionGroupB\n\xbaH\x07\x92\x01\x04\x08\x01\x10@R\ntaskGroups\x12.\n\x13\x63luster_slug_lookup\x18\x02 \x03(\tR\x11\x63lusterSlugLookup\x12I\n\x11identifier_lookup\x18\x03 \x03(\x0b\x32\x1c.workflows.v1.TaskIdentifierR\x10identifierLookup\x12\x33\n\x0e\x64isplay_lookup\x18\x04 \x03(\tB\x0c\xbaH\t\x92\x01\x06\"\x04r\x02\x10\x01R\rdisplayLookup\"\xd2\t\n\x13TaskSubmissionGroup\x12?\n\x1c\x64\x65pendencies_on_other_groups\x18\x01 \x03(\rR\x19\x64\x65pendenciesOnOtherGroups\x12\'\n\x06inputs\x18\x02 \x03(\x0c\x42\x0f\xbaH\x0c\x92\x01\t\x08\x01\"\x05z\x03\x18\x80\x10R\x06inputs\x12/\n\x13identifier_pointers\x18\x03 \x03(\x04R\x12identifierPointers\x12\x32\n\x15\x63luster_slug_pointers\x18\x04 \x03(\x04R\x13\x63lusterSlugPointers\x12)\n\x10\x64isplay_pointers\x18\x05 \x03(\x04R\x0f\x64isplayPointers\x12,\n\x12max_retries_values\x18\x06 \x03(\x03R\x10maxRetriesValues\x12\'\n\x0foptional_values\x18\x07 \x03(\x08R\x0eoptionalValues:\xe9\x06\xbaH\xe5\x06\x1a\xa6\x01\n,task_submission_group.identifiers_size_match\x12?The number of inputs must match the number of task identifiers.\x1a\x35this.inputs.size() == this.identifier_pointers.size()\x1a\xa7\x01\n.task_submission_group.cluster_slugs_size_match\x12<The number of cluster slugs must match the number of inputs.\x1a\x37this.inputs.size() == this.cluster_slug_pointers.size()\x1a\xa0\x01\n)task_submission_group.displays_size_match\x12?The number of display pointers must match the number of inputs.\x1a\x32this.inputs.size() == this.display_pointers.size()\x1a\xa7\x01\n,task_submission_group.max_retries_size_match\x12\x41The number of max_retries_values must match the number of inputs.\x1a\x34this.inputs.size() == this.max_retries_values.size()\x1a\xc2\x01\n)task_submission_group.optional_size_match\x12>The number of optional values must match the number of inputs.\x1aUthis.optional_values.size() == 0 || this.inputs.size() == this.optional_values.size()\"\xa9\x01\n\tTaskLease\x12/\n\x05lease\x18\x01 \x01(\x0b\x32\x19.google.protobuf.DurationR\x05lease\x12k\n%recommended_wait_until_next_extension\x18\x02 \x01(\x0b\x32\x19.google.protobuf.DurationR!recommendedWaitUntilNextExtension*\x8d\x01\n\x0eLegacyJobState\x12 \n\x1cLEGACY_JOB_STATE_UNSPECIFIED\x10\x00\x12\x1b\n\x17LEGACY_JOB_STATE_QUEUED\x10\x01\x12\x1c\n\x18LEGACY_JOB_STATE_STARTED\x10\x02\x12\x1e\n\x1aLEGACY_JOB_STATE_COMPLETED\x10\x03*\xb3\x01\n\x08JobState\x12\x19\n\x15JOB_STATE_UNSPECIFIED\x10\x00\x12\x17\n\x13JOB_STATE_SUBMITTED\x10\x01\x12\x15\n\x11JOB_STATE_RUNNING\x10\x02\x12\x15\n\x11JOB_STATE_STARTED\x10\x03\x12\x17\n\x13JOB_STATE_COMPLETED\x10\x04\x12\x14\n\x10JOB_STATE_FAILED\x10\x05\x12\x16\n\x12JOB_STATE_CANCELED\x10\x06*\xbe\x01\n\tTaskState\x12\x1a\n\x16TASK_STATE_UNSPECIFIED\x10\x00\x12\x15\n\x11TASK_STATE_QUEUED\x10\x01\x12\x16\n\x12TASK_STATE_RUNNING\x10\x02\x12\x17\n\x13TASK_STATE_COMPUTED\x10\x03\x12\x15\n\x11TASK_STATE_FAILED\x10\x04\x12\x16\n\x12TASK_STATE_SKIPPED\x10\x05\x12\x1e\n\x1aTASK_STATE_FAILED_OPTIONAL\x10\x06\x42s\n\x10\x63om.workflows.v1B\tCoreProtoP\x01\xa2\x02\x03WXX\xaa\x02\x0cWorkflows.V1\xca\x02\x0cWorkflows\\V1\xe2\x02\x18Workflows\\V1\\GPBMetadata\xea\x02\rWorkflows::V1\x92\x03\x02\x08\x02\x62\x08\x65\x64itionsp\xe8\x07')
32
32
 
33
33
  _globals = globals()
34
34
  _builder.BuildMessageAndEnumDescriptors(DESCRIPTOR, _globals)
@@ -65,39 +65,39 @@ if not _descriptor._USE_C_DESCRIPTORS:
65
65
  _globals['_TASKSUBMISSIONS'].fields_by_name['display_lookup']._loaded_options = None
66
66
  _globals['_TASKSUBMISSIONS'].fields_by_name['display_lookup']._serialized_options = b'\272H\t\222\001\006\"\004r\002\020\001'
67
67
  _globals['_TASKSUBMISSIONGROUP'].fields_by_name['inputs']._loaded_options = None
68
- _globals['_TASKSUBMISSIONGROUP'].fields_by_name['inputs']._serialized_options = b'\272H\n\222\001\007\"\005z\003\030\200\020'
68
+ _globals['_TASKSUBMISSIONGROUP'].fields_by_name['inputs']._serialized_options = b'\272H\014\222\001\t\010\001\"\005z\003\030\200\020'
69
69
  _globals['_TASKSUBMISSIONGROUP']._loaded_options = None
70
- _globals['_TASKSUBMISSIONGROUP']._serialized_options = b'\272H\240\005\032\246\001\n,task_submission_group.identifiers_size_match\022?The number of inputs must match the number of task identifiers.\0325this.inputs.size() == this.identifier_pointers.size()\032\247\001\n.task_submission_group.cluster_slugs_size_match\022<The number of cluster slugs must match the number of inputs.\0327this.inputs.size() == this.cluster_slug_pointers.size()\032\240\001\n)task_submission_group.displays_size_match\022?The number of display pointers must match the number of inputs.\0322this.inputs.size() == this.display_pointers.size()\032\247\001\n,task_submission_group.max_retries_size_match\022AThe number of max_retries_values must match the number of inputs.\0324this.inputs.size() == this.max_retries_values.size()'
71
- _globals['_LEGACYJOBSTATE']._serialized_start=4067
72
- _globals['_LEGACYJOBSTATE']._serialized_end=4208
73
- _globals['_JOBSTATE']._serialized_start=4211
74
- _globals['_JOBSTATE']._serialized_end=4390
75
- _globals['_TASKSTATE']._serialized_start=4393
76
- _globals['_TASKSTATE']._serialized_end=4527
70
+ _globals['_TASKSUBMISSIONGROUP']._serialized_options = b'\272H\345\006\032\246\001\n,task_submission_group.identifiers_size_match\022?The number of inputs must match the number of task identifiers.\0325this.inputs.size() == this.identifier_pointers.size()\032\247\001\n.task_submission_group.cluster_slugs_size_match\022<The number of cluster slugs must match the number of inputs.\0327this.inputs.size() == this.cluster_slug_pointers.size()\032\240\001\n)task_submission_group.displays_size_match\022?The number of display pointers must match the number of inputs.\0322this.inputs.size() == this.display_pointers.size()\032\247\001\n,task_submission_group.max_retries_size_match\022AThe number of max_retries_values must match the number of inputs.\0324this.inputs.size() == this.max_retries_values.size()\032\302\001\n)task_submission_group.optional_size_match\022>The number of optional values must match the number of inputs.\032Uthis.optional_values.size() == 0 || this.inputs.size() == this.optional_values.size()'
71
+ _globals['_LEGACYJOBSTATE']._serialized_start=4313
72
+ _globals['_LEGACYJOBSTATE']._serialized_end=4454
73
+ _globals['_JOBSTATE']._serialized_start=4457
74
+ _globals['_JOBSTATE']._serialized_end=4636
75
+ _globals['_TASKSTATE']._serialized_start=4639
76
+ _globals['_TASKSTATE']._serialized_end=4829
77
77
  _globals['_CLUSTER']._serialized_start=156
78
- _globals['_CLUSTER']._serialized_end=250
79
- _globals['_JOB']._serialized_start=253
80
- _globals['_JOB']._serialized_end=866
81
- _globals['_EXECUTIONSTATS']._serialized_start=869
82
- _globals['_EXECUTIONSTATS']._serialized_end=1300
83
- _globals['_TASKSTATECOUNT']._serialized_start=1302
84
- _globals['_TASKSTATECOUNT']._serialized_end=1387
85
- _globals['_TASKSUMMARY']._serialized_start=1390
86
- _globals['_TASKSUMMARY']._serialized_end=1677
87
- _globals['_PROGRESS']._serialized_start=1679
88
- _globals['_PROGRESS']._serialized_end=1762
89
- _globals['_TASK']._serialized_start=1765
90
- _globals['_TASK']._serialized_end=2183
91
- _globals['_TASKIDENTIFIER']._serialized_start=2185
92
- _globals['_TASKIDENTIFIER']._serialized_end=2285
93
- _globals['_TASKS']._serialized_start=2287
94
- _globals['_TASKS']._serialized_end=2336
95
- _globals['_SINGLETASKSUBMISSION']._serialized_start=2339
96
- _globals['_SINGLETASKSUBMISSION']._serialized_end=2619
97
- _globals['_TASKSUBMISSIONS']._serialized_start=2622
98
- _globals['_TASKSUBMISSIONS']._serialized_end=2895
99
- _globals['_TASKSUBMISSIONGROUP']._serialized_start=2898
100
- _globals['_TASKSUBMISSIONGROUP']._serialized_end=3892
101
- _globals['_TASKLEASE']._serialized_start=3895
102
- _globals['_TASKLEASE']._serialized_end=4064
78
+ _globals['_CLUSTER']._serialized_end=256
79
+ _globals['_JOB']._serialized_start=259
80
+ _globals['_JOB']._serialized_end=872
81
+ _globals['_EXECUTIONSTATS']._serialized_start=875
82
+ _globals['_EXECUTIONSTATS']._serialized_end=1306
83
+ _globals['_TASKSTATECOUNT']._serialized_start=1308
84
+ _globals['_TASKSTATECOUNT']._serialized_end=1393
85
+ _globals['_TASKSUMMARY']._serialized_start=1396
86
+ _globals['_TASKSUMMARY']._serialized_end=1683
87
+ _globals['_PROGRESS']._serialized_start=1685
88
+ _globals['_PROGRESS']._serialized_end=1768
89
+ _globals['_TASK']._serialized_start=1771
90
+ _globals['_TASK']._serialized_end=2189
91
+ _globals['_TASKIDENTIFIER']._serialized_start=2191
92
+ _globals['_TASKIDENTIFIER']._serialized_end=2291
93
+ _globals['_TASKS']._serialized_start=2293
94
+ _globals['_TASKS']._serialized_end=2342
95
+ _globals['_SINGLETASKSUBMISSION']._serialized_start=2345
96
+ _globals['_SINGLETASKSUBMISSION']._serialized_end=2625
97
+ _globals['_TASKSUBMISSIONS']._serialized_start=2628
98
+ _globals['_TASKSUBMISSIONS']._serialized_end=2901
99
+ _globals['_TASKSUBMISSIONGROUP']._serialized_start=2904
100
+ _globals['_TASKSUBMISSIONGROUP']._serialized_end=4138
101
+ _globals['_TASKLEASE']._serialized_start=4141
102
+ _globals['_TASKLEASE']._serialized_end=4310
103
103
  # @@protoc_insertion_point(module_scope)
@@ -35,6 +35,8 @@ class TaskState(int, metaclass=_enum_type_wrapper.EnumTypeWrapper):
35
35
  TASK_STATE_RUNNING: _ClassVar[TaskState]
36
36
  TASK_STATE_COMPUTED: _ClassVar[TaskState]
37
37
  TASK_STATE_FAILED: _ClassVar[TaskState]
38
+ TASK_STATE_SKIPPED: _ClassVar[TaskState]
39
+ TASK_STATE_FAILED_OPTIONAL: _ClassVar[TaskState]
38
40
  LEGACY_JOB_STATE_UNSPECIFIED: LegacyJobState
39
41
  LEGACY_JOB_STATE_QUEUED: LegacyJobState
40
42
  LEGACY_JOB_STATE_STARTED: LegacyJobState
@@ -51,6 +53,8 @@ TASK_STATE_QUEUED: TaskState
51
53
  TASK_STATE_RUNNING: TaskState
52
54
  TASK_STATE_COMPUTED: TaskState
53
55
  TASK_STATE_FAILED: TaskState
56
+ TASK_STATE_SKIPPED: TaskState
57
+ TASK_STATE_FAILED_OPTIONAL: TaskState
54
58
 
55
59
  class Cluster(_message.Message):
56
60
  __slots__ = ("slug", "display_name", "deletable")
@@ -209,20 +213,22 @@ class TaskSubmissions(_message.Message):
209
213
  def __init__(self, task_groups: _Optional[_Iterable[_Union[TaskSubmissionGroup, _Mapping]]] = ..., cluster_slug_lookup: _Optional[_Iterable[str]] = ..., identifier_lookup: _Optional[_Iterable[_Union[TaskIdentifier, _Mapping]]] = ..., display_lookup: _Optional[_Iterable[str]] = ...) -> None: ...
210
214
 
211
215
  class TaskSubmissionGroup(_message.Message):
212
- __slots__ = ("dependencies_on_other_groups", "inputs", "identifier_pointers", "cluster_slug_pointers", "display_pointers", "max_retries_values")
216
+ __slots__ = ("dependencies_on_other_groups", "inputs", "identifier_pointers", "cluster_slug_pointers", "display_pointers", "max_retries_values", "optional_values")
213
217
  DEPENDENCIES_ON_OTHER_GROUPS_FIELD_NUMBER: _ClassVar[int]
214
218
  INPUTS_FIELD_NUMBER: _ClassVar[int]
215
219
  IDENTIFIER_POINTERS_FIELD_NUMBER: _ClassVar[int]
216
220
  CLUSTER_SLUG_POINTERS_FIELD_NUMBER: _ClassVar[int]
217
221
  DISPLAY_POINTERS_FIELD_NUMBER: _ClassVar[int]
218
222
  MAX_RETRIES_VALUES_FIELD_NUMBER: _ClassVar[int]
223
+ OPTIONAL_VALUES_FIELD_NUMBER: _ClassVar[int]
219
224
  dependencies_on_other_groups: _containers.RepeatedScalarFieldContainer[int]
220
225
  inputs: _containers.RepeatedScalarFieldContainer[bytes]
221
226
  identifier_pointers: _containers.RepeatedScalarFieldContainer[int]
222
227
  cluster_slug_pointers: _containers.RepeatedScalarFieldContainer[int]
223
228
  display_pointers: _containers.RepeatedScalarFieldContainer[int]
224
229
  max_retries_values: _containers.RepeatedScalarFieldContainer[int]
225
- def __init__(self, dependencies_on_other_groups: _Optional[_Iterable[int]] = ..., inputs: _Optional[_Iterable[bytes]] = ..., identifier_pointers: _Optional[_Iterable[int]] = ..., cluster_slug_pointers: _Optional[_Iterable[int]] = ..., display_pointers: _Optional[_Iterable[int]] = ..., max_retries_values: _Optional[_Iterable[int]] = ...) -> None: ...
230
+ optional_values: _containers.RepeatedScalarFieldContainer[bool]
231
+ def __init__(self, dependencies_on_other_groups: _Optional[_Iterable[int]] = ..., inputs: _Optional[_Iterable[bytes]] = ..., identifier_pointers: _Optional[_Iterable[int]] = ..., cluster_slug_pointers: _Optional[_Iterable[int]] = ..., display_pointers: _Optional[_Iterable[int]] = ..., max_retries_values: _Optional[_Iterable[int]] = ..., optional_values: _Optional[_Iterable[bool]] = ...) -> None: ...
226
232
 
227
233
  class TaskLease(_message.Message):
228
234
  __slots__ = ("lease", "recommended_wait_until_next_extension")
@@ -29,7 +29,7 @@ from tilebox.workflows.workflows.v1 import core_pb2 as workflows_dot_v1_dot_core
29
29
  from tilebox.workflows.workflows.v1 import diagram_pb2 as workflows_dot_v1_dot_diagram__pb2
30
30
 
31
31
 
32
- DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n\x16workflows/v1/job.proto\x12\x0cworkflows.v1\x1a\x1b\x62uf/validate/validate.proto\x1a\x13tilebox/v1/id.proto\x1a\x16tilebox/v1/query.proto\x1a\x17workflows/v1/core.proto\x1a\x1aworkflows/v1/diagram.proto\"\x9f\x02\n\x10SubmitJobRequest\x12Q\n\x0clegacy_tasks\x18\x01 \x03(\x0b\x32\".workflows.v1.SingleTaskSubmissionB\n\xbaH\x07\x92\x01\x04\x08\x01\x10@R\x0blegacyTasks\x12\x33\n\x05tasks\x18\x05 \x01(\x0b\x32\x1d.workflows.v1.TaskSubmissionsR\x05tasks\x12\"\n\x08job_name\x18\x02 \x01(\tB\x07\xbaH\x04r\x02\x10\x01R\x07jobName\x12*\n\x0ctrace_parent\x18\x03 \x01(\tB\x07\xbaH\x04r\x02\x10\x01R\x0btraceParent\x12\x33\n\rautomation_id\x18\x04 \x01(\x0b\x32\x0e.tilebox.v1.IDR\x0c\x61utomationId\">\n\rGetJobRequest\x12-\n\x06job_id\x18\x01 \x01(\x0b\x32\x0e.tilebox.v1.IDB\x06\xbaH\x03\xc8\x01\x01R\x05jobId\"F\n\x15GetJobProgressRequest\x12-\n\x06job_id\x18\x01 \x01(\x0b\x32\x0e.tilebox.v1.IDB\x06\xbaH\x03\xc8\x01\x01R\x05jobId\"@\n\x0fRetryJobRequest\x12-\n\x06job_id\x18\x01 \x01(\x0b\x32\x0e.tilebox.v1.IDB\x06\xbaH\x03\xc8\x01\x01R\x05jobId\"F\n\x10RetryJobResponse\x12\x32\n\x15num_tasks_rescheduled\x18\x01 \x01(\x03R\x13numTasksRescheduled\"A\n\x10\x43\x61ncelJobRequest\x12-\n\x06job_id\x18\x01 \x01(\x0b\x32\x0e.tilebox.v1.IDB\x06\xbaH\x03\xc8\x01\x01R\x05jobId\"\x13\n\x11\x43\x61ncelJobResponse\"\xec\x01\n\x13VisualizeJobRequest\x12-\n\x06job_id\x18\x01 \x01(\x0b\x32\x0e.tilebox.v1.IDB\x06\xbaH\x03\xc8\x01\x01R\x05jobId\x12\x42\n\x0erender_options\x18\x02 \x01(\x0b\x32\x1b.workflows.v1.RenderOptionsR\rrenderOptions\x12\x38\n\x05theme\x18\x03 \x01(\x0e\x32\".workflows.v1.WorkflowDiagramThemeR\x05theme\x12(\n\x10include_job_name\x18\x04 \x01(\x08R\x0eincludeJobName\"\xaf\x02\n\x0cQueryFilters\x12=\n\rtime_interval\x18\x01 \x01(\x0b\x32\x18.tilebox.v1.TimeIntervalR\x0ctimeInterval\x12\x37\n\x0bid_interval\x18\x02 \x01(\x0b\x32\x16.tilebox.v1.IDIntervalR\nidInterval\x12\x35\n\x0e\x61utomation_ids\x18\x03 \x03(\x0b\x32\x0e.tilebox.v1.IDR\rautomationIds\x12.\n\x06states\x18\x04 \x03(\x0e\x32\x16.workflows.v1.JobStateR\x06states\x12\x1b\n\x04name\x18\x05 \x01(\tB\x07\xbaH\x04r\x02\x18\x64R\x04name:#\xbaH \"\x1e\n\rtime_interval\n\x0bid_interval\x10\x01\"{\n\x10QueryJobsRequest\x12\x34\n\x07\x66ilters\x18\x01 \x01(\x0b\x32\x1a.workflows.v1.QueryFiltersR\x07\x66ilters\x12\x31\n\x04page\x18\x02 \x01(\x0b\x32\x16.tilebox.v1.PaginationB\x05\xaa\x01\x02\x08\x01R\x04page\"v\n\x11QueryJobsResponse\x12%\n\x04jobs\x18\x01 \x03(\x0b\x32\x11.workflows.v1.JobR\x04jobs\x12:\n\tnext_page\x18\x03 \x01(\x0b\x32\x16.tilebox.v1.PaginationB\x05\xaa\x01\x02\x08\x01R\x08nextPage\"G\n\x16GetJobPrototypeRequest\x12-\n\x06job_id\x18\x01 \x01(\x0b\x32\x0e.tilebox.v1.IDB\x06\xbaH\x03\xc8\x01\x01R\x05jobId\"w\n\x17GetJobPrototypeResponse\x12\x41\n\nroot_tasks\x18\x01 \x03(\x0b\x32\".workflows.v1.SingleTaskSubmissionR\trootTasks\x12\x19\n\x08job_name\x18\x02 \x01(\tR\x07jobName\"\xc6\x01\n\x0f\x43loneJobRequest\x12-\n\x06job_id\x18\x01 \x01(\x0b\x32\x0e.tilebox.v1.IDB\x06\xbaH\x03\xc8\x01\x01R\x05jobId\x12`\n\x14root_tasks_overrides\x18\x02 \x03(\x0b\x32\".workflows.v1.SingleTaskSubmissionB\n\xbaH\x07\x92\x01\x04\x08\x01\x10@R\x12rootTasksOverrides\x12\"\n\x08job_name\x18\x03 \x01(\tB\x07\xbaH\x04r\x02\x10\x01R\x07jobName*\xd4\x01\n\x14WorkflowDiagramTheme\x12&\n\"WORKFLOW_DIAGRAM_THEME_UNSPECIFIED\x10\x00\x12 \n\x1cWORKFLOW_DIAGRAM_THEME_LIGHT\x10\x01\x12\x1f\n\x1bWORKFLOW_DIAGRAM_THEME_DARK\x10\x02\x12(\n$WORKFLOW_DIAGRAM_THEME_CONSOLE_LIGHT\x10\x03\x12\'\n#WORKFLOW_DIAGRAM_THEME_CONSOLE_DARK\x10\x04\x32\x9f\x05\n\nJobService\x12>\n\tSubmitJob\x12\x1e.workflows.v1.SubmitJobRequest\x1a\x11.workflows.v1.Job\x12\x38\n\x06GetJob\x12\x1b.workflows.v1.GetJobRequest\x1a\x11.workflows.v1.Job\x12H\n\x0eGetJobProgress\x12#.workflows.v1.GetJobProgressRequest\x1a\x11.workflows.v1.Job\x12I\n\x08RetryJob\x12\x1d.workflows.v1.RetryJobRequest\x1a\x1e.workflows.v1.RetryJobResponse\x12L\n\tCancelJob\x12\x1e.workflows.v1.CancelJobRequest\x1a\x1f.workflows.v1.CancelJobResponse\x12H\n\x0cVisualizeJob\x12!.workflows.v1.VisualizeJobRequest\x1a\x15.workflows.v1.Diagram\x12L\n\tQueryJobs\x12\x1e.workflows.v1.QueryJobsRequest\x1a\x1f.workflows.v1.QueryJobsResponse\x12^\n\x0fGetJobPrototype\x12$.workflows.v1.GetJobPrototypeRequest\x1a%.workflows.v1.GetJobPrototypeResponse\x12<\n\x08\x43loneJob\x12\x1d.workflows.v1.CloneJobRequest\x1a\x11.workflows.v1.JobBr\n\x10\x63om.workflows.v1B\x08JobProtoP\x01\xa2\x02\x03WXX\xaa\x02\x0cWorkflows.V1\xca\x02\x0cWorkflows\\V1\xe2\x02\x18Workflows\\V1\\GPBMetadata\xea\x02\rWorkflows::V1\x92\x03\x02\x08\x02\x62\x08\x65\x64itionsp\xe8\x07')
32
+ DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n\x16workflows/v1/job.proto\x12\x0cworkflows.v1\x1a\x1b\x62uf/validate/validate.proto\x1a\x13tilebox/v1/id.proto\x1a\x16tilebox/v1/query.proto\x1a\x17workflows/v1/core.proto\x1a\x1aworkflows/v1/diagram.proto\"\xce\x03\n\x10SubmitJobRequest\x12\x33\n\x05tasks\x18\x05 \x01(\x0b\x32\x1d.workflows.v1.TaskSubmissionsR\x05tasks\x12\"\n\x08job_name\x18\x02 \x01(\tB\x07\xbaH\x04r\x02\x10\x01R\x07jobName\x12*\n\x0ctrace_parent\x18\x03 \x01(\tB\x07\xbaH\x04r\x02\x10\x01R\x0btraceParent\x12\x33\n\rautomation_id\x18\x04 \x01(\x0b\x32\x0e.tilebox.v1.IDR\x0c\x61utomationId\x12R\n\x0clegacy_tasks\x18\x01 \x03(\x0b\x32\".workflows.v1.SingleTaskSubmissionB\x0b\x18\x01\xbaH\x06\x92\x01\x03\x10\xe8\x07R\x0blegacyTasks:\xab\x01\xbaH\xa7\x01\x1a\xa4\x01\n!submit_job_request.tasks_required\x12$At least one task must be submitted.\x1aY(this.tasks != null && this.tasks.task_groups.size() > 0) || this.legacy_tasks.size() > 0\">\n\rGetJobRequest\x12-\n\x06job_id\x18\x01 \x01(\x0b\x32\x0e.tilebox.v1.IDB\x06\xbaH\x03\xc8\x01\x01R\x05jobId\"F\n\x15GetJobProgressRequest\x12-\n\x06job_id\x18\x01 \x01(\x0b\x32\x0e.tilebox.v1.IDB\x06\xbaH\x03\xc8\x01\x01R\x05jobId\"@\n\x0fRetryJobRequest\x12-\n\x06job_id\x18\x01 \x01(\x0b\x32\x0e.tilebox.v1.IDB\x06\xbaH\x03\xc8\x01\x01R\x05jobId\"F\n\x10RetryJobResponse\x12\x32\n\x15num_tasks_rescheduled\x18\x01 \x01(\x03R\x13numTasksRescheduled\"A\n\x10\x43\x61ncelJobRequest\x12-\n\x06job_id\x18\x01 \x01(\x0b\x32\x0e.tilebox.v1.IDB\x06\xbaH\x03\xc8\x01\x01R\x05jobId\"\x13\n\x11\x43\x61ncelJobResponse\"\xec\x01\n\x13VisualizeJobRequest\x12-\n\x06job_id\x18\x01 \x01(\x0b\x32\x0e.tilebox.v1.IDB\x06\xbaH\x03\xc8\x01\x01R\x05jobId\x12\x42\n\x0erender_options\x18\x02 \x01(\x0b\x32\x1b.workflows.v1.RenderOptionsR\rrenderOptions\x12\x38\n\x05theme\x18\x03 \x01(\x0e\x32\".workflows.v1.WorkflowDiagramThemeR\x05theme\x12(\n\x10include_job_name\x18\x04 \x01(\x08R\x0eincludeJobName\"\xe9\x02\n\x0cQueryFilters\x12=\n\rtime_interval\x18\x01 \x01(\x0b\x32\x18.tilebox.v1.TimeIntervalR\x0ctimeInterval\x12\x37\n\x0bid_interval\x18\x02 \x01(\x0b\x32\x16.tilebox.v1.IDIntervalR\nidInterval\x12\x35\n\x0e\x61utomation_ids\x18\x03 \x03(\x0b\x32\x0e.tilebox.v1.IDR\rautomationIds\x12.\n\x06states\x18\x04 \x03(\x0e\x32\x16.workflows.v1.JobStateR\x06states\x12\x1b\n\x04name\x18\x05 \x01(\tB\x07\xbaH\x04r\x02\x18\x64R\x04name\x12\x38\n\x0btask_states\x18\x06 \x03(\x0e\x32\x17.workflows.v1.TaskStateR\ntaskStates:#\xbaH \"\x1e\n\rtime_interval\n\x0bid_interval\x10\x01\"{\n\x10QueryJobsRequest\x12\x34\n\x07\x66ilters\x18\x01 \x01(\x0b\x32\x1a.workflows.v1.QueryFiltersR\x07\x66ilters\x12\x31\n\x04page\x18\x02 \x01(\x0b\x32\x16.tilebox.v1.PaginationB\x05\xaa\x01\x02\x08\x01R\x04page\"v\n\x11QueryJobsResponse\x12%\n\x04jobs\x18\x01 \x03(\x0b\x32\x11.workflows.v1.JobR\x04jobs\x12:\n\tnext_page\x18\x03 \x01(\x0b\x32\x16.tilebox.v1.PaginationB\x05\xaa\x01\x02\x08\x01R\x08nextPage\"G\n\x16GetJobPrototypeRequest\x12-\n\x06job_id\x18\x01 \x01(\x0b\x32\x0e.tilebox.v1.IDB\x06\xbaH\x03\xc8\x01\x01R\x05jobId\"w\n\x17GetJobPrototypeResponse\x12\x41\n\nroot_tasks\x18\x01 \x03(\x0b\x32\".workflows.v1.SingleTaskSubmissionR\trootTasks\x12\x19\n\x08job_name\x18\x02 \x01(\tR\x07jobName\"\xc6\x01\n\x0f\x43loneJobRequest\x12-\n\x06job_id\x18\x01 \x01(\x0b\x32\x0e.tilebox.v1.IDB\x06\xbaH\x03\xc8\x01\x01R\x05jobId\x12`\n\x14root_tasks_overrides\x18\x02 \x03(\x0b\x32\".workflows.v1.SingleTaskSubmissionB\n\xbaH\x07\x92\x01\x04\x08\x01\x10@R\x12rootTasksOverrides\x12\"\n\x08job_name\x18\x03 \x01(\tB\x07\xbaH\x04r\x02\x10\x01R\x07jobName*\xd4\x01\n\x14WorkflowDiagramTheme\x12&\n\"WORKFLOW_DIAGRAM_THEME_UNSPECIFIED\x10\x00\x12 \n\x1cWORKFLOW_DIAGRAM_THEME_LIGHT\x10\x01\x12\x1f\n\x1bWORKFLOW_DIAGRAM_THEME_DARK\x10\x02\x12(\n$WORKFLOW_DIAGRAM_THEME_CONSOLE_LIGHT\x10\x03\x12\'\n#WORKFLOW_DIAGRAM_THEME_CONSOLE_DARK\x10\x04\x32\x9f\x05\n\nJobService\x12>\n\tSubmitJob\x12\x1e.workflows.v1.SubmitJobRequest\x1a\x11.workflows.v1.Job\x12\x38\n\x06GetJob\x12\x1b.workflows.v1.GetJobRequest\x1a\x11.workflows.v1.Job\x12H\n\x0eGetJobProgress\x12#.workflows.v1.GetJobProgressRequest\x1a\x11.workflows.v1.Job\x12I\n\x08RetryJob\x12\x1d.workflows.v1.RetryJobRequest\x1a\x1e.workflows.v1.RetryJobResponse\x12L\n\tCancelJob\x12\x1e.workflows.v1.CancelJobRequest\x1a\x1f.workflows.v1.CancelJobResponse\x12H\n\x0cVisualizeJob\x12!.workflows.v1.VisualizeJobRequest\x1a\x15.workflows.v1.Diagram\x12L\n\tQueryJobs\x12\x1e.workflows.v1.QueryJobsRequest\x1a\x1f.workflows.v1.QueryJobsResponse\x12^\n\x0fGetJobPrototype\x12$.workflows.v1.GetJobPrototypeRequest\x1a%.workflows.v1.GetJobPrototypeResponse\x12<\n\x08\x43loneJob\x12\x1d.workflows.v1.CloneJobRequest\x1a\x11.workflows.v1.JobBr\n\x10\x63om.workflows.v1B\x08JobProtoP\x01\xa2\x02\x03WXX\xaa\x02\x0cWorkflows.V1\xca\x02\x0cWorkflows\\V1\xe2\x02\x18Workflows\\V1\\GPBMetadata\xea\x02\rWorkflows::V1\x92\x03\x02\x08\x02\x62\x08\x65\x64itionsp\xe8\x07')
33
33
 
34
34
  _globals = globals()
35
35
  _builder.BuildMessageAndEnumDescriptors(DESCRIPTOR, _globals)
@@ -37,12 +37,14 @@ _builder.BuildTopDescriptorsAndMessages(DESCRIPTOR, 'workflows.v1.job_pb2', _glo
37
37
  if not _descriptor._USE_C_DESCRIPTORS:
38
38
  _globals['DESCRIPTOR']._loaded_options = None
39
39
  _globals['DESCRIPTOR']._serialized_options = b'\n\020com.workflows.v1B\010JobProtoP\001\242\002\003WXX\252\002\014Workflows.V1\312\002\014Workflows\\V1\342\002\030Workflows\\V1\\GPBMetadata\352\002\rWorkflows::V1\222\003\002\010\002'
40
- _globals['_SUBMITJOBREQUEST'].fields_by_name['legacy_tasks']._loaded_options = None
41
- _globals['_SUBMITJOBREQUEST'].fields_by_name['legacy_tasks']._serialized_options = b'\272H\007\222\001\004\010\001\020@'
42
40
  _globals['_SUBMITJOBREQUEST'].fields_by_name['job_name']._loaded_options = None
43
41
  _globals['_SUBMITJOBREQUEST'].fields_by_name['job_name']._serialized_options = b'\272H\004r\002\020\001'
44
42
  _globals['_SUBMITJOBREQUEST'].fields_by_name['trace_parent']._loaded_options = None
45
43
  _globals['_SUBMITJOBREQUEST'].fields_by_name['trace_parent']._serialized_options = b'\272H\004r\002\020\001'
44
+ _globals['_SUBMITJOBREQUEST'].fields_by_name['legacy_tasks']._loaded_options = None
45
+ _globals['_SUBMITJOBREQUEST'].fields_by_name['legacy_tasks']._serialized_options = b'\030\001\272H\006\222\001\003\020\350\007'
46
+ _globals['_SUBMITJOBREQUEST']._loaded_options = None
47
+ _globals['_SUBMITJOBREQUEST']._serialized_options = b'\272H\247\001\032\244\001\n!submit_job_request.tasks_required\022$At least one task must be submitted.\032Y(this.tasks != null && this.tasks.task_groups.size() > 0) || this.legacy_tasks.size() > 0'
46
48
  _globals['_GETJOBREQUEST'].fields_by_name['job_id']._loaded_options = None
47
49
  _globals['_GETJOBREQUEST'].fields_by_name['job_id']._serialized_options = b'\272H\003\310\001\001'
48
50
  _globals['_GETJOBPROGRESSREQUEST'].fields_by_name['job_id']._loaded_options = None
@@ -69,36 +71,36 @@ if not _descriptor._USE_C_DESCRIPTORS:
69
71
  _globals['_CLONEJOBREQUEST'].fields_by_name['root_tasks_overrides']._serialized_options = b'\272H\007\222\001\004\010\001\020@'
70
72
  _globals['_CLONEJOBREQUEST'].fields_by_name['job_name']._loaded_options = None
71
73
  _globals['_CLONEJOBREQUEST'].fields_by_name['job_name']._serialized_options = b'\272H\004r\002\020\001'
72
- _globals['_WORKFLOWDIAGRAMTHEME']._serialized_start=2005
73
- _globals['_WORKFLOWDIAGRAMTHEME']._serialized_end=2217
74
+ _globals['_WORKFLOWDIAGRAMTHEME']._serialized_start=2238
75
+ _globals['_WORKFLOWDIAGRAMTHEME']._serialized_end=2450
74
76
  _globals['_SUBMITJOBREQUEST']._serialized_start=168
75
- _globals['_SUBMITJOBREQUEST']._serialized_end=455
76
- _globals['_GETJOBREQUEST']._serialized_start=457
77
- _globals['_GETJOBREQUEST']._serialized_end=519
78
- _globals['_GETJOBPROGRESSREQUEST']._serialized_start=521
79
- _globals['_GETJOBPROGRESSREQUEST']._serialized_end=591
80
- _globals['_RETRYJOBREQUEST']._serialized_start=593
81
- _globals['_RETRYJOBREQUEST']._serialized_end=657
82
- _globals['_RETRYJOBRESPONSE']._serialized_start=659
83
- _globals['_RETRYJOBRESPONSE']._serialized_end=729
84
- _globals['_CANCELJOBREQUEST']._serialized_start=731
85
- _globals['_CANCELJOBREQUEST']._serialized_end=796
86
- _globals['_CANCELJOBRESPONSE']._serialized_start=798
87
- _globals['_CANCELJOBRESPONSE']._serialized_end=817
88
- _globals['_VISUALIZEJOBREQUEST']._serialized_start=820
89
- _globals['_VISUALIZEJOBREQUEST']._serialized_end=1056
90
- _globals['_QUERYFILTERS']._serialized_start=1059
91
- _globals['_QUERYFILTERS']._serialized_end=1362
92
- _globals['_QUERYJOBSREQUEST']._serialized_start=1364
93
- _globals['_QUERYJOBSREQUEST']._serialized_end=1487
94
- _globals['_QUERYJOBSRESPONSE']._serialized_start=1489
95
- _globals['_QUERYJOBSRESPONSE']._serialized_end=1607
96
- _globals['_GETJOBPROTOTYPEREQUEST']._serialized_start=1609
97
- _globals['_GETJOBPROTOTYPEREQUEST']._serialized_end=1680
98
- _globals['_GETJOBPROTOTYPERESPONSE']._serialized_start=1682
99
- _globals['_GETJOBPROTOTYPERESPONSE']._serialized_end=1801
100
- _globals['_CLONEJOBREQUEST']._serialized_start=1804
101
- _globals['_CLONEJOBREQUEST']._serialized_end=2002
102
- _globals['_JOBSERVICE']._serialized_start=2220
103
- _globals['_JOBSERVICE']._serialized_end=2891
77
+ _globals['_SUBMITJOBREQUEST']._serialized_end=630
78
+ _globals['_GETJOBREQUEST']._serialized_start=632
79
+ _globals['_GETJOBREQUEST']._serialized_end=694
80
+ _globals['_GETJOBPROGRESSREQUEST']._serialized_start=696
81
+ _globals['_GETJOBPROGRESSREQUEST']._serialized_end=766
82
+ _globals['_RETRYJOBREQUEST']._serialized_start=768
83
+ _globals['_RETRYJOBREQUEST']._serialized_end=832
84
+ _globals['_RETRYJOBRESPONSE']._serialized_start=834
85
+ _globals['_RETRYJOBRESPONSE']._serialized_end=904
86
+ _globals['_CANCELJOBREQUEST']._serialized_start=906
87
+ _globals['_CANCELJOBREQUEST']._serialized_end=971
88
+ _globals['_CANCELJOBRESPONSE']._serialized_start=973
89
+ _globals['_CANCELJOBRESPONSE']._serialized_end=992
90
+ _globals['_VISUALIZEJOBREQUEST']._serialized_start=995
91
+ _globals['_VISUALIZEJOBREQUEST']._serialized_end=1231
92
+ _globals['_QUERYFILTERS']._serialized_start=1234
93
+ _globals['_QUERYFILTERS']._serialized_end=1595
94
+ _globals['_QUERYJOBSREQUEST']._serialized_start=1597
95
+ _globals['_QUERYJOBSREQUEST']._serialized_end=1720
96
+ _globals['_QUERYJOBSRESPONSE']._serialized_start=1722
97
+ _globals['_QUERYJOBSRESPONSE']._serialized_end=1840
98
+ _globals['_GETJOBPROTOTYPEREQUEST']._serialized_start=1842
99
+ _globals['_GETJOBPROTOTYPEREQUEST']._serialized_end=1913
100
+ _globals['_GETJOBPROTOTYPERESPONSE']._serialized_start=1915
101
+ _globals['_GETJOBPROTOTYPERESPONSE']._serialized_end=2034
102
+ _globals['_CLONEJOBREQUEST']._serialized_start=2037
103
+ _globals['_CLONEJOBREQUEST']._serialized_end=2235
104
+ _globals['_JOBSERVICE']._serialized_start=2453
105
+ _globals['_JOBSERVICE']._serialized_end=3124
104
106
  # @@protoc_insertion_point(module_scope)
@@ -26,18 +26,18 @@ WORKFLOW_DIAGRAM_THEME_CONSOLE_LIGHT: WorkflowDiagramTheme
26
26
  WORKFLOW_DIAGRAM_THEME_CONSOLE_DARK: WorkflowDiagramTheme
27
27
 
28
28
  class SubmitJobRequest(_message.Message):
29
- __slots__ = ("legacy_tasks", "tasks", "job_name", "trace_parent", "automation_id")
30
- LEGACY_TASKS_FIELD_NUMBER: _ClassVar[int]
29
+ __slots__ = ("tasks", "job_name", "trace_parent", "automation_id", "legacy_tasks")
31
30
  TASKS_FIELD_NUMBER: _ClassVar[int]
32
31
  JOB_NAME_FIELD_NUMBER: _ClassVar[int]
33
32
  TRACE_PARENT_FIELD_NUMBER: _ClassVar[int]
34
33
  AUTOMATION_ID_FIELD_NUMBER: _ClassVar[int]
35
- legacy_tasks: _containers.RepeatedCompositeFieldContainer[_core_pb2.SingleTaskSubmission]
34
+ LEGACY_TASKS_FIELD_NUMBER: _ClassVar[int]
36
35
  tasks: _core_pb2.TaskSubmissions
37
36
  job_name: str
38
37
  trace_parent: str
39
38
  automation_id: _id_pb2.ID
40
- def __init__(self, legacy_tasks: _Optional[_Iterable[_Union[_core_pb2.SingleTaskSubmission, _Mapping]]] = ..., tasks: _Optional[_Union[_core_pb2.TaskSubmissions, _Mapping]] = ..., job_name: _Optional[str] = ..., trace_parent: _Optional[str] = ..., automation_id: _Optional[_Union[_id_pb2.ID, _Mapping]] = ...) -> None: ...
39
+ legacy_tasks: _containers.RepeatedCompositeFieldContainer[_core_pb2.SingleTaskSubmission]
40
+ def __init__(self, tasks: _Optional[_Union[_core_pb2.TaskSubmissions, _Mapping]] = ..., job_name: _Optional[str] = ..., trace_parent: _Optional[str] = ..., automation_id: _Optional[_Union[_id_pb2.ID, _Mapping]] = ..., legacy_tasks: _Optional[_Iterable[_Union[_core_pb2.SingleTaskSubmission, _Mapping]]] = ...) -> None: ...
41
41
 
42
42
  class GetJobRequest(_message.Message):
43
43
  __slots__ = ("job_id",)
@@ -86,18 +86,20 @@ class VisualizeJobRequest(_message.Message):
86
86
  def __init__(self, job_id: _Optional[_Union[_id_pb2.ID, _Mapping]] = ..., render_options: _Optional[_Union[_diagram_pb2.RenderOptions, _Mapping]] = ..., theme: _Optional[_Union[WorkflowDiagramTheme, str]] = ..., include_job_name: bool = ...) -> None: ...
87
87
 
88
88
  class QueryFilters(_message.Message):
89
- __slots__ = ("time_interval", "id_interval", "automation_ids", "states", "name")
89
+ __slots__ = ("time_interval", "id_interval", "automation_ids", "states", "name", "task_states")
90
90
  TIME_INTERVAL_FIELD_NUMBER: _ClassVar[int]
91
91
  ID_INTERVAL_FIELD_NUMBER: _ClassVar[int]
92
92
  AUTOMATION_IDS_FIELD_NUMBER: _ClassVar[int]
93
93
  STATES_FIELD_NUMBER: _ClassVar[int]
94
94
  NAME_FIELD_NUMBER: _ClassVar[int]
95
+ TASK_STATES_FIELD_NUMBER: _ClassVar[int]
95
96
  time_interval: _query_pb2.TimeInterval
96
97
  id_interval: _query_pb2.IDInterval
97
98
  automation_ids: _containers.RepeatedCompositeFieldContainer[_id_pb2.ID]
98
99
  states: _containers.RepeatedScalarFieldContainer[_core_pb2.JobState]
99
100
  name: str
100
- def __init__(self, time_interval: _Optional[_Union[_query_pb2.TimeInterval, _Mapping]] = ..., id_interval: _Optional[_Union[_query_pb2.IDInterval, _Mapping]] = ..., automation_ids: _Optional[_Iterable[_Union[_id_pb2.ID, _Mapping]]] = ..., states: _Optional[_Iterable[_Union[_core_pb2.JobState, str]]] = ..., name: _Optional[str] = ...) -> None: ...
101
+ task_states: _containers.RepeatedScalarFieldContainer[_core_pb2.TaskState]
102
+ def __init__(self, time_interval: _Optional[_Union[_query_pb2.TimeInterval, _Mapping]] = ..., id_interval: _Optional[_Union[_query_pb2.IDInterval, _Mapping]] = ..., automation_ids: _Optional[_Iterable[_Union[_id_pb2.ID, _Mapping]]] = ..., states: _Optional[_Iterable[_Union[_core_pb2.JobState, str]]] = ..., name: _Optional[str] = ..., task_states: _Optional[_Iterable[_Union[_core_pb2.TaskState, str]]] = ...) -> None: ...
101
103
 
102
104
  class QueryJobsRequest(_message.Message):
103
105
  __slots__ = ("filters", "page")
@@ -28,7 +28,7 @@ from tilebox.datasets.tilebox.v1 import id_pb2 as tilebox_dot_v1_dot_id__pb2
28
28
  from tilebox.workflows.workflows.v1 import core_pb2 as workflows_dot_v1_dot_core__pb2
29
29
 
30
30
 
31
- DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n\x17workflows/v1/task.proto\x12\x0cworkflows.v1\x1a\x1b\x62uf/validate/validate.proto\x1a\x1egoogle/protobuf/duration.proto\x1a\x13tilebox/v1/id.proto\x1a\x17workflows/v1/core.proto\"\xa6\x01\n\x0fNextTaskRequest\x12\x46\n\rcomputed_task\x18\x01 \x01(\x0b\x32\x1a.workflows.v1.ComputedTaskB\x05\xaa\x01\x02\x08\x01R\x0c\x63omputedTask\x12K\n\x10next_task_to_run\x18\x02 \x01(\x0b\x32\x1b.workflows.v1.NextTaskToRunB\x05\xaa\x01\x02\x08\x01R\rnextTaskToRun\"{\n\rNextTaskToRun\x12*\n\x0c\x63luster_slug\x18\x01 \x01(\tB\x07\xbaH\x04r\x02\x10\x01R\x0b\x63lusterSlug\x12>\n\x0bidentifiers\x18\x02 \x03(\x0b\x32\x1c.workflows.v1.TaskIdentifierR\x0bidentifiers\"\xa9\x02\n\x0c\x43omputedTask\x12&\n\x02id\x18\x01 \x01(\x0b\x32\x0e.tilebox.v1.IDB\x06\xbaH\x03\xc8\x01\x01R\x02id\x12\x18\n\x07\x64isplay\x18\x02 \x01(\tR\x07\x64isplay\x12X\n\x10legacy_sub_tasks\x18\x03 \x03(\x0b\x32\".workflows.v1.SingleTaskSubmissionB\n\x18\x01\xbaH\x05\x92\x01\x02\x10@R\x0elegacySubTasks\x12:\n\tsub_tasks\x18\x05 \x01(\x0b\x32\x1d.workflows.v1.TaskSubmissionsR\x08subTasks\x12\x41\n\x10progress_updates\x18\x04 \x03(\x0b\x32\x16.workflows.v1.ProgressR\x0fprogressUpdates\"g\n\x0eIdlingResponse\x12U\n\x19suggested_idling_duration\x18\x01 \x01(\x0b\x32\x19.google.protobuf.DurationR\x17suggestedIdlingDuration\"\x93\x01\n\x10NextTaskResponse\x12/\n\tnext_task\x18\x01 \x01(\x0b\x32\x12.workflows.v1.TaskR\x08nextTask\x12\x34\n\x06idling\x18\x02 \x01(\x0b\x32\x1c.workflows.v1.IdlingResponseR\x06idling:\x18\xbaH\x15\"\x13\n\tnext_task\n\x06idling\"\xc0\x01\n\x11TaskFailedRequest\x12/\n\x07task_id\x18\x01 \x01(\x0b\x32\x0e.tilebox.v1.IDB\x06\xbaH\x03\xc8\x01\x01R\x06taskId\x12\x18\n\x07\x64isplay\x18\x02 \x01(\tR\x07\x64isplay\x12\x1d\n\ncancel_job\x18\x03 \x01(\x08R\tcancelJob\x12\x41\n\x10progress_updates\x18\x04 \x03(\x0b\x32\x16.workflows.v1.ProgressR\x0fprogressUpdates\"B\n\x11TaskStateResponse\x12-\n\x05state\x18\x01 \x01(\x0e\x32\x17.workflows.v1.TaskStateR\x05state\"\x87\x01\n\x10TaskLeaseRequest\x12/\n\x07task_id\x18\x01 \x01(\x0b\x32\x0e.tilebox.v1.IDB\x06\xbaH\x03\xc8\x01\x01R\x06taskId\x12\x42\n\x0frequested_lease\x18\x02 \x01(\x0b\x32\x19.google.protobuf.DurationR\x0erequestedLease2\xf4\x01\n\x0bTaskService\x12I\n\x08NextTask\x12\x1d.workflows.v1.NextTaskRequest\x1a\x1e.workflows.v1.NextTaskResponse\x12N\n\nTaskFailed\x12\x1f.workflows.v1.TaskFailedRequest\x1a\x1f.workflows.v1.TaskStateResponse\x12J\n\x0f\x45xtendTaskLease\x12\x1e.workflows.v1.TaskLeaseRequest\x1a\x17.workflows.v1.TaskLeaseBs\n\x10\x63om.workflows.v1B\tTaskProtoP\x01\xa2\x02\x03WXX\xaa\x02\x0cWorkflows.V1\xca\x02\x0cWorkflows\\V1\xe2\x02\x18Workflows\\V1\\GPBMetadata\xea\x02\rWorkflows::V1\x92\x03\x02\x08\x02\x62\x08\x65\x64itionsp\xe8\x07')
31
+ DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n\x17workflows/v1/task.proto\x12\x0cworkflows.v1\x1a\x1b\x62uf/validate/validate.proto\x1a\x1egoogle/protobuf/duration.proto\x1a\x13tilebox/v1/id.proto\x1a\x17workflows/v1/core.proto\"\xa6\x01\n\x0fNextTaskRequest\x12\x46\n\rcomputed_task\x18\x01 \x01(\x0b\x32\x1a.workflows.v1.ComputedTaskB\x05\xaa\x01\x02\x08\x01R\x0c\x63omputedTask\x12K\n\x10next_task_to_run\x18\x02 \x01(\x0b\x32\x1b.workflows.v1.NextTaskToRunB\x05\xaa\x01\x02\x08\x01R\rnextTaskToRun\"{\n\rNextTaskToRun\x12*\n\x0c\x63luster_slug\x18\x01 \x01(\tB\x07\xbaH\x04r\x02\x10\x01R\x0b\x63lusterSlug\x12>\n\x0bidentifiers\x18\x02 \x03(\x0b\x32\x1c.workflows.v1.TaskIdentifierR\x0bidentifiers\"\xaa\x02\n\x0c\x43omputedTask\x12&\n\x02id\x18\x01 \x01(\x0b\x32\x0e.tilebox.v1.IDB\x06\xbaH\x03\xc8\x01\x01R\x02id\x12\x18\n\x07\x64isplay\x18\x02 \x01(\tR\x07\x64isplay\x12:\n\tsub_tasks\x18\x05 \x01(\x0b\x32\x1d.workflows.v1.TaskSubmissionsR\x08subTasks\x12\x41\n\x10progress_updates\x18\x04 \x03(\x0b\x32\x16.workflows.v1.ProgressR\x0fprogressUpdates\x12Y\n\x10legacy_sub_tasks\x18\x03 \x03(\x0b\x32\".workflows.v1.SingleTaskSubmissionB\x0b\x18\x01\xbaH\x06\x92\x01\x03\x10\xe8\x07R\x0elegacySubTasks\"g\n\x0eIdlingResponse\x12U\n\x19suggested_idling_duration\x18\x01 \x01(\x0b\x32\x19.google.protobuf.DurationR\x17suggestedIdlingDuration\"\x93\x01\n\x10NextTaskResponse\x12/\n\tnext_task\x18\x01 \x01(\x0b\x32\x12.workflows.v1.TaskR\x08nextTask\x12\x34\n\x06idling\x18\x02 \x01(\x0b\x32\x1c.workflows.v1.IdlingResponseR\x06idling:\x18\xbaH\x15\"\x13\n\tnext_task\n\x06idling\"\xc0\x01\n\x11TaskFailedRequest\x12/\n\x07task_id\x18\x01 \x01(\x0b\x32\x0e.tilebox.v1.IDB\x06\xbaH\x03\xc8\x01\x01R\x06taskId\x12\x18\n\x07\x64isplay\x18\x02 \x01(\tR\x07\x64isplay\x12\x1d\n\ncancel_job\x18\x03 \x01(\x08R\tcancelJob\x12\x41\n\x10progress_updates\x18\x04 \x03(\x0b\x32\x16.workflows.v1.ProgressR\x0fprogressUpdates\"B\n\x11TaskStateResponse\x12-\n\x05state\x18\x01 \x01(\x0e\x32\x17.workflows.v1.TaskStateR\x05state\"\x87\x01\n\x10TaskLeaseRequest\x12/\n\x07task_id\x18\x01 \x01(\x0b\x32\x0e.tilebox.v1.IDB\x06\xbaH\x03\xc8\x01\x01R\x06taskId\x12\x42\n\x0frequested_lease\x18\x02 \x01(\x0b\x32\x19.google.protobuf.DurationR\x0erequestedLease2\xf4\x01\n\x0bTaskService\x12I\n\x08NextTask\x12\x1d.workflows.v1.NextTaskRequest\x1a\x1e.workflows.v1.NextTaskResponse\x12N\n\nTaskFailed\x12\x1f.workflows.v1.TaskFailedRequest\x1a\x1f.workflows.v1.TaskStateResponse\x12J\n\x0f\x45xtendTaskLease\x12\x1e.workflows.v1.TaskLeaseRequest\x1a\x17.workflows.v1.TaskLeaseBs\n\x10\x63om.workflows.v1B\tTaskProtoP\x01\xa2\x02\x03WXX\xaa\x02\x0cWorkflows.V1\xca\x02\x0cWorkflows\\V1\xe2\x02\x18Workflows\\V1\\GPBMetadata\xea\x02\rWorkflows::V1\x92\x03\x02\x08\x02\x62\x08\x65\x64itionsp\xe8\x07')
32
32
 
33
33
  _globals = globals()
34
34
  _builder.BuildMessageAndEnumDescriptors(DESCRIPTOR, _globals)
@@ -45,7 +45,7 @@ if not _descriptor._USE_C_DESCRIPTORS:
45
45
  _globals['_COMPUTEDTASK'].fields_by_name['id']._loaded_options = None
46
46
  _globals['_COMPUTEDTASK'].fields_by_name['id']._serialized_options = b'\272H\003\310\001\001'
47
47
  _globals['_COMPUTEDTASK'].fields_by_name['legacy_sub_tasks']._loaded_options = None
48
- _globals['_COMPUTEDTASK'].fields_by_name['legacy_sub_tasks']._serialized_options = b'\030\001\272H\005\222\001\002\020@'
48
+ _globals['_COMPUTEDTASK'].fields_by_name['legacy_sub_tasks']._serialized_options = b'\030\001\272H\006\222\001\003\020\350\007'
49
49
  _globals['_NEXTTASKRESPONSE']._loaded_options = None
50
50
  _globals['_NEXTTASKRESPONSE']._serialized_options = b'\272H\025\"\023\n\tnext_task\n\006idling'
51
51
  _globals['_TASKFAILEDREQUEST'].fields_by_name['task_id']._loaded_options = None
@@ -57,17 +57,17 @@ if not _descriptor._USE_C_DESCRIPTORS:
57
57
  _globals['_NEXTTASKTORUN']._serialized_start=317
58
58
  _globals['_NEXTTASKTORUN']._serialized_end=440
59
59
  _globals['_COMPUTEDTASK']._serialized_start=443
60
- _globals['_COMPUTEDTASK']._serialized_end=740
61
- _globals['_IDLINGRESPONSE']._serialized_start=742
62
- _globals['_IDLINGRESPONSE']._serialized_end=845
63
- _globals['_NEXTTASKRESPONSE']._serialized_start=848
64
- _globals['_NEXTTASKRESPONSE']._serialized_end=995
65
- _globals['_TASKFAILEDREQUEST']._serialized_start=998
66
- _globals['_TASKFAILEDREQUEST']._serialized_end=1190
67
- _globals['_TASKSTATERESPONSE']._serialized_start=1192
68
- _globals['_TASKSTATERESPONSE']._serialized_end=1258
69
- _globals['_TASKLEASEREQUEST']._serialized_start=1261
70
- _globals['_TASKLEASEREQUEST']._serialized_end=1396
71
- _globals['_TASKSERVICE']._serialized_start=1399
72
- _globals['_TASKSERVICE']._serialized_end=1643
60
+ _globals['_COMPUTEDTASK']._serialized_end=741
61
+ _globals['_IDLINGRESPONSE']._serialized_start=743
62
+ _globals['_IDLINGRESPONSE']._serialized_end=846
63
+ _globals['_NEXTTASKRESPONSE']._serialized_start=849
64
+ _globals['_NEXTTASKRESPONSE']._serialized_end=996
65
+ _globals['_TASKFAILEDREQUEST']._serialized_start=999
66
+ _globals['_TASKFAILEDREQUEST']._serialized_end=1191
67
+ _globals['_TASKSTATERESPONSE']._serialized_start=1193
68
+ _globals['_TASKSTATERESPONSE']._serialized_end=1259
69
+ _globals['_TASKLEASEREQUEST']._serialized_start=1262
70
+ _globals['_TASKLEASEREQUEST']._serialized_end=1397
71
+ _globals['_TASKSERVICE']._serialized_start=1400
72
+ _globals['_TASKSERVICE']._serialized_end=1644
73
73
  # @@protoc_insertion_point(module_scope)
@@ -27,18 +27,18 @@ class NextTaskToRun(_message.Message):
27
27
  def __init__(self, cluster_slug: _Optional[str] = ..., identifiers: _Optional[_Iterable[_Union[_core_pb2.TaskIdentifier, _Mapping]]] = ...) -> None: ...
28
28
 
29
29
  class ComputedTask(_message.Message):
30
- __slots__ = ("id", "display", "legacy_sub_tasks", "sub_tasks", "progress_updates")
30
+ __slots__ = ("id", "display", "sub_tasks", "progress_updates", "legacy_sub_tasks")
31
31
  ID_FIELD_NUMBER: _ClassVar[int]
32
32
  DISPLAY_FIELD_NUMBER: _ClassVar[int]
33
- LEGACY_SUB_TASKS_FIELD_NUMBER: _ClassVar[int]
34
33
  SUB_TASKS_FIELD_NUMBER: _ClassVar[int]
35
34
  PROGRESS_UPDATES_FIELD_NUMBER: _ClassVar[int]
35
+ LEGACY_SUB_TASKS_FIELD_NUMBER: _ClassVar[int]
36
36
  id: _id_pb2.ID
37
37
  display: str
38
- legacy_sub_tasks: _containers.RepeatedCompositeFieldContainer[_core_pb2.SingleTaskSubmission]
39
38
  sub_tasks: _core_pb2.TaskSubmissions
40
39
  progress_updates: _containers.RepeatedCompositeFieldContainer[_core_pb2.Progress]
41
- def __init__(self, id: _Optional[_Union[_id_pb2.ID, _Mapping]] = ..., display: _Optional[str] = ..., legacy_sub_tasks: _Optional[_Iterable[_Union[_core_pb2.SingleTaskSubmission, _Mapping]]] = ..., sub_tasks: _Optional[_Union[_core_pb2.TaskSubmissions, _Mapping]] = ..., progress_updates: _Optional[_Iterable[_Union[_core_pb2.Progress, _Mapping]]] = ...) -> None: ...
40
+ legacy_sub_tasks: _containers.RepeatedCompositeFieldContainer[_core_pb2.SingleTaskSubmission]
41
+ def __init__(self, id: _Optional[_Union[_id_pb2.ID, _Mapping]] = ..., display: _Optional[str] = ..., sub_tasks: _Optional[_Union[_core_pb2.TaskSubmissions, _Mapping]] = ..., progress_updates: _Optional[_Iterable[_Union[_core_pb2.Progress, _Mapping]]] = ..., legacy_sub_tasks: _Optional[_Iterable[_Union[_core_pb2.SingleTaskSubmission, _Mapping]]] = ...) -> None: ...
42
42
 
43
43
  class IdlingResponse(_message.Message):
44
44
  __slots__ = ("suggested_idling_duration",)
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: tilebox-workflows
3
- Version: 0.47.0
3
+ Version: 0.49.0b1
4
4
  Summary: Workflow client and task runner for Tilebox
5
5
  Project-URL: Homepage, https://tilebox.com
6
6
  Project-URL: Documentation, https://docs.tilebox.com/workflows/introduction
@@ -1,9 +1,9 @@
1
1
  tilebox/workflows/__init__.py,sha256=D6NXvTUjWv0YWN5tYD09p1cFkGs8nGrZ9V7agtjvp8c,636
2
- tilebox/workflows/cache.py,sha256=GK0lOIuAEhHya4jCe5PNc1T72xuCrs62AhD6zIoNPQk,11253
2
+ tilebox/workflows/cache.py,sha256=atQfB7VMwSJmnf3ip8Wodr_tZRqC97E3ph4LaMTNapc,13508
3
3
  tilebox/workflows/client.py,sha256=L8MZXZ-yDutu91sD1am24yfANLCaasRXO8ITJHg5UgE,5680
4
- tilebox/workflows/data.py,sha256=8DBWZJonsLKCMMF02jpD0xfEENbrSUqANFvBYzMb1eY,29559
4
+ tilebox/workflows/data.py,sha256=6KZ5zTtMi7JFJtx-ZDmCTVu5jewjUd7-FhqjBFIIE0g,30012
5
5
  tilebox/workflows/interceptors.py,sha256=yfo6pCxUdhb0EC1J506k1ge4S_BAl83TAFYxCcxu8sU,1799
6
- tilebox/workflows/task.py,sha256=Tl08qxSjn1lwOcoBhD1VgPgwCz0_JZMSl39gQN5d0Z4,21842
6
+ tilebox/workflows/task.py,sha256=_hv1l3EZbS0HyQq7n8UxLyfyXHvxR4qzo-9anyPplP4,22236
7
7
  tilebox/workflows/timeseries.py,sha256=wjzYaym8Z3ymdnLhfa_7UTQJHm41XLPMyFxFoe3dKaw,8954
8
8
  tilebox/workflows/automations/__init__.py,sha256=HDyTj_H0Z-w9m0noWiXAcrvEylXmSpy8pgrVUWWqjbg,226
9
9
  tilebox/workflows/automations/client.py,sha256=EJZHcRXfZyU0NAH1PZuA9fGuYQwQKnz03nyz6lJqtrc,5622
@@ -16,32 +16,32 @@ tilebox/workflows/clusters/service.py,sha256=4ikKwl_69OW8M1yOlsx0QTlJURXfAAbAh-J
16
16
  tilebox/workflows/formatting/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
17
17
  tilebox/workflows/formatting/job.py,sha256=fKhxHrx6mngfXSwtvqo6vzlpYoS5Kd10kJ45b4jmAEI,14097
18
18
  tilebox/workflows/jobs/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
19
- tilebox/workflows/jobs/client.py,sha256=T_dUM7I-lyb9JsQ99-IKs0ezHyLzBaGITPbNcZTDy6g,11743
19
+ tilebox/workflows/jobs/client.py,sha256=Ws2bX2pUL2V-OsDtnBwo1jSQZPZTGtkMz9BhBHAOegg,12250
20
20
  tilebox/workflows/jobs/service.py,sha256=HpCg9v2kUM4rYgDSUtezpJ_yU9VhCHqX8EBboLSwKKE,3493
21
21
  tilebox/workflows/observability/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
22
22
  tilebox/workflows/observability/logging.py,sha256=JLXvuC2Xky2HjFfyxEYAlFKYI9kF2jepBRrdHnmKCLs,16430
23
23
  tilebox/workflows/observability/tracing.py,sha256=96SqqPrXI0fB_vEIlHLKjErIsnHEeBQNBGCpROdYl0Q,11646
24
24
  tilebox/workflows/runner/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
25
- tilebox/workflows/runner/task_runner.py,sha256=F9ePKUyI-7LB_xAlbDtCRNPsKRYJf1YkMasENTnLsRo,28466
25
+ tilebox/workflows/runner/task_runner.py,sha256=PP5QRgbDrti8xM6cOcuMZ-oOoBjYmPa5H04Glj-jdns,28622
26
26
  tilebox/workflows/runner/task_service.py,sha256=C1bgoSjXBW4KUKR-_GQSplVa0XojscngOMQfTI5IQ6E,2837
27
27
  tilebox/workflows/workflows/v1/automation_pb2.py,sha256=Mf9D84ujlL-vQ0gkHwQh9_yvZKsJ0I7dsIAXL_fczqo,9179
28
28
  tilebox/workflows/workflows/v1/automation_pb2.pyi,sha256=LrucnhtVCSDfN88ZfJ2ruHvQq1Kc6CxMRAxKb_Q9kG4,5838
29
29
  tilebox/workflows/workflows/v1/automation_pb2_grpc.py,sha256=9-Jy1rzk8nTr1Vj5co46lsY1uLjf2-PTzSnTxcvR60M,18859
30
- tilebox/workflows/workflows/v1/core_pb2.py,sha256=-Ye83jLSLqRussn7-m2d9AsQ6698F225baSEY521tLY,14233
31
- tilebox/workflows/workflows/v1/core_pb2.pyi,sha256=-UyXY58Ce_0oyFMnU8T0gLPlxnE4oo4-VDk3j89ib0I,12858
30
+ tilebox/workflows/workflows/v1/core_pb2.py,sha256=UN5cDPrpFd6MtPMTEuy3vsqKNiA1Sk3hVaYtBQFLHQ4,14849
31
+ tilebox/workflows/workflows/v1/core_pb2.pyi,sha256=RIylQG4-t65LbZeMaN3NNiZAIatG9HTpzG9jUlI2z-0,13211
32
32
  tilebox/workflows/workflows/v1/core_pb2_grpc.py,sha256=xYOs94SXiNYAlFodACnsXW5QovLsHY5tCk3p76RH5Zc,158
33
33
  tilebox/workflows/workflows/v1/diagram_pb2.py,sha256=Wh2UGR9Fm97z9o0dm5zPSYjkiOmzJGS_Dds_SIX_DeQ,3536
34
34
  tilebox/workflows/workflows/v1/diagram_pb2.pyi,sha256=7IJEm-5M_nt5sziFNjK2DgW7Nwl9Y_fRpR_TM5EE6DQ,1477
35
35
  tilebox/workflows/workflows/v1/diagram_pb2_grpc.py,sha256=jg4mBPDwHMbpfRI0magrHvmdJ20dQE5xFHTt-5MdW1Y,2780
36
- tilebox/workflows/workflows/v1/job_pb2.py,sha256=VVS8wkLs_Qqr3i4DWWcNHALTLekB9wxlFF-LGPQPcF4,11118
37
- tilebox/workflows/workflows/v1/job_pb2.pyi,sha256=0ZanT6ULEdJrZ2j5GJoMw3R3pm8fER72jHE-pcwzn9M,7344
36
+ tilebox/workflows/workflows/v1/job_pb2.py,sha256=7AW508SjGBE9-8t8KTFNMUwp3iZ1NWvc8pXezMHJwEU,11735
37
+ tilebox/workflows/workflows/v1/job_pb2.pyi,sha256=UpPaqZuvyZOaGlxRoyp3t5ZWuibjeMR4P7bpT0XZWwo,7558
38
38
  tilebox/workflows/workflows/v1/job_pb2_grpc.py,sha256=pAqqMZpXQ82NvC3qIrWgjVmg6_J9AIdDlaxjF1BNUtc,17195
39
- tilebox/workflows/workflows/v1/task_pb2.py,sha256=hE_G2Vi_MMWjVsxesqd_aPYd-mnrPEV0xPNyDiGuW5s,6835
40
- tilebox/workflows/workflows/v1/task_pb2.pyi,sha256=dwDUwMxBeMOqYhCM2bAkeMNMlM4Hp_cPgNX1IPC8l6s,4488
39
+ tilebox/workflows/workflows/v1/task_pb2.py,sha256=L_wlbqWzvPFkr1NYzPu9AbjORDIDZaT9BFHv5xLhRO8,6851
40
+ tilebox/workflows/workflows/v1/task_pb2.pyi,sha256=OCDshWzwZn9x9HYx-uPQIsLPcP1p27ePk88PuN--G4Q,4488
41
41
  tilebox/workflows/workflows/v1/task_pb2_grpc.py,sha256=nkQjtsDiql1ofbSxhDXbPkySd1sYt44uEaSl2Z15jSg,7661
42
42
  tilebox/workflows/workflows/v1/workflows_pb2.py,sha256=rGwIydUP4osLD_fG3QmHaqs42mKmRoCqtwihJTLJ314,3990
43
43
  tilebox/workflows/workflows/v1/workflows_pb2.pyi,sha256=qiDQUM2Vlu_izQvaSDlK5GqKYGsNJgtm0bo9zW-qNjU,1633
44
44
  tilebox/workflows/workflows/v1/workflows_pb2_grpc.py,sha256=36Vp_TIxtS-MRBZHECf84fHFbnrm3-UizCsMOlz7qfo,8529
45
- tilebox_workflows-0.47.0.dist-info/METADATA,sha256=SccnKvYADXLBSRIokW3HK4nbqdz4l7IbRkAhXlziZns,3948
46
- tilebox_workflows-0.47.0.dist-info/WHEEL,sha256=WLgqFyCfm_KASv4WHyYy0P3pM_m7J5L9k2skdKLirC8,87
47
- tilebox_workflows-0.47.0.dist-info/RECORD,,
45
+ tilebox_workflows-0.49.0b1.dist-info/METADATA,sha256=_jMRxCVcVmiI5dP_VHsDsTepUD7fNTKiE2NxrP2_va4,3950
46
+ tilebox_workflows-0.49.0b1.dist-info/WHEEL,sha256=WLgqFyCfm_KASv4WHyYy0P3pM_m7J5L9k2skdKLirC8,87
47
+ tilebox_workflows-0.49.0b1.dist-info/RECORD,,