nominal-api 0.1037.0__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
  """
@@ -4244,6 +4600,107 @@ datasource_TimestampType.__qualname__ = "TimestampType"
4244
4600
  datasource_TimestampType.__module__ = "nominal_api.datasource"
4245
4601
 
4246
4602
 
4603
+ class datasource_VideoFileMetadata(ConjureBeanType):
4604
+ """Metadata specific to video files.
4605
+ """
4606
+
4607
+ @builtins.classmethod
4608
+ def _fields(cls) -> Dict[str, ConjureFieldDefinition]:
4609
+ return {
4610
+ 'timestamp_manifest': ConjureFieldDefinition('timestampManifest', scout_video_api_VideoFileTimestampManifest),
4611
+ 'segment_metadata': ConjureFieldDefinition('segmentMetadata', OptionalTypeWrapper[datasource_VideoSegmentsMetadata])
4612
+ }
4613
+
4614
+ __slots__: List[str] = ['_timestamp_manifest', '_segment_metadata']
4615
+
4616
+ def __init__(self, timestamp_manifest: "scout_video_api_VideoFileTimestampManifest", segment_metadata: Optional["datasource_VideoSegmentsMetadata"] = None) -> None:
4617
+ self._timestamp_manifest = timestamp_manifest
4618
+ self._segment_metadata = segment_metadata
4619
+
4620
+ @builtins.property
4621
+ def timestamp_manifest(self) -> "scout_video_api_VideoFileTimestampManifest":
4622
+ """Specifies how to determine absolute timestamps for each frame in the video.
4623
+ Can be an embedded MCAP manifest, an external sidecar file, or calculated
4624
+ from a starting offset applied to presentation timestamps.
4625
+ """
4626
+ return self._timestamp_manifest
4627
+
4628
+ @builtins.property
4629
+ def segment_metadata(self) -> Optional["datasource_VideoSegmentsMetadata"]:
4630
+ """Cached aggregate metadata about the segments comprising this video file
4631
+ after segmentation has completed. Includes frame counts, duration, and
4632
+ frame rate. Empty until segmentation is complete.
4633
+ Note: Min/max timestamps are stored in DatasetFile.bounds field.
4634
+ Raw file size is stored in DatasetFile.fileSizeBytes.
4635
+ """
4636
+ return self._segment_metadata
4637
+
4638
+
4639
+ datasource_VideoFileMetadata.__name__ = "VideoFileMetadata"
4640
+ datasource_VideoFileMetadata.__qualname__ = "VideoFileMetadata"
4641
+ datasource_VideoFileMetadata.__module__ = "nominal_api.datasource"
4642
+
4643
+
4644
+ class datasource_VideoSegmentsMetadata(ConjureBeanType):
4645
+ """Segment metadata for video files.
4646
+ Lightweight version that excludes bounds and RID since those are stored elsewhere.
4647
+ """
4648
+
4649
+ @builtins.classmethod
4650
+ def _fields(cls) -> Dict[str, ConjureFieldDefinition]:
4651
+ return {
4652
+ 'num_frames': ConjureFieldDefinition('numFrames', int),
4653
+ 'num_segments': ConjureFieldDefinition('numSegments', int),
4654
+ 'scale_factor': ConjureFieldDefinition('scaleFactor', float),
4655
+ 'media_duration_seconds': ConjureFieldDefinition('mediaDurationSeconds', float),
4656
+ 'media_frame_rate': ConjureFieldDefinition('mediaFrameRate', float)
4657
+ }
4658
+
4659
+ __slots__: List[str] = ['_num_frames', '_num_segments', '_scale_factor', '_media_duration_seconds', '_media_frame_rate']
4660
+
4661
+ def __init__(self, media_duration_seconds: float, media_frame_rate: float, num_frames: int, num_segments: int, scale_factor: float) -> None:
4662
+ self._num_frames = num_frames
4663
+ self._num_segments = num_segments
4664
+ self._scale_factor = scale_factor
4665
+ self._media_duration_seconds = media_duration_seconds
4666
+ self._media_frame_rate = media_frame_rate
4667
+
4668
+ @builtins.property
4669
+ def num_frames(self) -> int:
4670
+ """Total number of frames across all segments.
4671
+ """
4672
+ return self._num_frames
4673
+
4674
+ @builtins.property
4675
+ def num_segments(self) -> int:
4676
+ """Number of segments the video was split into.
4677
+ """
4678
+ return self._num_segments
4679
+
4680
+ @builtins.property
4681
+ def scale_factor(self) -> float:
4682
+ """Scale factor applied to timestamps during segmentation.
4683
+ """
4684
+ return self._scale_factor
4685
+
4686
+ @builtins.property
4687
+ def media_duration_seconds(self) -> float:
4688
+ """Total duration of the video in seconds.
4689
+ """
4690
+ return self._media_duration_seconds
4691
+
4692
+ @builtins.property
4693
+ def media_frame_rate(self) -> float:
4694
+ """Average frame rate (FPS) calculated as total frames / duration.
4695
+ """
4696
+ return self._media_frame_rate
4697
+
4698
+
4699
+ datasource_VideoSegmentsMetadata.__name__ = "VideoSegmentsMetadata"
4700
+ datasource_VideoSegmentsMetadata.__qualname__ = "VideoSegmentsMetadata"
4701
+ datasource_VideoSegmentsMetadata.__module__ = "nominal_api.datasource"
4702
+
4703
+
4247
4704
  class datasource_api_BatchGetChannelPrefixTreeRequest(ConjureBeanType):
4248
4705
 
4249
4706
  @builtins.classmethod
@@ -17770,6 +18227,35 @@ module_internal_ModuleComputeDefinition.__qualname__ = "ModuleComputeDefinition"
17770
18227
  module_internal_ModuleComputeDefinition.__module__ = "nominal_api.module_internal"
17771
18228
 
17772
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
+
17773
18259
  class persistent_compute_api_AppendResult(ConjureBeanType):
17774
18260
  """An append result won't cover the full `StreamingComputeNodeRequest#windowWidth` but rather just a smaller
17775
18261
  window. The end of the window that the append covers is guaranteed to be later than previously sent results.
@@ -18716,6 +19202,62 @@ persistent_compute_api_Pong.__qualname__ = "Pong"
18716
19202
  persistent_compute_api_Pong.__module__ = "nominal_api.persistent_compute_api"
18717
19203
 
18718
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
+
18719
19261
  class persistent_compute_api_ServerMessage(ConjureUnionType):
18720
19262
  _subscription_update: Optional["persistent_compute_api_SubscriptionUpdateMessage"] = None
18721
19263
  _subscription_creation: Optional["persistent_compute_api_SubscriptionCreationMessage"] = None
@@ -19072,14 +19614,16 @@ class persistent_compute_api_SubscriptionOptions(ConjureBeanType):
19072
19614
  def _fields(cls) -> Dict[str, ConjureFieldDefinition]:
19073
19615
  return {
19074
19616
  'min_delay': ConjureFieldDefinition('minDelay', persistent_compute_api_Milliseconds),
19075
- 'allow_appends': ConjureFieldDefinition('allowAppends', OptionalTypeWrapper[bool])
19617
+ 'allow_appends': ConjureFieldDefinition('allowAppends', OptionalTypeWrapper[bool]),
19618
+ 'result_configuration': ConjureFieldDefinition('resultConfiguration', OptionalTypeWrapper[persistent_compute_api_ResultConfiguration])
19076
19619
  }
19077
19620
 
19078
- __slots__: List[str] = ['_min_delay', '_allow_appends']
19621
+ __slots__: List[str] = ['_min_delay', '_allow_appends', '_result_configuration']
19079
19622
 
19080
- 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:
19081
19624
  self._min_delay = min_delay
19082
19625
  self._allow_appends = allow_appends
19626
+ self._result_configuration = result_configuration
19083
19627
 
19084
19628
  @builtins.property
19085
19629
  def min_delay(self) -> int:
@@ -19099,6 +19643,13 @@ implement support.
19099
19643
  """
19100
19644
  return self._allow_appends
19101
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
+
19102
19653
 
19103
19654
  persistent_compute_api_SubscriptionOptions.__name__ = "SubscriptionOptions"
19104
19655
  persistent_compute_api_SubscriptionOptions.__qualname__ = "SubscriptionOptions"
@@ -19260,6 +19811,24 @@ persistent_compute_api_SubscriptionUpdateMessage.__qualname__ = "SubscriptionUpd
19260
19811
  persistent_compute_api_SubscriptionUpdateMessage.__module__ = "nominal_api.persistent_compute_api"
19261
19812
 
19262
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
+
19263
19832
  class scout_InternalVersioningService(Service):
19264
19833
  """These endpoints are not intended to be used directly by clients, since
19265
19834
  they require saving resource-specific state associated with new commits.
@@ -24657,18 +25226,20 @@ class scout_catalog_AddFileToDataset(ConjureBeanType):
24657
25226
  'timestamp_metadata': ConjureFieldDefinition('timestampMetadata', OptionalTypeWrapper[scout_catalog_TimestampMetadata]),
24658
25227
  'ingest_tag_metadata': ConjureFieldDefinition('ingestTagMetadata', OptionalTypeWrapper[scout_catalog_IngestTagMetadata]),
24659
25228
  'origin_file_handles': ConjureFieldDefinition('originFileHandles', OptionalTypeWrapper[List[scout_catalog_S3Handle]]),
24660
- '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])
24661
25231
  }
24662
25232
 
24663
- __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']
24664
25234
 
24665
- 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:
24666
25236
  self._handle = handle
24667
25237
  self._file_size = file_size
24668
25238
  self._timestamp_metadata = timestamp_metadata
24669
25239
  self._ingest_tag_metadata = ingest_tag_metadata
24670
25240
  self._origin_file_handles = origin_file_handles
24671
25241
  self._ingest_job_rid = ingest_job_rid
25242
+ self._metadata = metadata
24672
25243
 
24673
25244
  @builtins.property
24674
25245
  def handle(self) -> "scout_catalog_Handle":
@@ -24696,6 +25267,12 @@ class scout_catalog_AddFileToDataset(ConjureBeanType):
24696
25267
  def ingest_job_rid(self) -> Optional[str]:
24697
25268
  return self._ingest_job_rid
24698
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
+
24699
25276
 
24700
25277
  scout_catalog_AddFileToDataset.__name__ = "AddFileToDataset"
24701
25278
  scout_catalog_AddFileToDataset.__qualname__ = "AddFileToDataset"
@@ -25932,12 +26509,13 @@ class scout_catalog_DatasetFile(ConjureBeanType):
25932
26509
  'ingest_tag_metadata': ConjureFieldDefinition('ingestTagMetadata', OptionalTypeWrapper[scout_catalog_IngestTagMetadata]),
25933
26510
  'origin_file_paths': ConjureFieldDefinition('originFilePaths', OptionalTypeWrapper[List[str]]),
25934
26511
  'ingest_job_rid': ConjureFieldDefinition('ingestJobRid', OptionalTypeWrapper[ingest_api_IngestJobRid]),
25935
- 'deleted_at': ConjureFieldDefinition('deletedAt', OptionalTypeWrapper[str])
26512
+ 'deleted_at': ConjureFieldDefinition('deletedAt', OptionalTypeWrapper[str]),
26513
+ 'metadata': ConjureFieldDefinition('metadata', OptionalTypeWrapper[scout_catalog_DatasetFileMetadata])
25936
26514
  }
25937
26515
 
25938
- __slots__: List[str] = ['_id', '_dataset_rid', '_name', '_handle', '_bounds', '_uploaded_at', '_ingested_at', '_ingest_status', '_timestamp_metadata', '_ingest_tag_metadata', '_origin_file_paths', '_ingest_job_rid', '_deleted_at']
26516
+ __slots__: List[str] = ['_id', '_dataset_rid', '_name', '_handle', '_bounds', '_uploaded_at', '_ingested_at', '_ingest_status', '_timestamp_metadata', '_ingest_tag_metadata', '_origin_file_paths', '_ingest_job_rid', '_deleted_at', '_metadata']
25939
26517
 
25940
- def __init__(self, dataset_rid: str, handle: "scout_catalog_Handle", id: str, ingest_status: "api_IngestStatusV2", name: str, uploaded_at: str, bounds: Optional["scout_catalog_Bounds"] = None, deleted_at: Optional[str] = None, ingest_job_rid: Optional[str] = None, ingest_tag_metadata: Optional["scout_catalog_IngestTagMetadata"] = None, ingested_at: Optional[str] = None, origin_file_paths: Optional[List[str]] = None, timestamp_metadata: Optional["scout_catalog_TimestampMetadata"] = None) -> None:
26518
+ def __init__(self, dataset_rid: str, handle: "scout_catalog_Handle", id: str, ingest_status: "api_IngestStatusV2", name: str, uploaded_at: str, bounds: Optional["scout_catalog_Bounds"] = None, deleted_at: Optional[str] = None, ingest_job_rid: Optional[str] = None, ingest_tag_metadata: Optional["scout_catalog_IngestTagMetadata"] = None, ingested_at: Optional[str] = None, metadata: Optional["scout_catalog_DatasetFileMetadata"] = None, origin_file_paths: Optional[List[str]] = None, timestamp_metadata: Optional["scout_catalog_TimestampMetadata"] = None) -> None:
25941
26519
  self._id = id
25942
26520
  self._dataset_rid = dataset_rid
25943
26521
  self._name = name
@@ -25951,6 +26529,7 @@ class scout_catalog_DatasetFile(ConjureBeanType):
25951
26529
  self._origin_file_paths = origin_file_paths
25952
26530
  self._ingest_job_rid = ingest_job_rid
25953
26531
  self._deleted_at = deleted_at
26532
+ self._metadata = metadata
25954
26533
 
25955
26534
  @builtins.property
25956
26535
  def id(self) -> str:
@@ -26011,12 +26590,76 @@ ingested for any reason or is still being processed, then this value will be emp
26011
26590
  """
26012
26591
  return self._deleted_at
26013
26592
 
26593
+ @builtins.property
26594
+ def metadata(self) -> Optional["scout_catalog_DatasetFileMetadata"]:
26595
+ """File-type-specific metadata. For video files, contains timestamp manifest and segment metadata.
26596
+ """
26597
+ return self._metadata
26598
+
26014
26599
 
26015
26600
  scout_catalog_DatasetFile.__name__ = "DatasetFile"
26016
26601
  scout_catalog_DatasetFile.__qualname__ = "DatasetFile"
26017
26602
  scout_catalog_DatasetFile.__module__ = "nominal_api.scout_catalog"
26018
26603
 
26019
26604
 
26605
+ class scout_catalog_DatasetFileMetadata(ConjureUnionType):
26606
+ """Metadata specific to different file types stored in datasets.
26607
+ """
26608
+ _video: Optional["datasource_VideoFileMetadata"] = None
26609
+
26610
+ @builtins.classmethod
26611
+ def _options(cls) -> Dict[str, ConjureFieldDefinition]:
26612
+ return {
26613
+ 'video': ConjureFieldDefinition('video', datasource_VideoFileMetadata)
26614
+ }
26615
+
26616
+ def __init__(
26617
+ self,
26618
+ video: Optional["datasource_VideoFileMetadata"] = None,
26619
+ type_of_union: Optional[str] = None
26620
+ ) -> None:
26621
+ if type_of_union is None:
26622
+ if (video is not None) != 1:
26623
+ raise ValueError('a union must contain a single member')
26624
+
26625
+ if video is not None:
26626
+ self._video = video
26627
+ self._type = 'video'
26628
+
26629
+ elif type_of_union == 'video':
26630
+ if video is None:
26631
+ raise ValueError('a union value must not be None')
26632
+ self._video = video
26633
+ self._type = 'video'
26634
+
26635
+ @builtins.property
26636
+ def video(self) -> Optional["datasource_VideoFileMetadata"]:
26637
+ return self._video
26638
+
26639
+ def accept(self, visitor) -> Any:
26640
+ if not isinstance(visitor, scout_catalog_DatasetFileMetadataVisitor):
26641
+ raise ValueError('{} is not an instance of scout_catalog_DatasetFileMetadataVisitor'.format(visitor.__class__.__name__))
26642
+ if self._type == 'video' and self.video is not None:
26643
+ return visitor._video(self.video)
26644
+
26645
+
26646
+ scout_catalog_DatasetFileMetadata.__name__ = "DatasetFileMetadata"
26647
+ scout_catalog_DatasetFileMetadata.__qualname__ = "DatasetFileMetadata"
26648
+ scout_catalog_DatasetFileMetadata.__module__ = "nominal_api.scout_catalog"
26649
+
26650
+
26651
+ class scout_catalog_DatasetFileMetadataVisitor:
26652
+
26653
+ @abstractmethod
26654
+ def _video(self, video: "datasource_VideoFileMetadata") -> Any:
26655
+ pass
26656
+
26657
+
26658
+ scout_catalog_DatasetFileMetadataVisitor.__name__ = "DatasetFileMetadataVisitor"
26659
+ scout_catalog_DatasetFileMetadataVisitor.__qualname__ = "DatasetFileMetadataVisitor"
26660
+ scout_catalog_DatasetFileMetadataVisitor.__module__ = "nominal_api.scout_catalog"
26661
+
26662
+
26020
26663
  class scout_catalog_DatasetFileSortField(ConjureEnumType):
26021
26664
 
26022
26665
  UPLOADED_AT = 'UPLOADED_AT'
@@ -26547,6 +27190,10 @@ class scout_catalog_IngestStatus(ConjureEnumType):
26547
27190
  '''COMPLETED'''
26548
27191
  FAILED = 'FAILED'
26549
27192
  '''FAILED'''
27193
+ DELETION_IN_PROGRESS = 'DELETION_IN_PROGRESS'
27194
+ '''DELETION_IN_PROGRESS'''
27195
+ DELETED = 'DELETED'
27196
+ '''DELETED'''
26550
27197
  UNKNOWN = 'UNKNOWN'
26551
27198
  '''UNKNOWN'''
26552
27199
 
@@ -44057,62 +44704,6 @@ scout_compute_api_BucketedEnumPlot.__qualname__ = "BucketedEnumPlot"
44057
44704
  scout_compute_api_BucketedEnumPlot.__module__ = "nominal_api.scout_compute_api"
44058
44705
 
44059
44706
 
44060
- class scout_compute_api_BucketedGeoPlot(ConjureUnionType):
44061
- _time_based: Optional["scout_compute_api_TimeBucketedGeoPlot"] = None
44062
-
44063
- @builtins.classmethod
44064
- def _options(cls) -> Dict[str, ConjureFieldDefinition]:
44065
- return {
44066
- 'time_based': ConjureFieldDefinition('timeBased', scout_compute_api_TimeBucketedGeoPlot)
44067
- }
44068
-
44069
- def __init__(
44070
- self,
44071
- time_based: Optional["scout_compute_api_TimeBucketedGeoPlot"] = None,
44072
- type_of_union: Optional[str] = None
44073
- ) -> None:
44074
- if type_of_union is None:
44075
- if (time_based is not None) != 1:
44076
- raise ValueError('a union must contain a single member')
44077
-
44078
- if time_based is not None:
44079
- self._time_based = time_based
44080
- self._type = 'timeBased'
44081
-
44082
- elif type_of_union == 'timeBased':
44083
- if time_based is None:
44084
- raise ValueError('a union value must not be None')
44085
- self._time_based = time_based
44086
- self._type = 'timeBased'
44087
-
44088
- @builtins.property
44089
- def time_based(self) -> Optional["scout_compute_api_TimeBucketedGeoPlot"]:
44090
- return self._time_based
44091
-
44092
- def accept(self, visitor) -> Any:
44093
- if not isinstance(visitor, scout_compute_api_BucketedGeoPlotVisitor):
44094
- raise ValueError('{} is not an instance of scout_compute_api_BucketedGeoPlotVisitor'.format(visitor.__class__.__name__))
44095
- if self._type == 'timeBased' and self.time_based is not None:
44096
- return visitor._time_based(self.time_based)
44097
-
44098
-
44099
- scout_compute_api_BucketedGeoPlot.__name__ = "BucketedGeoPlot"
44100
- scout_compute_api_BucketedGeoPlot.__qualname__ = "BucketedGeoPlot"
44101
- scout_compute_api_BucketedGeoPlot.__module__ = "nominal_api.scout_compute_api"
44102
-
44103
-
44104
- class scout_compute_api_BucketedGeoPlotVisitor:
44105
-
44106
- @abstractmethod
44107
- def _time_based(self, time_based: "scout_compute_api_TimeBucketedGeoPlot") -> Any:
44108
- pass
44109
-
44110
-
44111
- scout_compute_api_BucketedGeoPlotVisitor.__name__ = "BucketedGeoPlotVisitor"
44112
- scout_compute_api_BucketedGeoPlotVisitor.__qualname__ = "BucketedGeoPlotVisitor"
44113
- scout_compute_api_BucketedGeoPlotVisitor.__module__ = "nominal_api.scout_compute_api"
44114
-
44115
-
44116
44707
  class scout_compute_api_BucketedNumericArrayPlot(ConjureBeanType):
44117
44708
  """The array is flattened out into a an arrow stream of bucketed primitive results, with an extra column to
