nominal-api 0.953.1__tar.gz → 0.955.0__tar.gz

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.
Files changed (89) hide show
  1. {nominal_api-0.953.1 → nominal_api-0.955.0}/PKG-INFO +1 -1
  2. {nominal_api-0.953.1 → nominal_api-0.955.0}/nominal_api/__init__.py +1 -1
  3. {nominal_api-0.953.1 → nominal_api-0.955.0}/nominal_api/_impl.py +380 -5
  4. {nominal_api-0.953.1 → nominal_api-0.955.0}/nominal_api/authentication_api/__init__.py +6 -0
  5. {nominal_api-0.953.1 → nominal_api-0.955.0}/nominal_api/scout_chartdefinition_api/__init__.py +2 -0
  6. {nominal_api-0.953.1 → nominal_api-0.955.0}/nominal_api/scout_video_api/__init__.py +4 -0
  7. {nominal_api-0.953.1 → nominal_api-0.955.0}/nominal_api/security_api_workspace/__init__.py +6 -0
  8. {nominal_api-0.953.1 → nominal_api-0.955.0}/nominal_api.egg-info/PKG-INFO +1 -1
  9. {nominal_api-0.953.1 → nominal_api-0.955.0}/setup.py +1 -1
  10. {nominal_api-0.953.1 → nominal_api-0.955.0}/nominal_api/api/__init__.py +0 -0
  11. {nominal_api-0.953.1 → nominal_api-0.955.0}/nominal_api/api_ids/__init__.py +0 -0
  12. {nominal_api-0.953.1 → nominal_api-0.955.0}/nominal_api/api_rids/__init__.py +0 -0
  13. {nominal_api-0.953.1 → nominal_api-0.955.0}/nominal_api/attachments_api/__init__.py +0 -0
  14. {nominal_api-0.953.1 → nominal_api-0.955.0}/nominal_api/authorization/__init__.py +0 -0
  15. {nominal_api-0.953.1 → nominal_api-0.955.0}/nominal_api/comments_api/__init__.py +0 -0
  16. {nominal_api-0.953.1 → nominal_api-0.955.0}/nominal_api/connect_download/__init__.py +0 -0
  17. {nominal_api-0.953.1 → nominal_api-0.955.0}/nominal_api/datasource/__init__.py +0 -0
  18. {nominal_api-0.953.1 → nominal_api-0.955.0}/nominal_api/datasource_api/__init__.py +0 -0
  19. {nominal_api-0.953.1 → nominal_api-0.955.0}/nominal_api/datasource_logset/__init__.py +0 -0
  20. {nominal_api-0.953.1 → nominal_api-0.955.0}/nominal_api/datasource_logset_api/__init__.py +0 -0
  21. {nominal_api-0.953.1 → nominal_api-0.955.0}/nominal_api/datasource_pagination_api/__init__.py +0 -0
  22. {nominal_api-0.953.1 → nominal_api-0.955.0}/nominal_api/event/__init__.py +0 -0
  23. {nominal_api-0.953.1 → nominal_api-0.955.0}/nominal_api/ingest_api/__init__.py +0 -0
  24. {nominal_api-0.953.1 → nominal_api-0.955.0}/nominal_api/ingest_manifest/__init__.py +0 -0
  25. {nominal_api-0.953.1 → nominal_api-0.955.0}/nominal_api/ingest_workflow_api/__init__.py +0 -0
  26. {nominal_api-0.953.1 → nominal_api-0.955.0}/nominal_api/module/__init__.py +0 -0
  27. {nominal_api-0.953.1 → nominal_api-0.955.0}/nominal_api/module_internal/__init__.py +0 -0
  28. {nominal_api-0.953.1 → nominal_api-0.955.0}/nominal_api/modules_api/__init__.py +0 -0
  29. {nominal_api-0.953.1 → nominal_api-0.955.0}/nominal_api/persistent_compute_api/__init__.py +0 -0
  30. {nominal_api-0.953.1 → nominal_api-0.955.0}/nominal_api/py.typed +0 -0
  31. {nominal_api-0.953.1 → nominal_api-0.955.0}/nominal_api/scout/__init__.py +0 -0
  32. {nominal_api-0.953.1 → nominal_api-0.955.0}/nominal_api/scout_api/__init__.py +0 -0
  33. {nominal_api-0.953.1 → nominal_api-0.955.0}/nominal_api/scout_asset_api/__init__.py +0 -0
  34. {nominal_api-0.953.1 → nominal_api-0.955.0}/nominal_api/scout_assets/__init__.py +0 -0
  35. {nominal_api-0.953.1 → nominal_api-0.955.0}/nominal_api/scout_catalog/__init__.py +0 -0
  36. {nominal_api-0.953.1 → nominal_api-0.955.0}/nominal_api/scout_channelvariables_api/__init__.py +0 -0
  37. {nominal_api-0.953.1 → nominal_api-0.955.0}/nominal_api/scout_chart_api/__init__.py +0 -0
  38. {nominal_api-0.953.1 → nominal_api-0.955.0}/nominal_api/scout_checklistexecution_api/__init__.py +0 -0
  39. {nominal_api-0.953.1 → nominal_api-0.955.0}/nominal_api/scout_checks_api/__init__.py +0 -0
  40. {nominal_api-0.953.1 → nominal_api-0.955.0}/nominal_api/scout_comparisonnotebook_api/__init__.py +0 -0
  41. {nominal_api-0.953.1 → nominal_api-0.955.0}/nominal_api/scout_comparisonrun_api/__init__.py +0 -0
  42. {nominal_api-0.953.1 → nominal_api-0.955.0}/nominal_api/scout_compute_api/__init__.py +0 -0
  43. {nominal_api-0.953.1 → nominal_api-0.955.0}/nominal_api/scout_compute_api_deprecated/__init__.py +0 -0
  44. {nominal_api-0.953.1 → nominal_api-0.955.0}/nominal_api/scout_compute_resolved_api/__init__.py +0 -0
  45. {nominal_api-0.953.1 → nominal_api-0.955.0}/nominal_api/scout_dataexport_api/__init__.py +0 -0
  46. {nominal_api-0.953.1 → nominal_api-0.955.0}/nominal_api/scout_datareview_api/__init__.py +0 -0
  47. {nominal_api-0.953.1 → nominal_api-0.955.0}/nominal_api/scout_datasource/__init__.py +0 -0
  48. {nominal_api-0.953.1 → nominal_api-0.955.0}/nominal_api/scout_datasource_connection/__init__.py +0 -0
  49. {nominal_api-0.953.1 → nominal_api-0.955.0}/nominal_api/scout_datasource_connection_api/__init__.py +0 -0
  50. {nominal_api-0.953.1 → nominal_api-0.955.0}/nominal_api/scout_datasource_connection_api_influx/__init__.py +0 -0
  51. {nominal_api-0.953.1 → nominal_api-0.955.0}/nominal_api/scout_favorites/__init__.py +0 -0
  52. {nominal_api-0.953.1 → nominal_api-0.955.0}/nominal_api/scout_favorites_api/__init__.py +0 -0
  53. {nominal_api-0.953.1 → nominal_api-0.955.0}/nominal_api/scout_integrations_api/__init__.py +0 -0
  54. {nominal_api-0.953.1 → nominal_api-0.955.0}/nominal_api/scout_internal_search_api/__init__.py +0 -0
  55. {nominal_api-0.953.1 → nominal_api-0.955.0}/nominal_api/scout_jobs_api/__init__.py +0 -0
  56. {nominal_api-0.953.1 → nominal_api-0.955.0}/nominal_api/scout_layout_api/__init__.py +0 -0
  57. {nominal_api-0.953.1 → nominal_api-0.955.0}/nominal_api/scout_metadata/__init__.py +0 -0
  58. {nominal_api-0.953.1 → nominal_api-0.955.0}/nominal_api/scout_notebook_api/__init__.py +0 -0
  59. {nominal_api-0.953.1 → nominal_api-0.955.0}/nominal_api/scout_plotting/__init__.py +0 -0
  60. {nominal_api-0.953.1 → nominal_api-0.955.0}/nominal_api/scout_rids_api/__init__.py +0 -0
  61. {nominal_api-0.953.1 → nominal_api-0.955.0}/nominal_api/scout_run_api/__init__.py +0 -0
  62. {nominal_api-0.953.1 → nominal_api-0.955.0}/nominal_api/scout_savedviews/__init__.py +0 -0
  63. {nominal_api-0.953.1 → nominal_api-0.955.0}/nominal_api/scout_savedviews_api/__init__.py +0 -0
  64. {nominal_api-0.953.1 → nominal_api-0.955.0}/nominal_api/scout_template_api/__init__.py +0 -0
  65. {nominal_api-0.953.1 → nominal_api-0.955.0}/nominal_api/scout_units_api/__init__.py +0 -0
  66. {nominal_api-0.953.1 → nominal_api-0.955.0}/nominal_api/scout_versioning_api/__init__.py +0 -0
  67. {nominal_api-0.953.1 → nominal_api-0.955.0}/nominal_api/scout_video/__init__.py +0 -0
  68. {nominal_api-0.953.1 → nominal_api-0.955.0}/nominal_api/scout_workbookcommon_api/__init__.py +0 -0
  69. {nominal_api-0.953.1 → nominal_api-0.955.0}/nominal_api/secrets_api/__init__.py +0 -0
  70. {nominal_api-0.953.1 → nominal_api-0.955.0}/nominal_api/storage_datasource_api/__init__.py +0 -0
  71. {nominal_api-0.953.1 → nominal_api-0.955.0}/nominal_api/storage_deletion_api/__init__.py +0 -0
  72. {nominal_api-0.953.1 → nominal_api-0.955.0}/nominal_api/storage_series_api/__init__.py +0 -0
  73. {nominal_api-0.953.1 → nominal_api-0.955.0}/nominal_api/storage_writer_api/__init__.py +0 -0
  74. {nominal_api-0.953.1 → nominal_api-0.955.0}/nominal_api/themes_api/__init__.py +0 -0
  75. {nominal_api-0.953.1 → nominal_api-0.955.0}/nominal_api/timeseries_channelmetadata/__init__.py +0 -0
  76. {nominal_api-0.953.1 → nominal_api-0.955.0}/nominal_api/timeseries_channelmetadata_api/__init__.py +0 -0
  77. {nominal_api-0.953.1 → nominal_api-0.955.0}/nominal_api/timeseries_logicalseries/__init__.py +0 -0
  78. {nominal_api-0.953.1 → nominal_api-0.955.0}/nominal_api/timeseries_logicalseries_api/__init__.py +0 -0
  79. {nominal_api-0.953.1 → nominal_api-0.955.0}/nominal_api/timeseries_metadata/__init__.py +0 -0
  80. {nominal_api-0.953.1 → nominal_api-0.955.0}/nominal_api/timeseries_metadata_api/__init__.py +0 -0
  81. {nominal_api-0.953.1 → nominal_api-0.955.0}/nominal_api/timeseries_seriescache/__init__.py +0 -0
  82. {nominal_api-0.953.1 → nominal_api-0.955.0}/nominal_api/timeseries_seriescache_api/__init__.py +0 -0
  83. {nominal_api-0.953.1 → nominal_api-0.955.0}/nominal_api/upload_api/__init__.py +0 -0
  84. {nominal_api-0.953.1 → nominal_api-0.955.0}/nominal_api/usercreation_api/__init__.py +0 -0
  85. {nominal_api-0.953.1 → nominal_api-0.955.0}/nominal_api.egg-info/SOURCES.txt +0 -0
  86. {nominal_api-0.953.1 → nominal_api-0.955.0}/nominal_api.egg-info/dependency_links.txt +0 -0
  87. {nominal_api-0.953.1 → nominal_api-0.955.0}/nominal_api.egg-info/requires.txt +0 -0
  88. {nominal_api-0.953.1 → nominal_api-0.955.0}/nominal_api.egg-info/top_level.txt +0 -0
  89. {nominal_api-0.953.1 → nominal_api-0.955.0}/setup.cfg +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: nominal-api
