nominal-api 0.1048.1__py3-none-any.whl → 0.1056.0__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.

Potentially problematic release.


This version of nominal-api might be problematic. Click here for more details.

nominal_api/_impl.py CHANGED
@@ -66,6 +66,38 @@ api_DataSourceType.__qualname__ = "DataSourceType"
66
66
  api_DataSourceType.__module__ = "nominal_api.api"
67
67
 
68
68
 
69
+ class api_Deleted(ConjureBeanType):
70
+
71
+ @builtins.classmethod
72
+ def _fields(cls) -> Dict[str, ConjureFieldDefinition]:
73
+ return {
74
+ }
75
+
76
+ __slots__: List[str] = []
77
+
78
+
79
+
80
+ api_Deleted.__name__ = "Deleted"
81
+ api_Deleted.__qualname__ = "Deleted"
82
+ api_Deleted.__module__ = "nominal_api.api"
83
+
84
+
85
+ class api_DeletionInProgress(ConjureBeanType):
86
+
87
+ @builtins.classmethod
88
+ def _fields(cls) -> Dict[str, ConjureFieldDefinition]:
89
+ return {
90
+ }
91
+
92
+ __slots__: List[str] = []
93
+
94
+
95
+
96
+ api_DeletionInProgress.__name__ = "DeletionInProgress"
97
+ api_DeletionInProgress.__qualname__ = "DeletionInProgress"
98
+ api_DeletionInProgress.__module__ = "nominal_api.api"
99
+
100
+
69
101
  class api_Empty(ConjureBeanType):
70
102
 
71
103
  @builtins.classmethod
@@ -225,13 +257,17 @@ class api_IngestStatusV2(ConjureUnionType):
225
257
  _success: Optional["api_SuccessResult"] = None
226
258
  _error: Optional["api_ErrorResult"] = None
227
259
  _in_progress: Optional["api_InProgressResult"] = None
260
+ _deletion_in_progress: Optional["api_DeletionInProgress"] = None
261
+ _deleted: Optional["api_Deleted"] = None
228
262
 
229
263
  @builtins.classmethod
230
264
  def _options(cls) -> Dict[str, ConjureFieldDefinition]:
231
265
  return {
232
266
  'success': ConjureFieldDefinition('success', api_SuccessResult),
233
267
  'error': ConjureFieldDefinition('error', api_ErrorResult),
234
- 'in_progress': ConjureFieldDefinition('inProgress', api_InProgressResult)
268
+ 'in_progress': ConjureFieldDefinition('inProgress', api_InProgressResult),
269
+ 'deletion_in_progress': ConjureFieldDefinition('deletionInProgress', api_DeletionInProgress),
270
+ 'deleted': ConjureFieldDefinition('deleted', api_Deleted)
235
271
  }
236
272
 
237
273
  def __init__(
@@ -239,10 +275,12 @@ class api_IngestStatusV2(ConjureUnionType):
239
275
  success: Optional["api_SuccessResult"] = None,
240
276
  error: Optional["api_ErrorResult"] = None,
241
277
  in_progress: Optional["api_InProgressResult"] = None,
278
+ deletion_in_progress: Optional["api_DeletionInProgress"] = None,
279
+ deleted: Optional["api_Deleted"] = None,
242
280
  type_of_union: Optional[str] = None
243
281
  ) -> None:
244
282
  if type_of_union is None:
245
- if (success is not None) + (error is not None) + (in_progress is not None) != 1:
283
+ if (success is not None) + (error is not None) + (in_progress is not None) + (deletion_in_progress is not None) + (deleted is not None) != 1:
246
284
  raise ValueError('a union must contain a single member')
247
285
 
248
286
  if success is not None:
@@ -254,6 +292,12 @@ class api_IngestStatusV2(ConjureUnionType):
254
292
  if in_progress is not None:
255
293
  self._in_progress = in_progress
256
294
  self._type = 'inProgress'
295
+ if deletion_in_progress is not None:
296
+ self._deletion_in_progress = deletion_in_progress
297
+ self._type = 'deletionInProgress'
298
+ if deleted is not None:
299
+ self._deleted = deleted
300
+ self._type = 'deleted'
257
301
 
258
302
  elif type_of_union == 'success':
259
303
  if success is None:
@@ -270,6 +314,16 @@ class api_IngestStatusV2(ConjureUnionType):
270
314
  raise ValueError('a union value must not be None')
271
315
  self._in_progress = in_progress
272
316
  self._type = 'inProgress'
317
+ elif type_of_union == 'deletionInProgress':
318
+ if deletion_in_progress is None:
319
+ raise ValueError('a union value must not be None')
320
+ self._deletion_in_progress = deletion_in_progress
321
+ self._type = 'deletionInProgress'
322
+ elif type_of_union == 'deleted':
323
+ if deleted is None:
324
+ raise ValueError('a union value must not be None')
325
+ self._deleted = deleted
326
+ self._type = 'deleted'
273
327
 