44118
44709
  indicate the index of the array that the bucket corresponds to.
@@ -44810,7 +45401,6 @@ class scout_compute_api_ComputableNode(ConjureUnionType):
44810
45401
  _frequency: Optional["scout_compute_api_FrequencyDomain"] = None
44811
45402
  _frequency_v2: Optional["scout_compute_api_FrequencyDomainV2"] = None
44812
45403
  _histogram: Optional["scout_compute_api_Histogram"] = None
44813
- _geo: Optional["scout_compute_api_SummarizeGeo"] = None
44814
45404
  _curve: Optional["scout_compute_api_CurveFit"] = None
44815
45405
 
44816
45406
  @builtins.classmethod
@@ -44824,7 +45414,6 @@ class scout_compute_api_ComputableNode(ConjureUnionType):
44824
45414
  'frequency': ConjureFieldDefinition('frequency', scout_compute_api_FrequencyDomain),
44825
45415
  'frequency_v2': ConjureFieldDefinition('frequencyV2', scout_compute_api_FrequencyDomainV2),
44826
45416
  'histogram': ConjureFieldDefinition('histogram', scout_compute_api_Histogram),
44827
- 'geo': ConjureFieldDefinition('geo', scout_compute_api_SummarizeGeo),
44828
45417
  'curve': ConjureFieldDefinition('curve', scout_compute_api_CurveFit)
44829
45418
  }
44830
45419
 
@@ -44838,12 +45427,11 @@ class scout_compute_api_ComputableNode(ConjureUnionType):
44838
45427
  frequency: Optional["scout_compute_api_FrequencyDomain"] = None,
44839
45428
  frequency_v2: Optional["scout_compute_api_FrequencyDomainV2"] = None,
44840
45429
  histogram: Optional["scout_compute_api_Histogram"] = None,
44841
- geo: Optional["scout_compute_api_SummarizeGeo"] = None,
44842
45430
  curve: Optional["scout_compute_api_CurveFit"] = None,
44843
45431
  type_of_union: Optional[str] = None
44844
45432
  ) -> None:
44845
45433
  if type_of_union is None:
44846
- if (ranges is not None) + (series is not None) + (value is not None) + (cartesian is not None) + (cartesian3d is not None) + (frequency is not None) + (frequency_v2 is not None) + (histogram is not None) + (geo is not None) + (curve is not None) != 1:
45434
+ if (ranges is not None) + (series is not None) + (value is not None) + (cartesian is not None) + (cartesian3d is not None) + (frequency is not None) + (frequency_v2 is not None) + (histogram is not None) + (curve is not None) != 1:
44847
45435
  raise ValueError('a union must contain a single member')
44848
45436
 
44849
45437
  if ranges is not None:
@@ -44870,9 +45458,6 @@ class scout_compute_api_ComputableNode(ConjureUnionType):
44870
45458
  if histogram is not None:
44871
45459
  self._histogram = histogram
44872
45460
  self._type = 'histogram'
44873
- if geo is not None:
44874
- self._geo = geo
44875
- self._type = 'geo'
44876
45461
  if curve is not None:
44877
45462
  self._curve = curve
44878
45463
  self._type = 'curve'
@@ -44917,11 +45502,6 @@ class scout_compute_api_ComputableNode(ConjureUnionType):
44917
45502
  raise ValueError('a union value must not be None')
44918
45503
  self._histogram = histogram
44919
45504
  self._type = 'histogram'
44920
- elif type_of_union == 'geo':
44921
- if geo is None:
44922
- raise ValueError('a union value must not be None')
44923
- self._geo = geo
44924
- self._type = 'geo'
44925
45505
  elif type_of_union == 'curve':
44926
45506
  if curve is None:
44927
45507
  raise ValueError('a union value must not be None')
@@ -44960,10 +45540,6 @@ class scout_compute_api_ComputableNode(ConjureUnionType):
44960
45540
  def histogram(self) -> Optional["scout_compute_api_Histogram"]:
44961
45541
  return self._histogram
44962
45542
 
44963
- @builtins.property
44964
- def geo(self) -> Optional["scout_compute_api_SummarizeGeo"]:
44965
- return self._geo
44966
-
44967
45543
  @builtins.property
44968
45544
  def curve(self) -> Optional["scout_compute_api_CurveFit"]:
44969
45545
  return self._curve
@@ -44987,8 +45563,6 @@ class scout_compute_api_ComputableNode(ConjureUnionType):
44987
45563
  return visitor._frequency_v2(self.frequency_v2)
44988
45564
  if self._type == 'histogram' and self.histogram is not None:
44989
45565
  return visitor._histogram(self.histogram)
44990
- if self._type == 'geo' and self.geo is not None:
44991
- return visitor._geo(self.geo)
44992
45566
  if self._type == 'curve' and self.curve is not None:
44993
45567
  return visitor._curve(self.curve)
44994
45568
 
@@ -45032,10 +45606,6 @@ class scout_compute_api_ComputableNodeVisitor:
45032
45606
  def _histogram(self, histogram: "scout_compute_api_Histogram") -> Any:
45033
45607
  pass
45034
45608
 
45035
- @abstractmethod
45036
- def _geo(self, geo: "scout_compute_api_SummarizeGeo") -> Any:
45037
- pass
45038
-
45039
45609
  @abstractmethod
45040
45610
  def _curve(self, curve: "scout_compute_api_CurveFit") -> Any:
45041
45611
  pass
@@ -45351,7 +45921,6 @@ class scout_compute_api_ComputeNodeResponse(ConjureUnionType):
45351
45921
  _cartesian: Optional["scout_compute_api_CartesianPlot"] = None
45352
45922
  _bucketed_cartesian: Optional["scout_compute_api_BucketedCartesianPlot"] = None
45353
45923
  _bucketed_cartesian3d: Optional["scout_compute_api_BucketedCartesian3dPlot"] = None
45354
- _bucketed_geo: Optional["scout_compute_api_BucketedGeoPlot"] = None
45355
45924
  _frequency_domain: Optional["scout_compute_api_FrequencyDomainPlot"] = None
45356
45925
  _frequency_domain_v2: Optional["scout_compute_api_FrequencyDomainPlotV2"] = None
45357
45926
  _numeric_histogram: Optional["scout_compute_api_NumericHistogramPlot"] = None
@@ -45384,7 +45953,6 @@ class scout_compute_api_ComputeNodeResponse(ConjureUnionType):
45384
45953
  'cartesian': ConjureFieldDefinition('cartesian', scout_compute_api_CartesianPlot),
45385
45954
  'bucketed_cartesian': ConjureFieldDefinition('bucketedCartesian', scout_compute_api_BucketedCartesianPlot),
45386
45955
  'bucketed_cartesian3d': ConjureFieldDefinition('bucketedCartesian3d', scout_compute_api_BucketedCartesian3dPlot),
45387
- 'bucketed_geo': ConjureFieldDefinition('bucketedGeo', scout_compute_api_BucketedGeoPlot),
45388
45956
  'frequency_domain': ConjureFieldDefinition('frequencyDomain', scout_compute_api_FrequencyDomainPlot),
45389
45957
  'frequency_domain_v2': ConjureFieldDefinition('frequencyDomainV2', scout_compute_api_FrequencyDomainPlotV2),
45390
45958
  'numeric_histogram': ConjureFieldDefinition('numericHistogram', scout_compute_api_NumericHistogramPlot),
@@ -45417,7 +45985,6 @@ class scout_compute_api_ComputeNodeResponse(ConjureUnionType):
45417
45985
  cartesian: Optional["scout_compute_api_CartesianPlot"] = None,
45418
45986
  bucketed_cartesian: Optional["scout_compute_api_BucketedCartesianPlot"] = None,
45419
45987
  bucketed_cartesian3d: Optional["scout_compute_api_BucketedCartesian3dPlot"] = None,
45420
- bucketed_geo: Optional["scout_compute_api_BucketedGeoPlot"] = None,
45421
45988
  frequency_domain: Optional["scout_compute_api_FrequencyDomainPlot"] = None,
45422
45989
  frequency_domain_v2: Optional["scout_compute_api_FrequencyDomainPlotV2"] = None,
45423
45990
  numeric_histogram: Optional["scout_compute_api_NumericHistogramPlot"] = None,
@@ -45430,7 +45997,7 @@ class scout_compute_api_ComputeNodeResponse(ConjureUnionType):
45430
45997
  type_of_union: Optional[str] = None
45431
45998
  ) -> None:
45432
45999
  if type_of_union is None:
45433
- if (range is not None) + (ranges_summary is not None) + (range_value is not None) + (numeric is not None) + (bucketed_numeric is not None) + (numeric_point is not None) + (single_point is not None) + (arrow_numeric is not None) + (arrow_bucketed_numeric is not None) + (enum is not None) + (enum_point is not None) + (bucketed_enum is not None) + (arrow_enum is not None) + (arrow_bucketed_enum is not None) + (paged_log is not None) + (log_point is not None) + (cartesian is not None) + (bucketed_cartesian is not None) + (bucketed_cartesian3d is not None) + (bucketed_geo is not None) + (frequency_domain is not None) + (frequency_domain_v2 is not None) + (numeric_histogram is not None) + (enum_histogram is not None) + (curve_fit is not None) + (grouped is not None) + (array is not None) + (bucketed_struct is not None) + (full_resolution is not None) != 1:
46000
+ if (range is not None) + (ranges_summary is not None) + (range_value is not None) + (numeric is not None) + (bucketed_numeric is not None) + (numeric_point is not None) + (single_point is not None) + (arrow_numeric is not None) + (arrow_bucketed_numeric is not None) + (enum is not None) + (enum_point is not None) + (bucketed_enum is not None) + (arrow_enum is not None) + (arrow_bucketed_enum is not None) + (paged_log is not None) + (log_point is not None) + (cartesian is not None) + (bucketed_cartesian is not None) + (bucketed_cartesian3d is not None) + (frequency_domain is not None) + (frequency_domain_v2 is not None) + (numeric_histogram is not None) + (enum_histogram is not None) + (curve_fit is not None) + (grouped is not None) + (array is not None) + (bucketed_struct is not None) + (full_resolution is not None) != 1:
45434
46001
  raise ValueError('a union must contain a single member')
45435
46002
 
45436
46003
  if range is not None:
@@ -45490,9 +46057,6 @@ class scout_compute_api_ComputeNodeResponse(ConjureUnionType):
45490
46057
  if bucketed_cartesian3d is not None:
45491
46058
  self._bucketed_cartesian3d = bucketed_cartesian3d
45492
46059
  self._type = 'bucketedCartesian3d'
45493
- if bucketed_geo is not None:
45494
- self._bucketed_geo = bucketed_geo
45495
- self._type = 'bucketedGeo'
45496
46060
  if frequency_domain is not None:
45497
46061
  self._frequency_domain = frequency_domain
45498
46062
  self._type = 'frequencyDomain'
@@ -45616,11 +46180,6 @@ class scout_compute_api_ComputeNodeResponse(ConjureUnionType):
45616
46180
  raise ValueError('a union value must not be None')
45617
46181
  self._bucketed_cartesian3d = bucketed_cartesian3d
45618
46182
  self._type = 'bucketedCartesian3d'
45619
- elif type_of_union == 'bucketedGeo':
45620
- if bucketed_geo is None:
45621
- raise ValueError('a union value must not be None')
45622
- self._bucketed_geo = bucketed_geo
45623
- self._type = 'bucketedGeo'
45624
46183
  elif type_of_union == 'frequencyDomain':
45625
46184
  if frequency_domain is None:
45626
46185
  raise ValueError('a union value must not be None')
@@ -45743,10 +46302,6 @@ class scout_compute_api_ComputeNodeResponse(ConjureUnionType):
45743
46302
  def bucketed_cartesian3d(self) -> Optional["scout_compute_api_BucketedCartesian3dPlot"]:
45744
46303
  return self._bucketed_cartesian3d
45745
46304
 
45746
- @builtins.property
45747
- def bucketed_geo(self) -> Optional["scout_compute_api_BucketedGeoPlot"]:
45748
- return self._bucketed_geo
45749
-
45750
46305
  @builtins.property
45751
46306
  def frequency_domain(self) -> Optional["scout_compute_api_FrequencyDomainPlot"]:
45752
46307
  return self._frequency_domain
@@ -45824,8 +46379,6 @@ class scout_compute_api_ComputeNodeResponse(ConjureUnionType):
45824
46379
  return visitor._bucketed_cartesian(self.bucketed_cartesian)
45825
46380
  if self._type == 'bucketedCartesian3d' and self.bucketed_cartesian3d is not None:
45826
46381
  return visitor._bucketed_cartesian3d(self.bucketed_cartesian3d)
45827
- if self._type == 'bucketedGeo' and self.bucketed_geo is not None:
45828
- return visitor._bucketed_geo(self.bucketed_geo)
45829
46382
  if self._type == 'frequencyDomain' and self.frequency_domain is not None:
45830
46383
  return visitor._frequency_domain(self.frequency_domain)
45831
46384
  if self._type == 'frequencyDomainV2' and self.frequency_domain_v2 is not None:
@@ -45929,10 +46482,6 @@ class scout_compute_api_ComputeNodeResponseVisitor:
45929
46482
  def _bucketed_cartesian3d(self, bucketed_cartesian3d: "scout_compute_api_BucketedCartesian3dPlot") -> Any:
45930
46483
  pass
45931
46484
 
45932
- @abstractmethod
45933
- def _bucketed_geo(self, bucketed_geo: "scout_compute_api_BucketedGeoPlot") -> Any:
45934
- pass
45935
-
45936
46485
  @abstractmethod
45937
46486
  def _frequency_domain(self, frequency_domain: "scout_compute_api_FrequencyDomainPlot") -> Any:
45938
46487
  pass
@@ -49795,279 +50344,6 @@ scout_compute_api_FunctionVariables.__qualname__ = "FunctionVariables"
49795
50344
  scout_compute_api_FunctionVariables.__module__ = "nominal_api.scout_compute_api"
49796
50345
 
49797
50346
 
