cribl-control-plane 0.0.44a1__py3-none-any.whl → 0.0.44a2__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 cribl-control-plane might be problematic. Click here for more details.

Files changed (174) hide show
  1. cribl_control_plane/_hooks/clientcredentials.py +1 -1
  2. cribl_control_plane/_version.py +4 -4
  3. cribl_control_plane/acl.py +5 -3
  4. cribl_control_plane/auth_sdk.py +6 -3
  5. cribl_control_plane/basesdk.py +11 -1
  6. cribl_control_plane/commits.py +5 -3
  7. cribl_control_plane/destinations.py +6 -4
  8. cribl_control_plane/errors/__init__.py +15 -3
  9. cribl_control_plane/errors/healthstatus_error.py +8 -2
  10. cribl_control_plane/groups_configs.py +8 -3
  11. cribl_control_plane/groups_sdk.py +6 -4
  12. cribl_control_plane/models/__init__.py +17 -4
  13. cribl_control_plane/models/appmode.py +2 -1
  14. cribl_control_plane/models/cacheconnection.py +10 -2
  15. cribl_control_plane/models/cacheconnectionbackfillstatus.py +2 -1
  16. cribl_control_plane/models/cloudprovider.py +2 -1
  17. cribl_control_plane/models/configgroup.py +7 -2
  18. cribl_control_plane/models/configgroupcloud.py +6 -2
  19. cribl_control_plane/models/createconfiggroupbyproductop.py +8 -2
  20. cribl_control_plane/models/cribllakedataset.py +8 -2
  21. cribl_control_plane/models/datasetmetadata.py +8 -2
  22. cribl_control_plane/models/deleteconfiggroupbyproductandidop.py +7 -2
  23. cribl_control_plane/models/getconfiggroupaclbyproductandidop.py +4 -2
  24. cribl_control_plane/models/getconfiggroupaclteamsbyproductandidop.py +4 -2
  25. cribl_control_plane/models/getconfiggroupbyproductandidop.py +3 -1
  26. cribl_control_plane/models/getconfiggroupconfigversionbyproductandidop.py +7 -2
  27. cribl_control_plane/models/getsummaryop.py +7 -2
  28. cribl_control_plane/models/hbcriblinfo.py +6 -1
  29. cribl_control_plane/models/healthstatus.py +7 -4
  30. cribl_control_plane/models/inputappscope.py +34 -14
  31. cribl_control_plane/models/inputazureblob.py +17 -6
  32. cribl_control_plane/models/inputcollection.py +11 -4
  33. cribl_control_plane/models/inputconfluentcloud.py +47 -20
  34. cribl_control_plane/models/inputcribl.py +11 -4
  35. cribl_control_plane/models/inputcriblhttp.py +23 -8
  36. cribl_control_plane/models/inputcribllakehttp.py +22 -10
  37. cribl_control_plane/models/inputcriblmetrics.py +12 -4
  38. cribl_control_plane/models/inputcribltcp.py +23 -8
  39. cribl_control_plane/models/inputcrowdstrike.py +26 -10
  40. cribl_control_plane/models/inputdatadogagent.py +24 -8
  41. cribl_control_plane/models/inputdatagen.py +11 -4
  42. cribl_control_plane/models/inputedgeprometheus.py +58 -24
  43. cribl_control_plane/models/inputelastic.py +40 -14
  44. cribl_control_plane/models/inputeventhub.py +15 -6
  45. cribl_control_plane/models/inputexec.py +14 -6
  46. cribl_control_plane/models/inputfile.py +15 -6
  47. cribl_control_plane/models/inputfirehose.py +23 -8
  48. cribl_control_plane/models/inputgooglepubsub.py +19 -6
  49. cribl_control_plane/models/inputgrafana.py +67 -24
  50. cribl_control_plane/models/inputhttp.py +23 -8
  51. cribl_control_plane/models/inputhttpraw.py +23 -8
  52. cribl_control_plane/models/inputjournalfiles.py +12 -4
  53. cribl_control_plane/models/inputkafka.py +46 -16
  54. cribl_control_plane/models/inputkinesis.py +38 -14
  55. cribl_control_plane/models/inputkubeevents.py +11 -4
  56. cribl_control_plane/models/inputkubelogs.py +16 -8
  57. cribl_control_plane/models/inputkubemetrics.py +16 -8
  58. cribl_control_plane/models/inputloki.py +29 -10
  59. cribl_control_plane/models/inputmetrics.py +23 -8
  60. cribl_control_plane/models/inputmodeldriventelemetry.py +27 -10
  61. cribl_control_plane/models/inputmsk.py +53 -18
  62. cribl_control_plane/models/inputnetflow.py +11 -4
  63. cribl_control_plane/models/inputoffice365mgmt.py +33 -14
  64. cribl_control_plane/models/inputoffice365msgtrace.py +35 -16
  65. cribl_control_plane/models/inputoffice365service.py +35 -16
  66. cribl_control_plane/models/inputopentelemetry.py +38 -16
  67. cribl_control_plane/models/inputprometheus.py +50 -18
  68. cribl_control_plane/models/inputprometheusrw.py +30 -10
  69. cribl_control_plane/models/inputrawudp.py +11 -4
  70. cribl_control_plane/models/inputs3.py +21 -8
  71. cribl_control_plane/models/inputs3inventory.py +26 -10
  72. cribl_control_plane/models/inputsecuritylake.py +27 -10
  73. cribl_control_plane/models/inputsnmp.py +16 -6
  74. cribl_control_plane/models/inputsplunk.py +33 -12
  75. cribl_control_plane/models/inputsplunkhec.py +29 -10
  76. cribl_control_plane/models/inputsplunksearch.py +33 -14
  77. cribl_control_plane/models/inputsqs.py +27 -10
  78. cribl_control_plane/models/inputsyslog.py +43 -16
  79. cribl_control_plane/models/inputsystemmetrics.py +48 -24
  80. cribl_control_plane/models/inputsystemstate.py +16 -8
  81. cribl_control_plane/models/inputtcp.py +29 -10
  82. cribl_control_plane/models/inputtcpjson.py +29 -10
  83. cribl_control_plane/models/inputwef.py +37 -14
  84. cribl_control_plane/models/inputwindowsmetrics.py +44 -24
  85. cribl_control_plane/models/inputwineventlogs.py +20 -10
  86. cribl_control_plane/models/inputwiz.py +21 -8
  87. cribl_control_plane/models/inputwizwebhook.py +23 -8
  88. cribl_control_plane/models/inputzscalerhec.py +29 -10
  89. cribl_control_plane/models/lakehouseconnectiontype.py +2 -1
  90. cribl_control_plane/models/listconfiggroupbyproductop.py +3 -1
  91. cribl_control_plane/models/masterworkerentry.py +7 -2
  92. cribl_control_plane/models/nodeactiveupgradestatus.py +2 -1
  93. cribl_control_plane/models/nodefailedupgradestatus.py +2 -1
  94. cribl_control_plane/models/nodeskippedupgradestatus.py +2 -1
  95. cribl_control_plane/models/nodeupgradestate.py +2 -1
  96. cribl_control_plane/models/nodeupgradestatus.py +13 -5
  97. cribl_control_plane/models/outputazureblob.py +48 -18
  98. cribl_control_plane/models/outputazuredataexplorer.py +74 -29
  99. cribl_control_plane/models/outputazureeventhub.py +40 -18
  100. cribl_control_plane/models/outputazurelogs.py +36 -13
  101. cribl_control_plane/models/outputclickhouse.py +56 -21
  102. cribl_control_plane/models/outputcloudwatch.py +29 -10
  103. cribl_control_plane/models/outputconfluentcloud.py +77 -32
  104. cribl_control_plane/models/outputcriblhttp.py +46 -18
  105. cribl_control_plane/models/outputcribllake.py +46 -16
  106. cribl_control_plane/models/outputcribltcp.py +45 -18
  107. cribl_control_plane/models/outputcrowdstrikenextgensiem.py +50 -15
  108. cribl_control_plane/models/outputdatadog.py +48 -20
  109. cribl_control_plane/models/outputdataset.py +46 -18
  110. cribl_control_plane/models/outputdiskspool.py +7 -2
  111. cribl_control_plane/models/outputdls3.py +68 -24
  112. cribl_control_plane/models/outputdynatracehttp.py +54 -21
  113. cribl_control_plane/models/outputdynatraceotlp.py +56 -23
  114. cribl_control_plane/models/outputelastic.py +44 -19
  115. cribl_control_plane/models/outputelasticcloud.py +37 -13
  116. cribl_control_plane/models/outputexabeam.py +29 -10
  117. cribl_control_plane/models/outputfilesystem.py +39 -14
  118. cribl_control_plane/models/outputgooglechronicle.py +50 -16
  119. cribl_control_plane/models/outputgooglecloudlogging.py +41 -14
  120. cribl_control_plane/models/outputgooglecloudstorage.py +66 -24
  121. cribl_control_plane/models/outputgooglepubsub.py +31 -10
  122. cribl_control_plane/models/outputgrafanacloud.py +99 -34
  123. cribl_control_plane/models/outputgraphite.py +31 -14
  124. cribl_control_plane/models/outputhoneycomb.py +36 -13
  125. cribl_control_plane/models/outputhumiohec.py +44 -17
  126. cribl_control_plane/models/outputinfluxdb.py +43 -17
  127. cribl_control_plane/models/outputkafka.py +74 -28
  128. cribl_control_plane/models/outputkinesis.py +40 -16
  129. cribl_control_plane/models/outputloki.py +41 -16
  130. cribl_control_plane/models/outputminio.py +65 -24
  131. cribl_control_plane/models/outputmsk.py +82 -30
  132. cribl_control_plane/models/outputnewrelic.py +43 -18
  133. cribl_control_plane/models/outputnewrelicevents.py +42 -15
  134. cribl_control_plane/models/outputopentelemetry.py +68 -27
  135. cribl_control_plane/models/outputprometheus.py +36 -13
  136. cribl_control_plane/models/outputring.py +19 -8
  137. cribl_control_plane/models/outputs3.py +68 -26
  138. cribl_control_plane/models/outputsecuritylake.py +52 -18
  139. cribl_control_plane/models/outputsentinel.py +45 -18
  140. cribl_control_plane/models/outputsentineloneaisiem.py +51 -19
  141. cribl_control_plane/models/outputservicenow.py +61 -25
  142. cribl_control_plane/models/outputsignalfx.py +38 -15
  143. cribl_control_plane/models/outputsns.py +36 -14
  144. cribl_control_plane/models/outputsplunk.py +60 -24
  145. cribl_control_plane/models/outputsplunkhec.py +36 -13
  146. cribl_control_plane/models/outputsplunklb.py +77 -30
  147. cribl_control_plane/models/outputsqs.py +41 -16
  148. cribl_control_plane/models/outputstatsd.py +30 -14
  149. cribl_control_plane/models/outputstatsdext.py +29 -12
  150. cribl_control_plane/models/outputsumologic.py +35 -12
  151. cribl_control_plane/models/outputsyslog.py +58 -24
  152. cribl_control_plane/models/outputtcpjson.py +52 -20
  153. cribl_control_plane/models/outputwavefront.py +36 -13
  154. cribl_control_plane/models/outputwebhook.py +58 -22
  155. cribl_control_plane/models/outputxsiam.py +36 -15
  156. cribl_control_plane/models/productscore.py +2 -1
  157. cribl_control_plane/models/rbacresource.py +2 -1
  158. cribl_control_plane/models/resourcepolicy.py +4 -2
  159. cribl_control_plane/models/runnablejobcollection.py +30 -13
  160. cribl_control_plane/models/runnablejobexecutor.py +13 -4
  161. cribl_control_plane/models/runnablejobscheduledsearch.py +7 -2
  162. cribl_control_plane/models/updateconfiggroupbyproductandidop.py +8 -2
  163. cribl_control_plane/models/updateconfiggroupdeploybyproductandidop.py +8 -2
  164. cribl_control_plane/models/workertypes.py +2 -1
  165. cribl_control_plane/nodes.py +5 -3
  166. cribl_control_plane/sdk.py +15 -2
  167. cribl_control_plane/sources.py +5 -3
  168. cribl_control_plane/utils/__init__.py +15 -3
  169. cribl_control_plane/utils/eventstreaming.py +10 -0
  170. cribl_control_plane/versions.py +11 -6
  171. {cribl_control_plane-0.0.44a1.dist-info → cribl_control_plane-0.0.44a2.dist-info}/METADATA +1 -1
  172. cribl_control_plane-0.0.44a2.dist-info/RECORD +325 -0
  173. cribl_control_plane-0.0.44a1.dist-info/RECORD +0 -325
  174. {cribl_control_plane-0.0.44a1.dist-info → cribl_control_plane-0.0.44a2.dist-info}/WHEEL +0 -0