274
328
  @builtins.property
275
329
  def success(self) -> Optional["api_SuccessResult"]:
@@ -283,6 +337,14 @@ class api_IngestStatusV2(ConjureUnionType):
283
337
  def in_progress(self) -> Optional["api_InProgressResult"]:
284
338
  return self._in_progress
285
339
 
340
+ @builtins.property
341
+ def deletion_in_progress(self) -> Optional["api_DeletionInProgress"]:
342
+ return self._deletion_in_progress
343
+
344
+ @builtins.property
345
+ def deleted(self) -> Optional["api_Deleted"]:
346
+ return self._deleted
347
+
286
348
  def accept(self, visitor) -> Any:
287
349
  if not isinstance(visitor, api_IngestStatusV2Visitor):
288
350
  raise ValueError('{} is not an instance of api_IngestStatusV2Visitor'.format(visitor.__class__.__name__))
@@ -292,6 +354,10 @@ class api_IngestStatusV2(ConjureUnionType):
292
354
  return visitor._error(self.error)
293
355
  if self._type == 'inProgress' and self.in_progress is not None:
294
356
  return visitor._in_progress(self.in_progress)
357
+ if self._type == 'deletionInProgress' and self.deletion_in_progress is not None:
358
+ return visitor._deletion_in_progress(self.deletion_in_progress)
359
+ if self._type == 'deleted' and self.deleted is not None:
360
+ return visitor._deleted(self.deleted)
295
361
 
296
362
 
297
363
  api_IngestStatusV2.__name__ = "IngestStatusV2"
@@ -313,6 +379,14 @@ class api_IngestStatusV2Visitor:
313
379
  def _in_progress(self, in_progress: "api_InProgressResult") -> Any:
314
380
  pass
315
381
 
382
+ @abstractmethod
383
+ def _deletion_in_progress(self, deletion_in_progress: "api_DeletionInProgress") -> Any:
384
+ pass
385
+
386
+ @abstractmethod
387
+ def _deleted(self, deleted: "api_Deleted") -> Any:
388
+ pass
389
+
316
390
 
317
391
  api_IngestStatusV2Visitor.__name__ = "IngestStatusV2Visitor"
318
392
  api_IngestStatusV2Visitor.__qualname__ = "IngestStatusV2Visitor"
@@ -1726,6 +1800,137 @@ Requires authentication with Nominal. This endpoint is intended for internal use
1726
1800
  _decoder = ConjureDecoder()
1727
1801
  return _decoder.decode(_response.json(), authentication_api_GenerateMediaMtxTokenResponse, self._return_none_for_unknown_union_types)
1728
1802
 