3
- Version: 0.953.1
3
+ Version: 0.955.0
4
4
  Requires-Python: >=3.8
5
5
  Requires-Dist: requests
6
6
  Requires-Dist: conjure-python-client<4,>=2.8.0
@@ -82,5 +82,5 @@ __all__ = [
82
82
 
83
83
  __conjure_generator_version__ = "4.17.0"
84
84
 
85
- __version__ = "0.953.1"
85
+ __version__ = "0.955.0"
86
86
 
@@ -1688,6 +1688,40 @@ Only available if MediaMTX integration is enabled.
1688
1688
  _decoder = ConjureDecoder()
1689
1689
  return _decoder.decode(_response.json(), authentication_api_Jwks, self._return_none_for_unknown_union_types)
1690
1690
 
1691
+ def generate_media_mtx_token(self, auth_header: str, request: "authentication_api_GenerateMediaMtxTokenRequest") -> "authentication_api_GenerateMediaMtxTokenResponse":
1692
+ """Generates a JWT token for MediaMTX authentication with a 2-hour expiration.
1693
+ The token is signed with the MediaMTX private key and contains the specified permissions.
1694
+ Requires authentication with Nominal. This endpoint is intended for internal use only.
1695
+ """
1696
+ _conjure_encoder = ConjureEncoder()
1697
+
1698
+ _headers: Dict[str, Any] = {
1699
+ 'Accept': 'application/json',
1700
+ 'Content-Type': 'application/json',
1701
+ 'Authorization': auth_header,
1702
+ }
1703
+
1704
+ _params: Dict[str, Any] = {
1705
+ }
1706
+
1707
+ _path_params: Dict[str, str] = {
1708
+ }
1709
+
1710
+ _json: Any = _conjure_encoder.default(request)
1711
+
1712
+ _path = '/authentication/v2/mediamtx/token'
1713
+ _path = _path.format(**_path_params)
1714
+
1715
+ _response: Response = self._request(
1716
+ 'POST',
1717
+ self._uri + _path,
1718
+ params=_params,
1719
+ headers=_headers,
1720
+ json=_json)
1721
+
1722
+ _decoder = ConjureDecoder()
1723
+ return _decoder.decode(_response.json(), authentication_api_GenerateMediaMtxTokenResponse, self._return_none_for_unknown_union_types)
1724
+
1691
1725
 
1692
1726
  authentication_api_AuthenticationServiceV2.__name__ = "AuthenticationServiceV2"
1693
1727
  authentication_api_AuthenticationServiceV2.__qualname__ = "AuthenticationServiceV2"
@@ -1714,6 +1748,60 @@ authentication_api_DefaultTimeRangeTypeSetting.__qualname__ = "DefaultTimeRangeT
1714
1748
  authentication_api_DefaultTimeRangeTypeSetting.__module__ = "nominal_api.authentication_api"
1715
1749
 
1716
1750
 
1751
+ class authentication_api_GenerateMediaMtxTokenRequest(ConjureBeanType):
1752
+ """Request to generate a MediaMTX authentication token
1753
+ """
1754
+
1755
+ @builtins.classmethod
1756
+ def _fields(cls) -> Dict[str, ConjureFieldDefinition]:
1757
+ return {
1758
+ 'permissions': ConjureFieldDefinition('permissions', List[authentication_api_MediaMtxPermission])
1759
+ }
1760
+
1761
+ __slots__: List[str] = ['_permissions']
1762
+
1763
+ def __init__(self, permissions: List["authentication_api_MediaMtxPermission"]) -> None:
1764
+ self._permissions = permissions
1765
+
1766
+ @builtins.property
1767
+ def permissions(self) -> List["authentication_api_MediaMtxPermission"]:
1768
+ """List of permissions to include in the token
1769
+ """
1770
+ return self._permissions
1771
+
1772
+
1773
+ authentication_api_GenerateMediaMtxTokenRequest.__name__ = "GenerateMediaMtxTokenRequest"
1774
+ authentication_api_GenerateMediaMtxTokenRequest.__qualname__ = "GenerateMediaMtxTokenRequest"
1775
+ authentication_api_GenerateMediaMtxTokenRequest.__module__ = "nominal_api.authentication_api"
1776
+
1777
+
1778
+ class authentication_api_GenerateMediaMtxTokenResponse(ConjureBeanType):
1779
+ """Response containing the generated MediaMTX token
1780
+ """
1781
+
1782
+ @builtins.classmethod
1783
+ def _fields(cls) -> Dict[str, ConjureFieldDefinition]:
1784
+ return {
1785
+ 'token': ConjureFieldDefinition('token', str)
1786
+ }
1787
+
1788
+ __slots__: List[str] = ['_token']
1789
+
1790
+ def __init__(self, token: str) -> None:
1791
+ self._token = token
1792
+
1793
+ @builtins.property
1794
+ def token(self) -> str:
1795
+ """The signed JWT token for MediaMTX authentication
1796
+ """
1797
+ return self._token
1798
+
1799
+
1800
+ authentication_api_GenerateMediaMtxTokenResponse.__name__ = "GenerateMediaMtxTokenResponse"
1801
+ authentication_api_GenerateMediaMtxTokenResponse.__qualname__ = "GenerateMediaMtxTokenResponse"
1802
+ authentication_api_GenerateMediaMtxTokenResponse.__module__ = "nominal_api.authentication_api"
1803
+
1804
+
1717
1805
  class authentication_api_Jwk(ConjureBeanType):
1718
1806
  """A JSON Web Key (JWK) representation for RSA public keys
1719
1807
  """
@@ -1794,6 +1882,41 @@ authentication_api_Jwks.__qualname__ = "Jwks"
1794
1882
  authentication_api_Jwks.__module__ = "nominal_api.authentication_api"
1795
1883
 
1796
1884
 
1885
+ class authentication_api_MediaMtxPermission(ConjureBeanType):
1886
+ """A permission definition for MediaMTX authentication
1887
+ """
1888
+
1889
+ @builtins.classmethod
1890
+ def _fields(cls) -> Dict[str, ConjureFieldDefinition]:
1891
+ return {
1892
+ 'action': ConjureFieldDefinition('action', str),
1893
+ 'path': ConjureFieldDefinition('path', str)
1894
+ }
1895
+
1896
+ __slots__: List[str] = ['_action', '_path']
1897
+
1898
+ def __init__(self, action: str, path: str) -> None:
1899
+ self._action = action
1900
+ self._path = path
1901
+
1902
+ @builtins.property
1903
+ def action(self) -> str:
1904
+ """The action permitted. Allowed values are publish, read, playback, api, metrics, pprof.
1905
+ """
1906
+ return self._action
1907
+
1908
+ @builtins.property
1909
+ def path(self) -> str:
1910
+ """The stream path this permission applies to (e.g., "stream/test")
1911
+ """
1912
+ return self._path
1913
+
1914
+
1915
+ authentication_api_MediaMtxPermission.__name__ = "MediaMtxPermission"
1916
+ authentication_api_MediaMtxPermission.__qualname__ = "MediaMtxPermission"
1917
+ authentication_api_MediaMtxPermission.__module__ = "nominal_api.authentication_api"
1918
+
1919
+
1797
1920
  class authentication_api_OrgSettings(ConjureBeanType):
1798
1921
 
1799
1922
  @builtins.classmethod
@@ -29462,41 +29585,58 @@ scout_chartdefinition_api_Geo3dOrientationPrincipalAxes.__module__ = "nominal_ap
29462
29585
 
29463
29586
  class scout_chartdefinition_api_Geo3dPosition(ConjureUnionType):
29464
29587
  _wgs84: Optional["scout_chartdefinition_api_Geo3dPositionWgs84"] = None
29588
+ _ecef: Optional["scout_chartdefinition_api_Geo3dPositionEcef"] = None
29465
29589
 
29466
29590
  @builtins.classmethod
29467
29591
  def _options(cls) -> Dict[str, ConjureFieldDefinition]:
29468
29592
  return {
29469
- 'wgs84': ConjureFieldDefinition('wgs84', scout_chartdefinition_api_Geo3dPositionWgs84)
29593
+ 'wgs84': ConjureFieldDefinition('wgs84', scout_chartdefinition_api_Geo3dPositionWgs84),
29594
+ 'ecef': ConjureFieldDefinition('ecef', scout_chartdefinition_api_Geo3dPositionEcef)
29470
29595
  }
29471
29596
 
29472
29597
  def __init__(
29473
29598
  self,
29474
29599
  wgs84: Optional["scout_chartdefinition_api_Geo3dPositionWgs84"] = None,
29600
+ ecef: Optional["scout_chartdefinition_api_Geo3dPositionEcef"] = None,
29475
29601
  type_of_union: Optional[str] = None
29476
29602
  ) -> None:
29477
29603
  if type_of_union is None:
29478
- if (wgs84 is not None) != 1:
29604
+ if (wgs84 is not None) + (ecef is not None) != 1:
29479
29605
  raise ValueError('a union must contain a single member')
29480
29606
 
29481
29607
  if wgs84 is not None:
29482
29608
  self._wgs84 = wgs84
29483
29609
  self._type = 'wgs84'
29610
+ if ecef is not None:
29611
+ self._ecef = ecef
29612
+ self._type = 'ecef'
29484
29613
 
29485
29614
  elif type_of_union == 'wgs84':
29486
29615
  if wgs84 is None:
29487
29616
  raise ValueError('a union value must not be None')
29488
29617
  self._wgs84 = wgs84
29489
29618
  self._type = 'wgs84'
29619
+ elif type_of_union == 'ecef':
29620
+ if ecef is None:
29621
+ raise ValueError('a union value must not be None')
29622
+ self._ecef = ecef
29623
+ self._type = 'ecef'
29490
29624
 
29491
29625
  @builtins.property
29492
29626
  def wgs84(self) -> Optional["scout_chartdefinition_api_Geo3dPositionWgs84"]:
29493
29627
  return self._wgs84
29494
29628
 
29629
+ @builtins.property
29630
+ def ecef(self) -> Optional["scout_chartdefinition_api_Geo3dPositionEcef"]:
29631
+ return self._ecef
29632
+
29495
29633
  def accept(self, visitor) -> Any:
29496
29634
  if not isinstance(visitor, scout_chartdefinition_api_Geo3dPositionVisitor):
29497
29635
  raise ValueError('{} is not an instance of scout_chartdefinition_api_Geo3dPositionVisitor'.format(visitor.__class__.__name__))
29498
29636
  if self._type == 'wgs84' and self.wgs84 is not None:
29499
29637
  return visitor._wgs84(self.wgs84)
29638
+ if self._type == 'ecef' and self.ecef is not None:
29639
+ return visitor._ecef(self.ecef)
29500
29640
 
29501
29641
 
29502
29642
  scout_chartdefinition_api_Geo3dPosition.__name__ = "Geo3dPosition"
@@ -29510,12 +29650,51 @@ class scout_chartdefinition_api_Geo3dPositionVisitor:
29510
29650
  def _wgs84(self, wgs84: "scout_chartdefinition_api_Geo3dPositionWgs84") -> Any:
29511
29651
  pass
29512
29652
 
29653
+ @abstractmethod
29654
+ def _ecef(self, ecef: "scout_chartdefinition_api_Geo3dPositionEcef") -> Any:
29655
+ pass
29656
+
29513
29657
 
29514
29658
  scout_chartdefinition_api_Geo3dPositionVisitor.__name__ = "Geo3dPositionVisitor"
29515
29659
  scout_chartdefinition_api_Geo3dPositionVisitor.__qualname__ = "Geo3dPositionVisitor"
29516
29660
  scout_chartdefinition_api_Geo3dPositionVisitor.__module__ = "nominal_api.scout_chartdefinition_api"
29517
29661
 
29518
29662
 
29663
+ class scout_chartdefinition_api_Geo3dPositionEcef(ConjureBeanType):
29664
+
29665
+ @builtins.classmethod
29666
+ def _fields(cls) -> Dict[str, ConjureFieldDefinition]:
29667
+ return {
29668
+ 'ecef_x_variable_name': ConjureFieldDefinition('ecefXVariableName', scout_channelvariables_api_ChannelVariableName),
29669
+ 'ecef_y_variable_name': ConjureFieldDefinition('ecefYVariableName', scout_channelvariables_api_ChannelVariableName),
29670
+ 'ecef_z_variable_name': ConjureFieldDefinition('ecefZVariableName', scout_channelvariables_api_ChannelVariableName)
29671
+ }
29672
+
29673
+ __slots__: List[str] = ['_ecef_x_variable_name', '_ecef_y_variable_name', '_ecef_z_variable_name']
29674
+
29675
+ def __init__(self, ecef_x_variable_name: str, ecef_y_variable_name: str, ecef_z_variable_name: str) -> None:
29676
+ self._ecef_x_variable_name = ecef_x_variable_name
29677
+ self._ecef_y_variable_name = ecef_y_variable_name
29678
+ self._ecef_z_variable_name = ecef_z_variable_name
29679
+
29680
+ @builtins.property
29681
+ def ecef_x_variable_name(self) -> str:
29682
+ return self._ecef_x_variable_name
29683
+
29684
+ @builtins.property
29685
+ def ecef_y_variable_name(self) -> str:
29686
+ return self._ecef_y_variable_name
29687
+
29688
+ @builtins.property
29689
+ def ecef_z_variable_name(self) -> str:
29690
+ return self._ecef_z_variable_name
29691
+
29692
+
29693
+ scout_chartdefinition_api_Geo3dPositionEcef.__name__ = "Geo3dPositionEcef"
29694
+ scout_chartdefinition_api_Geo3dPositionEcef.__qualname__ = "Geo3dPositionEcef"
29695
+ scout_chartdefinition_api_Geo3dPositionEcef.__module__ = "nominal_api.scout_chartdefinition_api"
29696
+
29697
+
29519
29698
  class scout_chartdefinition_api_Geo3dPositionWgs84(ConjureBeanType):
29520
29699
 
29521
29700
  @builtins.classmethod
@@ -86403,6 +86582,39 @@ that are inside or overlap with the bounds.
86403
86582
  _decoder = ConjureDecoder()
86404
86583
  return _decoder.decode(_response.json(), scout_video_api_GetFileSummariesResponse, self._return_none_for_unknown_union_types)
86405
86584
 
86585
+ def generate_whip_stream(self, auth_header: str, video_rid: str) -> "scout_video_api_GenerateWhipStreamResponse":
86586
+ """Generates a stream ID scoped to a video and returns a WHIP URL with a MediaMTX JWT and ICE servers.
86587
+ Enforces write permission on the video.
86588
+ """
86589
+ _conjure_encoder = ConjureEncoder()
86590
+
86591
+ _headers: Dict[str, Any] = {
86592
+ 'Accept': 'application/json',
86593
+ 'Authorization': auth_header,
86594
+ }
86595
+
86596
+ _params: Dict[str, Any] = {
86597
+ }
86598
+
86599
+ _path_params: Dict[str, str] = {
86600
+ 'videoRid': quote(str(_conjure_encoder.default(video_rid)), safe=''),
86601
+ }
86602
+
86603
+ _json: Any = None
86604
+
86605
+ _path = '/video/v1/videos/{videoRid}/streaming/whip'
86606
+ _path = _path.format(**_path_params)
86607
+
86608
+ _response: Response = self._request(
86609
+ 'POST',
86610
+ self._uri + _path,
86611
+ params=_params,
86612
+ headers=_headers,
86613
+ json=_json)
86614
+
86615
+ _decoder = ConjureDecoder()
86616
+ return _decoder.decode(_response.json(), scout_video_api_GenerateWhipStreamResponse, self._return_none_for_unknown_union_types)
86617
+
86406
86618
 
86407
86619
  scout_video_VideoService.__name__ = "VideoService"
86408
86620
  scout_video_VideoService.__qualname__ = "VideoService"
@@ -86837,6 +87049,43 @@ scout_video_api_FileSummary.__qualname__ = "FileSummary"
86837
87049
  scout_video_api_FileSummary.__module__ = "nominal_api.scout_video_api"
86838
87050
 
86839
87051
 
87052
+ class scout_video_api_GenerateWhipStreamResponse(ConjureBeanType):
87053
+ """Response with WHIP URL and ICE servers for publishing
87054
+ """
87055
+
87056
+ @builtins.classmethod
87057
+ def _fields(cls) -> Dict[str, ConjureFieldDefinition]:
87058
+ return {
87059
+ 'stream_id': ConjureFieldDefinition('streamId', str),
87060
+ 'whip_url': ConjureFieldDefinition('whipUrl', str),
87061
+ 'ice_servers': ConjureFieldDefinition('iceServers', List[scout_video_api_IceServer])
87062
+ }
87063
+
87064
+ __slots__: List[str] = ['_stream_id', '_whip_url', '_ice_servers']
87065
+
87066
+ def __init__(self, ice_servers: List["scout_video_api_IceServer"], stream_id: str, whip_url: str) -> None:
87067
+ self._stream_id = stream_id
87068
+ self._whip_url = whip_url
87069
+ self._ice_servers = ice_servers
87070
+
87071
+ @builtins.property
87072
+ def stream_id(self) -> str:
87073
+ return self._stream_id
87074
+
87075
+ @builtins.property
87076
+ def whip_url(self) -> str:
87077
+ return self._whip_url
87078
+
87079
+ @builtins.property
87080
+ def ice_servers(self) -> List["scout_video_api_IceServer"]:
87081
+ return self._ice_servers
87082
+
87083
+
87084
+ scout_video_api_GenerateWhipStreamResponse.__name__ = "GenerateWhipStreamResponse"
87085
+ scout_video_api_GenerateWhipStreamResponse.__qualname__ = "GenerateWhipStreamResponse"
87086
+ scout_video_api_GenerateWhipStreamResponse.__module__ = "nominal_api.scout_video_api"
87087
+
87088
+
86840
87089
  class scout_video_api_GetEnrichedVideoIngestStatusRequest(ConjureBeanType):
86841
87090
 
86842
87091
  @builtins.classmethod
@@ -87062,6 +87311,43 @@ scout_video_api_GetVideosResponse.__qualname__ = "GetVideosResponse"
87062
87311
  scout_video_api_GetVideosResponse.__module__ = "nominal_api.scout_video_api"
87063
87312
 
87064
87313
 
87314
+ class scout_video_api_IceServer(ConjureBeanType):
87315
+ """WebRTC ICE server configuration
87316
+ """
87317
+
87318
+ @builtins.classmethod
87319
+ def _fields(cls) -> Dict[str, ConjureFieldDefinition]:
87320
+ return {
87321
+ 'urls': ConjureFieldDefinition('urls', List[str]),
87322
+ 'username': ConjureFieldDefinition('username', OptionalTypeWrapper[str]),
87323
+ 'credential': ConjureFieldDefinition('credential', OptionalTypeWrapper[str])
87324
+ }
87325
+
87326
+ __slots__: List[str] = ['_urls', '_username', '_credential']
87327
+
87328
+ def __init__(self, urls: List[str], credential: Optional[str] = None, username: Optional[str] = None) -> None:
87329
+ self._urls = urls
87330
+ self._username = username
87331
+ self._credential = credential
87332
+
87333
+ @builtins.property
87334
+ def urls(self) -> List[str]:
87335
+ return self._urls
87336
+
87337
+ @builtins.property
87338
+ def username(self) -> Optional[str]:
87339
+ return self._username
87340
+
87341
+ @builtins.property
87342
+ def credential(self) -> Optional[str]:
87343
+ return self._credential
87344
+
87345
+
87346
+ scout_video_api_IceServer.__name__ = "IceServer"
87347
+ scout_video_api_IceServer.__qualname__ = "IceServer"
87348
+ scout_video_api_IceServer.__module__ = "nominal_api.scout_video_api"
87349
+
87350
+
87065
87351
  class scout_video_api_IngestError(ConjureBeanType):
87066
87352
 
87067
87353
  @builtins.classmethod
@@ -90224,6 +90510,89 @@ security_api_workspace_PreferredRefNameConfigurationVisitor.__qualname__ = "Pref
90224
90510
  security_api_workspace_PreferredRefNameConfigurationVisitor.__module__ = "nominal_api.security_api_workspace"
90225
90511
 
90226
90512
 
90513
+ class security_api_workspace_ProcedureSettings(ConjureUnionType):
90514
+ _v1: Optional["security_api_workspace_ProcedureSettingsV1"] = None
90515
+
90516
+ @builtins.classmethod
90517
+ def _options(cls) -> Dict[str, ConjureFieldDefinition]:
90518
+ return {
90519
+ 'v1': ConjureFieldDefinition('v1', security_api_workspace_ProcedureSettingsV1)
90520
+ }
90521
+
90522
+ def __init__(
90523
+ self,
90524
+ v1: Optional["security_api_workspace_ProcedureSettingsV1"] = None,
90525
+ type_of_union: Optional[str] = None
90526
+ ) -> None:
90527
+ if type_of_union is None:
90528
+ if (v1 is not None) != 1:
90529
+ raise ValueError('a union must contain a single member')
90530
+
90531
+ if v1 is not None:
90532
+ self._v1 = v1
90533
+ self._type = 'v1'
90534
+
90535
+ elif type_of_union == 'v1':
90536
+ if v1 is None:
90537
+ raise ValueError('a union value must not be None')
90538
+ self._v1 = v1
90539
+ self._type = 'v1'
90540
+
90541
+ @builtins.property
90542
+ def v1(self) -> Optional["security_api_workspace_ProcedureSettingsV1"]:
90543
+ return self._v1
90544
+
90545
+ def accept(self, visitor) -> Any:
90546
+ if not isinstance(visitor, security_api_workspace_ProcedureSettingsVisitor):
90547
+ raise ValueError('{} is not an instance of security_api_workspace_ProcedureSettingsVisitor'.format(visitor.__class__.__name__))
90548
+ if self._type == 'v1' and self.v1 is not None:
90549
+ return visitor._v1(self.v1)
90550
+
90551
+
90552
+ security_api_workspace_ProcedureSettings.__name__ = "ProcedureSettings"
90553
+ security_api_workspace_ProcedureSettings.__qualname__ = "ProcedureSettings"
90554
+ security_api_workspace_ProcedureSettings.__module__ = "nominal_api.security_api_workspace"
90555
+
90556
+
90557
+ class security_api_workspace_ProcedureSettingsVisitor:
90558
+
90559
+ @abstractmethod
90560
+ def _v1(self, v1: "security_api_workspace_ProcedureSettingsV1") -> Any:
90561
+ pass
90562
+
90563
+
90564
+ security_api_workspace_ProcedureSettingsVisitor.__name__ = "ProcedureSettingsVisitor"
90565
+ security_api_workspace_ProcedureSettingsVisitor.__qualname__ = "ProcedureSettingsVisitor"
90566
+ security_api_workspace_ProcedureSettingsVisitor.__module__ = "nominal_api.security_api_workspace"
90567
+
90568
+
90569
+ class security_api_workspace_ProcedureSettingsV1(ConjureBeanType):
90570
+
90571
+ @builtins.classmethod
90572
+ def _fields(cls) -> Dict[str, ConjureFieldDefinition]:
90573
+ return {
90574
+ 'workspace_procedures': ConjureFieldDefinition('workspaceProcedures', List[api_rids_ProcedureRid])
90575
+ }
90576
+
90577
+ __slots__: List[str] = ['_workspace_procedures']
90578
+
90579
+ def __init__(self, workspace_procedures: List[str]) -> None:
90580
+ self._workspace_procedures = workspace_procedures
90581
+
90582
+ @builtins.property
90583
+ def workspace_procedures(self) -> List[str]:
90584
+ """A list of procedures that are elevated to the workspace-level.
90585
+ They will be available for execution in a top-level context, rather
90586
+ than just from the procedure details page.
90587
+ """
90588
+ return self._workspace_procedures
90589
+
90590
+
90591
+ security_api_workspace_ProcedureSettingsV1.__name__ = "ProcedureSettingsV1"
90592
+ security_api_workspace_ProcedureSettingsV1.__qualname__ = "ProcedureSettingsV1"
90593
+ security_api_workspace_ProcedureSettingsV1.__module__ = "nominal_api.security_api_workspace"
90594
+
90595
+
90227
90596
  class security_api_workspace_RemoveType(ConjureBeanType):
90228
90597
  """The request to remove a field from a workspace.
90229
90598
  """
@@ -90639,18 +91008,24 @@ class security_api_workspace_WorkspaceSettings(ConjureBeanType):
90639
91008
  @builtins.classmethod
90640
91009
  def _fields(cls) -> Dict[str, ConjureFieldDefinition]:
90641
91010
  return {
90642
- 'ref_names': ConjureFieldDefinition('refNames', OptionalTypeWrapper[security_api_workspace_PreferredRefNameConfiguration])
91011
+ 'ref_names': ConjureFieldDefinition('refNames', OptionalTypeWrapper[security_api_workspace_PreferredRefNameConfiguration]),
91012
+ 'procedures': ConjureFieldDefinition('procedures', OptionalTypeWrapper[security_api_workspace_ProcedureSettings])
90643
91013
  }
90644
91014
 
90645
- __slots__: List[str] = ['_ref_names']
91015
+ __slots__: List[str] = ['_ref_names', '_procedures']
90646
91016
 
90647
- def __init__(self, ref_names: Optional["security_api_workspace_PreferredRefNameConfiguration"] = None) -> None:
91017
+ def __init__(self, procedures: Optional["security_api_workspace_ProcedureSettings"] = None, ref_names: Optional["security_api_workspace_PreferredRefNameConfiguration"] = None) -> None:
90648
91018
  self._ref_names = ref_names
91019
+ self._procedures = procedures
90649
91020
 
90650
91021
  @builtins.property
90651
91022
  def ref_names(self) -> Optional["security_api_workspace_PreferredRefNameConfiguration"]:
90652
91023
  return self._ref_names
90653
91024
 
91025
+ @builtins.property
91026
+ def procedures(self) -> Optional["security_api_workspace_ProcedureSettings"]:
91027
+ return self._procedures
91028
+
90654
91029
 
90655
91030
  security_api_workspace_WorkspaceSettings.__name__ = "WorkspaceSettings"
90656
91031
  security_api_workspace_WorkspaceSettings.__qualname__ = "WorkspaceSettings"
@@ -3,8 +3,11 @@ from .._impl import (
3
3
  authentication_api_AppearanceSetting as AppearanceSetting,
4
4
  authentication_api_AuthenticationServiceV2 as AuthenticationServiceV2,
5
5
  authentication_api_DefaultTimeRangeTypeSetting as DefaultTimeRangeTypeSetting,
6
+ authentication_api_GenerateMediaMtxTokenRequest as GenerateMediaMtxTokenRequest,
7
+ authentication_api_GenerateMediaMtxTokenResponse as GenerateMediaMtxTokenResponse,
6
8
  authentication_api_Jwk as Jwk,
7
9
  authentication_api_Jwks as Jwks,
10
+ authentication_api_MediaMtxPermission as MediaMtxPermission,
8
11
  authentication_api_OrgRid as OrgRid,
9
12
  authentication_api_OrgSettings as OrgSettings,
10
13
  authentication_api_SearchUsersQuery as SearchUsersQuery,
@@ -23,8 +26,11 @@ from .._impl import (
23
26
  __all__ = [
24
27
  'AppearanceSetting',
25
28
  'DefaultTimeRangeTypeSetting',
29
+ 'GenerateMediaMtxTokenRequest',
30
+ 'GenerateMediaMtxTokenResponse',
26
31
  'Jwk',
27
32
  'Jwks',
33
+ 'MediaMtxPermission',
28
34
  'OrgRid',
29
35
  'OrgSettings',
30
36
  'SearchUsersQuery',
@@ -61,6 +61,7 @@ from .._impl import (
61
61
  scout_chartdefinition_api_Geo3dOrientationPrincipalAxes as Geo3dOrientationPrincipalAxes,
62
62
  scout_chartdefinition_api_Geo3dOrientationVisitor as Geo3dOrientationVisitor,
63
63
  scout_chartdefinition_api_Geo3dPosition as Geo3dPosition,
64
+ scout_chartdefinition_api_Geo3dPositionEcef as Geo3dPositionEcef,
64
65
  scout_chartdefinition_api_Geo3dPositionVisitor as Geo3dPositionVisitor,
65
66
  scout_chartdefinition_api_Geo3dPositionWgs84 as Geo3dPositionWgs84,
66
67
  scout_chartdefinition_api_GeoAdditionalTileset as GeoAdditionalTileset,
@@ -256,6 +257,7 @@ __all__ = [
256
257
  'Geo3dOrientationPrincipalAxes',
257
258
  'Geo3dPosition',
258
259
  'Geo3dPositionVisitor',
260
+ 'Geo3dPositionEcef',
259
261
  'Geo3dPositionWgs84',
260
262
  'GeoAdditionalTileset',
261
263
  'GeoAdditionalVariable',
@@ -12,6 +12,7 @@ from .._impl import (
12
12
  scout_video_api_ErrorIngestStatus as ErrorIngestStatus,
13
13
  scout_video_api_ErrorType as ErrorType,
14
14
  scout_video_api_FileSummary as FileSummary,
15
+ scout_video_api_GenerateWhipStreamResponse as GenerateWhipStreamResponse,
15
16
  scout_video_api_GetEnrichedVideoIngestStatusRequest as GetEnrichedVideoIngestStatusRequest,
16
17
  scout_video_api_GetFileSummariesRequest as GetFileSummariesRequest,
17
18
  scout_video_api_GetFileSummariesResponse as GetFileSummariesResponse,
@@ -21,6 +22,7 @@ from .._impl import (
21
22
  scout_video_api_GetSegmentSummariesInBoundsRequest as GetSegmentSummariesInBoundsRequest,
22
23
  scout_video_api_GetVideosRequest as GetVideosRequest,
23
24
  scout_video_api_GetVideosResponse as GetVideosResponse,
25
+ scout_video_api_IceServer as IceServer,
24
26
  scout_video_api_IngestError as IngestError,
25
27
  scout_video_api_ListFilesInVideoRequest as ListFilesInVideoRequest,
26
28
  scout_video_api_ListFilesInVideoResponse as ListFilesInVideoResponse,
@@ -74,6 +76,7 @@ __all__ = [
74
76
  'ErrorIngestStatus',
75
77
  'ErrorType',
76
78
  'FileSummary',
79
+ 'GenerateWhipStreamResponse',
77
80
  'GetEnrichedVideoIngestStatusRequest',
78
81
  'GetFileSummariesRequest',
79
82
  'GetFileSummariesResponse',
@@ -83,6 +86,7 @@ __all__ = [
83
86
  'GetSegmentSummariesInBoundsRequest',
84
87
  'GetVideosRequest',
85
88
  'GetVideosResponse',
89
+ 'IceServer',
86
90
  'IngestError',
87
91
  'ListFilesInVideoRequest',
88
92
  'ListFilesInVideoResponse',
@@ -2,6 +2,9 @@
2
2
  from .._impl import (
3
3
  security_api_workspace_PreferredRefNameConfiguration as PreferredRefNameConfiguration,
4
4
  security_api_workspace_PreferredRefNameConfigurationVisitor as PreferredRefNameConfigurationVisitor,
5
+ security_api_workspace_ProcedureSettings as ProcedureSettings,
6
+ security_api_workspace_ProcedureSettingsV1 as ProcedureSettingsV1,
7
+ security_api_workspace_ProcedureSettingsVisitor as ProcedureSettingsVisitor,
5
8
  security_api_workspace_RemoveType as RemoveType,
6
9
  security_api_workspace_UpdateOrRemoveWorkspaceDisplayName as UpdateOrRemoveWorkspaceDisplayName,
7
10
  security_api_workspace_UpdateOrRemoveWorkspaceDisplayNameVisitor as UpdateOrRemoveWorkspaceDisplayNameVisitor,
@@ -18,6 +21,9 @@ from .._impl import (
18
21
  __all__ = [
19
22
  'PreferredRefNameConfiguration',
20
23
  'PreferredRefNameConfigurationVisitor',
24
+ 'ProcedureSettings',
25
+ 'ProcedureSettingsVisitor',
26
+ 'ProcedureSettingsV1',
21
27
  'RemoveType',
22
28
  'UpdateOrRemoveWorkspaceDisplayName',
23
29
  'UpdateOrRemoveWorkspaceDisplayNameVisitor',
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: nominal-api
3
- Version: 0.953.1
3
+ Version: 0.955.0
4
4
  Requires-Python: >=3.8
5
5
  Requires-Dist: requests
6
6
  Requires-Dist: conjure-python-client<4,>=2.8.0
@@ -6,7 +6,7 @@ from setuptools import (
6
6
 
7
7
  setup(
8
8
  name='nominal-api',
9
- version='0.953.1',
9
+ version='0.955.0',
10
10
  python_requires='>=3.8',
11
11
  package_data={"": ["py.typed"]},
12
12
  packages=find_packages(),
File without changes