49798
- class scout_compute_api_GeoPoint(ConjureUnionType):
49799
- """Represents a geographic point. Flexible to handle multiple types of geographic coordinate systems.
49800
- """
49801
- _lat_long: Optional["scout_compute_api_LatLongPoint"] = None
49802
-
49803
- @builtins.classmethod
49804
- def _options(cls) -> Dict[str, ConjureFieldDefinition]:
49805
- return {
49806
- 'lat_long': ConjureFieldDefinition('latLong', scout_compute_api_LatLongPoint)
49807
- }
49808
-
49809
- def __init__(
49810
- self,
49811
- lat_long: Optional["scout_compute_api_LatLongPoint"] = None,
49812
- type_of_union: Optional[str] = None
49813
- ) -> None:
49814
- if type_of_union is None:
49815
- if (lat_long is not None) != 1:
49816
- raise ValueError('a union must contain a single member')
49817
-
49818
- if lat_long is not None:
49819
- self._lat_long = lat_long
49820
- self._type = 'latLong'
49821
-
49822
- elif type_of_union == 'latLong':
49823
- if lat_long is None:
49824
- raise ValueError('a union value must not be None')
49825
- self._lat_long = lat_long
49826
- self._type = 'latLong'
49827
-
49828
- @builtins.property
49829
- def lat_long(self) -> Optional["scout_compute_api_LatLongPoint"]:
49830
- return self._lat_long
49831
-
49832
- def accept(self, visitor) -> Any:
49833
- if not isinstance(visitor, scout_compute_api_GeoPointVisitor):
49834
- raise ValueError('{} is not an instance of scout_compute_api_GeoPointVisitor'.format(visitor.__class__.__name__))
49835
- if self._type == 'latLong' and self.lat_long is not None:
49836
- return visitor._lat_long(self.lat_long)
49837
-
49838
-
49839
- scout_compute_api_GeoPoint.__name__ = "GeoPoint"
49840
- scout_compute_api_GeoPoint.__qualname__ = "GeoPoint"
49841
- scout_compute_api_GeoPoint.__module__ = "nominal_api.scout_compute_api"
49842
-
49843
-
49844
- class scout_compute_api_GeoPointVisitor:
49845
-
49846
- @abstractmethod
49847
- def _lat_long(self, lat_long: "scout_compute_api_LatLongPoint") -> Any:
49848
- pass
49849
-
49850
-
49851
- scout_compute_api_GeoPointVisitor.__name__ = "GeoPointVisitor"
49852
- scout_compute_api_GeoPointVisitor.__qualname__ = "GeoPointVisitor"
49853
- scout_compute_api_GeoPointVisitor.__module__ = "nominal_api.scout_compute_api"
49854
-
49855
-
49856
- class scout_compute_api_GeoPointWithTimestamp(ConjureBeanType):
49857
-
49858
- @builtins.classmethod
49859
- def _fields(cls) -> Dict[str, ConjureFieldDefinition]:
49860
- return {
49861
- 'timestamp': ConjureFieldDefinition('timestamp', api_Timestamp),
49862
- 'value': ConjureFieldDefinition('value', scout_compute_api_GeoPoint)
49863
- }
49864
-
49865
- __slots__: List[str] = ['_timestamp', '_value']
49866
-
49867
- def __init__(self, timestamp: "api_Timestamp", value: "scout_compute_api_GeoPoint") -> None:
49868
- self._timestamp = timestamp
49869
- self._value = value
49870
-
49871
- @builtins.property
49872
- def timestamp(self) -> "api_Timestamp":
49873
- return self._timestamp
49874
-
49875
- @builtins.property
49876
- def value(self) -> "scout_compute_api_GeoPoint":
49877
- return self._value
49878
-
49879
-
49880
- scout_compute_api_GeoPointWithTimestamp.__name__ = "GeoPointWithTimestamp"
49881
- scout_compute_api_GeoPointWithTimestamp.__qualname__ = "GeoPointWithTimestamp"
49882
- scout_compute_api_GeoPointWithTimestamp.__module__ = "nominal_api.scout_compute_api"
49883
-
49884
-
49885
- class scout_compute_api_GeoSeries(ConjureUnionType):
49886
- _lat_long_geo_node: Optional["scout_compute_api_LatLongGeo"] = None
49887
-
49888
- @builtins.classmethod
49889
- def _options(cls) -> Dict[str, ConjureFieldDefinition]:
49890
- return {
49891
- 'lat_long_geo_node': ConjureFieldDefinition('latLongGeoNode', scout_compute_api_LatLongGeo)
49892
- }
49893
-
49894
- def __init__(
49895
- self,
49896
- lat_long_geo_node: Optional["scout_compute_api_LatLongGeo"] = None,
49897
- type_of_union: Optional[str] = None
49898
- ) -> None:
49899
- if type_of_union is None:
49900
- if (lat_long_geo_node is not None) != 1:
49901
- raise ValueError('a union must contain a single member')
49902
-
49903
- if lat_long_geo_node is not None:
49904
- self._lat_long_geo_node = lat_long_geo_node
49905
- self._type = 'latLongGeoNode'
49906
-
49907
- elif type_of_union == 'latLongGeoNode':
49908
- if lat_long_geo_node is None:
49909
- raise ValueError('a union value must not be None')
49910
- self._lat_long_geo_node = lat_long_geo_node
49911
- self._type = 'latLongGeoNode'
49912
-
49913
- @builtins.property
49914
- def lat_long_geo_node(self) -> Optional["scout_compute_api_LatLongGeo"]:
49915
- return self._lat_long_geo_node
49916
-
49917
- def accept(self, visitor) -> Any:
49918
- if not isinstance(visitor, scout_compute_api_GeoSeriesVisitor):
49919
- raise ValueError('{} is not an instance of scout_compute_api_GeoSeriesVisitor'.format(visitor.__class__.__name__))
49920
- if self._type == 'latLongGeoNode' and self.lat_long_geo_node is not None:
49921
- return visitor._lat_long_geo_node(self.lat_long_geo_node)
49922
-
49923
-
49924
- scout_compute_api_GeoSeries.__name__ = "GeoSeries"
49925
- scout_compute_api_GeoSeries.__qualname__ = "GeoSeries"
49926
- scout_compute_api_GeoSeries.__module__ = "nominal_api.scout_compute_api"
49927
-
49928
-
49929
- class scout_compute_api_GeoSeriesVisitor:
49930
-
49931
- @abstractmethod
49932
- def _lat_long_geo_node(self, lat_long_geo_node: "scout_compute_api_LatLongGeo") -> Any:
49933
- pass
49934
-
49935
-
49936
- scout_compute_api_GeoSeriesVisitor.__name__ = "GeoSeriesVisitor"
49937
- scout_compute_api_GeoSeriesVisitor.__qualname__ = "GeoSeriesVisitor"
49938
- scout_compute_api_GeoSeriesVisitor.__module__ = "nominal_api.scout_compute_api"
49939
-
49940
-
49941
- class scout_compute_api_GeoSummaryStrategy(ConjureUnionType):
49942
- _temporal: Optional["scout_compute_api_GeoTemporalSummary"] = None
49943
-
49944
- @builtins.classmethod
49945
- def _options(cls) -> Dict[str, ConjureFieldDefinition]:
49946
- return {
49947
- 'temporal': ConjureFieldDefinition('temporal', scout_compute_api_GeoTemporalSummary)
49948
- }
49949
-
49950
- def __init__(
49951
- self,
49952
- temporal: Optional["scout_compute_api_GeoTemporalSummary"] = None,
49953
- type_of_union: Optional[str] = None
49954
- ) -> None:
49955
- if type_of_union is None:
49956
- if (temporal is not None) != 1:
49957
- raise ValueError('a union must contain a single member')
49958
-
49959
- if temporal is not None:
49960
- self._temporal = temporal
49961
- self._type = 'temporal'
49962
-
49963
- elif type_of_union == 'temporal':
49964
- if temporal is None:
49965
- raise ValueError('a union value must not be None')
49966
- self._temporal = temporal
49967
- self._type = 'temporal'
49968
-
49969
- @builtins.property
49970
- def temporal(self) -> Optional["scout_compute_api_GeoTemporalSummary"]:
49971
- return self._temporal
49972
-
49973
- def accept(self, visitor) -> Any:
49974
- if not isinstance(visitor, scout_compute_api_GeoSummaryStrategyVisitor):
49975
- raise ValueError('{} is not an instance of scout_compute_api_GeoSummaryStrategyVisitor'.format(visitor.__class__.__name__))
49976
- if self._type == 'temporal' and self.temporal is not None:
49977
- return visitor._temporal(self.temporal)
49978
-
49979
-
49980
- scout_compute_api_GeoSummaryStrategy.__name__ = "GeoSummaryStrategy"
49981
- scout_compute_api_GeoSummaryStrategy.__qualname__ = "GeoSummaryStrategy"
49982
- scout_compute_api_GeoSummaryStrategy.__module__ = "nominal_api.scout_compute_api"
49983
-
49984
-
49985
- class scout_compute_api_GeoSummaryStrategyVisitor:
49986
-
49987
- @abstractmethod
49988
- def _temporal(self, temporal: "scout_compute_api_GeoTemporalSummary") -> Any:
49989
- pass
49990
-
49991
-
49992
- scout_compute_api_GeoSummaryStrategyVisitor.__name__ = "GeoSummaryStrategyVisitor"
49993
- scout_compute_api_GeoSummaryStrategyVisitor.__qualname__ = "GeoSummaryStrategyVisitor"
49994
- scout_compute_api_GeoSummaryStrategyVisitor.__module__ = "nominal_api.scout_compute_api"
49995
-
49996
-
49997
- class scout_compute_api_GeoTemporalSummary(ConjureBeanType):
49998
-
49999
- @builtins.classmethod
50000
- def _fields(cls) -> Dict[str, ConjureFieldDefinition]:
50001
- return {
50002
- 'resolution': ConjureFieldDefinition('resolution', int)
50003
- }
50004
-
50005
- __slots__: List[str] = ['_resolution']
50006
-
50007
- def __init__(self, resolution: int) -> None:
50008
- self._resolution = resolution
50009
-
50010
- @builtins.property
50011
- def resolution(self) -> int:
50012
- return self._resolution
50013
-
50014
-
50015
- scout_compute_api_GeoTemporalSummary.__name__ = "GeoTemporalSummary"
50016
- scout_compute_api_GeoTemporalSummary.__qualname__ = "GeoTemporalSummary"
50017
- scout_compute_api_GeoTemporalSummary.__module__ = "nominal_api.scout_compute_api"
50018
-
50019
-
50020
- class scout_compute_api_GeoTimeBucket(ConjureBeanType):
50021
- """Summary of a time-based bucket of geo points.
50022
- """
50023
-
50024
- @builtins.classmethod
50025
- def _fields(cls) -> Dict[str, ConjureFieldDefinition]:
50026
- return {
50027
- 'mean': ConjureFieldDefinition('mean', scout_compute_api_GeoPoint),
50028
- 'count': ConjureFieldDefinition('count', int),
50029
- 'first_point': ConjureFieldDefinition('firstPoint', scout_compute_api_GeoPointWithTimestamp),
50030
- 'last_point': ConjureFieldDefinition('lastPoint', OptionalTypeWrapper[scout_compute_api_GeoPointWithTimestamp])
50031
- }
50032
-
50033
- __slots__: List[str] = ['_mean', '_count', '_first_point', '_last_point']
50034
-
50035
- def __init__(self, count: int, first_point: "scout_compute_api_GeoPointWithTimestamp", mean: "scout_compute_api_GeoPoint", last_point: Optional["scout_compute_api_GeoPointWithTimestamp"] = None) -> None:
50036
- self._mean = mean
50037
- self._count = count
50038
- self._first_point = first_point
50039
- self._last_point = last_point
50040
-
50041
- @builtins.property
50042
- def mean(self) -> "scout_compute_api_GeoPoint":
50043
- """The mean value of the GeoPoints in the bucket.
50044
- """
50045
- return self._mean
50046
-
50047
- @builtins.property
50048
- def count(self) -> int:
50049
- """The number of GeoPoints in the bucket.
50050
- """
50051
- return self._count
50052
-
50053
- @builtins.property
50054
- def first_point(self) -> "scout_compute_api_GeoPointWithTimestamp":
50055
- """The first GeoPoint in the bucket.
50056
- """
50057
- return self._first_point
50058
-
50059
- @builtins.property
50060
- def last_point(self) -> Optional["scout_compute_api_GeoPointWithTimestamp"]:
50061
- """The last GeoPoint in the bucket. Will be empty if the bucket only has a single point.
50062
- """
50063
- return self._last_point
50064
-
50065
-
50066
- scout_compute_api_GeoTimeBucket.__name__ = "GeoTimeBucket"
50067
- scout_compute_api_GeoTimeBucket.__qualname__ = "GeoTimeBucket"
50068
- scout_compute_api_GeoTimeBucket.__module__ = "nominal_api.scout_compute_api"
50069
-
50070
-
50071
50347
  class scout_compute_api_GroupedComputeNodeResponse(ConjureBeanType):
50072
50348
 
50073
50349
  @builtins.classmethod
@@ -50537,75 +50813,6 @@ scout_compute_api_IntersectRanges.__qualname__ = "IntersectRanges"
50537
50813
  scout_compute_api_IntersectRanges.__module__ = "nominal_api.scout_compute_api"
50538
50814
 
50539
50815
 
50540
- class scout_compute_api_LatLongBounds(ConjureBeanType):
50541
- """The bounds of a lat long geographic area. Represented by the southwest and northeast corners
50542
- of a rectangle, inclusive.
50543
- """
50544
-
50545
- @builtins.classmethod
50546
- def _fields(cls) -> Dict[str, ConjureFieldDefinition]:
50547
- return {
50548
- 'south_west': ConjureFieldDefinition('southWest', scout_compute_api_LatLongPoint),
50549
- 'north_east': ConjureFieldDefinition('northEast', scout_compute_api_LatLongPoint)
50550
- }
50551
-
50552
- __slots__: List[str] = ['_south_west', '_north_east']
50553
-
50554
- def __init__(self, north_east: "scout_compute_api_LatLongPoint", south_west: "scout_compute_api_LatLongPoint") -> None:
50555
- self._south_west = south_west
50556
- self._north_east = north_east
50557
-
50558
- @builtins.property
50559
- def south_west(self) -> "scout_compute_api_LatLongPoint":
50560
- return self._south_west
50561
-
50562
- @builtins.property
50563
- def north_east(self) -> "scout_compute_api_LatLongPoint":
50564
- return self._north_east
50565
-
50566
-
50567
- scout_compute_api_LatLongBounds.__name__ = "LatLongBounds"
50568
- scout_compute_api_LatLongBounds.__qualname__ = "LatLongBounds"
50569
- scout_compute_api_LatLongBounds.__module__ = "nominal_api.scout_compute_api"
50570
-
50571
-
50572
- class scout_compute_api_LatLongGeo(ConjureBeanType):
50573
- """A geo node derived from a lat and long series.
50574
- """
50575
-
50576
- @builtins.classmethod
50577
- def _fields(cls) -> Dict[str, ConjureFieldDefinition]:
50578
- return {
50579
- 'latitude': ConjureFieldDefinition('latitude', scout_compute_api_NumericSeries),
50580
- 'longitude': ConjureFieldDefinition('longitude', scout_compute_api_NumericSeries),
50581
- 'bounds': ConjureFieldDefinition('bounds', OptionalTypeWrapper[scout_compute_api_LatLongBounds])
50582
- }
50583
-
50584
- __slots__: List[str] = ['_latitude', '_longitude', '_bounds']
50585
-
50586
- def __init__(self, latitude: "scout_compute_api_NumericSeries", longitude: "scout_compute_api_NumericSeries", bounds: Optional["scout_compute_api_LatLongBounds"] = None) -> None:
50587
- self._latitude = latitude
50588
- self._longitude = longitude
50589
- self._bounds = bounds
50590
-
50591
- @builtins.property
50592
- def latitude(self) -> "scout_compute_api_NumericSeries":
50593
- return self._latitude
50594
-
50595
- @builtins.property
50596
- def longitude(self) -> "scout_compute_api_NumericSeries":
50597
- return self._longitude
50598
-
50599
- @builtins.property
50600
- def bounds(self) -> Optional["scout_compute_api_LatLongBounds"]:
50601
- return self._bounds
50602
-
50603
-
50604
- scout_compute_api_LatLongGeo.__name__ = "LatLongGeo"
50605
- scout_compute_api_LatLongGeo.__qualname__ = "LatLongGeo"
50606
- scout_compute_api_LatLongGeo.__module__ = "nominal_api.scout_compute_api"
50607
-
50608
-
50609
50816
  class scout_compute_api_LatLongPoint(ConjureBeanType):
50610
50817
 
50611
50818
  @builtins.classmethod
@@ -57758,35 +57965,6 @@ scout_compute_api_SummarizeCartesian3d.__qualname__ = "SummarizeCartesian3d"
57758
57965
  scout_compute_api_SummarizeCartesian3d.__module__ = "nominal_api.scout_compute_api"
57759
57966
 
57760
57967
 
57761
- class scout_compute_api_SummarizeGeo(ConjureBeanType):
57762
-
57763
- @builtins.classmethod
57764
- def _fields(cls) -> Dict[str, ConjureFieldDefinition]:
57765
- return {
57766
- 'input': ConjureFieldDefinition('input', scout_compute_api_GeoSeries),
57767
- 'summary_strategy': ConjureFieldDefinition('summaryStrategy', scout_compute_api_GeoSummaryStrategy)
57768
- }
57769
-
57770
- __slots__: List[str] = ['_input', '_summary_strategy']
57771
-
57772
- def __init__(self, input: "scout_compute_api_GeoSeries", summary_strategy: "scout_compute_api_GeoSummaryStrategy") -> None:
57773
- self._input = input
57774
- self._summary_strategy = summary_strategy
57775
-
57776
- @builtins.property
57777
- def input(self) -> "scout_compute_api_GeoSeries":
57778
- return self._input
57779
-
57780
- @builtins.property
57781
- def summary_strategy(self) -> "scout_compute_api_GeoSummaryStrategy":
57782
- return self._summary_strategy
57783
-
57784
-
57785
- scout_compute_api_SummarizeGeo.__name__ = "SummarizeGeo"
57786
- scout_compute_api_SummarizeGeo.__qualname__ = "SummarizeGeo"
57787
- scout_compute_api_SummarizeGeo.__module__ = "nominal_api.scout_compute_api"
57788
-
57789
-
57790
57968
  class scout_compute_api_SummarizeRanges(ConjureBeanType):
57791
57969
 
57792
57970
  @builtins.classmethod
@@ -58247,37 +58425,6 @@ scout_compute_api_ThresholdingRanges.__qualname__ = "ThresholdingRanges"
58247
58425
  scout_compute_api_ThresholdingRanges.__module__ = "nominal_api.scout_compute_api"
58248
58426
 
58249
58427
 
58250
- class scout_compute_api_TimeBucketedGeoPlot(ConjureBeanType):
58251
-
58252
- @builtins.classmethod
58253
- def _fields(cls) -> Dict[str, ConjureFieldDefinition]:
58254
- return {
58255
- 'timestamps': ConjureFieldDefinition('timestamps', List[api_Timestamp]),
58256
- 'buckets': ConjureFieldDefinition('buckets', List[scout_compute_api_GeoTimeBucket])
58257
- }
58258
-
58259
- __slots__: List[str] = ['_timestamps', '_buckets']
58260
-
58261
- def __init__(self, buckets: List["scout_compute_api_GeoTimeBucket"], timestamps: List["api_Timestamp"]) -> None:
58262
- self._timestamps = timestamps
58263
- self._buckets = buckets
58264
-
58265
- @builtins.property
58266
- def timestamps(self) -> List["api_Timestamp"]:
58267
- """The end of the bucket, exclusive.
58268
- """
58269
- return self._timestamps
58270
-
58271
- @builtins.property
58272
- def buckets(self) -> List["scout_compute_api_GeoTimeBucket"]:
58273
- return self._buckets
58274
-
58275
-
58276
- scout_compute_api_TimeBucketedGeoPlot.__name__ = "TimeBucketedGeoPlot"
58277
- scout_compute_api_TimeBucketedGeoPlot.__qualname__ = "TimeBucketedGeoPlot"
58278
- scout_compute_api_TimeBucketedGeoPlot.__module__ = "nominal_api.scout_compute_api"
58279
-
58280
-
58281
58428
  class scout_compute_api_TimeDifferenceSeries(ConjureBeanType):
58282
58429
  """Outputs a new series where each value is the difference between the time of the current and previous points.
58283
58430
  """
@@ -63842,141 +63989,6 @@ scout_compute_resolved_api_FrequencyDomainNodeV2Visitor.__qualname__ = "Frequenc
63842
63989
  scout_compute_resolved_api_FrequencyDomainNodeV2Visitor.__module__ = "nominal_api.scout_compute_resolved_api"
63843
63990
 
63844
63991
 
63845
- class scout_compute_resolved_api_GeoNode(ConjureUnionType):
63846
- _lat_long_geo_node: Optional["scout_compute_resolved_api_LatLongGeoNode"] = None
63847
-
63848
- @builtins.classmethod
63849
- def _options(cls) -> Dict[str, ConjureFieldDefinition]:
63850
- return {
63851
- 'lat_long_geo_node': ConjureFieldDefinition('latLongGeoNode', scout_compute_resolved_api_LatLongGeoNode)
63852
- }
63853
-
63854
- def __init__(
63855
- self,
63856
- lat_long_geo_node: Optional["scout_compute_resolved_api_LatLongGeoNode"] = None,
63857
- type_of_union: Optional[str] = None
63858
- ) -> None:
63859
- if type_of_union is None:
63860
- if (lat_long_geo_node is not None) != 1:
63861
- raise ValueError('a union must contain a single member')
63862
-
63863
- if lat_long_geo_node is not None:
63864
- self._lat_long_geo_node = lat_long_geo_node
63865
- self._type = 'latLongGeoNode'
63866
-
63867
- elif type_of_union == 'latLongGeoNode':
63868
- if lat_long_geo_node is None:
63869
- raise ValueError('a union value must not be None')
63870
- self._lat_long_geo_node = lat_long_geo_node
63871
- self._type = 'latLongGeoNode'
63872
-
63873
- @builtins.property
63874
- def lat_long_geo_node(self) -> Optional["scout_compute_resolved_api_LatLongGeoNode"]:
63875
- return self._lat_long_geo_node
63876
-
63877
- def accept(self, visitor) -> Any:
63878
- if not isinstance(visitor, scout_compute_resolved_api_GeoNodeVisitor):
63879
- raise ValueError('{} is not an instance of scout_compute_resolved_api_GeoNodeVisitor'.format(visitor.__class__.__name__))
63880
- if self._type == 'latLongGeoNode' and self.lat_long_geo_node is not None:
63881
- return visitor._lat_long_geo_node(self.lat_long_geo_node)
63882
-
63883
-
63884
- scout_compute_resolved_api_GeoNode.__name__ = "GeoNode"
63885
- scout_compute_resolved_api_GeoNode.__qualname__ = "GeoNode"
63886
- scout_compute_resolved_api_GeoNode.__module__ = "nominal_api.scout_compute_resolved_api"
63887
-
63888
-
63889
- class scout_compute_resolved_api_GeoNodeVisitor:
63890
-
63891
- @abstractmethod
63892
- def _lat_long_geo_node(self, lat_long_geo_node: "scout_compute_resolved_api_LatLongGeoNode") -> Any:
63893
- pass
63894
-
63895
-
63896
- scout_compute_resolved_api_GeoNodeVisitor.__name__ = "GeoNodeVisitor"
63897
- scout_compute_resolved_api_GeoNodeVisitor.__qualname__ = "GeoNodeVisitor"
63898
- scout_compute_resolved_api_GeoNodeVisitor.__module__ = "nominal_api.scout_compute_resolved_api"
63899
-
63900
-
63901
- class scout_compute_resolved_api_GeoNodeSummaryStrategy(ConjureUnionType):
63902
- _temporal: Optional["scout_compute_resolved_api_GeoNodeTemporalSummary"] = None
63903
-
63904
- @builtins.classmethod
63905
- def _options(cls) -> Dict[str, ConjureFieldDefinition]:
63906
- return {
63907
- 'temporal': ConjureFieldDefinition('temporal', scout_compute_resolved_api_GeoNodeTemporalSummary)
63908
- }
63909
-
63910
- def __init__(
63911
- self,
63912
- temporal: Optional["scout_compute_resolved_api_GeoNodeTemporalSummary"] = None,
63913
- type_of_union: Optional[str] = None
63914
- ) -> None:
63915
- if type_of_union is None:
63916
- if (temporal is not None) != 1:
63917
- raise ValueError('a union must contain a single member')
63918
-
63919
- if temporal is not None:
63920
- self._temporal = temporal
63921
- self._type = 'temporal'
63922
-
63923
- elif type_of_union == 'temporal':
63924
- if temporal is None:
63925
- raise ValueError('a union value must not be None')
63926
- self._temporal = temporal
63927
- self._type = 'temporal'
63928
-
63929
- @builtins.property
63930
- def temporal(self) -> Optional["scout_compute_resolved_api_GeoNodeTemporalSummary"]:
63931
- return self._temporal
63932
-
63933
- def accept(self, visitor) -> Any:
63934
- if not isinstance(visitor, scout_compute_resolved_api_GeoNodeSummaryStrategyVisitor):
63935
- raise ValueError('{} is not an instance of scout_compute_resolved_api_GeoNodeSummaryStrategyVisitor'.format(visitor.__class__.__name__))
63936
- if self._type == 'temporal' and self.temporal is not None:
63937
- return visitor._temporal(self.temporal)
63938
-
63939
-
63940
- scout_compute_resolved_api_GeoNodeSummaryStrategy.__name__ = "GeoNodeSummaryStrategy"
63941
- scout_compute_resolved_api_GeoNodeSummaryStrategy.__qualname__ = "GeoNodeSummaryStrategy"
63942
- scout_compute_resolved_api_GeoNodeSummaryStrategy.__module__ = "nominal_api.scout_compute_resolved_api"
63943
-
63944
-
63945
- class scout_compute_resolved_api_GeoNodeSummaryStrategyVisitor:
63946
-
63947
- @abstractmethod
63948
- def _temporal(self, temporal: "scout_compute_resolved_api_GeoNodeTemporalSummary") -> Any:
63949
- pass
63950
-
63951
-
63952
- scout_compute_resolved_api_GeoNodeSummaryStrategyVisitor.__name__ = "GeoNodeSummaryStrategyVisitor"
63953
- scout_compute_resolved_api_GeoNodeSummaryStrategyVisitor.__qualname__ = "GeoNodeSummaryStrategyVisitor"
63954
- scout_compute_resolved_api_GeoNodeSummaryStrategyVisitor.__module__ = "nominal_api.scout_compute_resolved_api"
63955
-
63956
-
63957
- class scout_compute_resolved_api_GeoNodeTemporalSummary(ConjureBeanType):
63958
-
63959
- @builtins.classmethod
63960
- def _fields(cls) -> Dict[str, ConjureFieldDefinition]:
63961
- return {
63962
- 'resolution': ConjureFieldDefinition('resolution', int)
63963
- }
63964
-
63965
- __slots__: List[str] = ['_resolution']
63966
-
63967
- def __init__(self, resolution: int) -> None:
63968
- self._resolution = resolution
63969
-
63970
- @builtins.property
63971
- def resolution(self) -> int:
63972
- return self._resolution
63973
-
63974
-
63975
- scout_compute_resolved_api_GeoNodeTemporalSummary.__name__ = "GeoNodeTemporalSummary"
63976
- scout_compute_resolved_api_GeoNodeTemporalSummary.__qualname__ = "GeoNodeTemporalSummary"
63977
- scout_compute_resolved_api_GeoNodeTemporalSummary.__module__ = "nominal_api.scout_compute_resolved_api"
63978
-
63979
-
63980
63992
  class scout_compute_resolved_api_HighPassConfiguration(ConjureBeanType):
