Source code for zcloud.service_enums

from enum import Enum
import os
from typing import Optional, Callable, TypeVar, Union, Any

T = TypeVar('T')

[docs] class MessageStatus(Enum): """Enum for message status values.""" SUCCESS = "success" ERROR = "error"
[docs] class HTTPStatus(Enum): """Enum for standard HTTP status codes.""" BAD_REQUEST = 400 INTERNAL_SERVER_ERROR = 500 OK = 200
#TODO these should come from env vars with defaults
[docs] class HTTPResponse(Enum): """Enum for standard HTTP response messages.""" STATUS = "status" DETAILS = "details"
[docs] class ConfigurableEnum(Enum):
[docs] @classmethod def get_env_value(cls, env_var: str, default_method: Optional[Callable[[], str]] = None, static_default: Optional[str] = None) -> Optional[str]: """ Generic method to get values from environment with fallbacks Parameters ---------- env_var : str The environment variable name to look up default_method : callable, optional A method that returns a default value if provided static_default : str, optional A static default value to use if the environment variable is not set and no default_method is provided Returns ------- str The value from the environment variable or a default value """ if default_method: return os.environ.get(env_var, default_method()) return os.environ.get(env_var, static_default)
[docs] class ProjectId(ConfigurableEnum): """Enum for project IDs.""" TEST_ENVIRONMENT = "zipbio-cloud-test-1" PROD_ENVIRONMENT = "zipbio-research" INTEGRATION_TEST_ENVIRONMENT = "test-project"
[docs] @classmethod def infer_default_environment(cls) -> str: """ Infer the default environment based on environment variables. Returns ------- str The default environment project ID. """ if os.environ.get("INTEGRATION_TEST_MODE", "false").lower() == "true": return cls.INTEGRATION_TEST_ENVIRONMENT.value return cls.TEST_ENVIRONMENT.value
[docs] @classmethod def current(cls) -> str: result = cls.get_env_value("GCP_PROJECT_ID", cls.infer_default_environment) if result is None: # Fallback to test environment if no environment variable is set return cls.TEST_ENVIRONMENT.value return result
[docs] class LocationId(Enum): """Enum for location IDs.""" US_CENTRAL1 = "us-central1" CURRENT_LOCATION = os.environ.get("GCP_LOCATION_ID", "us-central1")
[docs] class RedisInstanceId(Enum): """Enum for Redis instance IDs.""" TEST_REDIS_INSTANCE = "test-redis-instance" PROD_REDIS_INSTANCE = "prod-redis-instance" CURRENT_REDIS_INSTANCE = os.environ.get("REDIS_INSTANCE_ID", None)
[docs] class SIORedisChannel(Enum): """Enum for SIO Redis channels.""" WEBSOCKET_CHANNEL = os.environ.get("WEBSOCKET_CHANNEL", None)
#HACK: these endpoints are hardcoded to the test project, and should be custom domain mappings instead #TODO: create custom domain mappings and point to those as defaults
[docs] class APIEndpoint(Enum): """Enum for API endpoints.""" BENCHLING_SERVICE_URL = os.environ.get("BENCHLING_SERVICE_URL", "https://benchling-editor-523495735651.us-central1.run.app") METADATA_VALIDATOR_URL = os.environ.get("METADATA_VALIDATOR_URL", "https://get-schemas-523495735651.us-central1.run.app") SCU_VALIDATOR_URL = os.environ.get("SCU_VALIDATOR_URL", "https://get-schemas-523495735651.us-central1.run.app") MONDAY_SERVICE_URL = os.environ.get("MONDAY_SERVICE_URL", "https://monday-service-523495735651.us-central1.run.app") JIRA_SERVICE_URL = os.environ.get("JIRA_SERVICE_URL", "https://get-jira-ticket-523495735651.us-central1.run.app")