1
0
mirror of synced 2025-12-30 12:04:43 -05:00
Files
airbyte/octavia-cli/octavia_cli/check_context.py
Cole Snodgrass 2e099acc52 update headers from 2022 -> 2023 (#22594)
* It's 2023!

* 2022 -> 2023

---------

Co-authored-by: evantahler <evan@airbyte.io>
2023-02-08 13:01:16 -08:00

94 lines
3.2 KiB
Python

#
# Copyright (c) 2023 Airbyte, Inc., all rights reserved.
#
import os
import airbyte_api_client
import click
from airbyte_api_client.api import health_api, workspace_api
from airbyte_api_client.model.workspace_id_request_body import WorkspaceIdRequestBody
from urllib3.exceptions import MaxRetryError
from .init.commands import DIRECTORIES_TO_CREATE as REQUIRED_PROJECT_DIRECTORIES
class UnhealthyApiError(click.ClickException):
pass
class UnreachableAirbyteInstanceError(click.ClickException):
pass
class WorkspaceIdError(click.ClickException):
pass
class ProjectNotInitializedError(click.ClickException):
pass
def check_api_health(api_client: airbyte_api_client.ApiClient) -> None:
"""Check if the Airbyte API is network reachable and healthy.
Args:
api_client (airbyte_api_client.ApiClient): Airbyte API client.
Raises:
click.ClickException: Raised if the Airbyte api server is unavailable according to the API response.
click.ClickException: Raised if the Airbyte URL is not reachable.
"""
api_instance = health_api.HealthApi(api_client)
try:
api_response = api_instance.get_health_check()
if not api_response.available:
raise UnhealthyApiError(
"Your Airbyte instance is not ready to receive requests: the health endpoint returned 'available: False.'"
)
except (airbyte_api_client.ApiException, MaxRetryError) as e:
raise UnreachableAirbyteInstanceError(
f"Could not reach your Airbyte instance, make sure the instance is up and running and network reachable: {e}"
)
def check_workspace_exists(api_client: airbyte_api_client.ApiClient, workspace_id: str) -> None:
"""Check if the provided workspace id corresponds to an existing workspace on the Airbyte instance.
Args:
api_client (airbyte_api_client.ApiClient): Airbyte API client.
workspace_id (str): Id of the workspace whose existence we are trying to verify.
Raises:
click.ClickException: Raised if the workspace does not exist on the Airbyte instance.
"""
api_instance = workspace_api.WorkspaceApi(api_client)
try:
api_instance.get_workspace(WorkspaceIdRequestBody(workspace_id=workspace_id), _check_return_type=False)
except airbyte_api_client.ApiException:
raise WorkspaceIdError("The workspace you are trying to use does not exist in your Airbyte instance")
def check_is_initialized(project_directory: str = ".") -> bool:
"""Check if required project directories exist to consider the project as initialized.
Args:
project_directory (str, optional): Where the project should be initialized. Defaults to ".".
Returns:
bool: [description]
"""
sub_directories = [f.name for f in os.scandir(project_directory) if f.is_dir()]
return set(REQUIRED_PROJECT_DIRECTORIES).issubset(sub_directories)
def requires_init(f):
def wrapper(ctx, **kwargs):
if not ctx.obj["PROJECT_IS_INITIALIZED"]:
raise ProjectNotInitializedError(
"Your octavia project is not initialized, please run 'octavia init' before running this command."
)
f(ctx, **kwargs)
return wrapper