63981
63993
 
63982
63994
  @builtins.classmethod
@@ -64191,70 +64203,6 @@ scout_compute_resolved_api_IntersectRangesNode.__qualname__ = "IntersectRangesNo
64191
64203
  scout_compute_resolved_api_IntersectRangesNode.__module__ = "nominal_api.scout_compute_resolved_api"
64192
64204
 
64193
64205
 
64194
- class scout_compute_resolved_api_LatLongBounds(ConjureBeanType):
64195
-
64196
- @builtins.classmethod
64197
- def _fields(cls) -> Dict[str, ConjureFieldDefinition]:
64198
- return {
64199
- 'south_west': ConjureFieldDefinition('southWest', scout_compute_api_LatLongPoint),
64200
- 'north_east': ConjureFieldDefinition('northEast', scout_compute_api_LatLongPoint)
64201
- }
64202
-
64203
- __slots__: List[str] = ['_south_west', '_north_east']
64204
-
64205
- def __init__(self, north_east: "scout_compute_api_LatLongPoint", south_west: "scout_compute_api_LatLongPoint") -> None:
64206
- self._south_west = south_west
64207
- self._north_east = north_east
64208
-
64209
- @builtins.property
64210
- def south_west(self) -> "scout_compute_api_LatLongPoint":
64211
- return self._south_west
64212
-
64213
- @builtins.property
64214
- def north_east(self) -> "scout_compute_api_LatLongPoint":
64215
- return self._north_east
64216
-
64217
-
64218
- scout_compute_resolved_api_LatLongBounds.__name__ = "LatLongBounds"
64219
- scout_compute_resolved_api_LatLongBounds.__qualname__ = "LatLongBounds"
64220
- scout_compute_resolved_api_LatLongBounds.__module__ = "nominal_api.scout_compute_resolved_api"
64221
-
64222
-
64223
- class scout_compute_resolved_api_LatLongGeoNode(ConjureBeanType):
64224
-
64225
- @builtins.classmethod
64226
- def _fields(cls) -> Dict[str, ConjureFieldDefinition]:
64227
- return {
64228
- 'latitude': ConjureFieldDefinition('latitude', scout_compute_resolved_api_NumericSeriesNode),
64229
- 'longitude': ConjureFieldDefinition('longitude', scout_compute_resolved_api_NumericSeriesNode),
64230
- 'bounds': ConjureFieldDefinition('bounds', OptionalTypeWrapper[scout_compute_resolved_api_LatLongBounds])
64231
- }
64232
-
64233
- __slots__: List[str] = ['_latitude', '_longitude', '_bounds']
64234
-
64235
- def __init__(self, latitude: "scout_compute_resolved_api_NumericSeriesNode", longitude: "scout_compute_resolved_api_NumericSeriesNode", bounds: Optional["scout_compute_resolved_api_LatLongBounds"] = None) -> None:
64236
- self._latitude = latitude
64237
- self._longitude = longitude
64238
- self._bounds = bounds
64239
-
64240
- @builtins.property
64241
- def latitude(self) -> "scout_compute_resolved_api_NumericSeriesNode":
64242
- return self._latitude
64243
-
64244
- @builtins.property
64245
- def longitude(self) -> "scout_compute_resolved_api_NumericSeriesNode":
64246
- return self._longitude
64247
-
64248
- @builtins.property
64249
- def bounds(self) -> Optional["scout_compute_resolved_api_LatLongBounds"]:
64250
- return self._bounds
64251
-
64252
-
64253
- scout_compute_resolved_api_LatLongGeoNode.__name__ = "LatLongGeoNode"
64254
- scout_compute_resolved_api_LatLongGeoNode.__qualname__ = "LatLongGeoNode"
64255
- scout_compute_resolved_api_LatLongGeoNode.__module__ = "nominal_api.scout_compute_resolved_api"
64256
-
64257
-
64258
64206
  class scout_compute_resolved_api_LiteralRange(ConjureBeanType):
64259
64207
 
64260
64208
  @builtins.classmethod
@@ -67054,7 +67002,6 @@ class scout_compute_resolved_api_ResolvedNode(ConjureUnionType):
67054
67002
  _frequency: Optional["scout_compute_resolved_api_FrequencyDomainNode"] = None
67055
67003
  _frequency_v2: Optional["scout_compute_resolved_api_FrequencyDomainNodeV2"] = None
67056
67004
  _histogram: Optional["scout_compute_resolved_api_HistogramNode"] = None
67057
- _geo: Optional["scout_compute_resolved_api_SummarizeGeoNode"] = None
67058
67005
  _curve: Optional["scout_compute_resolved_api_CurveFitNode"] = None
67059
67006
 
67060
67007
  @builtins.classmethod
@@ -67068,7 +67015,6 @@ class scout_compute_resolved_api_ResolvedNode(ConjureUnionType):
67068
67015
  'frequency': ConjureFieldDefinition('frequency', scout_compute_resolved_api_FrequencyDomainNode),
67069
67016
  'frequency_v2': ConjureFieldDefinition('frequencyV2', scout_compute_resolved_api_FrequencyDomainNodeV2),
67070
67017
  'histogram': ConjureFieldDefinition('histogram', scout_compute_resolved_api_HistogramNode),
67071
- 'geo': ConjureFieldDefinition('geo', scout_compute_resolved_api_SummarizeGeoNode),
67072
67018
  'curve': ConjureFieldDefinition('curve', scout_compute_resolved_api_CurveFitNode)
67073
67019
  }
67074
67020
 
@@ -67082,12 +67028,11 @@ class scout_compute_resolved_api_ResolvedNode(ConjureUnionType):
67082
67028
  frequency: Optional["scout_compute_resolved_api_FrequencyDomainNode"] = None,
67083
67029
  frequency_v2: Optional["scout_compute_resolved_api_FrequencyDomainNodeV2"] = None,
67084
67030
  histogram: Optional["scout_compute_resolved_api_HistogramNode"] = None,
67085
- geo: Optional["scout_compute_resolved_api_SummarizeGeoNode"] = None,
67086
67031
  curve: Optional["scout_compute_resolved_api_CurveFitNode"] = None,
67087
67032
  type_of_union: Optional[str] = None
67088
67033
  ) -> None:
67089
67034
  if type_of_union is None:
67090
- if (ranges is not None) + (series is not None) + (value is not None) + (cartesian is not None) + (cartesian3d is not None) + (frequency is not None) + (frequency_v2 is not None) + (histogram is not None) + (geo is not None) + (curve is not None) != 1:
67035
+ if (ranges is not None) + (series is not None) + (value is not None) + (cartesian is not None) + (cartesian3d is not None) + (frequency is not None) + (frequency_v2 is not None) + (histogram is not None) + (curve is not None) != 1:
67091
67036
  raise ValueError('a union must contain a single member')
67092
67037
 
67093
67038
  if ranges is not None:
@@ -67114,9 +67059,6 @@ class scout_compute_resolved_api_ResolvedNode(ConjureUnionType):
67114
67059
  if histogram is not None:
67115
67060
  self._histogram = histogram
67116
67061
  self._type = 'histogram'
67117
- if geo is not None:
67118
- self._geo = geo
67119
- self._type = 'geo'
67120
67062
  if curve is not None:
67121
67063
  self._curve = curve
67122
67064
  self._type = 'curve'
@@ -67161,11 +67103,6 @@ class scout_compute_resolved_api_ResolvedNode(ConjureUnionType):
67161
67103
  raise ValueError('a union value must not be None')
67162
67104
  self._histogram = histogram
67163
67105
  self._type = 'histogram'
67164
- elif type_of_union == 'geo':
67165
- if geo is None:
67166
- raise ValueError('a union value must not be None')
67167
- self._geo = geo
67168
- self._type = 'geo'
67169
67106
  elif type_of_union == 'curve':
67170
67107
  if curve is None:
67171
67108
  raise ValueError('a union value must not be None')
@@ -67204,10 +67141,6 @@ class scout_compute_resolved_api_ResolvedNode(ConjureUnionType):
67204
67141
  def histogram(self) -> Optional["scout_compute_resolved_api_HistogramNode"]:
67205
67142
  return self._histogram
67206
67143
 
67207
- @builtins.property
67208
- def geo(self) -> Optional["scout_compute_resolved_api_SummarizeGeoNode"]:
67209
- return self._geo
67210
-
67211
67144
  @builtins.property
67212
67145
  def curve(self) -> Optional["scout_compute_resolved_api_CurveFitNode"]:
67213
67146
  return self._curve
@@ -67231,8 +67164,6 @@ class scout_compute_resolved_api_ResolvedNode(ConjureUnionType):
67231
67164
  return visitor._frequency_v2(self.frequency_v2)
67232
67165
  if self._type == 'histogram' and self.histogram is not None:
67233
67166
  return visitor._histogram(self.histogram)
67234
- if self._type == 'geo' and self.geo is not None:
67235
- return visitor._geo(self.geo)
67236
67167
  if self._type == 'curve' and self.curve is not None:
67237
67168
  return visitor._curve(self.curve)
67238
67169
 
@@ -67276,10 +67207,6 @@ class scout_compute_resolved_api_ResolvedNodeVisitor:
67276
67207
  def _histogram(self, histogram: "scout_compute_resolved_api_HistogramNode") -> Any:
67277
67208
  pass
67278
67209
 
67279
- @abstractmethod
67280
- def _geo(self, geo: "scout_compute_resolved_api_SummarizeGeoNode") -> Any:
67281
- pass
67282
-
67283
67210
  @abstractmethod
67284
67211
  def _curve(self, curve: "scout_compute_resolved_api_CurveFitNode") -> Any:
67285
67212
  pass
@@ -68488,35 +68415,6 @@ scout_compute_resolved_api_SummarizeCartesianNode.__qualname__ = "SummarizeCarte
68488
68415
  scout_compute_resolved_api_SummarizeCartesianNode.__module__ = "nominal_api.scout_compute_resolved_api"
68489
68416
 
68490
68417
 
68491
- class scout_compute_resolved_api_SummarizeGeoNode(ConjureBeanType):
68492
-
68493
- @builtins.classmethod
68494
- def _fields(cls) -> Dict[str, ConjureFieldDefinition]:
68495
- return {
68496
- 'input': ConjureFieldDefinition('input', scout_compute_resolved_api_GeoNode),
68497
- 'summary_strategy': ConjureFieldDefinition('summaryStrategy', scout_compute_resolved_api_GeoNodeSummaryStrategy)
68498
- }
68499
-
68500
- __slots__: List[str] = ['_input', '_summary_strategy']
68501
-
68502
- def __init__(self, input: "scout_compute_resolved_api_GeoNode", summary_strategy: "scout_compute_resolved_api_GeoNodeSummaryStrategy") -> None:
68503
- self._input = input
68504
- self._summary_strategy = summary_strategy
68505
-
68506
- @builtins.property
68507
- def input(self) -> "scout_compute_resolved_api_GeoNode":
68508
- return self._input
68509
-
68510
- @builtins.property
68511
- def summary_strategy(self) -> "scout_compute_resolved_api_GeoNodeSummaryStrategy":
68512
- return self._summary_strategy
68513
-
68514
-
68515
- scout_compute_resolved_api_SummarizeGeoNode.__name__ = "SummarizeGeoNode"
68516
- scout_compute_resolved_api_SummarizeGeoNode.__qualname__ = "SummarizeGeoNode"
68517
- scout_compute_resolved_api_SummarizeGeoNode.__module__ = "nominal_api.scout_compute_resolved_api"
68518
-
68519
-
68520
68418
  class scout_compute_resolved_api_SummarizeRangesNode(ConjureBeanType):
68521
68419
 
68522
68420
  @builtins.classmethod
@@ -75352,6 +75250,42 @@ Nominal connections which have their tags automatically indexed in the underlyin
75352
75250
  _decoder = ConjureDecoder()
75353
75251
  return _decoder.decode(_response.json(), List[scout_datasource_connection_api_Connection], self._return_none_for_unknown_union_types)
75354
75252
 
75253
+ def list_connections_v2(self, auth_header: str, workspaces: List[str] = None, include_archived: Optional[bool] = None, next_page_token: Optional[str] = None, page_size: Optional[int] = None) -> "scout_datasource_connection_api_ListConnectionsResponse":
75254
+ """Lists connections with pagination. Returns connections ordered by creation time descending.
75255
+ """
75256
+ workspaces = workspaces if workspaces is not None else []
75257
+ _conjure_encoder = ConjureEncoder()
75258
+
75259
+ _headers: Dict[str, Any] = {
75260
+ 'Accept': 'application/json',
75261
+ 'Authorization': auth_header,
75262
+ }
75263
+
75264
+ _params: Dict[str, Any] = {
75265
+ 'includeArchived': _conjure_encoder.default(include_archived),
75266
+ 'workspaces': _conjure_encoder.default(workspaces),
75267
+ 'pageSize': _conjure_encoder.default(page_size),
75268
+ 'nextPageToken': _conjure_encoder.default(next_page_token),
75269
+ }
75270
+
75271
+ _path_params: Dict[str, str] = {
75272
+ }
75273
+
75274
+ _json: Any = None
75275
+
75276
+ _path = '/data-source/connection/v2/connections'
75277
+ _path = _path.format(**_path_params)
75278
+
75279
+ _response: Response = self._request(
75280
+ 'GET',
75281
+ self._uri + _path,
75282
+ params=_params,
75283
+ headers=_headers,
75284
+ json=_json)
75285
+
75286
+ _decoder = ConjureDecoder()
75287
+ return _decoder.decode(_response.json(), scout_datasource_connection_api_ListConnectionsResponse, self._return_none_for_unknown_union_types)
75288
+
75355
75289
  def archive_connection(self, auth_header: str, rid: str) -> None:
75356
75290
  """Archives a connection, which simply tags the connection for a client to filter.
75357
75291
  """
@@ -76727,6 +76661,35 @@ scout_datasource_connection_api_LimitsConfig.__qualname__ = "LimitsConfig"
76727
76661
  scout_datasource_connection_api_LimitsConfig.__module__ = "nominal_api.scout_datasource_connection_api"
76728
76662
 
76729
76663
 
76664
+ class scout_datasource_connection_api_ListConnectionsResponse(ConjureBeanType):
76665
+
76666
+ @builtins.classmethod
76667
+ def _fields(cls) -> Dict[str, ConjureFieldDefinition]:
76668
+ return {
76669
+ 'connections': ConjureFieldDefinition('connections', List[scout_datasource_connection_api_Connection]),
76670
+ 'next_page_token': ConjureFieldDefinition('nextPageToken', OptionalTypeWrapper[api_Token])
76671
+ }
76672
+
76673
+ __slots__: List[str] = ['_connections', '_next_page_token']
76674
+
76675
+ def __init__(self, connections: List["scout_datasource_connection_api_Connection"], next_page_token: Optional[str] = None) -> None:
76676
+ self._connections = connections
76677
+ self._next_page_token = next_page_token
76678
+
76679
+ @builtins.property
76680
+ def connections(self) -> List["scout_datasource_connection_api_Connection"]:
76681
+ return self._connections
76682
+
76683
+ @builtins.property
76684
+ def next_page_token(self) -> Optional[str]:
76685
+ return self._next_page_token
76686
+
76687
+
76688
+ scout_datasource_connection_api_ListConnectionsResponse.__name__ = "ListConnectionsResponse"
76689
+ scout_datasource_connection_api_ListConnectionsResponse.__qualname__ = "ListConnectionsResponse"
76690
+ scout_datasource_connection_api_ListConnectionsResponse.__module__ = "nominal_api.scout_datasource_connection_api"
76691
+
76692
+
76730
76693
  class scout_datasource_connection_api_NominalChannelNameComponent(ConjureUnionType):
76731
76694
  _channel: Optional["api_Empty"] = None
76732
76695
  _value_of_tag_with_name: Optional[str] = None
@@ -78245,25 +78208,150 @@ scout_favorites_api_SetFavoritesListRequest.__qualname__ = "SetFavoritesListRequ
78245
78208
  scout_favorites_api_SetFavoritesListRequest.__module__ = "nominal_api.scout_favorites_api"
78246
78209
 
78247
78210
 