1803
+ def get_my_coachmark_dismissals(self, auth_header: str, request: "authentication_api_GetCoachmarkDismissalsRequest") -> "authentication_api_GetCoachmarkDismissalsResponse":
1804
+ """Gets coachmark dismissals for the authenticated user.
1805
+ Optionally filter by specific coachmark IDs.
1806
+ """
1807
+ _conjure_encoder = ConjureEncoder()
1808
+
1809
+ _headers: Dict[str, Any] = {
1810
+ 'Accept': 'application/json',
1811
+ 'Content-Type': 'application/json',
1812
+ 'Authorization': auth_header,
1813
+ }
1814
+
1815
+ _params: Dict[str, Any] = {
1816
+ }
1817
+
1818
+ _path_params: Dict[str, str] = {
1819
+ }
1820
+
1821
+ _json: Any = _conjure_encoder.default(request)
1822
+
1823
+ _path = '/authentication/v2/my/coachmarks/dismissals'
1824
+ _path = _path.format(**_path_params)
1825
+
1826
+ _response: Response = self._request(
1827
+ 'POST',
1828
+ self._uri + _path,
1829
+ params=_params,
1830
+ headers=_headers,
1831
+ json=_json)
1832
+
1833
+ _decoder = ConjureDecoder()
1834
+ return _decoder.decode(_response.json(), authentication_api_GetCoachmarkDismissalsResponse, self._return_none_for_unknown_union_types)
1835
+
1836
+ def dismiss_my_coachmark(self, auth_header: str, request: "authentication_api_DismissCoachmarkRequest") -> "authentication_api_CoachmarkDismissal":
1837
+ """Dismisses a coachmark for the authenticated user.
1838
+ Records the dismissal timestamp and app version.
1839
+ """
1840
+ _conjure_encoder = ConjureEncoder()
1841
+
1842
+ _headers: Dict[str, Any] = {
1843
+ 'Accept': 'application/json',
1844
+ 'Content-Type': 'application/json',
1845
+ 'Authorization': auth_header,
1846
+ }
1847
+
1848
+ _params: Dict[str, Any] = {
1849
+ }
1850
+
1851
+ _path_params: Dict[str, str] = {
1852
+ }
1853
+
1854
+ _json: Any = _conjure_encoder.default(request)
1855
+
1856
+ _path = '/authentication/v2/my/coachmarks/dismiss'
1857
+ _path = _path.format(**_path_params)
1858
+
1859
+ _response: Response = self._request(
1860
+ 'POST',
1861
+ self._uri + _path,
1862
+ params=_params,
1863
+ headers=_headers,
1864
+ json=_json)
1865
+
1866
+ _decoder = ConjureDecoder()
1867
+ return _decoder.decode(_response.json(), authentication_api_CoachmarkDismissal, self._return_none_for_unknown_union_types)
1868
+
1869
+ def is_my_coachmark_dismissed(self, auth_header: str, coachmark_id: str) -> bool:
1870
+ """Checks if a specific coachmark has been dismissed by the authenticated user.
1871
+ """
1872
+ _conjure_encoder = ConjureEncoder()
1873
+
1874
+ _headers: Dict[str, Any] = {
1875
+ 'Accept': 'application/json',
1876
+ 'Authorization': auth_header,
1877
+ }
1878
+
1879
+ _params: Dict[str, Any] = {
1880
+ }
1881
+
1882
+ _path_params: Dict[str, str] = {
1883
+ 'coachmarkId': quote(str(_conjure_encoder.default(coachmark_id)), safe=''),
1884
+ }
1885
+
1886
+ _json: Any = None
1887
+
1888
+ _path = '/authentication/v2/my/coachmarks/dismissed/{coachmarkId}'
1889
+ _path = _path.format(**_path_params)
1890
+
1891
+ _response: Response = self._request(
1892
+ 'GET',
1893
+ self._uri + _path,
1894
+ params=_params,
1895
+ headers=_headers,
1896
+ json=_json)
1897
+
1898
+ _decoder = ConjureDecoder()
1899
+ return _decoder.decode(_response.json(), bool, self._return_none_for_unknown_union_types)
1900
+
1901
+ def reset_my_coachmark_dismissal(self, auth_header: str, coachmark_id: str) -> None:
1902
+ """Resets a coachmark dismissal for the authenticated user.
1903
+ This allows the coachmark to be shown again.
1904
+ Primarily intended for testing and debugging.
1905
+ """
1906
+ _conjure_encoder = ConjureEncoder()
1907
+
1908
+ _headers: Dict[str, Any] = {
1909
+ 'Accept': 'application/json',
1910
+ 'Authorization': auth_header,
1911
+ }
1912
+
1913
+ _params: Dict[str, Any] = {
1914
+ }
1915
+
1916
+ _path_params: Dict[str, str] = {
1917
+ 'coachmarkId': quote(str(_conjure_encoder.default(coachmark_id)), safe=''),
1918
+ }
1919
+
1920
+ _json: Any = None
1921
+
1922
+ _path = '/authentication/v2/my/coachmarks/dismissals/{coachmarkId}'
1923
+ _path = _path.format(**_path_params)
1924
+
1925
+ _response: Response = self._request(
1926
+ 'DELETE',
1927
+ self._uri + _path,
1928
+ params=_params,
1929
+ headers=_headers,
1930
+ json=_json)
1931
+
1932
+ return
1933
+
1729
1934
 
1730
1935
  authentication_api_AuthenticationServiceV2.__name__ = "AuthenticationServiceV2"
1731
1936
  authentication_api_AuthenticationServiceV2.__qualname__ = "AuthenticationServiceV2"
@@ -1754,6 +1959,59 @@ authentication_api_ChartTooltipModeSetting.__qualname__ = "ChartTooltipModeSetti
1754
1959
  authentication_api_ChartTooltipModeSetting.__module__ = "nominal_api.authentication_api"
1755
1960
 
1756
1961
 
1962
+ class authentication_api_CoachmarkDismissal(ConjureBeanType):
1963
+ """A record of a coachmark dismissal, including when it was dismissed
1964
+ and on which app version.
1965
+ """
1966
+
1967
+ @builtins.classmethod
1968
+ def _fields(cls) -> Dict[str, ConjureFieldDefinition]:
1969
+ return {
1970
+ 'coachmark_id': ConjureFieldDefinition('coachmarkId', str),
1971
+ 'dismissed_at': ConjureFieldDefinition('dismissedAt', str),
1972
+ 'app_version': ConjureFieldDefinition('appVersion', str),
1973
+ 'step_index': ConjureFieldDefinition('stepIndex', OptionalTypeWrapper[int])
1974
+ }
1975
+
1976
+ __slots__: List[str] = ['_coachmark_id', '_dismissed_at', '_app_version', '_step_index']
1977
+
1978
+ def __init__(self, app_version: str, coachmark_id: str, dismissed_at: str, step_index: Optional[int] = None) -> None:
1979
+ self._coachmark_id = coachmark_id
1980
+ self._dismissed_at = dismissed_at
1981
+ self._app_version = app_version
1982
+ self._step_index = step_index
1983
+
1984
+ @builtins.property
1985
+ def coachmark_id(self) -> str:
1986
+ """The coachmark identifier (typically the feature flag name)
1987
+ """
1988
+ return self._coachmark_id
1989
+
1990
+ @builtins.property
1991
+ def dismissed_at(self) -> str:
1992
+ """ISO 8601 timestamp of when the coachmark was dismissed
1993
+ """
1994
+ return self._dismissed_at
1995
+
1996
+ @builtins.property
1997
+ def app_version(self) -> str:
1998
+ """The apps-scout version (semver) when the coachmark was dismissed
1999
+ """
2000
+ return self._app_version
2001
+
2002
+ @builtins.property
2003
+ def step_index(self) -> Optional[int]:
2004
+ """The step index when dismissed (for multi-step coachmarks).
2005
+ If not present, the coachmark was dismissed via the X button.
2006
+ """
2007
+ return self._step_index
2008
+
2009
+
2010
+ authentication_api_CoachmarkDismissal.__name__ = "CoachmarkDismissal"
2011
+ authentication_api_CoachmarkDismissal.__qualname__ = "CoachmarkDismissal"
2012
+ authentication_api_CoachmarkDismissal.__module__ = "nominal_api.authentication_api"
2013
+
2014
+
1757
2015
  class authentication_api_DefaultTimeRangeTypeSetting(ConjureEnumType):
