airbyte-internal-ops 0.4.2__py3-none-any.whl → 0.5.1__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.
- {airbyte_internal_ops-0.4.2.dist-info → airbyte_internal_ops-0.5.1.dist-info}/METADATA +2 -1
- {airbyte_internal_ops-0.4.2.dist-info → airbyte_internal_ops-0.5.1.dist-info}/RECORD +21 -129
- airbyte_ops_mcp/cli/cloud.py +31 -2
- airbyte_ops_mcp/cloud_admin/api_client.py +506 -33
- airbyte_ops_mcp/cloud_admin/models.py +56 -0
- airbyte_ops_mcp/constants.py +58 -0
- airbyte_ops_mcp/{_legacy/airbyte_ci/metadata_service/docker_hub.py → docker_hub.py} +16 -10
- airbyte_ops_mcp/mcp/cloud_connector_versions.py +491 -10
- airbyte_ops_mcp/mcp/prerelease.py +5 -44
- airbyte_ops_mcp/mcp/prod_db_queries.py +128 -4
- airbyte_ops_mcp/mcp/regression_tests.py +10 -5
- airbyte_ops_mcp/{_legacy/airbyte_ci/metadata_service/validators/metadata_validator.py → metadata_validator.py} +18 -12
- airbyte_ops_mcp/prod_db_access/queries.py +51 -0
- airbyte_ops_mcp/prod_db_access/sql.py +76 -0
- airbyte_ops_mcp/regression_tests/ci_output.py +8 -4
- airbyte_ops_mcp/regression_tests/connection_fetcher.py +16 -5
- airbyte_ops_mcp/regression_tests/http_metrics.py +21 -2
- airbyte_ops_mcp/regression_tests/models.py +7 -1
- airbyte_ops_mcp/telemetry.py +162 -0
- airbyte_ops_mcp/_legacy/airbyte_ci/connector_live_tests/.gitignore +0 -1
- airbyte_ops_mcp/_legacy/airbyte_ci/connector_live_tests/README.md +0 -420
- airbyte_ops_mcp/_legacy/airbyte_ci/connector_live_tests/__init__.py +0 -2
- airbyte_ops_mcp/_legacy/airbyte_ci/connector_live_tests/commons/__init__.py +0 -1
- airbyte_ops_mcp/_legacy/airbyte_ci/connector_live_tests/commons/backends/__init__.py +0 -8
- airbyte_ops_mcp/_legacy/airbyte_ci/connector_live_tests/commons/backends/base_backend.py +0 -16
- airbyte_ops_mcp/_legacy/airbyte_ci/connector_live_tests/commons/backends/duckdb_backend.py +0 -87
- airbyte_ops_mcp/_legacy/airbyte_ci/connector_live_tests/commons/backends/file_backend.py +0 -165
- airbyte_ops_mcp/_legacy/airbyte_ci/connector_live_tests/commons/connection_objects_retrieval.py +0 -377
- airbyte_ops_mcp/_legacy/airbyte_ci/connector_live_tests/commons/connector_runner.py +0 -247
- airbyte_ops_mcp/_legacy/airbyte_ci/connector_live_tests/commons/errors.py +0 -7
- airbyte_ops_mcp/_legacy/airbyte_ci/connector_live_tests/commons/evaluation_modes.py +0 -25
- airbyte_ops_mcp/_legacy/airbyte_ci/connector_live_tests/commons/hacks.py +0 -23
- airbyte_ops_mcp/_legacy/airbyte_ci/connector_live_tests/commons/json_schema_helper.py +0 -384
- airbyte_ops_mcp/_legacy/airbyte_ci/connector_live_tests/commons/mitm_addons.py +0 -37
- airbyte_ops_mcp/_legacy/airbyte_ci/connector_live_tests/commons/models.py +0 -595
- airbyte_ops_mcp/_legacy/airbyte_ci/connector_live_tests/commons/proxy.py +0 -207
- airbyte_ops_mcp/_legacy/airbyte_ci/connector_live_tests/commons/secret_access.py +0 -47
- airbyte_ops_mcp/_legacy/airbyte_ci/connector_live_tests/commons/segment_tracking.py +0 -45
- airbyte_ops_mcp/_legacy/airbyte_ci/connector_live_tests/commons/utils.py +0 -214
- airbyte_ops_mcp/_legacy/airbyte_ci/connector_live_tests/conftest.py.disabled +0 -751
- airbyte_ops_mcp/_legacy/airbyte_ci/connector_live_tests/consts.py +0 -4
- airbyte_ops_mcp/_legacy/airbyte_ci/connector_live_tests/poetry.lock +0 -4480
- airbyte_ops_mcp/_legacy/airbyte_ci/connector_live_tests/pytest.ini +0 -9
- airbyte_ops_mcp/_legacy/airbyte_ci/connector_live_tests/regression_tests/__init__.py +0 -1
- airbyte_ops_mcp/_legacy/airbyte_ci/connector_live_tests/regression_tests/test_check.py +0 -61
- airbyte_ops_mcp/_legacy/airbyte_ci/connector_live_tests/regression_tests/test_discover.py +0 -117
- airbyte_ops_mcp/_legacy/airbyte_ci/connector_live_tests/regression_tests/test_read.py +0 -627
- airbyte_ops_mcp/_legacy/airbyte_ci/connector_live_tests/regression_tests/test_spec.py +0 -43
- airbyte_ops_mcp/_legacy/airbyte_ci/connector_live_tests/report.py +0 -542
- airbyte_ops_mcp/_legacy/airbyte_ci/connector_live_tests/stash_keys.py +0 -38
- airbyte_ops_mcp/_legacy/airbyte_ci/connector_live_tests/templates/__init__.py +0 -0
- airbyte_ops_mcp/_legacy/airbyte_ci/connector_live_tests/templates/private_details.html.j2 +0 -305
- airbyte_ops_mcp/_legacy/airbyte_ci/connector_live_tests/templates/report.html.j2 +0 -515
- airbyte_ops_mcp/_legacy/airbyte_ci/connector_live_tests/utils.py +0 -187
- airbyte_ops_mcp/_legacy/airbyte_ci/connector_live_tests/validation_tests/__init__.py +0 -0
- airbyte_ops_mcp/_legacy/airbyte_ci/connector_live_tests/validation_tests/test_check.py +0 -61
- airbyte_ops_mcp/_legacy/airbyte_ci/connector_live_tests/validation_tests/test_discover.py +0 -217
- airbyte_ops_mcp/_legacy/airbyte_ci/connector_live_tests/validation_tests/test_read.py +0 -177
- airbyte_ops_mcp/_legacy/airbyte_ci/connector_live_tests/validation_tests/test_spec.py +0 -631
- airbyte_ops_mcp/_legacy/airbyte_ci/metadata_models/README.md +0 -91
- airbyte_ops_mcp/_legacy/airbyte_ci/metadata_models/bin/bundle-schemas.js +0 -48
- airbyte_ops_mcp/_legacy/airbyte_ci/metadata_models/bin/generate-metadata-models.sh +0 -36
- airbyte_ops_mcp/_legacy/airbyte_ci/metadata_models/generated/ActorDefinitionResourceRequirements.py +0 -54
- airbyte_ops_mcp/_legacy/airbyte_ci/metadata_models/generated/AirbyteInternal.py +0 -22
- airbyte_ops_mcp/_legacy/airbyte_ci/metadata_models/generated/AllowedHosts.py +0 -18
- airbyte_ops_mcp/_legacy/airbyte_ci/metadata_models/generated/ConnectorBreakingChanges.py +0 -65
- airbyte_ops_mcp/_legacy/airbyte_ci/metadata_models/generated/ConnectorBuildOptions.py +0 -15
- airbyte_ops_mcp/_legacy/airbyte_ci/metadata_models/generated/ConnectorIPCOptions.py +0 -25
- airbyte_ops_mcp/_legacy/airbyte_ci/metadata_models/generated/ConnectorMetadataDefinitionV0.json +0 -897
- airbyte_ops_mcp/_legacy/airbyte_ci/metadata_models/generated/ConnectorMetadataDefinitionV0.py +0 -478
- airbyte_ops_mcp/_legacy/airbyte_ci/metadata_models/generated/ConnectorMetrics.py +0 -24
- airbyte_ops_mcp/_legacy/airbyte_ci/metadata_models/generated/ConnectorPackageInfo.py +0 -12
- airbyte_ops_mcp/_legacy/airbyte_ci/metadata_models/generated/ConnectorRegistryDestinationDefinition.py +0 -407
- airbyte_ops_mcp/_legacy/airbyte_ci/metadata_models/generated/ConnectorRegistryReleases.py +0 -406
- airbyte_ops_mcp/_legacy/airbyte_ci/metadata_models/generated/ConnectorRegistrySourceDefinition.py +0 -407
- airbyte_ops_mcp/_legacy/airbyte_ci/metadata_models/generated/ConnectorRegistryV0.py +0 -413
- airbyte_ops_mcp/_legacy/airbyte_ci/metadata_models/generated/ConnectorReleases.py +0 -98
- airbyte_ops_mcp/_legacy/airbyte_ci/metadata_models/generated/ConnectorTestSuiteOptions.py +0 -58
- airbyte_ops_mcp/_legacy/airbyte_ci/metadata_models/generated/GeneratedFields.py +0 -62
- airbyte_ops_mcp/_legacy/airbyte_ci/metadata_models/generated/GitInfo.py +0 -31
- airbyte_ops_mcp/_legacy/airbyte_ci/metadata_models/generated/JobType.py +0 -23
- airbyte_ops_mcp/_legacy/airbyte_ci/metadata_models/generated/NormalizationDestinationDefinitionConfig.py +0 -24
- airbyte_ops_mcp/_legacy/airbyte_ci/metadata_models/generated/RegistryOverrides.py +0 -111
- airbyte_ops_mcp/_legacy/airbyte_ci/metadata_models/generated/ReleaseStage.py +0 -15
- airbyte_ops_mcp/_legacy/airbyte_ci/metadata_models/generated/RemoteRegistries.py +0 -23
- airbyte_ops_mcp/_legacy/airbyte_ci/metadata_models/generated/ResourceRequirements.py +0 -18
- airbyte_ops_mcp/_legacy/airbyte_ci/metadata_models/generated/RolloutConfiguration.py +0 -29
- airbyte_ops_mcp/_legacy/airbyte_ci/metadata_models/generated/Secret.py +0 -34
- airbyte_ops_mcp/_legacy/airbyte_ci/metadata_models/generated/SecretStore.py +0 -22
- airbyte_ops_mcp/_legacy/airbyte_ci/metadata_models/generated/SourceFileInfo.py +0 -16
- airbyte_ops_mcp/_legacy/airbyte_ci/metadata_models/generated/SuggestedStreams.py +0 -18
- airbyte_ops_mcp/_legacy/airbyte_ci/metadata_models/generated/SupportLevel.py +0 -15
- airbyte_ops_mcp/_legacy/airbyte_ci/metadata_models/generated/TestConnections.py +0 -14
- airbyte_ops_mcp/_legacy/airbyte_ci/metadata_models/generated/__init__.py +0 -31
- airbyte_ops_mcp/_legacy/airbyte_ci/metadata_models/generated/airbyte-connector-metadata-schema.json +0 -0
- airbyte_ops_mcp/_legacy/airbyte_ci/metadata_models/models/ActorDefinitionResourceRequirements.yaml +0 -30
- airbyte_ops_mcp/_legacy/airbyte_ci/metadata_models/models/AirbyteInternal.yaml +0 -32
- airbyte_ops_mcp/_legacy/airbyte_ci/metadata_models/models/AllowedHosts.yaml +0 -13
- airbyte_ops_mcp/_legacy/airbyte_ci/metadata_models/models/ConnectorBreakingChanges.yaml +0 -65
- airbyte_ops_mcp/_legacy/airbyte_ci/metadata_models/models/ConnectorBuildOptions.yaml +0 -10
- airbyte_ops_mcp/_legacy/airbyte_ci/metadata_models/models/ConnectorIPCOptions.yaml +0 -29
- airbyte_ops_mcp/_legacy/airbyte_ci/metadata_models/models/ConnectorMetadataDefinitionV0.yaml +0 -172
- airbyte_ops_mcp/_legacy/airbyte_ci/metadata_models/models/ConnectorMetrics.yaml +0 -30
- airbyte_ops_mcp/_legacy/airbyte_ci/metadata_models/models/ConnectorPackageInfo.yaml +0 -9
- airbyte_ops_mcp/_legacy/airbyte_ci/metadata_models/models/ConnectorRegistryDestinationDefinition.yaml +0 -90
- airbyte_ops_mcp/_legacy/airbyte_ci/metadata_models/models/ConnectorRegistryReleases.yaml +0 -35
- airbyte_ops_mcp/_legacy/airbyte_ci/metadata_models/models/ConnectorRegistrySourceDefinition.yaml +0 -92
- airbyte_ops_mcp/_legacy/airbyte_ci/metadata_models/models/ConnectorRegistryV0.yaml +0 -18
- airbyte_ops_mcp/_legacy/airbyte_ci/metadata_models/models/ConnectorReleases.yaml +0 -16
- airbyte_ops_mcp/_legacy/airbyte_ci/metadata_models/models/ConnectorTestSuiteOptions.yaml +0 -28
- airbyte_ops_mcp/_legacy/airbyte_ci/metadata_models/models/GeneratedFields.yaml +0 -16
- airbyte_ops_mcp/_legacy/airbyte_ci/metadata_models/models/GitInfo.yaml +0 -21
- airbyte_ops_mcp/_legacy/airbyte_ci/metadata_models/models/JobType.yaml +0 -14
- airbyte_ops_mcp/_legacy/airbyte_ci/metadata_models/models/NormalizationDestinationDefinitionConfig.yaml +0 -21
- airbyte_ops_mcp/_legacy/airbyte_ci/metadata_models/models/RegistryOverrides.yaml +0 -38
- airbyte_ops_mcp/_legacy/airbyte_ci/metadata_models/models/ReleaseStage.yaml +0 -11
- airbyte_ops_mcp/_legacy/airbyte_ci/metadata_models/models/RemoteRegistries.yaml +0 -25
- airbyte_ops_mcp/_legacy/airbyte_ci/metadata_models/models/ResourceRequirements.yaml +0 -16
- airbyte_ops_mcp/_legacy/airbyte_ci/metadata_models/models/RolloutConfiguration.yaml +0 -29
- airbyte_ops_mcp/_legacy/airbyte_ci/metadata_models/models/Secret.yaml +0 -19
- airbyte_ops_mcp/_legacy/airbyte_ci/metadata_models/models/SecretStore.yaml +0 -16
- airbyte_ops_mcp/_legacy/airbyte_ci/metadata_models/models/SourceFileInfo.yaml +0 -17
- airbyte_ops_mcp/_legacy/airbyte_ci/metadata_models/models/SuggestedStreams.yaml +0 -13
- airbyte_ops_mcp/_legacy/airbyte_ci/metadata_models/models/SupportLevel.yaml +0 -10
- airbyte_ops_mcp/_legacy/airbyte_ci/metadata_models/models/TestConnections.yaml +0 -17
- airbyte_ops_mcp/_legacy/airbyte_ci/metadata_models/package-lock.json +0 -62
- airbyte_ops_mcp/_legacy/airbyte_ci/metadata_models/package.json +0 -12
- airbyte_ops_mcp/_legacy/airbyte_ci/metadata_models/transform.py +0 -71
- {airbyte_internal_ops-0.4.2.dist-info → airbyte_internal_ops-0.5.1.dist-info}/WHEEL +0 -0
- {airbyte_internal_ops-0.4.2.dist-info → airbyte_internal_ops-0.5.1.dist-info}/entry_points.txt +0 -0
|
@@ -71,3 +71,59 @@ class VersionOverrideOperationResult(BaseModel):
|
|
|
71
71
|
if self.success:
|
|
72
72
|
return f"✓ {self.message}"
|
|
73
73
|
return f"✗ {self.message}"
|
|
74
|
+
|
|
75
|
+
|
|
76
|
+
class WorkspaceVersionOverrideResult(BaseModel):
|
|
77
|
+
"""Result of a workspace-level version override operation.
|
|
78
|
+
|
|
79
|
+
This model provides detailed information about the outcome of a workspace-level
|
|
80
|
+
version pinning or unpinning operation.
|
|
81
|
+
"""
|
|
82
|
+
|
|
83
|
+
success: bool = Field(description="Whether the operation succeeded")
|
|
84
|
+
message: str = Field(description="Human-readable message describing the result")
|
|
85
|
+
workspace_id: str = Field(description="The workspace ID")
|
|
86
|
+
connector_name: str = Field(
|
|
87
|
+
description="The connector name (e.g., 'source-github')"
|
|
88
|
+
)
|
|
89
|
+
connector_type: Literal["source", "destination"] = Field(
|
|
90
|
+
description="The type of connector (source or destination)"
|
|
91
|
+
)
|
|
92
|
+
version: str | None = Field(
|
|
93
|
+
default=None,
|
|
94
|
+
description="The version that was pinned (None if cleared or failed)",
|
|
95
|
+
)
|
|
96
|
+
|
|
97
|
+
def __str__(self) -> str:
|
|
98
|
+
"""Return a string representation of the operation result."""
|
|
99
|
+
if self.success:
|
|
100
|
+
return f"✓ {self.message}"
|
|
101
|
+
return f"✗ {self.message}"
|
|
102
|
+
|
|
103
|
+
|
|
104
|
+
class OrganizationVersionOverrideResult(BaseModel):
|
|
105
|
+
"""Result of an organization-level version override operation.
|
|
106
|
+
|
|
107
|
+
This model provides detailed information about the outcome of an organization-level
|
|
108
|
+
version pinning or unpinning operation.
|
|
109
|
+
"""
|
|
110
|
+
|
|
111
|
+
success: bool = Field(description="Whether the operation succeeded")
|
|
112
|
+
message: str = Field(description="Human-readable message describing the result")
|
|
113
|
+
organization_id: str = Field(description="The organization ID")
|
|
114
|
+
connector_name: str = Field(
|
|
115
|
+
description="The connector name (e.g., 'source-github')"
|
|
116
|
+
)
|
|
117
|
+
connector_type: Literal["source", "destination"] = Field(
|
|
118
|
+
description="The type of connector (source or destination)"
|
|
119
|
+
)
|
|
120
|
+
version: str | None = Field(
|
|
121
|
+
default=None,
|
|
122
|
+
description="The version that was pinned (None if cleared or failed)",
|
|
123
|
+
)
|
|
124
|
+
|
|
125
|
+
def __str__(self) -> str:
|
|
126
|
+
"""Return a string representation of the operation result."""
|
|
127
|
+
if self.success:
|
|
128
|
+
return f"✓ {self.message}"
|
|
129
|
+
return f"✗ {self.message}"
|
airbyte_ops_mcp/constants.py
CHANGED
|
@@ -122,6 +122,64 @@ class OrganizationAliasEnum(StrEnum):
|
|
|
122
122
|
return alias_mapping[org_id]
|
|
123
123
|
|
|
124
124
|
|
|
125
|
+
# =============================================================================
|
|
126
|
+
# Workspace ID Aliases
|
|
127
|
+
# =============================================================================
|
|
128
|
+
|
|
129
|
+
|
|
130
|
+
class WorkspaceAliasEnum(StrEnum):
|
|
131
|
+
"""Workspace ID aliases that can be used in place of UUIDs.
|
|
132
|
+
|
|
133
|
+
Each member's name is the alias (e.g., "@devin-ai-sandbox") and its value
|
|
134
|
+
is the actual workspace UUID. Use `WorkspaceAliasEnum.resolve()` to
|
|
135
|
+
resolve aliases to actual IDs.
|
|
136
|
+
"""
|
|
137
|
+
|
|
138
|
+
DEVIN_AI_SANDBOX = "266ebdfe-0d7b-4540-9817-de7e4505ba61"
|
|
139
|
+
"""The Devin AI sandbox workspace for testing and development.
|
|
140
|
+
|
|
141
|
+
Alias: @devin-ai-sandbox
|
|
142
|
+
"""
|
|
143
|
+
|
|
144
|
+
@classmethod
|
|
145
|
+
def resolve(cls, workspace_id: str | None) -> str | None:
|
|
146
|
+
"""Resolve a workspace ID alias to its actual UUID.
|
|
147
|
+
|
|
148
|
+
Accepts either an alias string (e.g., "@devin-ai-sandbox") or a
|
|
149
|
+
WorkspaceAliasEnum enum member, and returns the actual UUID.
|
|
150
|
+
|
|
151
|
+
Returns:
|
|
152
|
+
The resolved workspace ID (UUID), or None if input is None.
|
|
153
|
+
If the input doesn't start with "@", it is returned unchanged.
|
|
154
|
+
|
|
155
|
+
Raises:
|
|
156
|
+
PyAirbyteInputError: If the input starts with "@" but is not a recognized alias.
|
|
157
|
+
"""
|
|
158
|
+
if workspace_id is None:
|
|
159
|
+
return None
|
|
160
|
+
|
|
161
|
+
# Handle WorkspaceAliasEnum enum members directly
|
|
162
|
+
if isinstance(workspace_id, cls):
|
|
163
|
+
return workspace_id.value
|
|
164
|
+
|
|
165
|
+
# If it doesn't look like an alias, return as-is (assume it's a UUID)
|
|
166
|
+
if not workspace_id.startswith("@"):
|
|
167
|
+
return workspace_id
|
|
168
|
+
|
|
169
|
+
# Handle alias strings or raise an error if invalid
|
|
170
|
+
alias_mapping = {
|
|
171
|
+
"@devin-ai-sandbox": cls.DEVIN_AI_SANDBOX.value,
|
|
172
|
+
}
|
|
173
|
+
if workspace_id not in alias_mapping:
|
|
174
|
+
raise PyAirbyteInputError(
|
|
175
|
+
message=f"Unknown workspace alias: {workspace_id}",
|
|
176
|
+
context={
|
|
177
|
+
"valid_aliases": list(alias_mapping.keys()),
|
|
178
|
+
},
|
|
179
|
+
)
|
|
180
|
+
return alias_mapping[workspace_id]
|
|
181
|
+
|
|
182
|
+
|
|
125
183
|
CONNECTION_RETRIEVER_PG_CONNECTION_DETAILS_SECRET_ID = (
|
|
126
184
|
"projects/587336813068/secrets/CONNECTION_RETRIEVER_PG_CONNECTION_DETAILS"
|
|
127
185
|
)
|
|
@@ -1,6 +1,13 @@
|
|
|
1
1
|
#
|
|
2
2
|
# Copyright (c) 2023 Airbyte, Inc., all rights reserved.
|
|
3
3
|
#
|
|
4
|
+
"""DockerHub API client with authentication, pagination, and retry support.
|
|
5
|
+
|
|
6
|
+
Provides utilities for interacting with the DockerHub API, including fetching
|
|
7
|
+
image tags and digests, checking image existence, and finding the latest version.
|
|
8
|
+
Supports authenticated requests to avoid rate limits and includes retry logic
|
|
9
|
+
for handling API flakiness.
|
|
10
|
+
"""
|
|
4
11
|
|
|
5
12
|
import os
|
|
6
13
|
import time
|
|
@@ -95,17 +102,16 @@ def get_docker_hub_tags_and_digests(
|
|
|
95
102
|
for result in json_response.get("results", [])
|
|
96
103
|
}
|
|
97
104
|
)
|
|
98
|
-
if paginate:
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
tags_and_digests=tags_and_digests,
|
|
107
|
-
)
|
|
105
|
+
if paginate and (next_page_url := json_response.get("next")):
|
|
106
|
+
tags_and_digests.update(
|
|
107
|
+
get_docker_hub_tags_and_digests(
|
|
108
|
+
image_name,
|
|
109
|
+
retries=retries,
|
|
110
|
+
wait_sec=wait_sec,
|
|
111
|
+
next_page_url=next_page_url,
|
|
112
|
+
tags_and_digests=tags_and_digests,
|
|
108
113
|
)
|
|
114
|
+
)
|
|
109
115
|
return tags_and_digests
|
|
110
116
|
|
|
111
117
|
|