78211
+ class scout_integrations_api_AlertMessageFields(ConjureBeanType):
78212
+
78213
+ @builtins.classmethod
78214
+ def _fields(cls) -> Dict[str, ConjureFieldDefinition]:
78215
+ return {
78216
+ 'asset_title': ConjureFieldDefinition('assetTitle', str),
78217
+ 'check_title': ConjureFieldDefinition('checkTitle', str),
78218
+ 'check_description': ConjureFieldDefinition('checkDescription', str),
78219
+ 'checklist_title': ConjureFieldDefinition('checklistTitle', str),
78220
+ 'asset_rid': ConjureFieldDefinition('assetRid', scout_rids_api_AssetRid),
78221
+ 'check_lineage_rid': ConjureFieldDefinition('checkLineageRid', scout_rids_api_CheckLineageRid),
78222
+ 'workbook_url': ConjureFieldDefinition('workbookUrl', OptionalTypeWrapper[str]),
78223
+ 'alert_url': ConjureFieldDefinition('alertUrl', OptionalTypeWrapper[str]),
78224
+ 'event_type': ConjureFieldDefinition('eventType', event_EventType),
78225
+ 'priority': ConjureFieldDefinition('priority', scout_api_Priority),
78226
+ 'labels': ConjureFieldDefinition('labels', List[str]),
78227
+ 'alert_type': ConjureFieldDefinition('alertType', scout_integrations_api_AlertType)
78228
+ }
78229
+
78230
+ __slots__: List[str] = ['_asset_title', '_check_title', '_check_description', '_checklist_title', '_asset_rid', '_check_lineage_rid', '_workbook_url', '_alert_url', '_event_type', '_priority', '_labels', '_alert_type']
78231
+
78232
+ def __init__(self, alert_type: "scout_integrations_api_AlertType", asset_rid: str, asset_title: str, check_description: str, check_lineage_rid: str, check_title: str, checklist_title: str, event_type: "event_EventType", labels: List[str], priority: "scout_api_Priority", alert_url: Optional[str] = None, workbook_url: Optional[str] = None) -> None:
78233
+ self._asset_title = asset_title
78234
+ self._check_title = check_title
78235
+ self._check_description = check_description
78236
+ self._checklist_title = checklist_title
78237
+ self._asset_rid = asset_rid
78238
+ self._check_lineage_rid = check_lineage_rid
78239
+ self._workbook_url = workbook_url
78240
+ self._alert_url = alert_url
78241
+ self._event_type = event_type
78242
+ self._priority = priority
78243
+ self._labels = labels
78244
+ self._alert_type = alert_type
78245
+
78246
+ @builtins.property
78247
+ def asset_title(self) -> str:
78248
+ return self._asset_title
78249
+
78250
+ @builtins.property
78251
+ def check_title(self) -> str:
78252
+ return self._check_title
78253
+
78254
+ @builtins.property
78255
+ def check_description(self) -> str:
78256
+ return self._check_description
78257
+
78258
+ @builtins.property
78259
+ def checklist_title(self) -> str:
78260
+ return self._checklist_title
78261
+
78262
+ @builtins.property
78263
+ def asset_rid(self) -> str:
78264
+ return self._asset_rid
78265
+
78266
+ @builtins.property
78267
+ def check_lineage_rid(self) -> str:
78268
+ return self._check_lineage_rid
78269
+
78270
+ @builtins.property
78271
+ def workbook_url(self) -> Optional[str]:
78272
+ """Appended to the end of the message as a button (if supported) or as a text hyperlink.
78273
+ """
78274
+ return self._workbook_url
78275
+
78276
+ @builtins.property
78277
+ def alert_url(self) -> Optional[str]:
78278
+ """Appended to the end of the message as a button (if supported) or as a text hyperlink.
78279
+ """
78280
+ return self._alert_url
78281
+
78282
+ @builtins.property
78283
+ def event_type(self) -> "event_EventType":
78284
+ """Will be prefixed in title and indicated by an icon.
78285
+ """
78286
+ return self._event_type
78287
+
78288
+ @builtins.property
78289
+ def priority(self) -> "scout_api_Priority":
78290
+ return self._priority
78291
+
78292
+ @builtins.property
78293
+ def labels(self) -> List[str]:
78294
+ """Currently exposed as 'tags' on the frontend to match Opsgenie naming. Used by some integrations to filter/route messages.
78295
+ """
78296
+ return self._labels
78297
+
78298
+ @builtins.property
78299
+ def alert_type(self) -> "scout_integrations_api_AlertType":
78300
+ """Determines execution status of the alert, between success, failure, and execution error.
78301
+ """
78302
+ return self._alert_type
78303
+
78304
+
78305
+ scout_integrations_api_AlertMessageFields.__name__ = "AlertMessageFields"
78306
+ scout_integrations_api_AlertMessageFields.__qualname__ = "AlertMessageFields"
78307
+ scout_integrations_api_AlertMessageFields.__module__ = "nominal_api.scout_integrations_api"
78308
+
78309
+
78310
+ class scout_integrations_api_AlertType(ConjureEnumType):
78311
+
78312
+ INVALID = 'INVALID'
78313
+ '''INVALID'''
78314
+ FAILURE = 'FAILURE'
78315
+ '''FAILURE'''
78316
+ RECOVERY = 'RECOVERY'
78317
+ '''RECOVERY'''
78318
+ UNKNOWN = 'UNKNOWN'
78319
+ '''UNKNOWN'''
78320
+
78321
+ def __reduce_ex__(self, proto):
78322
+ return self.__class__, (self.name,)
78323
+
78324
+
78325
+ scout_integrations_api_AlertType.__name__ = "AlertType"
78326
+ scout_integrations_api_AlertType.__qualname__ = "AlertType"
78327
+ scout_integrations_api_AlertType.__module__ = "nominal_api.scout_integrations_api"
78328
+
78329
+
78248
78330
  class scout_integrations_api_CreateIntegrationDetails(ConjureUnionType):
78249
78331
  _create_simple_webhook_details: Optional["scout_integrations_api_CreateSimpleWebhookDetails"] = None
78250
78332
  _create_opsgenie_integration_details: Optional["scout_integrations_api_CreateOpsgenieIntegrationDetails"] = None
78333
+ _create_teams_webhook_integration_details: Optional["scout_integrations_api_CreateTeamsWebhookIntegrationDetails"] = None
78334
+ _create_pager_duty_integration_details: Optional["scout_integrations_api_CreatePagerDutyIntegrationDetails"] = None
78251
78335
 
78252
78336
  @builtins.classmethod
78253
78337
  def _options(cls) -> Dict[str, ConjureFieldDefinition]:
78254
78338
  return {
78255
78339
  'create_simple_webhook_details': ConjureFieldDefinition('createSimpleWebhookDetails', scout_integrations_api_CreateSimpleWebhookDetails),
78256
- 'create_opsgenie_integration_details': ConjureFieldDefinition('createOpsgenieIntegrationDetails', scout_integrations_api_CreateOpsgenieIntegrationDetails)
78340
+ 'create_opsgenie_integration_details': ConjureFieldDefinition('createOpsgenieIntegrationDetails', scout_integrations_api_CreateOpsgenieIntegrationDetails),
78341
+ 'create_teams_webhook_integration_details': ConjureFieldDefinition('createTeamsWebhookIntegrationDetails', scout_integrations_api_CreateTeamsWebhookIntegrationDetails),
78342
+ 'create_pager_duty_integration_details': ConjureFieldDefinition('createPagerDutyIntegrationDetails', scout_integrations_api_CreatePagerDutyIntegrationDetails)
78257
78343
  }
78258
78344
 
78259
78345
  def __init__(
78260
78346
  self,
78261
78347
  create_simple_webhook_details: Optional["scout_integrations_api_CreateSimpleWebhookDetails"] = None,
78262
78348
  create_opsgenie_integration_details: Optional["scout_integrations_api_CreateOpsgenieIntegrationDetails"] = None,
78349
+ create_teams_webhook_integration_details: Optional["scout_integrations_api_CreateTeamsWebhookIntegrationDetails"] = None,
78350
+ create_pager_duty_integration_details: Optional["scout_integrations_api_CreatePagerDutyIntegrationDetails"] = None,
78263
78351
  type_of_union: Optional[str] = None
78264
78352
  ) -> None:
78265
78353
  if type_of_union is None:
78266
- if (create_simple_webhook_details is not None) + (create_opsgenie_integration_details is not None) != 1:
78354
+ if (create_simple_webhook_details is not None) + (create_opsgenie_integration_details is not None) + (create_teams_webhook_integration_details is not None) + (create_pager_duty_integration_details is not None) != 1:
78267
78355
  raise ValueError('a union must contain a single member')
78268
78356
 
78269
78357
  if create_simple_webhook_details is not None:
@@ -78272,6 +78360,12 @@ class scout_integrations_api_CreateIntegrationDetails(ConjureUnionType):
78272
78360
  if create_opsgenie_integration_details is not None:
78273
78361
  self._create_opsgenie_integration_details = create_opsgenie_integration_details
78274
78362
  self._type = 'createOpsgenieIntegrationDetails'
78363
+ if create_teams_webhook_integration_details is not None:
78364
+ self._create_teams_webhook_integration_details = create_teams_webhook_integration_details
78365
+ self._type = 'createTeamsWebhookIntegrationDetails'
78366
+ if create_pager_duty_integration_details is not None:
78367
+ self._create_pager_duty_integration_details = create_pager_duty_integration_details
78368
+ self._type = 'createPagerDutyIntegrationDetails'
78275
78369
 
78276
78370
  elif type_of_union == 'createSimpleWebhookDetails':
78277
78371
  if create_simple_webhook_details is None:
@@ -78283,6 +78377,16 @@ class scout_integrations_api_CreateIntegrationDetails(ConjureUnionType):
78283
78377
  raise ValueError('a union value must not be None')
78284
78378
  self._create_opsgenie_integration_details = create_opsgenie_integration_details
78285
78379
  self._type = 'createOpsgenieIntegrationDetails'
78380
+ elif type_of_union == 'createTeamsWebhookIntegrationDetails':
78381
+ if create_teams_webhook_integration_details is None:
78382
+ raise ValueError('a union value must not be None')
78383
+ self._create_teams_webhook_integration_details = create_teams_webhook_integration_details
78384
+ self._type = 'createTeamsWebhookIntegrationDetails'
78385
+ elif type_of_union == 'createPagerDutyIntegrationDetails':
78386
+ if create_pager_duty_integration_details is None:
78387
+ raise ValueError('a union value must not be None')
78388
+ self._create_pager_duty_integration_details = create_pager_duty_integration_details
78389
+ self._type = 'createPagerDutyIntegrationDetails'
78286
78390
 
78287
78391
  @builtins.property
78288
78392
  def create_simple_webhook_details(self) -> Optional["scout_integrations_api_CreateSimpleWebhookDetails"]:
@@ -78292,6 +78396,14 @@ class scout_integrations_api_CreateIntegrationDetails(ConjureUnionType):
78292
78396
  def create_opsgenie_integration_details(self) -> Optional["scout_integrations_api_CreateOpsgenieIntegrationDetails"]:
78293
78397
  return self._create_opsgenie_integration_details
78294
78398
 
78399
+ @builtins.property
78400
+ def create_teams_webhook_integration_details(self) -> Optional["scout_integrations_api_CreateTeamsWebhookIntegrationDetails"]:
78401
+ return self._create_teams_webhook_integration_details
78402
+
78403
+ @builtins.property
78404
+ def create_pager_duty_integration_details(self) -> Optional["scout_integrations_api_CreatePagerDutyIntegrationDetails"]:
78405
+ return self._create_pager_duty_integration_details
78406
+
78295
78407
  def accept(self, visitor) -> Any:
78296
78408
  if not isinstance(visitor, scout_integrations_api_CreateIntegrationDetailsVisitor):
78297
78409
  raise ValueError('{} is not an instance of scout_integrations_api_CreateIntegrationDetailsVisitor'.format(visitor.__class__.__name__))
@@ -78299,6 +78411,10 @@ class scout_integrations_api_CreateIntegrationDetails(ConjureUnionType):
78299
78411
  return visitor._create_simple_webhook_details(self.create_simple_webhook_details)
78300
78412
  if self._type == 'createOpsgenieIntegrationDetails' and self.create_opsgenie_integration_details is not None:
78301
78413
  return visitor._create_opsgenie_integration_details(self.create_opsgenie_integration_details)
78414
+ if self._type == 'createTeamsWebhookIntegrationDetails' and self.create_teams_webhook_integration_details is not None:
78415
+ return visitor._create_teams_webhook_integration_details(self.create_teams_webhook_integration_details)
78416
+ if self._type == 'createPagerDutyIntegrationDetails' and self.create_pager_duty_integration_details is not None:
78417
+ return visitor._create_pager_duty_integration_details(self.create_pager_duty_integration_details)
78302
78418
 
78303
78419
 
78304
78420
  scout_integrations_api_CreateIntegrationDetails.__name__ = "CreateIntegrationDetails"
@@ -78316,6 +78432,14 @@ class scout_integrations_api_CreateIntegrationDetailsVisitor:
78316
78432
  def _create_opsgenie_integration_details(self, create_opsgenie_integration_details: "scout_integrations_api_CreateOpsgenieIntegrationDetails") -> Any:
78317
78433
  pass
78318
78434
 
78435
+ @abstractmethod
78436
+ def _create_teams_webhook_integration_details(self, create_teams_webhook_integration_details: "scout_integrations_api_CreateTeamsWebhookIntegrationDetails") -> Any:
78437
+ pass
78438
+
78439
+ @abstractmethod
78440
+ def _create_pager_duty_integration_details(self, create_pager_duty_integration_details: "scout_integrations_api_CreatePagerDutyIntegrationDetails") -> Any:
78441
+ pass
78442
+
78319
78443
 
78320
78444
  scout_integrations_api_CreateIntegrationDetailsVisitor.__name__ = "CreateIntegrationDetailsVisitor"
78321
78445
  scout_integrations_api_CreateIntegrationDetailsVisitor.__qualname__ = "CreateIntegrationDetailsVisitor"
@@ -78395,6 +78519,29 @@ scout_integrations_api_CreateOpsgenieIntegrationDetails.__qualname__ = "CreateOp
78395
78519
  scout_integrations_api_CreateOpsgenieIntegrationDetails.__module__ = "nominal_api.scout_integrations_api"
78396
78520
 
78397
78521
 
78522
+ class scout_integrations_api_CreatePagerDutyIntegrationDetails(ConjureBeanType):
78523
+
78524
+ @builtins.classmethod
78525
+ def _fields(cls) -> Dict[str, ConjureFieldDefinition]:
78526
+ return {
78527
+ 'routing_key': ConjureFieldDefinition('routingKey', str)
78528
+ }
78529
+
78530
+ __slots__: List[str] = ['_routing_key']
78531
+
78532
+ def __init__(self, routing_key: str) -> None:
78533
+ self._routing_key = routing_key
78534
+
78535
+ @builtins.property
78536
+ def routing_key(self) -> str:
78537
+ return self._routing_key
78538
+
78539
+
78540
+ scout_integrations_api_CreatePagerDutyIntegrationDetails.__name__ = "CreatePagerDutyIntegrationDetails"
78541
+ scout_integrations_api_CreatePagerDutyIntegrationDetails.__qualname__ = "CreatePagerDutyIntegrationDetails"
78542
+ scout_integrations_api_CreatePagerDutyIntegrationDetails.__module__ = "nominal_api.scout_integrations_api"
78543
+
78544
+
78398
78545
  class scout_integrations_api_CreateSimpleWebhookDetails(ConjureBeanType):
78399
78546
 
78400
78547
  @builtins.classmethod
@@ -78418,6 +78565,29 @@ scout_integrations_api_CreateSimpleWebhookDetails.__qualname__ = "CreateSimpleWe
78418
78565
  scout_integrations_api_CreateSimpleWebhookDetails.__module__ = "nominal_api.scout_integrations_api"
78419
78566
 
78420
78567
 
78568
+ class scout_integrations_api_CreateTeamsWebhookIntegrationDetails(ConjureBeanType):
78569
+
78570
+ @builtins.classmethod
78571
+ def _fields(cls) -> Dict[str, ConjureFieldDefinition]:
78572
+ return {
78573
+ 'webhook': ConjureFieldDefinition('webhook', str)
78574
+ }
78575
+
78576
+ __slots__: List[str] = ['_webhook']
78577
+
78578
+ def __init__(self, webhook: str) -> None:
78579
+ self._webhook = webhook
78580
+
78581
+ @builtins.property
78582
+ def webhook(self) -> str:
78583
+ return self._webhook
78584
+
78585
+
78586
+ scout_integrations_api_CreateTeamsWebhookIntegrationDetails.__name__ = "CreateTeamsWebhookIntegrationDetails"
78587
+ scout_integrations_api_CreateTeamsWebhookIntegrationDetails.__qualname__ = "CreateTeamsWebhookIntegrationDetails"
78588
+ scout_integrations_api_CreateTeamsWebhookIntegrationDetails.__module__ = "nominal_api.scout_integrations_api"
78589
+
78590
+
78421
78591
  class scout_integrations_api_GenerateSlackWebhookResponse(ConjureBeanType):
78422
78592
 
78423
78593
  @builtins.classmethod
@@ -78506,13 +78676,17 @@ class scout_integrations_api_IntegrationDetails(ConjureUnionType):
78506
78676
  _slack_webhook_integration: Optional["scout_integrations_api_SlackWebhookIntegration"] = None
78507
78677
  _opsgenie_integration: Optional["scout_integrations_api_OpsgenieIntegration"] = None
78508
78678
  _simple_webhook_integration: Optional["scout_integrations_api_SimpleWebhookIntegration"] = None
78679
+ _teams_webhook_integration: Optional["scout_integrations_api_TeamsWebhookIntegration"] = None
78680
+ _pager_duty_integration: Optional["scout_integrations_api_PagerDutyIntegration"] = None
78509
78681
 
78510
78682
  @builtins.classmethod
78511
78683
  def _options(cls) -> Dict[str, ConjureFieldDefinition]:
78512
78684
  return {
78513
78685
  'slack_webhook_integration': ConjureFieldDefinition('slackWebhookIntegration', scout_integrations_api_SlackWebhookIntegration),
78514
78686
  'opsgenie_integration': ConjureFieldDefinition('opsgenieIntegration', scout_integrations_api_OpsgenieIntegration),
78515
- 'simple_webhook_integration': ConjureFieldDefinition('simpleWebhookIntegration', scout_integrations_api_SimpleWebhookIntegration)
78687
+ 'simple_webhook_integration': ConjureFieldDefinition('simpleWebhookIntegration', scout_integrations_api_SimpleWebhookIntegration),
78688
+ 'teams_webhook_integration': ConjureFieldDefinition('teamsWebhookIntegration', scout_integrations_api_TeamsWebhookIntegration),
78689
+ 'pager_duty_integration': ConjureFieldDefinition('pagerDutyIntegration', scout_integrations_api_PagerDutyIntegration)
78516
78690
  }
78517
78691
 
78518
78692
  def __init__(
@@ -78520,10 +78694,12 @@ class scout_integrations_api_IntegrationDetails(ConjureUnionType):
78520
78694
  slack_webhook_integration: Optional["scout_integrations_api_SlackWebhookIntegration"] = None,
78521
78695
  opsgenie_integration: Optional["scout_integrations_api_OpsgenieIntegration"] = None,
78522
78696
  simple_webhook_integration: Optional["scout_integrations_api_SimpleWebhookIntegration"] = None,
78697
+ teams_webhook_integration: Optional["scout_integrations_api_TeamsWebhookIntegration"] = None,
78698
+ pager_duty_integration: Optional["scout_integrations_api_PagerDutyIntegration"] = None,
78523
78699
  type_of_union: Optional[str] = None
78524
78700
  ) -> None:
78525
78701
  if type_of_union is None:
78526
- if (slack_webhook_integration is not None) + (opsgenie_integration is not None) + (simple_webhook_integration is not None) != 1:
78702
+ if (slack_webhook_integration is not None) + (opsgenie_integration is not None) + (simple_webhook_integration is not None) + (teams_webhook_integration is not None) + (pager_duty_integration is not None) != 1:
78527
78703
  raise ValueError('a union must contain a single member')
78528
78704
 
78529
78705
  if slack_webhook_integration is not None:
@@ -78535,6 +78711,12 @@ class scout_integrations_api_IntegrationDetails(ConjureUnionType):
78535
78711
  if simple_webhook_integration is not None:
78536
78712
  self._simple_webhook_integration = simple_webhook_integration
78537
78713
  self._type = 'simpleWebhookIntegration'
78714
+ if teams_webhook_integration is not None:
78715
+ self._teams_webhook_integration = teams_webhook_integration
78716
+ self._type = 'teamsWebhookIntegration'
78717
+ if pager_duty_integration is not None:
78718
+ self._pager_duty_integration = pager_duty_integration
78719
+ self._type = 'pagerDutyIntegration'
78538
78720
 
78539
78721
  elif type_of_union == 'slackWebhookIntegration':
78540
78722
  if slack_webhook_integration is None:
@@ -78551,6 +78733,16 @@ class scout_integrations_api_IntegrationDetails(ConjureUnionType):
78551
78733
  raise ValueError('a union value must not be None')
78552
78734
  self._simple_webhook_integration = simple_webhook_integration
78553
78735
  self._type = 'simpleWebhookIntegration'