1758
2016
 
1759
2017
  DEFAULT = 'DEFAULT'
@@ -1774,6 +2032,49 @@ authentication_api_DefaultTimeRangeTypeSetting.__qualname__ = "DefaultTimeRangeT
1774
2032
  authentication_api_DefaultTimeRangeTypeSetting.__module__ = "nominal_api.authentication_api"
1775
2033
 
1776
2034
 
2035
+ class authentication_api_DismissCoachmarkRequest(ConjureBeanType):
2036
+ """Request to dismiss a coachmark
2037
+ """
2038
+
2039
+ @builtins.classmethod
2040
+ def _fields(cls) -> Dict[str, ConjureFieldDefinition]:
2041
+ return {
2042
+ 'coachmark_id': ConjureFieldDefinition('coachmarkId', str),
2043
+ 'app_version': ConjureFieldDefinition('appVersion', str),
2044
+ 'step_index': ConjureFieldDefinition('stepIndex', OptionalTypeWrapper[int])
2045
+ }
2046
+
2047
+ __slots__: List[str] = ['_coachmark_id', '_app_version', '_step_index']
2048
+
2049
+ def __init__(self, app_version: str, coachmark_id: str, step_index: Optional[int] = None) -> None:
2050
+ self._coachmark_id = coachmark_id
2051
+ self._app_version = app_version
2052
+ self._step_index = step_index
2053
+
2054
+ @builtins.property
2055
+ def coachmark_id(self) -> str:
2056
+ """The coachmark identifier to dismiss
2057
+ """
2058
+ return self._coachmark_id
2059
+
2060
+ @builtins.property
2061
+ def app_version(self) -> str:
2062
+ """The apps-scout version (semver) when dismissing
2063
+ """
2064
+ return self._app_version
2065
+
2066
+ @builtins.property
2067
+ def step_index(self) -> Optional[int]:
2068
+ """The step index when dismissed (for multi-step coachmarks)
2069
+ """
2070
+ return self._step_index
2071
+
2072
+
2073
+ authentication_api_DismissCoachmarkRequest.__name__ = "DismissCoachmarkRequest"
2074
+ authentication_api_DismissCoachmarkRequest.__qualname__ = "DismissCoachmarkRequest"
2075
+ authentication_api_DismissCoachmarkRequest.__module__ = "nominal_api.authentication_api"
2076
+
2077
+
1777
2078
  class authentication_api_GenerateMediaMtxTokenRequest(ConjureBeanType):
1778
2079
  """Request to generate a MediaMTX authentication token
1779
2080
  """
@@ -1828,6 +2129,61 @@ authentication_api_GenerateMediaMtxTokenResponse.__qualname__ = "GenerateMediaMt
1828
2129
  authentication_api_GenerateMediaMtxTokenResponse.__module__ = "nominal_api.authentication_api"
1829
2130
 
1830
2131
 