@@ -188,7 +188,7 @@ class ClientCredentialsHook(SDKInitHook, BeforeRequestHook, AfterErrorHook):
188
188
 
189
189
  response_data = response.json()
190
190
 
191
- if response_data.get("token_type") != "Bearer":
191
+ if response_data.get("token_type", "").lower() != "bearer":
192
192
  raise Exception("Unexpected token type from token endpoint")
193
193
 
194
194
  expires_at = None
@@ -3,10 +3,10 @@
3
3
  import importlib.metadata
4
4
 
5
5
  __title__: str = "cribl-control-plane"
6
- __version__: str = "0.0.44a1"
7
- __openapi_doc_version__: str = "4.14.0-alpha.1757353540432-d6130d30"
8
- __gen_version__: str = "2.686.7"
9
- __user_agent__: str = "speakeasy-sdk/python 0.0.44a1 2.686.7 4.14.0-alpha.1757353540432-d6130d30 cribl-control-plane"
6
+ __version__: str = "0.0.44a2"
7
+ __openapi_doc_version__: str = "4.14.0-alpha.1757595696230-1a9eb130"
8
+ __gen_version__: str = "2.696.0"
9
+ __user_agent__: str = "speakeasy-sdk/python 0.0.44a2 2.696.0 4.14.0-alpha.1757595696230-1a9eb130 cribl-control-plane"
10
10
 