78736
+ elif type_of_union == 'teamsWebhookIntegration':
78737
+ if teams_webhook_integration is None:
78738
+ raise ValueError('a union value must not be None')
78739
+ self._teams_webhook_integration = teams_webhook_integration
78740
+ self._type = 'teamsWebhookIntegration'
78741
+ elif type_of_union == 'pagerDutyIntegration':
78742
+ if pager_duty_integration is None:
78743
+ raise ValueError('a union value must not be None')
78744
+ self._pager_duty_integration = pager_duty_integration
78745
+ self._type = 'pagerDutyIntegration'
78554
78746
 
78555
78747
  @builtins.property
78556
78748
  def slack_webhook_integration(self) -> Optional["scout_integrations_api_SlackWebhookIntegration"]:
@@ -78564,6 +78756,14 @@ class scout_integrations_api_IntegrationDetails(ConjureUnionType):
78564
78756
  def simple_webhook_integration(self) -> Optional["scout_integrations_api_SimpleWebhookIntegration"]:
78565
78757
  return self._simple_webhook_integration
78566
78758
 
78759
+ @builtins.property
78760
+ def teams_webhook_integration(self) -> Optional["scout_integrations_api_TeamsWebhookIntegration"]:
78761
+ return self._teams_webhook_integration
78762
+
78763
+ @builtins.property
78764
+ def pager_duty_integration(self) -> Optional["scout_integrations_api_PagerDutyIntegration"]:
78765
+ return self._pager_duty_integration
78766
+
78567
78767
  def accept(self, visitor) -> Any:
78568
78768
  if not isinstance(visitor, scout_integrations_api_IntegrationDetailsVisitor):
78569
78769
  raise ValueError('{} is not an instance of scout_integrations_api_IntegrationDetailsVisitor'.format(visitor.__class__.__name__))
@@ -78573,6 +78773,10 @@ class scout_integrations_api_IntegrationDetails(ConjureUnionType):
78573
78773
  return visitor._opsgenie_integration(self.opsgenie_integration)
78574
78774
  if self._type == 'simpleWebhookIntegration' and self.simple_webhook_integration is not None:
78575
78775
  return visitor._simple_webhook_integration(self.simple_webhook_integration)
78776
+ if self._type == 'teamsWebhookIntegration' and self.teams_webhook_integration is not None:
78777
+ return visitor._teams_webhook_integration(self.teams_webhook_integration)
78778
+ if self._type == 'pagerDutyIntegration' and self.pager_duty_integration is not None:
78779
+ return visitor._pager_duty_integration(self.pager_duty_integration)
78576
78780
 
78577
78781
 
78578
78782
  scout_integrations_api_IntegrationDetails.__name__ = "IntegrationDetails"
@@ -78594,6 +78798,14 @@ class scout_integrations_api_IntegrationDetailsVisitor:
78594
78798
  def _simple_webhook_integration(self, simple_webhook_integration: "scout_integrations_api_SimpleWebhookIntegration") -> Any:
78595
78799
  pass
78596
78800
 
78801
+ @abstractmethod
78802
+ def _teams_webhook_integration(self, teams_webhook_integration: "scout_integrations_api_TeamsWebhookIntegration") -> Any:
78803
+ pass
78804
+
78805
+ @abstractmethod
78806
+ def _pager_duty_integration(self, pager_duty_integration: "scout_integrations_api_PagerDutyIntegration") -> Any:
78807
+ pass
78808
+
78597
78809
 
78598
78810
  scout_integrations_api_IntegrationDetailsVisitor.__name__ = "IntegrationDetailsVisitor"
78599
78811
  scout_integrations_api_IntegrationDetailsVisitor.__qualname__ = "IntegrationDetailsVisitor"
@@ -78901,6 +79113,112 @@ scout_integrations_api_IntegrationsService.__qualname__ = "IntegrationsService"
78901
79113
  scout_integrations_api_IntegrationsService.__module__ = "nominal_api.scout_integrations_api"
78902
79114
 
78903
79115
 
79116
+ class scout_integrations_api_InternalSendMessageRequest(ConjureBeanType):
79117
+
79118
+ @builtins.classmethod
79119
+ def _fields(cls) -> Dict[str, ConjureFieldDefinition]:
79120
+ return {
79121
+ 'integration_rid': ConjureFieldDefinition('integrationRid', scout_integrations_api_IntegrationRid),
79122
+ 'message': ConjureFieldDefinition('message', scout_integrations_api_MessageFields)
79123
+ }
79124
+
79125
+ __slots__: List[str] = ['_integration_rid', '_message']
79126
+
79127
+ def __init__(self, integration_rid: str, message: "scout_integrations_api_MessageFields") -> None:
79128
+ self._integration_rid = integration_rid
79129
+ self._message = message
79130
+
79131
+ @builtins.property
79132
+ def integration_rid(self) -> str:
79133
+ return self._integration_rid
79134
+
79135
+ @builtins.property
79136
+ def message(self) -> "scout_integrations_api_MessageFields":
79137
+ return self._message
79138
+
79139
+
79140
+ scout_integrations_api_InternalSendMessageRequest.__name__ = "InternalSendMessageRequest"
79141
+ scout_integrations_api_InternalSendMessageRequest.__qualname__ = "InternalSendMessageRequest"
79142
+ scout_integrations_api_InternalSendMessageRequest.__module__ = "nominal_api.scout_integrations_api"
79143
+
79144
+
79145
+ class scout_integrations_api_MessageFields(ConjureUnionType):
79146
+ _alert: Optional["scout_integrations_api_AlertMessageFields"] = None
79147
+ _resolution_error: Optional["scout_integrations_api_ResolutionFailureMessageFields"] = None
79148
+
79149
+ @builtins.classmethod
79150
+ def _options(cls) -> Dict[str, ConjureFieldDefinition]:
79151
+ return {
79152
+ 'alert': ConjureFieldDefinition('alert', scout_integrations_api_AlertMessageFields),
79153
+ 'resolution_error': ConjureFieldDefinition('resolutionError', scout_integrations_api_ResolutionFailureMessageFields)
79154
+ }
79155
+
79156
+ def __init__(
79157
+ self,
79158
+ alert: Optional["scout_integrations_api_AlertMessageFields"] = None,
79159
+ resolution_error: Optional["scout_integrations_api_ResolutionFailureMessageFields"] = None,
79160
+ type_of_union: Optional[str] = None
79161
+ ) -> None:
79162
+ if type_of_union is None:
79163
+ if (alert is not None) + (resolution_error is not None) != 1:
79164
+ raise ValueError('a union must contain a single member')
79165
+
79166
+ if alert is not None:
79167
+ self._alert = alert
79168
+ self._type = 'alert'
79169
+ if resolution_error is not None:
79170
+ self._resolution_error = resolution_error
79171
+ self._type = 'resolutionError'
79172
+
79173
+ elif type_of_union == 'alert':
79174
+ if alert is None:
79175
+ raise ValueError('a union value must not be None')
79176
+ self._alert = alert
79177
+ self._type = 'alert'
79178
+ elif type_of_union == 'resolutionError':
79179
+ if resolution_error is None:
79180
+ raise ValueError('a union value must not be None')
79181
+ self._resolution_error = resolution_error
79182
+ self._type = 'resolutionError'
79183
+
79184
+ @builtins.property
79185
+ def alert(self) -> Optional["scout_integrations_api_AlertMessageFields"]:
79186
+ return self._alert
79187
+
79188
+ @builtins.property
79189
+ def resolution_error(self) -> Optional["scout_integrations_api_ResolutionFailureMessageFields"]:
79190
+ return self._resolution_error
79191
+
79192
+ def accept(self, visitor) -> Any:
79193
+ if not isinstance(visitor, scout_integrations_api_MessageFieldsVisitor):
79194
+ raise ValueError('{} is not an instance of scout_integrations_api_MessageFieldsVisitor'.format(visitor.__class__.__name__))
79195
+ if self._type == 'alert' and self.alert is not None:
79196
+ return visitor._alert(self.alert)
79197
+ if self._type == 'resolutionError' and self.resolution_error is not None:
79198
+ return visitor._resolution_error(self.resolution_error)
79199
+
79200
+
79201
+ scout_integrations_api_MessageFields.__name__ = "MessageFields"
79202
+ scout_integrations_api_MessageFields.__qualname__ = "MessageFields"
79203
+ scout_integrations_api_MessageFields.__module__ = "nominal_api.scout_integrations_api"
79204
+
79205
+
79206
+ class scout_integrations_api_MessageFieldsVisitor:
79207
+
79208
+ @abstractmethod
79209
+ def _alert(self, alert: "scout_integrations_api_AlertMessageFields") -> Any:
79210
+ pass
79211
+
79212
+ @abstractmethod
79213
+ def _resolution_error(self, resolution_error: "scout_integrations_api_ResolutionFailureMessageFields") -> Any:
79214
+ pass
79215
+
79216
+
79217
+ scout_integrations_api_MessageFieldsVisitor.__name__ = "MessageFieldsVisitor"
79218
+ scout_integrations_api_MessageFieldsVisitor.__qualname__ = "MessageFieldsVisitor"
79219
+ scout_integrations_api_MessageFieldsVisitor.__module__ = "nominal_api.scout_integrations_api"
79220
+
79221
+
78904
79222
  class scout_integrations_api_NotificationConfiguration(ConjureBeanType):
78905
79223
  """Configuration details to send notifications to a linked integration.
78906
79224
  """
@@ -79011,6 +79329,83 @@ scout_integrations_api_OpsgenieRegion.__qualname__ = "OpsgenieRegion"
79011
79329
  scout_integrations_api_OpsgenieRegion.__module__ = "nominal_api.scout_integrations_api"
79012
79330
 
79013
79331
 
79332
+ class scout_integrations_api_PagerDutyIntegration(ConjureBeanType):
79333
+
79334
+ @builtins.classmethod
79335
+ def _fields(cls) -> Dict[str, ConjureFieldDefinition]:
79336
+ return {
79337
+ }
79338
+
79339
+ __slots__: List[str] = []
79340
+
79341
+
79342
+
79343
+ scout_integrations_api_PagerDutyIntegration.__name__ = "PagerDutyIntegration"
79344
+ scout_integrations_api_PagerDutyIntegration.__qualname__ = "PagerDutyIntegration"
79345
+ scout_integrations_api_PagerDutyIntegration.__module__ = "nominal_api.scout_integrations_api"
79346
+
79347
+
79348
+ class scout_integrations_api_ResolutionFailureMessageFields(ConjureBeanType):
79349
+
79350
+ @builtins.classmethod
79351
+ def _fields(cls) -> Dict[str, ConjureFieldDefinition]:
79352
+ return {
79353
+ 'checklist_title': ConjureFieldDefinition('checklistTitle', str),
79354
+ 'asset_title': ConjureFieldDefinition('assetTitle', str),
79355
+ 'checklist_rid': ConjureFieldDefinition('checklistRid', scout_rids_api_ChecklistRid),
79356
+ 'asset_rid': ConjureFieldDefinition('assetRid', scout_rids_api_AssetRid),
79357
+ 'unresolved_checks': ConjureFieldDefinition('unresolvedChecks', int),
79358
+ 'total_checks': ConjureFieldDefinition('totalChecks', int),
79359
+ 'labels': ConjureFieldDefinition('labels', List[str])
79360
+ }
79361
+
79362
+ __slots__: List[str] = ['_checklist_title', '_asset_title', '_checklist_rid', '_asset_rid', '_unresolved_checks', '_total_checks', '_labels']
79363
+
79364
+ def __init__(self, asset_rid: str, asset_title: str, checklist_rid: str, checklist_title: str, labels: List[str], total_checks: int, unresolved_checks: int) -> None:
79365
+ self._checklist_title = checklist_title
79366
+ self._asset_title = asset_title
79367
+ self._checklist_rid = checklist_rid
79368
+ self._asset_rid = asset_rid
79369
+ self._unresolved_checks = unresolved_checks
79370
+ self._total_checks = total_checks
79371
+ self._labels = labels
79372
+
79373
+ @builtins.property
79374
+ def checklist_title(self) -> str:
79375
+ return self._checklist_title
79376
+
79377
+ @builtins.property
79378
+ def asset_title(self) -> str:
79379
+ return self._asset_title
79380
+
79381
+ @builtins.property
79382
+ def checklist_rid(self) -> str:
79383
+ return self._checklist_rid
79384
+
79385
+ @builtins.property
79386
+ def asset_rid(self) -> str:
79387
+ return self._asset_rid
79388
+
79389
+ @builtins.property
79390
+ def unresolved_checks(self) -> int:
79391
+ return self._unresolved_checks
79392
+
79393
+ @builtins.property
79394
+ def total_checks(self) -> int:
79395
+ return self._total_checks
79396
+
79397
+ @builtins.property
79398
+ def labels(self) -> List[str]:
79399
+ """Currently exposed as 'tags' on the frontend to match Opsgenie naming. Used by some integrations to filter/route messages.
79400
+ """
79401
+ return self._labels
79402
+
79403
+
79404
+ scout_integrations_api_ResolutionFailureMessageFields.__name__ = "ResolutionFailureMessageFields"
79405
+ scout_integrations_api_ResolutionFailureMessageFields.__qualname__ = "ResolutionFailureMessageFields"
79406
+ scout_integrations_api_ResolutionFailureMessageFields.__module__ = "nominal_api.scout_integrations_api"
79407
+
79408
+
79014
79409
  class scout_integrations_api_SendMessageRequest(ConjureBeanType):
79015
79410
 
79016
79411
  @builtins.classmethod
@@ -79145,25 +79540,47 @@ scout_integrations_api_SlackWebhookIntegration.__qualname__ = "SlackWebhookInteg
79145
79540
  scout_integrations_api_SlackWebhookIntegration.__module__ = "nominal_api.scout_integrations_api"
79146
79541
 
79147
79542
 
79543
+ class scout_integrations_api_TeamsWebhookIntegration(ConjureBeanType):
79544
+
79545
+ @builtins.classmethod
79546
+ def _fields(cls) -> Dict[str, ConjureFieldDefinition]:
79547
+ return {
79548
+ }
79549
+
79550
+ __slots__: List[str] = []
79551
+
79552
+
79553
+
79554
+ scout_integrations_api_TeamsWebhookIntegration.__name__ = "TeamsWebhookIntegration"
79555
+ scout_integrations_api_TeamsWebhookIntegration.__qualname__ = "TeamsWebhookIntegration"
79556
+ scout_integrations_api_TeamsWebhookIntegration.__module__ = "nominal_api.scout_integrations_api"
79557
+
79558
+
79148
79559
  class scout_integrations_api_UpdateIntegrationDetails(ConjureUnionType):
79149
79560
  _simple_webhook: Optional["scout_integrations_api_UpdateSimpleWebhookDetails"] = None
79150
79561
  _opsgenie_integration: Optional["scout_integrations_api_UpdateOpsgenieIntegrationDetails"] = None
79562
+ _teams_webhook: Optional["scout_integrations_api_UpdateTeamsWebhookIntegrationDetails"] = None
79563
+ _pager_duty: Optional["scout_integrations_api_UpdatePagerDutyIntegrationDetails"] = None
79151
79564
 
79152
79565
  @builtins.classmethod
79153
79566
  def _options(cls) -> Dict[str, ConjureFieldDefinition]:
79154
79567
  return {
79155
79568
  'simple_webhook': ConjureFieldDefinition('simpleWebhook', scout_integrations_api_UpdateSimpleWebhookDetails),
79156
- 'opsgenie_integration': ConjureFieldDefinition('opsgenieIntegration', scout_integrations_api_UpdateOpsgenieIntegrationDetails)
79569
+ 'opsgenie_integration': ConjureFieldDefinition('opsgenieIntegration', scout_integrations_api_UpdateOpsgenieIntegrationDetails),
79570
+ 'teams_webhook': ConjureFieldDefinition('teamsWebhook', scout_integrations_api_UpdateTeamsWebhookIntegrationDetails),
79571
+ 'pager_duty': ConjureFieldDefinition('pagerDuty', scout_integrations_api_UpdatePagerDutyIntegrationDetails)
79157
79572
  }
79158
79573
 
79159
79574
  def __init__(
79160
79575
  self,
79161
79576
  simple_webhook: Optional["scout_integrations_api_UpdateSimpleWebhookDetails"] = None,
79162
79577
  opsgenie_integration: Optional["scout_integrations_api_UpdateOpsgenieIntegrationDetails"] = None,
79578
+ teams_webhook: Optional["scout_integrations_api_UpdateTeamsWebhookIntegrationDetails"] = None,
79579
+ pager_duty: Optional["scout_integrations_api_UpdatePagerDutyIntegrationDetails"] = None,
79163
79580
  type_of_union: Optional[str] = None
79164
79581
  ) -> None:
79165
79582
  if type_of_union is None:
79166
- if (simple_webhook is not None) + (opsgenie_integration is not None) != 1:
79583
+ if (simple_webhook is not None) + (opsgenie_integration is not None) + (teams_webhook is not None) + (pager_duty is not None) != 1:
79167
79584
  raise ValueError('a union must contain a single member')
79168
79585
 
79169
79586
  if simple_webhook is not None:
@@ -79172,6 +79589,12 @@ class scout_integrations_api_UpdateIntegrationDetails(ConjureUnionType):
79172
79589
  if opsgenie_integration is not None:
79173
79590
  self._opsgenie_integration = opsgenie_integration
79174
79591
  self._type = 'opsgenieIntegration'
79592
+ if teams_webhook is not None:
79593
+ self._teams_webhook = teams_webhook
79594
+ self._type = 'teamsWebhook'
79595
+ if pager_duty is not None:
79596
+ self._pager_duty = pager_duty
79597
+ self._type = 'pagerDuty'
79175
79598
 
79176
79599
  elif type_of_union == 'simpleWebhook':
79177
79600
  if simple_webhook is None:
@@ -79183,6 +79606,16 @@ class scout_integrations_api_UpdateIntegrationDetails(ConjureUnionType):
79183
79606
  raise ValueError('a union value must not be None')
79184
79607
  self._opsgenie_integration = opsgenie_integration
79185
79608
  self._type = 'opsgenieIntegration'
79609
+ elif type_of_union == 'teamsWebhook':
79610
+ if teams_webhook is None:
79611
+ raise ValueError('a union value must not be None')
79612
+ self._teams_webhook = teams_webhook
79613
+ self._type = 'teamsWebhook'
79614
+ elif type_of_union == 'pagerDuty':
79615
+ if pager_duty is None:
79616
+ raise ValueError('a union value must not be None')
79617
+ self._pager_duty = pager_duty
79618
+ self._type = 'pagerDuty'
79186
79619
 
79187
79620
  @builtins.property
79188
79621
  def simple_webhook(self) -> Optional["scout_integrations_api_UpdateSimpleWebhookDetails"]:
@@ -79192,6 +79625,14 @@ class scout_integrations_api_UpdateIntegrationDetails(ConjureUnionType):
79192
79625
  def opsgenie_integration(self) -> Optional["scout_integrations_api_UpdateOpsgenieIntegrationDetails"]:
79193
79626
  return self._opsgenie_integration
79194
79627
 
79628
+ @builtins.property
79629
+ def teams_webhook(self) -> Optional["scout_integrations_api_UpdateTeamsWebhookIntegrationDetails"]:
79630
+ return self._teams_webhook
79631
+
79632
+ @builtins.property
79633
+ def pager_duty(self) -> Optional["scout_integrations_api_UpdatePagerDutyIntegrationDetails"]:
79634
+ return self._pager_duty
79635
+
79195
79636
  def accept(self, visitor) -> Any:
79196
79637
  if not isinstance(visitor, scout_integrations_api_UpdateIntegrationDetailsVisitor):
79197
79638
  raise ValueError('{} is not an instance of scout_integrations_api_UpdateIntegrationDetailsVisitor'.format(visitor.__class__.__name__))
@@ -79199,6 +79640,10 @@ class scout_integrations_api_UpdateIntegrationDetails(ConjureUnionType):
79199
79640
  return visitor._simple_webhook(self.simple_webhook)
79200
79641
  if self._type == 'opsgenieIntegration' and self.opsgenie_integration is not None:
79201
79642
  return visitor._opsgenie_integration(self.opsgenie_integration)