2132
+ class authentication_api_GetCoachmarkDismissalsRequest(ConjureBeanType):
2133
+ """Request to get coachmark dismissals
2134
+ """
2135
+
2136
+ @builtins.classmethod
2137
+ def _fields(cls) -> Dict[str, ConjureFieldDefinition]:
2138
+ return {
2139
+ 'coachmark_ids': ConjureFieldDefinition('coachmarkIds', OptionalTypeWrapper[List[str]])
2140
+ }
2141
+
2142
+ __slots__: List[str] = ['_coachmark_ids']
2143
+
2144
+ def __init__(self, coachmark_ids: Optional[List[str]] = None) -> None:
2145
+ self._coachmark_ids = coachmark_ids
2146
+
2147
+ @builtins.property
2148
+ def coachmark_ids(self) -> Optional[List[str]]:
2149
+ """Optional list of coachmark IDs to filter by.
2150
+ If empty, returns all dismissals for the user.
2151
+ """
2152
+ return self._coachmark_ids
2153
+
2154
+
2155
+ authentication_api_GetCoachmarkDismissalsRequest.__name__ = "GetCoachmarkDismissalsRequest"
2156
+ authentication_api_GetCoachmarkDismissalsRequest.__qualname__ = "GetCoachmarkDismissalsRequest"
2157
+ authentication_api_GetCoachmarkDismissalsRequest.__module__ = "nominal_api.authentication_api"
2158
+
2159
+
2160
+ class authentication_api_GetCoachmarkDismissalsResponse(ConjureBeanType):
2161
+ """Response containing coachmark dismissals
2162
+ """
2163
+
2164
+ @builtins.classmethod
2165
+ def _fields(cls) -> Dict[str, ConjureFieldDefinition]:
2166
+ return {
2167
+ 'dismissals': ConjureFieldDefinition('dismissals', Dict[str, authentication_api_CoachmarkDismissal])
2168
+ }
2169
+
2170
+ __slots__: List[str] = ['_dismissals']
2171
+
2172
+ def __init__(self, dismissals: Dict[str, "authentication_api_CoachmarkDismissal"]) -> None:
2173
+ self._dismissals = dismissals
2174
+
2175
+ @builtins.property
2176
+ def dismissals(self) -> Dict[str, "authentication_api_CoachmarkDismissal"]:
2177
+ """Map of coachmark ID to dismissal record
2178
+ """
2179
+ return self._dismissals
2180
+
2181
+
2182
+ authentication_api_GetCoachmarkDismissalsResponse.__name__ = "GetCoachmarkDismissalsResponse"
2183
+ authentication_api_GetCoachmarkDismissalsResponse.__qualname__ = "GetCoachmarkDismissalsResponse"
2184
+ authentication_api_GetCoachmarkDismissalsResponse.__module__ = "nominal_api.authentication_api"
2185
+
2186
+
1831
2187
  class authentication_api_Jwk(ConjureBeanType):
1832
2188
  """A JSON Web Key (JWK) representation for RSA public keys
1833
2189
  """
@@ -17871,6 +18227,35 @@ module_internal_ModuleComputeDefinition.__qualname__ = "ModuleComputeDefinition"
17871
18227
  module_internal_ModuleComputeDefinition.__module__ = "nominal_api.module_internal"
17872
18228
 
17873
18229
 
18230
+ class persistent_compute_api_AppendOnlyConfig(ConjureBeanType):
18231
+ """Defines the append results from the websocket.
18232
+ """
18233
+
18234
+ @builtins.classmethod
18235
+ def _fields(cls) -> Dict[str, ConjureFieldDefinition]:
18236
+ return {
18237
+ 'decimate_results': ConjureFieldDefinition('decimateResults', bool)
18238
+ }
18239
+
18240
+ __slots__: List[str] = ['_decimate_results']
18241
+
18242
+ def __init__(self, decimate_results: bool) -> None:
18243
+ self._decimate_results = decimate_results
18244
+
18245
+ @builtins.property
18246
+ def decimate_results(self) -> bool:
18247
+ """Specifies whether the returned results should be decimated.
18248
+ If this is false, the client may receive a `SubscriptionCreationError` if the data rate is too high
18249
+ and responses must be decimated.
18250
+ """
18251
+ return self._decimate_results
18252
+
18253
+
18254
+ persistent_compute_api_AppendOnlyConfig.__name__ = "AppendOnlyConfig"
18255
+ persistent_compute_api_AppendOnlyConfig.__qualname__ = "AppendOnlyConfig"
18256
+ persistent_compute_api_AppendOnlyConfig.__module__ = "nominal_api.persistent_compute_api"
18257
+
18258
+
17874
18259
  class persistent_compute_api_AppendResult(ConjureBeanType):