11
11
  try:
12
12
  if __package__ is not None:
@@ -14,13 +14,15 @@ from typing import Any, Mapping, Optional
14
14
  class ACL(BaseSDK):
15
15
  teams: Teams
16
16
 
17
- def __init__(self, sdk_config: SDKConfiguration) -> None:
18
- BaseSDK.__init__(self, sdk_config)
17
+ def __init__(
18
+ self, sdk_config: SDKConfiguration, parent_ref: Optional[object] = None
19
+ ) -> None:
20
+ BaseSDK.__init__(self, sdk_config, parent_ref=parent_ref)
19
21
  self.sdk_configuration = sdk_config
20
22
  self._init_sdks()
21
23
 
22
24
  def _init_sdks(self):
23
- self.teams = Teams(self.sdk_configuration)
25
+ self.teams = Teams(self.sdk_configuration, parent_ref=self.parent_ref)
24
26
 
25
27
  def get(
26
28
  self,
@@ -3,15 +3,18 @@
3
3
  from .basesdk import BaseSDK
4
4
  from .sdkconfiguration import SDKConfiguration
5
5
  from cribl_control_plane.tokens import Tokens
6
+ from typing import Optional
6
7
 
7
8
 
8
9
  class AuthSDK(BaseSDK):
9
10
  tokens: Tokens
10
11
 
11
- def __init__(self, sdk_config: SDKConfiguration) -> None:
12
- BaseSDK.__init__(self, sdk_config)
12
+ def __init__(
13
+ self, sdk_config: SDKConfiguration, parent_ref: Optional[object] = None
14
+ ) -> None:
15
+ BaseSDK.__init__(self, sdk_config, parent_ref=parent_ref)
13
16
  self.sdk_configuration = sdk_config
14
17
  self._init_sdks()
15
18
 
16
19
  def _init_sdks(self):
17
- self.tokens = Tokens(self.sdk_configuration)
20
+ self.tokens = Tokens(self.sdk_configuration, parent_ref=self.parent_ref)
@@ -19,9 +19,19 @@ from urllib.parse import parse_qs, urlparse
19
19
 
20
20
  class BaseSDK:
21
21
  sdk_configuration: SDKConfiguration
22
+ parent_ref: Optional[object] = None
23
+ """
24
+ Reference to the root SDK instance, if any. This will prevent it from
25
+ being garbage collected while there are active streams.
26
+ """
22
27
 
23
- def __init__(self, sdk_config: SDKConfiguration) -> None:
28
+ def __init__(
29
+ self,
30
+ sdk_config: SDKConfiguration,
31
+ parent_ref: Optional[object] = None,
32
+ ) -> None:
24
33
  self.sdk_configuration = sdk_config
34
+ self.parent_ref = parent_ref
25
35
 
26
36
  def _get_url(self, base_url, url_variables):
27
37
  sdk_url, sdk_variables = self.sdk_configuration.get_server_details()
@@ -14,13 +14,15 @@ from typing import Any, List, Mapping, Optional
14
14
  class Commits(BaseSDK):
15
15
  files: CommitsFiles
16
16
 
17
- def __init__(self, sdk_config: SDKConfiguration) -> None:
18
- BaseSDK.__init__(self, sdk_config)
17
+ def __init__(
18
+ self, sdk_config: SDKConfiguration, parent_ref: Optional[object] = None
19
+ ) -> None:
20
+ BaseSDK.__init__(self, sdk_config, parent_ref=parent_ref)
19
21
  self.sdk_configuration = sdk_config
20
22
  self._init_sdks()
21
23
 
22
24
  def _init_sdks(self):
23
- self.files = CommitsFiles(self.sdk_configuration)
25
+ self.files = CommitsFiles(self.sdk_configuration, parent_ref=self.parent_ref)
24
26
 
25
27
  def create(
26
28
  self,
@@ -18,14 +18,16 @@ class Destinations(BaseSDK):
18
18
  pq: DestinationsPq
19
19
  samples: Samples
20
20
 
21
- def __init__(self, sdk_config: SDKConfiguration) -> None:
22
- BaseSDK.__init__(self, sdk_config)
21
+ def __init__(
22
+ self, sdk_config: SDKConfiguration, parent_ref: Optional[object] = None
23
+ ) -> None:
24
+ BaseSDK.__init__(self, sdk_config, parent_ref=parent_ref)
23
25
  self.sdk_configuration = sdk_config
24
26
  self._init_sdks()
25
27
 
26
28
  def _init_sdks(self):
27
- self.pq = DestinationsPq(self.sdk_configuration)
28
- self.samples = Samples(self.sdk_configuration)
29
+ self.pq = DestinationsPq(self.sdk_configuration, parent_ref=self.parent_ref)
30
+ self.samples = Samples(self.sdk_configuration, parent_ref=self.parent_ref)
29
31
 
30
32
  def list(
31
33
  self,
@@ -1,12 +1,13 @@
1
1
  """Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT."""
2
2
 
3
+ from .criblcontrolplaneerror import CriblControlPlaneError
3
4
  from typing import TYPE_CHECKING
4
5
  from importlib import import_module
5
6
  import builtins
7
+ import sys
6
8
 
7
9
  if TYPE_CHECKING:
8
10
  from .apierror import APIError
9
- from .criblcontrolplaneerror import CriblControlPlaneError
10
11
  from .error import Error, ErrorData
11
12
  from .healthstatus_error import HealthStatusError, HealthStatusErrorData
12
13
  from .no_response_error import NoResponseError
@@ -25,7 +26,6 @@ __all__ = [
25
26
 
26
27
  _dynamic_imports: dict[str, str] = {
27
28
  "APIError": ".apierror",
28
- "CriblControlPlaneError": ".criblcontrolplaneerror",
29
29
  "Error": ".error",
30
30
  "ErrorData": ".error",
31
31
  "HealthStatusError": ".healthstatus_error",
@@ -35,6 +35,18 @@ _dynamic_imports: dict[str, str] = {
35
35
  }
36
36
 
37
37
 
38
+ def dynamic_import(modname, retries=3):
39
+ for attempt in range(retries):
40
+ try:
41
+ return import_module(modname, __package__)
42
+ except KeyError:
43
+ # Clear any half-initialized module and retry
44
+ sys.modules.pop(modname, None)
45
+ if attempt == retries - 1:
46
+ break
47
+ raise KeyError(f"Failed to import module '{modname}' after {retries} attempts")
48
+
49
+
38
50
  def __getattr__(attr_name: str) -> object:
39
51
  module_name = _dynamic_imports.get(attr_name)
40
52
  if module_name is None:
@@ -43,7 +55,7 @@ def __getattr__(attr_name: str) -> object:
43
55
  )
44
56
 
45
57
  try:
46
- module = import_module(module_name, __package__)
58
+ module = dynamic_import(module_name)
47
59
  result = getattr(module, attr_name)
48
60
  return result
49
61
  except ImportError as e:
@@ -4,18 +4,24 @@ from __future__ import annotations
4
4
  from cribl_control_plane.errors import CriblControlPlaneError
5
5
  from cribl_control_plane.models import healthstatus as models_healthstatus
6
6
  from cribl_control_plane.types import BaseModel
7
+ from cribl_control_plane.utils import validate_open_enum
7
8
  import httpx
8
9
  import pydantic
10
+ from pydantic.functional_validators import PlainValidator
9
11
  from typing import Optional
10
12
  from typing_extensions import Annotated
11
13
 
12
14
 
13
15
  class HealthStatusErrorData(BaseModel):
14
- status: models_healthstatus.Status
16
+ status: Annotated[
17
+ models_healthstatus.Status, PlainValidator(validate_open_enum(False))
18
+ ]
15
19
 
16
20
  start_time: Annotated[float, pydantic.Field(alias="startTime")]
17
21
 
18
- role: Optional[models_healthstatus.Role] = None
22
+ role: Annotated[
23
+ Optional[models_healthstatus.Role], PlainValidator(validate_open_enum(False))
24
+ ] = None
19
25
 
20
26
 
21
27
  class HealthStatusError(CriblControlPlaneError):
@@ -3,15 +3,20 @@
3
3
  from .basesdk import BaseSDK
4
4
  from .sdkconfiguration import SDKConfiguration
5
5
  from cribl_control_plane.configs_versions import ConfigsVersions
6
+ from typing import Optional
6
7
 
7
8
 
8
9
  class GroupsConfigs(BaseSDK):
9
10
  versions: ConfigsVersions
10
11
 
11
- def __init__(self, sdk_config: SDKConfiguration) -> None:
12
- BaseSDK.__init__(self, sdk_config)
12
+ def __init__(
13
+ self, sdk_config: SDKConfiguration, parent_ref: Optional[object] = None
14
+ ) -> None:
15
+ BaseSDK.__init__(self, sdk_config, parent_ref=parent_ref)
13
16
  self.sdk_configuration = sdk_config
14
17
  self._init_sdks()
15
18
 
16
19
  def _init_sdks(self):
17
- self.versions = ConfigsVersions(self.sdk_configuration)
20
+ self.versions = ConfigsVersions(
21
+ self.sdk_configuration, parent_ref=self.parent_ref
22
+ )
@@ -18,14 +18,16 @@ class GroupsSDK(BaseSDK):
18
18
  configs: GroupsConfigs
19
19
  acl: ACL
20
20
 
21
- def __init__(self, sdk_config: SDKConfiguration) -> None:
22
- BaseSDK.__init__(self, sdk_config)
21
+ def __init__(
22
+ self, sdk_config: SDKConfiguration, parent_ref: Optional[object] = None
23
+ ) -> None:
24
+ BaseSDK.__init__(self, sdk_config, parent_ref=parent_ref)
23
25
  self.sdk_configuration = sdk_config
24
26
  self._init_sdks()
25
27
 
26
28
  def _init_sdks(self):
27
- self.configs = GroupsConfigs(self.sdk_configuration)
28
- self.acl = ACL(self.sdk_configuration)
29
+ self.configs = GroupsConfigs(self.sdk_configuration, parent_ref=self.parent_ref)
30
+ self.acl = ACL(self.sdk_configuration, parent_ref=self.parent_ref)
29
31
 
30
32
  def list(
31
33
  self,
@@ -3,6 +3,7 @@
3
3
  from typing import TYPE_CHECKING
4
4
  from importlib import import_module
5
5
  import builtins
6
+ import sys
6
7
 
7
8
  if TYPE_CHECKING:
8
9
  from .addhectokenrequest import (
@@ -3143,6 +3144,7 @@ if TYPE_CHECKING:
3143
3144
  CollectorSpecificSettings,
3144
3145
  CollectorSpecificSettingsTypedDict,
3145
3146
  CollectorTypedDict,
3147
+ InputType,
3146
3148
  RunnableJobCollection,
3147
3149
  RunnableJobCollectionInput,
3148
3150
  RunnableJobCollectionInputTypedDict,
@@ -3165,7 +3167,6 @@ if TYPE_CHECKING:
3165
3167
  RunnableJobCollectionScheduleTypedDict,
3166
3168
  RunnableJobCollectionTimeWarning,
3167
3169
  RunnableJobCollectionTimeWarningTypedDict,
3168
- RunnableJobCollectionType,
3169
3170
  RunnableJobCollectionTypedDict,
3170
3171
  TimeRange,
3171
3172
  WhereToCapture,
@@ -4685,6 +4686,7 @@ __all__ = [
4685
4686
  "InputTcpjsonTLSSettingsServerSideTypedDict",
4686
4687
  "InputTcpjsonType",
4687
4688
  "InputTcpjsonTypedDict",
4689
+ "InputType",
4688
4690
  "InputTypedDict",
4689
4691
  "InputWef",
4690
4692
  "InputWefAuthenticationMethod",
@@ -6085,7 +6087,6 @@ __all__ = [
6085
6087
  "RunnableJobCollectionScheduleTypedDict",
6086
6088
  "RunnableJobCollectionTimeWarning",
6087
6089
  "RunnableJobCollectionTimeWarningTypedDict",
6088
- "RunnableJobCollectionType",
6089
6090
  "RunnableJobCollectionTypedDict",
6090
6091
  "RunnableJobExecutor",
6091
6092
  "RunnableJobExecutorJobType",
@@ -9019,6 +9020,7 @@ _dynamic_imports: dict[str, str] = {
9019
9020
  "CollectorSpecificSettings": ".runnablejobcollection",
9020
9021
  "CollectorSpecificSettingsTypedDict": ".runnablejobcollection",
9021
9022
  "CollectorTypedDict": ".runnablejobcollection",
9023
+ "InputType": ".runnablejobcollection",
9022
9024
  "RunnableJobCollection": ".runnablejobcollection",
9023
9025
  "RunnableJobCollectionInput": ".runnablejobcollection",
9024
9026
  "RunnableJobCollectionInputTypedDict": ".runnablejobcollection",
@@ -9041,7 +9043,6 @@ _dynamic_imports: dict[str, str] = {
9041
9043
  "RunnableJobCollectionScheduleTypedDict": ".runnablejobcollection",
9042
9044
  "RunnableJobCollectionTimeWarning": ".runnablejobcollection",
9043
9045
  "RunnableJobCollectionTimeWarningTypedDict": ".runnablejobcollection",
9044
- "RunnableJobCollectionType": ".runnablejobcollection",
9045
9046
  "RunnableJobCollectionTypedDict": ".runnablejobcollection",
9046
9047
  "TimeRange": ".runnablejobcollection",
9047
9048
  "WhereToCapture": ".runnablejobcollection",
@@ -9126,6 +9127,18 @@ _dynamic_imports: dict[str, str] = {
9126
9127
  }
9127
9128
 
9128
9129
 
9130
+ def dynamic_import(modname, retries=3):
9131
+ for attempt in range(retries):
9132
+ try:
9133
+ return import_module(modname, __package__)
9134
+ except KeyError:
9135
+ # Clear any half-initialized module and retry
9136
+ sys.modules.pop(modname, None)
9137
+ if attempt == retries - 1:
9138
+ break
9139
+ raise KeyError(f"Failed to import module '{modname}' after {retries} attempts")
9140
+
9141
+
9129
9142
  def __getattr__(attr_name: str) -> object:
9130
9143
  module_name = _dynamic_imports.get(attr_name)
9131
9144
  if module_name is None:
@@ -9134,7 +9147,7 @@ def __getattr__(attr_name: str) -> object:
9134
9147
  )
9135
9148
 
9136
9149
  try:
9137
- module = import_module(module_name, __package__)
9150
+ module = dynamic_import(module_name)
9138
9151
  result = getattr(module, attr_name)
9139
9152
  return result
9140
9153
  except ImportError as e:
@@ -1,10 +1,11 @@
1
1
  """Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT."""
2
2
 
3
3
  from __future__ import annotations
4
+ from cribl_control_plane import utils
4
5
  from enum import Enum
5
6
 
6
7
 
7
- class AppMode(str, Enum):
8
+ class AppMode(str, Enum, metaclass=utils.OpenEnumMeta):
8
9
  SINGLE = "single"
9
10
  MASTER = "master"
10
11
  WORKER = "worker"
@@ -4,7 +4,9 @@ from __future__ import annotations
4
4
  from .cacheconnectionbackfillstatus import CacheConnectionBackfillStatus
5
5
  from .lakehouseconnectiontype import LakehouseConnectionType
6
6
  from cribl_control_plane.types import BaseModel
7
+ from cribl_control_plane.utils import validate_open_enum
7
8
  import pydantic
9
+ from pydantic.functional_validators import PlainValidator
8
10
  from typing import List, Optional
9
11
  from typing_extensions import Annotated, NotRequired, TypedDict
10
12
 
@@ -31,11 +33,17 @@ class CacheConnection(BaseModel):
31
33
  ] = None
32
34
 
33
35
  backfill_status: Annotated[
34
- Optional[CacheConnectionBackfillStatus], pydantic.Field(alias="backfillStatus")
36
+ Annotated[
37
+ Optional[CacheConnectionBackfillStatus],
38
+ PlainValidator(validate_open_enum(False)),
39
+ ],
40
+ pydantic.Field(alias="backfillStatus"),
35
41
  ] = None
36
42
 
37
43
  lakehouse_connection_type: Annotated[
38
- Optional[LakehouseConnectionType],
44
+ Annotated[
45
+ Optional[LakehouseConnectionType], PlainValidator(validate_open_enum(False))
46
+ ],
39
47
  pydantic.Field(alias="lakehouseConnectionType"),
40
48
  ] = None
41
49
 
@@ -1,10 +1,11 @@
1
1
  """Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT."""
2
2
 
3
3
  from __future__ import annotations
4
+ from cribl_control_plane import utils
4
5
  from enum import Enum
5
6
 
6
7
 
7
- class CacheConnectionBackfillStatus(str, Enum):
8
+ class CacheConnectionBackfillStatus(str, Enum, metaclass=utils.OpenEnumMeta):
8
9
  SCHEDULED = "scheduled"
9
10
  PENDING = "pending"
10
11
  STARTED = "started"
@@ -1,9 +1,10 @@
1
1
  """Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT."""
2
2
 
3
3
  from __future__ import annotations
4
+ from cribl_control_plane import utils
4
5
  from enum import Enum
5
6
 
6
7
 
7
- class CloudProvider(str, Enum):
8
+ class CloudProvider(str, Enum, metaclass=utils.OpenEnumMeta):
8
9
  AWS = "aws"
9
10
  AZURE = "azure"
@@ -4,9 +4,12 @@ from __future__ import annotations
4
4
  from .commit import Commit, CommitTypedDict
5
5
  from .configgroupcloud import ConfigGroupCloud, ConfigGroupCloudTypedDict
6
6
  from .configgrouplookups import ConfigGroupLookups, ConfigGroupLookupsTypedDict
7
+ from cribl_control_plane import utils
7
8
  from cribl_control_plane.types import BaseModel
9
+ from cribl_control_plane.utils import validate_open_enum
8
10
  from enum import Enum
9
11
  import pydantic
12
+ from pydantic.functional_validators import PlainValidator
10
13
  from typing import List, Optional
11
14
  from typing_extensions import Annotated, NotRequired, TypedDict
12
15
 
@@ -27,7 +30,7 @@ class Git(BaseModel):
27
30
  log: Optional[List[Commit]] = None
28
31
 
29
32
 
30
- class ConfigGroupType(str, Enum):
33
+ class ConfigGroupType(str, Enum, metaclass=utils.OpenEnumMeta):
31
34
  LAKE_ACCESS = "lake_access"
32
35
 
33
36
 
@@ -105,7 +108,9 @@ class ConfigGroup(BaseModel):
105
108
 
106
109
  tags: Optional[str] = None
107
110
 
108
- type: Optional[ConfigGroupType] = None
111
+ type: Annotated[
112
+ Optional[ConfigGroupType], PlainValidator(validate_open_enum(False))
113
+ ] = None
109
114
 
110
115
  upgrade_version: Annotated[
111
116
  Optional[str], pydantic.Field(alias="upgradeVersion")
@@ -3,8 +3,10 @@
3
3
  from __future__ import annotations
4
4
  from .cloudprovider import CloudProvider
5
5
  from cribl_control_plane.types import BaseModel, Nullable, UNSET_SENTINEL
6
+ from cribl_control_plane.utils import validate_open_enum
6
7
  from pydantic import model_serializer
7
- from typing_extensions import TypedDict
8
+ from pydantic.functional_validators import PlainValidator
9
+ from typing_extensions import Annotated, TypedDict
8
10
 
9
11
 
10
12
  class ConfigGroupCloudTypedDict(TypedDict):
@@ -13,7 +15,9 @@ class ConfigGroupCloudTypedDict(TypedDict):
13
15
 
14
16
 
15
17
  class ConfigGroupCloud(BaseModel):
16
- provider: Nullable[CloudProvider]
18
+ provider: Annotated[
19
+ Nullable[CloudProvider], PlainValidator(validate_open_enum(False))
20
+ ]
17
21
 
18
22
  region: str
19
23
 
@@ -4,7 +4,13 @@ from __future__ import annotations
4
4
  from .configgroup import ConfigGroup, ConfigGroupTypedDict
5
5
  from .productscore import ProductsCore
6
6
  from cribl_control_plane.types import BaseModel
7
- from cribl_control_plane.utils import FieldMetadata, PathParamMetadata, RequestMetadata
7
+ from cribl_control_plane.utils import (
8
+ FieldMetadata,
9
+ PathParamMetadata,
10
+ RequestMetadata,
11
+ validate_open_enum,
12
+ )
13
+ from pydantic.functional_validators import PlainValidator
8
14
  from typing import List, Optional
9
15
  from typing_extensions import Annotated, NotRequired, TypedDict
10
16
 
@@ -18,7 +24,7 @@ class CreateConfigGroupByProductRequestTypedDict(TypedDict):
18
24
 
19
25
  class CreateConfigGroupByProductRequest(BaseModel):
20
26
  product: Annotated[
21
- ProductsCore,
27
+ Annotated[ProductsCore, PlainValidator(validate_open_enum(False))],
22
28
  FieldMetadata(path=PathParamMetadata(style="simple", explode=False)),
23
29
  ]
24
30
  r"""Name of the Cribl product to add the Worker Group or Edge Fleet to."""
@@ -6,14 +6,17 @@ from .lakedatasetsearchconfig import (
6
6
  LakeDatasetSearchConfig,
7
7
  LakeDatasetSearchConfigTypedDict,
8
8
  )
9
+ from cribl_control_plane import utils
9
10
  from cribl_control_plane.types import BaseModel
11
+ from cribl_control_plane.utils import validate_open_enum
10
12
  from enum import Enum
11
13
  import pydantic
14
+ from pydantic.functional_validators import PlainValidator
12
15
  from typing import List, Optional
13
16
  from typing_extensions import Annotated, NotRequired, TypedDict
14
17
 
15
18
 
16
- class CriblLakeDatasetFormat(str, Enum):
19
+ class CriblLakeDatasetFormat(str, Enum, metaclass=utils.OpenEnumMeta):
17
20
  JSON = "json"
18
21
  DDSS = "ddss"
19
22
  PARQUET = "parquet"
@@ -54,7 +57,10 @@ class CriblLakeDataset(BaseModel):
54
57
  description: Optional[str] = None
55
58
 
56
59
  format_: Annotated[
57
- Optional[CriblLakeDatasetFormat], pydantic.Field(alias="format")
60
+ Annotated[
61
+ Optional[CriblLakeDatasetFormat], PlainValidator(validate_open_enum(False))
62
+ ],
63
+ pydantic.Field(alias="format"),
58
64
  ] = None
59
65
 
60
66
  http_da_used: Annotated[Optional[bool], pydantic.Field(alias="httpDAUsed")] = None
@@ -5,14 +5,17 @@ from .datasetmetadataruninfo import (
5
5
  DatasetMetadataRunInfo,
6
6
  DatasetMetadataRunInfoTypedDict,
7
7
  )
8
+ from cribl_control_plane import utils
8
9
  from cribl_control_plane.types import BaseModel
10
+ from cribl_control_plane.utils import validate_open_enum
9
11
  from enum import Enum
10
12
  import pydantic
13
+ from pydantic.functional_validators import PlainValidator
11
14
  from typing import List, Optional
12
15
  from typing_extensions import Annotated, NotRequired, TypedDict
13
16
 
14
17
 
15
- class ScanMode(str, Enum):
18
+ class ScanMode(str, Enum, metaclass=utils.OpenEnumMeta):
16
19
  DETAILED = "detailed"
17
20
  QUICK = "quick"
18
21
 
@@ -32,7 +35,10 @@ class DatasetMetadata(BaseModel):
32
35
 
33
36
  field_list: Annotated[List[str], pydantic.Field(alias="fieldList")]
34
37
 
35
- scan_mode: Annotated[ScanMode, pydantic.Field(alias="scanMode")]
38
+ scan_mode: Annotated[
39
+ Annotated[ScanMode, PlainValidator(validate_open_enum(False))],
40
+ pydantic.Field(alias="scanMode"),
41
+ ]
36
42
 
37
43
  latest_run_info: Annotated[
38
44
  Optional[DatasetMetadataRunInfo], pydantic.Field(alias="latestRunInfo")
@@ -4,7 +4,12 @@ from __future__ import annotations
4
4
  from .configgroup import ConfigGroup, ConfigGroupTypedDict
5
5
  from .productscore import ProductsCore
6
6
  from cribl_control_plane.types import BaseModel
7
- from cribl_control_plane.utils import FieldMetadata, PathParamMetadata
7
+ from cribl_control_plane.utils import (
8
+ FieldMetadata,
9
+ PathParamMetadata,
10
+ validate_open_enum,
11
+ )
12
+ from pydantic.functional_validators import PlainValidator
8
13
  from typing import List, Optional
9
14
  from typing_extensions import Annotated, NotRequired, TypedDict
10
15
 
@@ -18,7 +23,7 @@ class DeleteConfigGroupByProductAndIDRequestTypedDict(TypedDict):
18
23
 
19
24
  class DeleteConfigGroupByProductAndIDRequest(BaseModel):
20
25
  product: Annotated[
21
- ProductsCore,
26
+ Annotated[ProductsCore, PlainValidator(validate_open_enum(False))],
22
27
  FieldMetadata(path=PathParamMetadata(style="simple", explode=False)),
23
28
  ]
24
29
  r"""Name of the Cribl product to get the Worker Groups or Edge Fleets for."""
@@ -9,7 +9,9 @@ from cribl_control_plane.utils import (
9
9
  FieldMetadata,
10
10
  PathParamMetadata,
11
11
  QueryParamMetadata,
12
+ validate_open_enum,
12
13
  )
14
+ from pydantic.functional_validators import PlainValidator
13
15
  from typing import List, Optional
14
16
  from typing_extensions import Annotated, NotRequired, TypedDict
15
17
 
@@ -25,7 +27,7 @@ class GetConfigGroupACLByProductAndIDRequestTypedDict(TypedDict):
25
27
 
26
28
  class GetConfigGroupACLByProductAndIDRequest(BaseModel):
27
29
  product: Annotated[
28
- ProductsCore,
30
+ Annotated[ProductsCore, PlainValidator(validate_open_enum(False))],
29
31
  FieldMetadata(path=PathParamMetadata(style="simple", explode=False)),
30
32
  ]
31
33
  r"""Name of the Cribl product to get the Worker Groups or Edge Fleets for."""
@@ -36,7 +38,7 @@ class GetConfigGroupACLByProductAndIDRequest(BaseModel):
36
38
  r"""The <code>id</code> of the Worker Group or Edge Fleet to get the ACL for."""
37
39
 
38
40
  type: Annotated[
39
- Optional[RbacResource],
41
+ Annotated[Optional[RbacResource], PlainValidator(validate_open_enum(False))],
40
42
  FieldMetadata(query=QueryParamMetadata(style="form", explode=True)),
41
43
  ] = None
42
44
  r"""Filter for limiting the response to ACL entries for the specified RBAC resource type."""
@@ -9,7 +9,9 @@ from cribl_control_plane.utils import (
9
9
  FieldMetadata,
10
10
  PathParamMetadata,
11
11
  QueryParamMetadata,
12
+ validate_open_enum,
12
13
  )
14
+ from pydantic.functional_validators import PlainValidator
13
15
  from typing import List, Optional
14
16
  from typing_extensions import Annotated, NotRequired, TypedDict
15
17
 
@@ -25,7 +27,7 @@ class GetConfigGroupACLTeamsByProductAndIDRequestTypedDict(TypedDict):
25
27
 
26
28
  class GetConfigGroupACLTeamsByProductAndIDRequest(BaseModel):
27
29
  product: Annotated[
28
- ProductsCore,
30
+ Annotated[ProductsCore, PlainValidator(validate_open_enum(False))],
29
31
  FieldMetadata(path=PathParamMetadata(style="simple", explode=False)),
30
32
  ]
31
33
  r"""Name of the Cribl product that contains the Worker Group or Edge Fleet."""
@@ -36,7 +38,7 @@ class GetConfigGroupACLTeamsByProductAndIDRequest(BaseModel):
36
38
  r"""The <code>id</code> of the Worker Group or Edge Fleet to get the team ACL for."""
37
39
 
38
40
  type: Annotated[
39
- Optional[RbacResource],
41
+ Annotated[Optional[RbacResource], PlainValidator(validate_open_enum(False))],
40
42
  FieldMetadata(query=QueryParamMetadata(style="form", explode=True)),
41
43
  ] = None
42
44
  r"""Filter for limiting the response to ACL entries for the specified RBAC resource type."""
@@ -8,7 +8,9 @@ from cribl_control_plane.utils import (
8
8
  FieldMetadata,
9
9
  PathParamMetadata,
10
10
  QueryParamMetadata,
11
+ validate_open_enum,
11
12
  )
13
+ from pydantic.functional_validators import PlainValidator
12
14
  from typing import List, Optional
13
15
  from typing_extensions import Annotated, NotRequired, TypedDict
14
16
 
@@ -24,7 +26,7 @@ class GetConfigGroupByProductAndIDRequestTypedDict(TypedDict):
24
26
 
25
27
  class GetConfigGroupByProductAndIDRequest(BaseModel):
26
28
  product: Annotated[
27
- ProductsCore,
29
+ Annotated[ProductsCore, PlainValidator(validate_open_enum(False))],
28
30
  FieldMetadata(path=PathParamMetadata(style="simple", explode=False)),
29
31
  ]
30
32
  r"""Name of the Cribl product to get the Worker Groups or Edge Fleets for."""