79643
+ if self._type == 'teamsWebhook' and self.teams_webhook is not None:
79644
+ return visitor._teams_webhook(self.teams_webhook)
79645
+ if self._type == 'pagerDuty' and self.pager_duty is not None:
79646
+ return visitor._pager_duty(self.pager_duty)
79202
79647
 
79203
79648
 
79204
79649
  scout_integrations_api_UpdateIntegrationDetails.__name__ = "UpdateIntegrationDetails"
@@ -79216,6 +79661,14 @@ class scout_integrations_api_UpdateIntegrationDetailsVisitor:
79216
79661
  def _opsgenie_integration(self, opsgenie_integration: "scout_integrations_api_UpdateOpsgenieIntegrationDetails") -> Any:
79217
79662
  pass
79218
79663
 
79664
+ @abstractmethod
79665
+ def _teams_webhook(self, teams_webhook: "scout_integrations_api_UpdateTeamsWebhookIntegrationDetails") -> Any:
79666
+ pass
79667
+
79668
+ @abstractmethod
79669
+ def _pager_duty(self, pager_duty: "scout_integrations_api_UpdatePagerDutyIntegrationDetails") -> Any:
79670
+ pass
79671
+
79219
79672
 
79220
79673
  scout_integrations_api_UpdateIntegrationDetailsVisitor.__name__ = "UpdateIntegrationDetailsVisitor"
79221
79674
  scout_integrations_api_UpdateIntegrationDetailsVisitor.__qualname__ = "UpdateIntegrationDetailsVisitor"
@@ -79306,6 +79759,29 @@ scout_integrations_api_UpdateOpsgenieIntegrationDetails.__qualname__ = "UpdateOp
79306
79759
  scout_integrations_api_UpdateOpsgenieIntegrationDetails.__module__ = "nominal_api.scout_integrations_api"
79307
79760
 
79308
79761
 
79762
+ class scout_integrations_api_UpdatePagerDutyIntegrationDetails(ConjureBeanType):
79763
+
79764
+ @builtins.classmethod
79765
+ def _fields(cls) -> Dict[str, ConjureFieldDefinition]:
79766
+ return {
79767
+ 'routing_key': ConjureFieldDefinition('routingKey', str)
79768
+ }
79769
+
79770
+ __slots__: List[str] = ['_routing_key']
79771
+
79772
+ def __init__(self, routing_key: str) -> None:
79773
+ self._routing_key = routing_key
79774
+
79775
+ @builtins.property
79776
+ def routing_key(self) -> str:
79777
+ return self._routing_key
79778
+
79779
+
79780
+ scout_integrations_api_UpdatePagerDutyIntegrationDetails.__name__ = "UpdatePagerDutyIntegrationDetails"
79781
+ scout_integrations_api_UpdatePagerDutyIntegrationDetails.__qualname__ = "UpdatePagerDutyIntegrationDetails"
79782
+ scout_integrations_api_UpdatePagerDutyIntegrationDetails.__module__ = "nominal_api.scout_integrations_api"
79783
+
79784
+
79309
79785
  class scout_integrations_api_UpdateSimpleWebhookDetails(ConjureBeanType):
79310
79786
 
79311
79787
  @builtins.classmethod
@@ -79329,6 +79805,29 @@ scout_integrations_api_UpdateSimpleWebhookDetails.__qualname__ = "UpdateSimpleWe
79329
79805
  scout_integrations_api_UpdateSimpleWebhookDetails.__module__ = "nominal_api.scout_integrations_api"
79330
79806
 
79331
79807
 
79808
+ class scout_integrations_api_UpdateTeamsWebhookIntegrationDetails(ConjureBeanType):
79809
+
79810
+ @builtins.classmethod
79811
+ def _fields(cls) -> Dict[str, ConjureFieldDefinition]:
79812
+ return {
79813
+ 'webhook': ConjureFieldDefinition('webhook', str)
79814
+ }
79815
+
79816
+ __slots__: List[str] = ['_webhook']
79817
+
79818
+ def __init__(self, webhook: str) -> None:
79819
+ self._webhook = webhook
79820
+
79821
+ @builtins.property
79822
+ def webhook(self) -> str:
79823
+ return self._webhook
79824
+
79825
+
79826
+ scout_integrations_api_UpdateTeamsWebhookIntegrationDetails.__name__ = "UpdateTeamsWebhookIntegrationDetails"
79827
+ scout_integrations_api_UpdateTeamsWebhookIntegrationDetails.__qualname__ = "UpdateTeamsWebhookIntegrationDetails"
79828
+ scout_integrations_api_UpdateTeamsWebhookIntegrationDetails.__module__ = "nominal_api.scout_integrations_api"
79829
+
79830
+
79332
79831
  class scout_internal_search_api_BooleanField(ConjureBeanType):
79333
79832
 
79334
79833
  @builtins.classmethod
@@ -81544,13 +82043,14 @@ class scout_notebook_api_NotebookMetadata(ConjureBeanType):
81544
82043
  'lock': ConjureFieldDefinition('lock', scout_notebook_api_Lock),
81545
82044
  'created_by_rid': ConjureFieldDefinition('createdByRid', scout_rids_api_UserRid),
81546
82045
  'created_at': ConjureFieldDefinition('createdAt', str),
82046
+ 'updated_at': ConjureFieldDefinition('updatedAt', OptionalTypeWrapper[str]),
81547
82047
  'properties': ConjureFieldDefinition('properties', Dict[api_PropertyName, api_PropertyValue]),
81548
82048
  'labels': ConjureFieldDefinition('labels', List[api_Label])
81549
82049
  }
81550
82050
 
81551
- __slots__: List[str] = ['_run_rid', '_data_scope', '_notebook_type', '_title', '_description', '_is_draft', '_is_archived', '_lock', '_created_by_rid', '_created_at', '_properties', '_labels']
82051
+ __slots__: List[str] = ['_run_rid', '_data_scope', '_notebook_type', '_title', '_description', '_is_draft', '_is_archived', '_lock', '_created_by_rid', '_created_at', '_updated_at', '_properties', '_labels']
81552
82052
 
81553
- def __init__(self, created_at: str, created_by_rid: str, data_scope: "scout_notebook_api_NotebookDataScope", description: str, is_archived: bool, is_draft: bool, labels: List[str], lock: "scout_notebook_api_Lock", notebook_type: "scout_notebook_api_NotebookType", properties: Dict[str, str], title: str, run_rid: Optional[str] = None) -> None:
82053
+ def __init__(self, created_at: str, created_by_rid: str, data_scope: "scout_notebook_api_NotebookDataScope", description: str, is_archived: bool, is_draft: bool, labels: List[str], lock: "scout_notebook_api_Lock", notebook_type: "scout_notebook_api_NotebookType", properties: Dict[str, str], title: str, run_rid: Optional[str] = None, updated_at: Optional[str] = None) -> None:
81554
82054
  self._run_rid = run_rid
81555
82055
  self._data_scope = data_scope
81556
82056
  self._notebook_type = notebook_type
@@ -81561,6 +82061,7 @@ class scout_notebook_api_NotebookMetadata(ConjureBeanType):
81561
82061
  self._lock = lock
81562
82062
  self._created_by_rid = created_by_rid
81563
82063
  self._created_at = created_at
82064
+ self._updated_at = updated_at
81564
82065
  self._properties = properties
81565
82066
  self._labels = labels
81566
82067
 
@@ -81606,6 +82107,12 @@ class scout_notebook_api_NotebookMetadata(ConjureBeanType):
81606
82107
  def created_at(self) -> str:
81607
82108
  return self._created_at
81608
82109
 
82110
+ @builtins.property
82111
+ def updated_at(self) -> Optional[str]:
82112
+ """The timestamp when the workbook was last updated
82113
+ """
82114
+ return self._updated_at
82115
+
81609
82116
  @builtins.property
81610
82117
  def properties(self) -> Dict[str, str]:
81611
82118
  return self._properties
@@ -86460,23 +86967,26 @@ scout_savedviews_api_AssetMetricColumn.__module__ = "nominal_api.scout_savedview
86460
86967
 
86461
86968
  class scout_savedviews_api_AssetMetricColumnTimeRange(ConjureUnionType):
86462
86969
  _most_recent_run: Optional["scout_savedviews_api_MostRecentRun"] = None
86463
- _custom: Optional["scout_savedviews_api_CustomTimeRange"] = None
86970
+ _custom: Optional["scout_run_api_CustomTimeframeFilter"] = None
86971
+ _preset: Optional["scout_run_api_PresetTimeframeFilter"] = None
86464
86972
 
86465
86973
  @builtins.classmethod
86466
86974
  def _options(cls) -> Dict[str, ConjureFieldDefinition]:
86467
86975
  return {
86468
86976
  'most_recent_run': ConjureFieldDefinition('mostRecentRun', scout_savedviews_api_MostRecentRun),
86469
- 'custom': ConjureFieldDefinition('custom', scout_savedviews_api_CustomTimeRange)
86977
+ 'custom': ConjureFieldDefinition('custom', scout_run_api_CustomTimeframeFilter),
86978
+ 'preset': ConjureFieldDefinition('preset', scout_run_api_PresetTimeframeFilter)
86470
86979
  }
86471
86980
 
86472
86981
  def __init__(
86473
86982
  self,
86474
86983
  most_recent_run: Optional["scout_savedviews_api_MostRecentRun"] = None,
86475
- custom: Optional["scout_savedviews_api_CustomTimeRange"] = None,
86984
+ custom: Optional["scout_run_api_CustomTimeframeFilter"] = None,
86985
+ preset: Optional["scout_run_api_PresetTimeframeFilter"] = None,
86476
86986
  type_of_union: Optional[str] = None
86477
86987
  ) -> None:
86478
86988
  if type_of_union is None:
86479
- if (most_recent_run is not None) + (custom is not None) != 1:
86989
+ if (most_recent_run is not None) + (custom is not None) + (preset is not None) != 1:
86480
86990
  raise ValueError('a union must contain a single member')
86481
86991
 
86482
86992
  if most_recent_run is not None:
@@ -86485,6 +86995,9 @@ class scout_savedviews_api_AssetMetricColumnTimeRange(ConjureUnionType):
86485
86995
  if custom is not None:
86486
86996
  self._custom = custom
86487
86997
  self._type = 'custom'
86998
+ if preset is not None:
86999
+ self._preset = preset
87000
+ self._type = 'preset'
86488
87001
 
86489
87002
  elif type_of_union == 'mostRecentRun':
86490
87003
  if most_recent_run is None:
@@ -86496,15 +87009,24 @@ class scout_savedviews_api_AssetMetricColumnTimeRange(ConjureUnionType):
86496
87009
  raise ValueError('a union value must not be None')
86497
87010
  self._custom = custom
86498
87011
  self._type = 'custom'
87012
+ elif type_of_union == 'preset':
87013
+ if preset is None:
87014
+ raise ValueError('a union value must not be None')
87015
+ self._preset = preset
87016
+ self._type = 'preset'
86499
87017
 
86500
87018
  @builtins.property
86501
87019
  def most_recent_run(self) -> Optional["scout_savedviews_api_MostRecentRun"]:
86502
87020
  return self._most_recent_run
86503
87021
 
86504
87022
  @builtins.property
86505
- def custom(self) -> Optional["scout_savedviews_api_CustomTimeRange"]:
87023
+ def custom(self) -> Optional["scout_run_api_CustomTimeframeFilter"]:
86506
87024
  return self._custom
86507
87025
 
87026
+ @builtins.property
87027
+ def preset(self) -> Optional["scout_run_api_PresetTimeframeFilter"]:
87028
+ return self._preset
87029
+
86508
87030
  def accept(self, visitor) -> Any:
86509
87031
  if not isinstance(visitor, scout_savedviews_api_AssetMetricColumnTimeRangeVisitor):
86510
87032
  raise ValueError('{} is not an instance of scout_savedviews_api_AssetMetricColumnTimeRangeVisitor'.format(visitor.__class__.__name__))
@@ -86512,6 +87034,8 @@ class scout_savedviews_api_AssetMetricColumnTimeRange(ConjureUnionType):
86512
87034
  return visitor._most_recent_run(self.most_recent_run)
86513
87035
  if self._type == 'custom' and self.custom is not None:
86514
87036
  return visitor._custom(self.custom)
87037
+ if self._type == 'preset' and self.preset is not None:
87038
+ return visitor._preset(self.preset)
86515
87039
 
86516
87040
 
86517
87041
  scout_savedviews_api_AssetMetricColumnTimeRange.__name__ = "AssetMetricColumnTimeRange"
@@ -86526,7 +87050,11 @@ class scout_savedviews_api_AssetMetricColumnTimeRangeVisitor:
86526
87050
  pass
86527
87051
 
86528
87052
  @abstractmethod
86529
- def _custom(self, custom: "scout_savedviews_api_CustomTimeRange") -> Any:
87053
+ def _custom(self, custom: "scout_run_api_CustomTimeframeFilter") -> Any:
87054
+ pass
87055
+
87056
+ @abstractmethod
87057
+ def _preset(self, preset: "scout_run_api_PresetTimeframeFilter") -> Any:
86530
87058
  pass
86531
87059
 
86532
87060
 
@@ -86750,35 +87278,6 @@ scout_savedviews_api_CreateSavedViewResponse.__qualname__ = "CreateSavedViewResp
86750
87278
  scout_savedviews_api_CreateSavedViewResponse.__module__ = "nominal_api.scout_savedviews_api"
86751
87279
 
86752
87280
 
86753
- class scout_savedviews_api_CustomTimeRange(ConjureBeanType):
86754
-
86755
- @builtins.classmethod
86756
- def _fields(cls) -> Dict[str, ConjureFieldDefinition]:
86757
- return {
86758
- 'start_time': ConjureFieldDefinition('startTime', OptionalTypeWrapper[scout_run_api_UtcTimestamp]),
86759
- 'end_time': ConjureFieldDefinition('endTime', OptionalTypeWrapper[scout_run_api_UtcTimestamp])
86760
- }
86761
-
86762
- __slots__: List[str] = ['_start_time', '_end_time']
86763
-
86764
- def __init__(self, end_time: Optional["scout_run_api_UtcTimestamp"] = None, start_time: Optional["scout_run_api_UtcTimestamp"] = None) -> None:
86765
- self._start_time = start_time
86766
- self._end_time = end_time
86767
-
86768
- @builtins.property
86769
- def start_time(self) -> Optional["scout_run_api_UtcTimestamp"]:
86770
- return self._start_time
86771
-
86772
- @builtins.property
86773
- def end_time(self) -> Optional["scout_run_api_UtcTimestamp"]:
86774
- return self._end_time
86775
-
86776
-
86777
- scout_savedviews_api_CustomTimeRange.__name__ = "CustomTimeRange"
86778
- scout_savedviews_api_CustomTimeRange.__qualname__ = "CustomTimeRange"
86779
- scout_savedviews_api_CustomTimeRange.__module__ = "nominal_api.scout_savedviews_api"
86780
-
86781
-
86782
87281
  class scout_savedviews_api_DisplayState(ConjureUnionType):
86783
87282
  _display_state_v1: Optional["scout_savedviews_api_TableState"] = None
86784
87283
 
@@ -90720,9 +91219,14 @@ permanently delete it. Archived videos can be unarchived.
90720
91219
 
90721
91220
  return
90722
91221
 
90723
- def get_playlist(self, auth_header: str, video_rid: str) -> Any:
90724
- """Generates an HLS playlist for a video with the given video rid to enable playback. The HLS playlist will contain
90725
- 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.
90726
91230
  """
90727
91231
  _conjure_encoder = ConjureEncoder()
90728
91232
 
@@ -90732,6 +91236,8 @@ links to all of the segments in the video in sequential order.
90732
91236
  }
90733
91237
 
90734
91238
  _params: Dict[str, Any] = {
91239
+ 'start': _conjure_encoder.default(start),
91240
+ 'end': _conjure_encoder.default(end),
90735
91241
  }
90736
91242
 