17875
18260
  """An append result won't cover the full `StreamingComputeNodeRequest#windowWidth` but rather just a smaller
17876
18261
  window. The end of the window that the append covers is guaranteed to be later than previously sent results.
@@ -18817,6 +19202,62 @@ persistent_compute_api_Pong.__qualname__ = "Pong"
18817
19202
  persistent_compute_api_Pong.__module__ = "nominal_api.persistent_compute_api"
18818
19203
 
18819
19204
 
19205
+ class persistent_compute_api_ResultConfiguration(ConjureUnionType):
19206
+ _append_only: Optional["persistent_compute_api_AppendOnlyConfig"] = None
19207
+
19208
+ @builtins.classmethod
19209
+ def _options(cls) -> Dict[str, ConjureFieldDefinition]:
19210
+ return {
19211
+ 'append_only': ConjureFieldDefinition('appendOnly', persistent_compute_api_AppendOnlyConfig)
19212
+ }
19213
+
19214
+ def __init__(
19215
+ self,
19216
+ append_only: Optional["persistent_compute_api_AppendOnlyConfig"] = None,
19217
+ type_of_union: Optional[str] = None
19218
+ ) -> None:
19219
+ if type_of_union is None:
19220
+ if (append_only is not None) != 1:
19221
+ raise ValueError('a union must contain a single member')
19222
+
19223
+ if append_only is not None:
19224
+ self._append_only = append_only
19225
+ self._type = 'appendOnly'
19226
+
19227
+ elif type_of_union == 'appendOnly':
19228
+ if append_only is None:
19229
+ raise ValueError('a union value must not be None')
19230
+ self._append_only = append_only
19231
+ self._type = 'appendOnly'
19232
+
19233
+ @builtins.property
19234
+ def append_only(self) -> Optional["persistent_compute_api_AppendOnlyConfig"]:
19235
+ return self._append_only
19236
+
19237
+ def accept(self, visitor) -> Any:
19238
+ if not isinstance(visitor, persistent_compute_api_ResultConfigurationVisitor):
19239
+ raise ValueError('{} is not an instance of persistent_compute_api_ResultConfigurationVisitor'.format(visitor.__class__.__name__))
19240
+ if self._type == 'appendOnly' and self.append_only is not None:
19241
+ return visitor._append_only(self.append_only)
19242
+
19243
+
19244
+ persistent_compute_api_ResultConfiguration.__name__ = "ResultConfiguration"
19245
+ persistent_compute_api_ResultConfiguration.__qualname__ = "ResultConfiguration"
19246
+ persistent_compute_api_ResultConfiguration.__module__ = "nominal_api.persistent_compute_api"
19247
+
19248
+
19249
+ class persistent_compute_api_ResultConfigurationVisitor:
19250
+
19251
+ @abstractmethod
19252
+ def _append_only(self, append_only: "persistent_compute_api_AppendOnlyConfig") -> Any:
19253
+ pass
19254
+
19255
+
19256
+ persistent_compute_api_ResultConfigurationVisitor.__name__ = "ResultConfigurationVisitor"
19257
+ persistent_compute_api_ResultConfigurationVisitor.__qualname__ = "ResultConfigurationVisitor"
19258
+ persistent_compute_api_ResultConfigurationVisitor.__module__ = "nominal_api.persistent_compute_api"
19259
+
19260
+
18820
19261
  class persistent_compute_api_ServerMessage(ConjureUnionType):
18821
19262
  _subscription_update: Optional["persistent_compute_api_SubscriptionUpdateMessage"] = None
18822
19263
  _subscription_creation: Optional["persistent_compute_api_SubscriptionCreationMessage"] = None
@@ -19173,14 +19614,16 @@ class persistent_compute_api_SubscriptionOptions(ConjureBeanType):
19173
19614
  def _fields(cls) -> Dict[str, ConjureFieldDefinition]:
19174
19615
  return {
19175
19616
  'min_delay': ConjureFieldDefinition('minDelay', persistent_compute_api_Milliseconds),
19176
- 'allow_appends': ConjureFieldDefinition('allowAppends', OptionalTypeWrapper[bool])
19617
+ 'allow_appends': ConjureFieldDefinition('allowAppends', OptionalTypeWrapper[bool]),
19618
+ 'result_configuration': ConjureFieldDefinition('resultConfiguration', OptionalTypeWrapper[persistent_compute_api_ResultConfiguration])
19177
19619
  }
19178
19620
 
19179
- __slots__: List[str] = ['_min_delay', '_allow_appends']
19621
+ __slots__: List[str] = ['_min_delay', '_allow_appends', '_result_configuration']
19180
19622
 
19181
- def __init__(self, min_delay: int, allow_appends: Optional[bool] = None) -> None:
19623
+ def __init__(self, min_delay: int, allow_appends: Optional[bool] = None, result_configuration: Optional["persistent_compute_api_ResultConfiguration"] = None) -> None:
19182
19624
  self._min_delay = min_delay
19183
19625
  self._allow_appends = allow_appends
19626
+ self._result_configuration = result_configuration
19184
19627
 
19185
19628
  @builtins.property
19186
19629
  def min_delay(self) -> int:
@@ -19200,6 +19643,13 @@ implement support.
19200
19643
  """
19201
19644
  return self._allow_appends
19202
19645
 
19646
+ @builtins.property
19647
+ def result_configuration(self) -> Optional["persistent_compute_api_ResultConfiguration"]:
19648
+ """Defines the results that are sent for this subscription. If not set, falls back to the behavior
19649
+ defined by `allowAppends`.
19650
+ """
19651
+ return self._result_configuration
19652
+
19203
19653
 
19204
19654
  persistent_compute_api_SubscriptionOptions.__name__ = "SubscriptionOptions"
19205
19655
  persistent_compute_api_SubscriptionOptions.__qualname__ = "SubscriptionOptions"
@@ -19361,6 +19811,24 @@ persistent_compute_api_SubscriptionUpdateMessage.__qualname__ = "SubscriptionUpd
19361
19811
  persistent_compute_api_SubscriptionUpdateMessage.__module__ = "nominal_api.persistent_compute_api"
19362
19812
 
19363
19813
 
19814
+ class persistent_compute_api_UnavailableResultConfigurationReason(ConjureEnumType):
19815
+
19816
+ APPENDS_NOT_SUPPORTED_FOR_COMPUTE = 'APPENDS_NOT_SUPPORTED_FOR_COMPUTE'
19817
+ '''APPENDS_NOT_SUPPORTED_FOR_COMPUTE'''
19818
+ TOO_MANY_POINTS_FOR_UNDECIMATED_APPENDS = 'TOO_MANY_POINTS_FOR_UNDECIMATED_APPENDS'
19819
+ '''TOO_MANY_POINTS_FOR_UNDECIMATED_APPENDS'''
19820
+ UNKNOWN = 'UNKNOWN'
19821
+ '''UNKNOWN'''
19822
+
19823
+ def __reduce_ex__(self, proto):
19824
+ return self.__class__, (self.name,)
19825
+
19826
+
19827
+ persistent_compute_api_UnavailableResultConfigurationReason.__name__ = "UnavailableResultConfigurationReason"
19828
+ persistent_compute_api_UnavailableResultConfigurationReason.__qualname__ = "UnavailableResultConfigurationReason"
19829
+ persistent_compute_api_UnavailableResultConfigurationReason.__module__ = "nominal_api.persistent_compute_api"
19830
+
19831
+
19364
19832
  class scout_InternalVersioningService(Service):
19365
19833
  """These endpoints are not intended to be used directly by clients, since
19366
19834
  they require saving resource-specific state associated with new commits.
@@ -24758,18 +25226,20 @@ class scout_catalog_AddFileToDataset(ConjureBeanType):
24758
25226
  'timestamp_metadata': ConjureFieldDefinition('timestampMetadata', OptionalTypeWrapper[scout_catalog_TimestampMetadata]),
24759
25227
  'ingest_tag_metadata': ConjureFieldDefinition('ingestTagMetadata', OptionalTypeWrapper[scout_catalog_IngestTagMetadata]),
24760
25228
  'origin_file_handles': ConjureFieldDefinition('originFileHandles', OptionalTypeWrapper[List[scout_catalog_S3Handle]]),
24761
- 'ingest_job_rid': ConjureFieldDefinition('ingestJobRid', OptionalTypeWrapper[ingest_api_IngestJobRid])
25229
+ 'ingest_job_rid': ConjureFieldDefinition('ingestJobRid', OptionalTypeWrapper[ingest_api_IngestJobRid]),
25230
+ 'metadata': ConjureFieldDefinition('metadata', OptionalTypeWrapper[scout_catalog_DatasetFileMetadata])
24762
25231
  }
24763
25232
 
24764
- __slots__: List[str] = ['_handle', '_file_size', '_timestamp_metadata', '_ingest_tag_metadata', '_origin_file_handles', '_ingest_job_rid']
25233
+ __slots__: List[str] = ['_handle', '_file_size', '_timestamp_metadata', '_ingest_tag_metadata', '_origin_file_handles', '_ingest_job_rid', '_metadata']
24765
25234
 
24766
- def __init__(self, file_size: int, handle: "scout_catalog_Handle", ingest_job_rid: Optional[str] = None, ingest_tag_metadata: Optional["scout_catalog_IngestTagMetadata"] = None, origin_file_handles: Optional[List["scout_catalog_S3Handle"]] = None, timestamp_metadata: Optional["scout_catalog_TimestampMetadata"] = None) -> None:
25235
+ def __init__(self, file_size: int, handle: "scout_catalog_Handle", ingest_job_rid: Optional[str] = None, ingest_tag_metadata: Optional["scout_catalog_IngestTagMetadata"] = None, metadata: Optional["scout_catalog_DatasetFileMetadata"] = None, origin_file_handles: Optional[List["scout_catalog_S3Handle"]] = None, timestamp_metadata: Optional["scout_catalog_TimestampMetadata"] = None) -> None:
24767
25236
  self._handle = handle
24768
25237
  self._file_size = file_size
24769
25238
  self._timestamp_metadata = timestamp_metadata
24770
25239
  self._ingest_tag_metadata = ingest_tag_metadata
24771
25240
  self._origin_file_handles = origin_file_handles
24772
25241
  self._ingest_job_rid = ingest_job_rid
25242
+ self._metadata = metadata
24773
25243
 
24774
25244
  @builtins.property
24775
25245
  def handle(self) -> "scout_catalog_Handle":
@@ -24797,6 +25267,12 @@ class scout_catalog_AddFileToDataset(ConjureBeanType):
24797
25267
  def ingest_job_rid(self) -> Optional[str]:
24798
25268
  return self._ingest_job_rid
24799
25269
 
25270
+ @builtins.property
25271
+ def metadata(self) -> Optional["scout_catalog_DatasetFileMetadata"]:
25272
+ """File-type-specific metadata. For video files, contains timestamp manifest.
25273
+ """
25274
+ return self._metadata
25275
+
24800
25276
 
24801
25277
  scout_catalog_AddFileToDataset.__name__ = "AddFileToDataset"
24802
25278
  scout_catalog_AddFileToDataset.__qualname__ = "AddFileToDataset"
@@ -26714,6 +27190,10 @@ class scout_catalog_IngestStatus(ConjureEnumType):
26714
27190
  '''COMPLETED'''
26715
27191
  FAILED = 'FAILED'
26716
27192
  '''FAILED'''
27193
+ DELETION_IN_PROGRESS = 'DELETION_IN_PROGRESS'
27194
+ '''DELETION_IN_PROGRESS'''
27195
+ DELETED = 'DELETED'
27196
+ '''DELETED'''
26717
27197
  UNKNOWN = 'UNKNOWN'
26718
27198
  '''UNKNOWN'''
26719
27199
 
@@ -90739,9 +91219,14 @@ permanently delete it. Archived videos can be unarchived.
90739
91219
 
90740
91220
  return
90741
91221
 
90742
- def get_playlist(self, auth_header: str, video_rid: str) -> Any:
90743
- """Generates an HLS playlist for a video with the given video rid to enable playback. The HLS playlist will contain
90744
- links to all of the segments in the video in sequential order.
91222
+ def get_playlist(self, auth_header: str, video_rid: str, end: Optional[str] = None, start: Optional[str] = None) -> Any:
91223
+ """Generates an HLS playlist for a video within optional time bounds.
91224
+ Uses GET with query parameters for HLS.js compatibility.
91225
+ The HLS playlist will contain links to all of the segments in the video that overlap with the given bounds,
91226
+ or all segments if no bounds are provided.
91227
+
91228
+ Note: The start and end parameters must either both be provided or both be omitted.
91229
+ Providing only one will result in a MissingTimestampBoundPair error.
90745
91230
  """