90737
91243
  _path_params: Dict[str, str] = {
@@ -90826,6 +91332,84 @@ playlist will be limited to the given bounds.
90826
91332
  _raw.decode_content = True
90827
91333
  return _raw
90828
91334
 
91335
+ def get_playlist_in_bounds_for_channel(self, auth_header: str, request: "scout_video_api_GetPlaylistInBoundsForChannelRequest") -> Any:
91336
+ """Generates an HLS playlist for a video channel series (identified by channel + tags) within an optional set of
91337
+ bounds then generates a playlist for all matching video segments.
91338
+ """
91339
+ _conjure_encoder = ConjureEncoder()
91340
+
91341
+ _headers: Dict[str, Any] = {
91342
+ 'Accept': 'application/octet-stream',
91343
+ 'Content-Type': 'application/json',
91344
+ 'Authorization': auth_header,
91345
+ }
91346
+
91347
+ _params: Dict[str, Any] = {
91348
+ }
91349
+
91350
+ _path_params: Dict[str, str] = {
91351
+ }
91352
+
91353
+ _json: Any = _conjure_encoder.default(request)
91354
+
91355
+ _path = '/video/v1/videos/channel/playlist-in-bounds'
91356
+ _path = _path.format(**_path_params)
91357
+
91358
+ _response: Response = self._request(
91359
+ 'POST',
91360
+ self._uri + _path,
91361
+ params=_params,
91362
+ headers=_headers,
91363
+ stream=True,
91364
+ json=_json)
91365
+
91366
+ _raw = _response.raw
91367
+ _raw.decode_content = True
91368
+ return _raw
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
+
90829
91413
  def get_segment_summaries_in_bounds(self, auth_header: str, request: "scout_video_api_GetSegmentSummariesInBoundsRequest", video_rid: str) -> List["scout_video_api_SegmentSummary"]:
90830
91414
  """Returns the min and max absolute and media timestamps for each segment in a video that overlap with an
90831
91415
  optional set of bounds.
@@ -90860,6 +91444,39 @@ optional set of bounds.
90860
91444
  _decoder = ConjureDecoder()
90861
91445
  return _decoder.decode(_response.json(), List[scout_video_api_SegmentSummary], self._return_none_for_unknown_union_types)
90862
91446
 
91447
+ def get_segment_summaries_in_bounds_for_channel(self, auth_header: str, request: "scout_video_api_GetSegmentSummariesInBoundsForChannelRequest") -> List["scout_video_api_SegmentSummary"]:
91448
+ """Returns the min and max absolute and media timestamps for each segment matching a video channel series
91449
+ (identified by channel + tags) within the specified bounds.
91450
+ """
91451
+ _conjure_encoder = ConjureEncoder()
91452
+
91453
+ _headers: Dict[str, Any] = {
91454
+ 'Accept': 'application/json',
91455
+ 'Content-Type': 'application/json',
91456
+ 'Authorization': auth_header,
91457
+ }
91458
+
91459
+ _params: Dict[str, Any] = {
91460
+ }
91461
+
91462
+ _path_params: Dict[str, str] = {
91463
+ }
91464
+
91465
+ _json: Any = _conjure_encoder.default(request)
91466
+
91467
+ _path = '/video/v1/videos/channel/segment-summaries-in-bounds'
91468
+ _path = _path.format(**_path_params)
91469
+
91470
+ _response: Response = self._request(
91471
+ 'POST',
91472
+ self._uri + _path,
91473
+ params=_params,
91474
+ headers=_headers,
91475
+ json=_json)
91476
+
91477
+ _decoder = ConjureDecoder()
91478
+ return _decoder.decode(_response.json(), List[scout_video_api_SegmentSummary], self._return_none_for_unknown_union_types)
91479
+
90863
91480
  def get_file_summaries(self, auth_header: str, request: "scout_video_api_GetFileSummariesRequest", video_rid: str) -> "scout_video_api_GetFileSummariesResponse":
90864
91481
  """Returns the min and max absolute timestamps from non-archived video files associated with a given video that
90865
91482
  overlap with an optional set of bounds. The files on the edges of the bounds will be truncated to segments
@@ -91610,6 +92227,38 @@ scout_video_api_GetIngestStatusResponse.__qualname__ = "GetIngestStatusResponse"
91610
92227
  scout_video_api_GetIngestStatusResponse.__module__ = "nominal_api.scout_video_api"
91611
92228
 
91612
92229
 
92230
+ class scout_video_api_GetPlaylistInBoundsForChannelRequest(ConjureBeanType):
92231
+ """Request to get playlist for a video channel series.
92232
+ Uses channel + tags to resolve to video series metadata within the specified video.
92233
+ """
92234
+
92235
+ @builtins.classmethod
92236
+ def _fields(cls) -> Dict[str, ConjureFieldDefinition]:
92237
+ return {
92238
+ 'channel_series': ConjureFieldDefinition('channelSeries', scout_video_api_VideoChannelSeries),
92239
+ 'bounds': ConjureFieldDefinition('bounds', scout_video_api_Bounds)
92240
+ }
92241
+
92242
+ __slots__: List[str] = ['_channel_series', '_bounds']
92243
+
92244
+ def __init__(self, bounds: "scout_video_api_Bounds", channel_series: "scout_video_api_VideoChannelSeries") -> None:
92245
+ self._channel_series = channel_series
92246
+ self._bounds = bounds
92247
+
92248
+ @builtins.property
92249
+ def channel_series(self) -> "scout_video_api_VideoChannelSeries":
92250
+ return self._channel_series
92251
+
92252
+ @builtins.property
92253
+ def bounds(self) -> "scout_video_api_Bounds":
92254
+ return self._bounds
92255
+
92256
+
92257
+ scout_video_api_GetPlaylistInBoundsForChannelRequest.__name__ = "GetPlaylistInBoundsForChannelRequest"
92258
+ scout_video_api_GetPlaylistInBoundsForChannelRequest.__qualname__ = "GetPlaylistInBoundsForChannelRequest"
92259
+ scout_video_api_GetPlaylistInBoundsForChannelRequest.__module__ = "nominal_api.scout_video_api"
92260
+
92261
+
91613
92262
  class scout_video_api_GetPlaylistInBoundsRequest(ConjureBeanType):
91614
92263
 
91615
92264
  @builtins.classmethod
@@ -91668,6 +92317,38 @@ scout_video_api_GetSegmentByTimestampRequest.__qualname__ = "GetSegmentByTimesta
91668
92317
  scout_video_api_GetSegmentByTimestampRequest.__module__ = "nominal_api.scout_video_api"
91669
92318
 
91670
92319
 
92320
+ class scout_video_api_GetSegmentSummariesInBoundsForChannelRequest(ConjureBeanType):
92321
+ """Request to get segment summaries for a video channel series.
92322
+ Uses channel + tags to resolve to video series metadata within the specified bounds.
92323
+ """
92324
+
92325
+ @builtins.classmethod
92326
+ def _fields(cls) -> Dict[str, ConjureFieldDefinition]:
92327
+ return {
92328
+ 'channel_series': ConjureFieldDefinition('channelSeries', scout_video_api_VideoChannelSeries),
92329
+ 'bounds': ConjureFieldDefinition('bounds', scout_video_api_Bounds)
92330
+ }
92331
+
92332
+ __slots__: List[str] = ['_channel_series', '_bounds']
92333
+
92334
+ def __init__(self, bounds: "scout_video_api_Bounds", channel_series: "scout_video_api_VideoChannelSeries") -> None:
92335
+ self._channel_series = channel_series
92336
+ self._bounds = bounds
92337
+
92338
+ @builtins.property
92339
+ def channel_series(self) -> "scout_video_api_VideoChannelSeries":
92340
+ return self._channel_series
92341
+
92342
+ @builtins.property
92343
+ def bounds(self) -> "scout_video_api_Bounds":
92344
+ return self._bounds
92345
+
92346
+
92347
+ scout_video_api_GetSegmentSummariesInBoundsForChannelRequest.__name__ = "GetSegmentSummariesInBoundsForChannelRequest"
92348
+ scout_video_api_GetSegmentSummariesInBoundsForChannelRequest.__qualname__ = "GetSegmentSummariesInBoundsForChannelRequest"
92349
+ scout_video_api_GetSegmentSummariesInBoundsForChannelRequest.__module__ = "nominal_api.scout_video_api"
92350
+
92351
+
91671
92352
  class scout_video_api_GetSegmentSummariesInBoundsRequest(ConjureBeanType):
91672
92353
 
91673
92354
  @builtins.classmethod
@@ -92947,6 +93628,166 @@ scout_video_api_VideoAllSegmentsMetadata.__qualname__ = "VideoAllSegmentsMetadat
92947
93628
  scout_video_api_VideoAllSegmentsMetadata.__module__ = "nominal_api.scout_video_api"
92948
93629
 
92949
93630
 
93631
+ class scout_video_api_VideoAssetChannel(ConjureBeanType):
93632
+ """Reference a video channel via an Asset's data scope
93633
+ """
93634
+
93635
+ @builtins.classmethod
93636
+ def _fields(cls) -> Dict[str, ConjureFieldDefinition]:
93637
+ return {
93638
+ 'asset_rid': ConjureFieldDefinition('assetRid', str),
93639
+ 'data_scope_name': ConjureFieldDefinition('dataScopeName', str),
93640
+ 'channel': ConjureFieldDefinition('channel', str),
93641
+ 'tags': ConjureFieldDefinition('tags', Dict[api_TagName, api_TagValue])
93642
+ }
93643
+
93644
+ __slots__: List[str] = ['_asset_rid', '_data_scope_name', '_channel', '_tags']
93645
+
93646
+ def __init__(self, asset_rid: str, channel: str, data_scope_name: str, tags: Dict[str, str]) -> None:
93647
+ self._asset_rid = asset_rid
93648
+ self._data_scope_name = data_scope_name
93649
+ self._channel = channel
93650
+ self._tags = tags
93651
+
93652
+ @builtins.property
93653
+ def asset_rid(self) -> str:
93654
+ return self._asset_rid
93655
+
93656
+ @builtins.property
93657
+ def data_scope_name(self) -> str:
93658
+ return self._data_scope_name
93659
+
93660
+ @builtins.property
93661
+ def channel(self) -> str:
93662
+ return self._channel
93663
+
93664
+ @builtins.property
93665
+ def tags(self) -> Dict[str, str]:
93666
+ return self._tags
93667
+
93668
+
93669
+ scout_video_api_VideoAssetChannel.__name__ = "VideoAssetChannel"
93670
+ scout_video_api_VideoAssetChannel.__qualname__ = "VideoAssetChannel"
93671
+ scout_video_api_VideoAssetChannel.__module__ = "nominal_api.scout_video_api"
93672
+
93673
+
93674
+ class scout_video_api_VideoChannelSeries(ConjureUnionType):
93675
+ """Union type for referencing a video channel. Allows querying video data via
93676
+ datasource/channel, asset data scopes, or run data scopes.
93677
+ """
93678
+ _data_source: Optional["scout_video_api_VideoDataSourceChannel"] = None
93679
+ _asset: Optional["scout_video_api_VideoAssetChannel"] = None
93680
+
93681
+ @builtins.classmethod
93682
+ def _options(cls) -> Dict[str, ConjureFieldDefinition]:
93683
+ return {
93684
+ 'data_source': ConjureFieldDefinition('dataSource', scout_video_api_VideoDataSourceChannel),
93685
+ 'asset': ConjureFieldDefinition('asset', scout_video_api_VideoAssetChannel)
93686
+ }
93687
+
93688
+ def __init__(
93689
+ self,
93690
+ data_source: Optional["scout_video_api_VideoDataSourceChannel"] = None,
93691
+ asset: Optional["scout_video_api_VideoAssetChannel"] = None,
93692
+ type_of_union: Optional[str] = None
93693
+ ) -> None:
93694
+ if type_of_union is None:
93695
+ if (data_source is not None) + (asset is not None) != 1:
93696
+ raise ValueError('a union must contain a single member')
93697
+
93698
+ if data_source is not None:
93699
+ self._data_source = data_source
93700
+ self._type = 'dataSource'
93701
+ if asset is not None:
93702
+ self._asset = asset
93703
+ self._type = 'asset'
93704
+
93705
+ elif type_of_union == 'dataSource':
93706
+ if data_source is None:
93707
+ raise ValueError('a union value must not be None')
93708
+ self._data_source = data_source
93709
+ self._type = 'dataSource'
93710
+ elif type_of_union == 'asset':
93711
+ if asset is None:
93712
+ raise ValueError('a union value must not be None')
93713
+ self._asset = asset
93714
+ self._type = 'asset'
93715
+
93716
+ @builtins.property
93717
+ def data_source(self) -> Optional["scout_video_api_VideoDataSourceChannel"]:
93718
+ return self._data_source
93719
+
93720
+ @builtins.property
93721
+ def asset(self) -> Optional["scout_video_api_VideoAssetChannel"]:
93722
+ return self._asset
93723
+
93724
+ def accept(self, visitor) -> Any:
93725
+ if not isinstance(visitor, scout_video_api_VideoChannelSeriesVisitor):
93726
+ raise ValueError('{} is not an instance of scout_video_api_VideoChannelSeriesVisitor'.format(visitor.__class__.__name__))
93727
+ if self._type == 'dataSource' and self.data_source is not None:
93728
+ return visitor._data_source(self.data_source)
93729
+ if self._type == 'asset' and self.asset is not None:
93730
+ return visitor._asset(self.asset)
93731
+
93732
+
93733
+ scout_video_api_VideoChannelSeries.__name__ = "VideoChannelSeries"
93734
+ scout_video_api_VideoChannelSeries.__qualname__ = "VideoChannelSeries"
93735
+ scout_video_api_VideoChannelSeries.__module__ = "nominal_api.scout_video_api"
93736
+
93737
+
93738
+ class scout_video_api_VideoChannelSeriesVisitor:
93739
+
93740
+ @abstractmethod
93741
+ def _data_source(self, data_source: "scout_video_api_VideoDataSourceChannel") -> Any:
93742
+ pass
93743
+
93744
+ @abstractmethod
93745
+ def _asset(self, asset: "scout_video_api_VideoAssetChannel") -> Any:
93746
+ pass
93747
+
93748
+
93749
+ scout_video_api_VideoChannelSeriesVisitor.__name__ = "VideoChannelSeriesVisitor"
93750
+ scout_video_api_VideoChannelSeriesVisitor.__qualname__ = "VideoChannelSeriesVisitor"
93751
+ scout_video_api_VideoChannelSeriesVisitor.__module__ = "nominal_api.scout_video_api"
93752
+
93753
+
93754
+ class scout_video_api_VideoDataSourceChannel(ConjureBeanType):
93755
+ """Reference a video channel directly from a datasource/dataset
93756
+ """
93757
+
93758
+ @builtins.classmethod
93759
+ def _fields(cls) -> Dict[str, ConjureFieldDefinition]:
93760
+ return {
93761
+ 'data_source_rid': ConjureFieldDefinition('dataSourceRid', str),
93762
+ 'channel': ConjureFieldDefinition('channel', str),
93763
+ 'tags': ConjureFieldDefinition('tags', Dict[api_TagName, api_TagValue])
93764
+ }
93765
+
93766
+ __slots__: List[str] = ['_data_source_rid', '_channel', '_tags']
93767
+
93768
+ def __init__(self, channel: str, data_source_rid: str, tags: Dict[str, str]) -> None:
93769
+ self._data_source_rid = data_source_rid
93770
+ self._channel = channel
93771
+ self._tags = tags
93772
+
93773
+ @builtins.property
93774
+ def data_source_rid(self) -> str:
93775
+ return self._data_source_rid
93776
+
93777
+ @builtins.property
93778
+ def channel(self) -> str:
93779
+ return self._channel
93780
+
93781
+ @builtins.property
93782
+ def tags(self) -> Dict[str, str]:
93783
+ return self._tags
93784
+
93785
+
93786
+ scout_video_api_VideoDataSourceChannel.__name__ = "VideoDataSourceChannel"
93787
+ scout_video_api_VideoDataSourceChannel.__qualname__ = "VideoDataSourceChannel"
93788
+ scout_video_api_VideoDataSourceChannel.__module__ = "nominal_api.scout_video_api"
93789
+
93790
+
92950
93791
  class scout_video_api_VideoFile(ConjureBeanType):
92951
93792
  """Representation of a single user-provided video file.
92952
93793
  """
@@ -97280,6 +98121,7 @@ message Points {
97280
98121
  IntegerPoints integer_points = 3;
97281
98122
  ArrayPoints array_points = 4;
97282
98123
  StructPoints struct_points = 5;
98124
+ Uint64Points uint64_points = 6;
97283
98125
  }
97284
98126
  }
97285
98127
 
@@ -97295,6 +98137,10 @@ message IntegerPoints {
97295
98137
  repeated IntegerPoint points = 1;
97296
98138
  }
97297
98139
 
98140
+ message Uint64Points {
98141
+ repeated Uint64Point points = 1;
98142
+ }
98143
+
97298
98144
  message ArrayPoints {
97299
98145
  oneof array_type {
97300
98146
  DoubleArrayPoints double_array_points = 1;
@@ -97329,6 +98175,11 @@ message IntegerPoint {
97329
98175
  int64 value = 2;
97330
98176
  }
97331
98177
 
98178
+ message Uint64Point {
98179
+ google.protobuf.Timestamp timestamp = 1;
98180
+ uint64 value = 2;
98181
+ }
98182
+
97332
98183
  message DoubleArrayPoint {
97333
98184
  google.protobuf.Timestamp timestamp = 1;
97334
98185
  repeated double value = 2;
@@ -97431,6 +98282,7 @@ Logs specifically are supported externally via a separate endpoint.
97431
98282
  _double: Optional[List["storage_writer_api_DoublePoint"]] = None
97432
98283
  _log: Optional[List["storage_writer_api_LogPoint"]] = None
97433
98284
  _int_: Optional[List["storage_writer_api_IntPoint"]] = None
98285
+ _uint64: Optional[List["storage_writer_api_Uint64Point"]] = None
97434
98286
  _array: Optional["storage_writer_api_ArrayPoints"] = None
97435
98287
  _struct: Optional[List["storage_writer_api_StructPoint"]] = None
97436
98288
 
@@ -97441,6 +98293,7 @@ Logs specifically are supported externally via a separate endpoint.
97441
98293
  'double': ConjureFieldDefinition('double', List[storage_writer_api_DoublePoint]),
97442
98294
  'log': ConjureFieldDefinition('log', List[storage_writer_api_LogPoint]),
97443
98295
  'int_': ConjureFieldDefinition('int', List[storage_writer_api_IntPoint]),
98296
+ 'uint64': ConjureFieldDefinition('uint64', List[storage_writer_api_Uint64Point]),
97444
98297
  'array': ConjureFieldDefinition('array', storage_writer_api_ArrayPoints),
97445
98298
  'struct': ConjureFieldDefinition('struct', List[storage_writer_api_StructPoint])
97446
98299
  }
@@ -97451,12 +98304,13 @@ Logs specifically are supported externally via a separate endpoint.
97451
98304
  double: Optional[List["storage_writer_api_DoublePoint"]] = None,
97452
98305
  log: Optional[List["storage_writer_api_LogPoint"]] = None,
97453
98306
  int_: Optional[List["storage_writer_api_IntPoint"]] = None,
98307
+ uint64: Optional[List["storage_writer_api_Uint64Point"]] = None,
97454
98308
  array: Optional["storage_writer_api_ArrayPoints"] = None,
97455
98309
  struct: Optional[List["storage_writer_api_StructPoint"]] = None,
97456
98310
  type_of_union: Optional[str] = None
97457
98311
  ) -> None:
97458
98312
  if type_of_union is None:
97459
- if (string is not None) + (double is not None) + (log is not None) + (int_ is not None) + (array is not None) + (struct is not None) != 1:
98313
+ if (string is not None) + (double is not None) + (log is not None) + (int_ is not None) + (uint64 is not None) + (array is not None) + (struct is not None) != 1:
97460
98314
  raise ValueError('a union must contain a single member')
97461
98315
 
97462
98316
  if string is not None:
@@ -97471,6 +98325,9 @@ Logs specifically are supported externally via a separate endpoint.
97471
98325
  if int_ is not None:
97472
98326
  self._int_ = int_
97473
98327
  self._type = 'int'
98328
+ if uint64 is not None:
98329
+ self._uint64 = uint64
98330
+ self._type = 'uint64'
97474
98331
  if array is not None:
97475
98332
  self._array = array
97476
98333
  self._type = 'array'
@@ -97498,6 +98355,11 @@ Logs specifically are supported externally via a separate endpoint.
97498
98355
  raise ValueError('a union value must not be None')
97499
98356
  self._int_ = int_
97500
98357
  self._type = 'int'
98358
+ elif type_of_union == 'uint64':
98359
+ if uint64 is None:
98360
+ raise ValueError('a union value must not be None')
98361
+ self._uint64 = uint64
98362
+ self._type = 'uint64'
97501
98363
  elif type_of_union == 'array':
97502
98364
  if array is None:
97503
98365
  raise ValueError('a union value must not be None')
@@ -97525,6 +98387,10 @@ Logs specifically are supported externally via a separate endpoint.
97525
98387
  def int_(self) -> Optional[List["storage_writer_api_IntPoint"]]:
97526
98388
  return self._int_
97527
98389
 
98390
+ @builtins.property
98391
+ def uint64(self) -> Optional[List["storage_writer_api_Uint64Point"]]:
98392
+ return self._uint64
98393
+
97528
98394
  @builtins.property
97529
98395
  def array(self) -> Optional["storage_writer_api_ArrayPoints"]:
97530
98396
  return self._array
@@ -97544,6 +98410,8 @@ Logs specifically are supported externally via a separate endpoint.
97544
98410
  return visitor._log(self.log)
97545
98411
  if self._type == 'int' and self.int_ is not None:
97546
98412
  return visitor._int(self.int_)
98413
+ if self._type == 'uint64' and self.uint64 is not None:
98414
+ return visitor._uint64(self.uint64)
97547
98415
  if self._type == 'array' and self.array is not None:
97548
98416
  return visitor._array(self.array)
97549
98417
  if self._type == 'struct' and self.struct is not None:
@@ -97573,6 +98441,10 @@ class storage_writer_api_PointsVisitor:
97573
98441
  def _int(self, int_: List["storage_writer_api_IntPoint"]) -> Any:
97574
98442
  pass
97575
98443
 
98444
+ @abstractmethod
98445
+ def _uint64(self, uint64: List["storage_writer_api_Uint64Point"]) -> Any:
98446
+ pass
98447
+
97576
98448
  @abstractmethod
97577
98449
  def _array(self, array: "storage_writer_api_ArrayPoints") -> Any:
97578
98450
  pass
@@ -97929,6 +98801,35 @@ storage_writer_api_TelegrafMetric.__qualname__ = "TelegrafMetric"
97929
98801
  storage_writer_api_TelegrafMetric.__module__ = "nominal_api.storage_writer_api"
97930
98802
 
97931
98803
 
98804
+ class storage_writer_api_Uint64Point(ConjureBeanType):
98805
+
98806
+ @builtins.classmethod
98807
+ def _fields(cls) -> Dict[str, ConjureFieldDefinition]:
98808
+ return {
98809
+ 'timestamp': ConjureFieldDefinition('timestamp', api_Timestamp),
98810
+ 'value': ConjureFieldDefinition('value', int)
98811
+ }
98812
+
98813
+ __slots__: List[str] = ['_timestamp', '_value']
98814
+
98815
+ def __init__(self, timestamp: "api_Timestamp", value: int) -> None:
98816
+ self._timestamp = timestamp
98817
+ self._value = value
98818
+
98819
+ @builtins.property
98820
+ def timestamp(self) -> "api_Timestamp":
98821
+ return self._timestamp
98822
+
98823
+ @builtins.property
98824
+ def value(self) -> int:
98825
+ return self._value
98826
+
98827
+
98828
+ storage_writer_api_Uint64Point.__name__ = "Uint64Point"
98829
+ storage_writer_api_Uint64Point.__qualname__ = "Uint64Point"
98830
+ storage_writer_api_Uint64Point.__module__ = "nominal_api.storage_writer_api"
98831
+
98832
+
97932
98833
  class storage_writer_api_WriteBatchesRequest(ConjureBeanType):
97933
98834
 
97934
98835
  @builtins.classmethod