90746
91231
  _conjure_encoder = ConjureEncoder()
90747
91232
 
@@ -90751,6 +91236,8 @@ links to all of the segments in the video in sequential order.
90751
91236
  }
90752
91237
 
90753
91238
  _params: Dict[str, Any] = {
91239
+ 'start': _conjure_encoder.default(start),
91240
+ 'end': _conjure_encoder.default(end),
90754
91241
  }
90755
91242
 
90756
91243
  _path_params: Dict[str, str] = {
@@ -90880,6 +91367,49 @@ bounds then generates a playlist for all matching video segments.
90880
91367
  _raw.decode_content = True
90881
91368
  return _raw
90882
91369
 
91370
+ def get_playlist_for_channel(self, auth_header: str, channel: str, end: str, start: str, asset_rid: Optional[str] = None, data_scope_name: Optional[str] = None, data_source_rid: Optional[str] = None, tags: Optional[str] = None) -> Any:
91371
+ """Generates an HLS playlist for a video channel series within time bounds.
91372
+ Specify either dataSourceRid OR (assetRid + dataScopeName) to identify the channel source.
91373
+
91374
+ Note: Both start and end parameters are required and must be provided together.
91375
+ """
91376
+ _conjure_encoder = ConjureEncoder()
91377
+
91378
+ _headers: Dict[str, Any] = {
91379
+ 'Accept': 'application/octet-stream',
91380
+ 'Authorization': auth_header,
91381
+ }
91382
+
91383
+ _params: Dict[str, Any] = {
91384
+ 'dataSourceRid': _conjure_encoder.default(data_source_rid),
91385
+ 'assetRid': _conjure_encoder.default(asset_rid),
91386
+ 'dataScopeName': _conjure_encoder.default(data_scope_name),
91387
+ 'channel': _conjure_encoder.default(channel),
91388
+ 'tags': _conjure_encoder.default(tags),
91389
+ 'start': _conjure_encoder.default(start),
91390
+ 'end': _conjure_encoder.default(end),
91391
+ }
91392
+
91393
+ _path_params: Dict[str, str] = {
91394
+ }
91395
+
91396
+ _json: Any = None
91397
+
91398
+ _path = '/video/v1/videos/channel/playlist'
91399
+ _path = _path.format(**_path_params)
91400
+
91401
+ _response: Response = self._request(
91402
+ 'GET',
91403
+ self._uri + _path,
91404
+ params=_params,
91405
+ headers=_headers,
91406
+ stream=True,
91407
+ json=_json)
91408
+
91409
+ _raw = _response.raw
91410
+ _raw.decode_content = True
91411
+ return _raw
91412
+
90883
91413
  def get_segment_summaries_in_bounds(self, auth_header: str, request: "scout_video_api_GetSegmentSummariesInBoundsRequest", video_rid: str) -> List["scout_video_api_SegmentSummary"]:
90884
91414
  """Returns the min and max absolute and media timestamps for each segment in a video that overlap with an
90885
91415
  optional set of bounds.