coolipy.client
Synchronous coolipy client.
1"""Synchronous coolipy client.""" 2 3from __future__ import annotations 4 5import httpx 6 7from coolipy._http import SyncTransport, build_base_url, parse_response 8from coolipy._response import CoolipyAPIResponse 9from coolipy.exceptions import CoolipyConfigError 10from coolipy.models.system import SystemMessage 11from coolipy.resources.applications import Applications 12from coolipy.resources.databases import Databases 13from coolipy.resources.deployments import Deployments 14from coolipy.resources.projects import Projects 15from coolipy.resources.s3_storages import S3Storages 16from coolipy.resources.security import Security 17from coolipy.resources.servers import Servers 18from coolipy.resources.services import Services 19from coolipy.resources.tags import Tags 20from coolipy.resources.teams import Teams 21 22 23class Coolipy: 24 """Synchronous client for the Coolify API. 25 26 Args: 27 coolify_api_key: Bearer token used to authenticate with the Coolify API. 28 coolify_endpoint: Hostname or IP of the Coolify instance. 29 coolify_port: Port of the Coolify instance (ignored when ``omit_port``). 30 omit_port: When ``True``, build the base URL without a port. 31 http_protocol: ``"http"`` or ``"https"``. 32 timeout: Request timeout in seconds. 33 transport: Optional httpx transport override (mainly for testing). 34 """ 35 36 def __init__( 37 self, 38 coolify_api_key: str, 39 coolify_endpoint: str, 40 coolify_port: int = 8000, 41 omit_port: bool = False, 42 http_protocol: str = "http", 43 timeout: float = 30.0, 44 transport: httpx.BaseTransport | None = None, 45 ) -> None: 46 if not coolify_api_key: 47 raise CoolipyConfigError("coolify_api_key must be a non-empty string.") 48 base_url = build_base_url(http_protocol, coolify_endpoint, coolify_port, omit_port) 49 self._transport = SyncTransport( 50 base_url, coolify_api_key, timeout=timeout, transport=transport 51 ) 52 self.applications = Applications(self._transport) 53 self.databases = Databases(self._transport) 54 self.services = Services(self._transport) 55 self.servers = Servers(self._transport) 56 self.projects = Projects(self._transport) 57 self.teams = Teams(self._transport) 58 self.deployments = Deployments(self._transport) 59 self.tags = Tags(self._transport) 60 self.s3_storages = S3Storages(self._transport) 61 self.security = Security(self._transport) 62 63 def version(self) -> CoolipyAPIResponse[str]: 64 """Get the Coolify version.""" 65 return parse_response(self._transport.request("GET", "/version"), str) 66 67 def health(self) -> CoolipyAPIResponse[str]: 68 """Run the Coolify healthcheck.""" 69 return parse_response(self._transport.request("GET", "/health"), str) 70 71 def enable_api(self) -> CoolipyAPIResponse[SystemMessage]: 72 """Enable the Coolify API (requires root permissions).""" 73 return parse_response(self._transport.request("POST", "/enable"), SystemMessage) 74 75 def disable_api(self) -> CoolipyAPIResponse[SystemMessage]: 76 """Disable the Coolify API (requires root permissions).""" 77 return parse_response(self._transport.request("POST", "/disable"), SystemMessage) 78 79 def enable_mcp(self) -> CoolipyAPIResponse[SystemMessage]: 80 """Enable the Coolify MCP server (requires root permissions).""" 81 return parse_response(self._transport.request("POST", "/mcp/enable"), SystemMessage) 82 83 def disable_mcp(self) -> CoolipyAPIResponse[SystemMessage]: 84 """Disable the Coolify MCP server (requires root permissions).""" 85 return parse_response(self._transport.request("POST", "/mcp/disable"), SystemMessage) 86 87 def close(self) -> None: 88 """Close the underlying HTTP client.""" 89 self._transport.close() 90 91 def __enter__(self) -> Coolipy: 92 return self 93 94 def __exit__(self, *exc: object) -> None: 95 self.close()
class
Coolipy:
24class Coolipy: 25 """Synchronous client for the Coolify API. 26 27 Args: 28 coolify_api_key: Bearer token used to authenticate with the Coolify API. 29 coolify_endpoint: Hostname or IP of the Coolify instance. 30 coolify_port: Port of the Coolify instance (ignored when ``omit_port``). 31 omit_port: When ``True``, build the base URL without a port. 32 http_protocol: ``"http"`` or ``"https"``. 33 timeout: Request timeout in seconds. 34 transport: Optional httpx transport override (mainly for testing). 35 """ 36 37 def __init__( 38 self, 39 coolify_api_key: str, 40 coolify_endpoint: str, 41 coolify_port: int = 8000, 42 omit_port: bool = False, 43 http_protocol: str = "http", 44 timeout: float = 30.0, 45 transport: httpx.BaseTransport | None = None, 46 ) -> None: 47 if not coolify_api_key: 48 raise CoolipyConfigError("coolify_api_key must be a non-empty string.") 49 base_url = build_base_url(http_protocol, coolify_endpoint, coolify_port, omit_port) 50 self._transport = SyncTransport( 51 base_url, coolify_api_key, timeout=timeout, transport=transport 52 ) 53 self.applications = Applications(self._transport) 54 self.databases = Databases(self._transport) 55 self.services = Services(self._transport) 56 self.servers = Servers(self._transport) 57 self.projects = Projects(self._transport) 58 self.teams = Teams(self._transport) 59 self.deployments = Deployments(self._transport) 60 self.tags = Tags(self._transport) 61 self.s3_storages = S3Storages(self._transport) 62 self.security = Security(self._transport) 63 64 def version(self) -> CoolipyAPIResponse[str]: 65 """Get the Coolify version.""" 66 return parse_response(self._transport.request("GET", "/version"), str) 67 68 def health(self) -> CoolipyAPIResponse[str]: 69 """Run the Coolify healthcheck.""" 70 return parse_response(self._transport.request("GET", "/health"), str) 71 72 def enable_api(self) -> CoolipyAPIResponse[SystemMessage]: 73 """Enable the Coolify API (requires root permissions).""" 74 return parse_response(self._transport.request("POST", "/enable"), SystemMessage) 75 76 def disable_api(self) -> CoolipyAPIResponse[SystemMessage]: 77 """Disable the Coolify API (requires root permissions).""" 78 return parse_response(self._transport.request("POST", "/disable"), SystemMessage) 79 80 def enable_mcp(self) -> CoolipyAPIResponse[SystemMessage]: 81 """Enable the Coolify MCP server (requires root permissions).""" 82 return parse_response(self._transport.request("POST", "/mcp/enable"), SystemMessage) 83 84 def disable_mcp(self) -> CoolipyAPIResponse[SystemMessage]: 85 """Disable the Coolify MCP server (requires root permissions).""" 86 return parse_response(self._transport.request("POST", "/mcp/disable"), SystemMessage) 87 88 def close(self) -> None: 89 """Close the underlying HTTP client.""" 90 self._transport.close() 91 92 def __enter__(self) -> Coolipy: 93 return self 94 95 def __exit__(self, *exc: object) -> None: 96 self.close()
Synchronous client for the Coolify API.
Args:
coolify_api_key: Bearer token used to authenticate with the Coolify API.
coolify_endpoint: Hostname or IP of the Coolify instance.
coolify_port: Port of the Coolify instance (ignored when omit_port).
omit_port: When True, build the base URL without a port.
http_protocol: "http" or "https".
timeout: Request timeout in seconds.
transport: Optional httpx transport override (mainly for testing).
Coolipy( coolify_api_key: str, coolify_endpoint: str, coolify_port: int = 8000, omit_port: bool = False, http_protocol: str = 'http', timeout: float = 30.0, transport: httpx.BaseTransport | None = None)
37 def __init__( 38 self, 39 coolify_api_key: str, 40 coolify_endpoint: str, 41 coolify_port: int = 8000, 42 omit_port: bool = False, 43 http_protocol: str = "http", 44 timeout: float = 30.0, 45 transport: httpx.BaseTransport | None = None, 46 ) -> None: 47 if not coolify_api_key: 48 raise CoolipyConfigError("coolify_api_key must be a non-empty string.") 49 base_url = build_base_url(http_protocol, coolify_endpoint, coolify_port, omit_port) 50 self._transport = SyncTransport( 51 base_url, coolify_api_key, timeout=timeout, transport=transport 52 ) 53 self.applications = Applications(self._transport) 54 self.databases = Databases(self._transport) 55 self.services = Services(self._transport) 56 self.servers = Servers(self._transport) 57 self.projects = Projects(self._transport) 58 self.teams = Teams(self._transport) 59 self.deployments = Deployments(self._transport) 60 self.tags = Tags(self._transport) 61 self.s3_storages = S3Storages(self._transport) 62 self.security = Security(self._transport)
64 def version(self) -> CoolipyAPIResponse[str]: 65 """Get the Coolify version.""" 66 return parse_response(self._transport.request("GET", "/version"), str)
Get the Coolify version.
68 def health(self) -> CoolipyAPIResponse[str]: 69 """Run the Coolify healthcheck.""" 70 return parse_response(self._transport.request("GET", "/health"), str)
Run the Coolify healthcheck.
72 def enable_api(self) -> CoolipyAPIResponse[SystemMessage]: 73 """Enable the Coolify API (requires root permissions).""" 74 return parse_response(self._transport.request("POST", "/enable"), SystemMessage)
Enable the Coolify API (requires root permissions).
76 def disable_api(self) -> CoolipyAPIResponse[SystemMessage]: 77 """Disable the Coolify API (requires root permissions).""" 78 return parse_response(self._transport.request("POST", "/disable"), SystemMessage)
Disable the Coolify API (requires root permissions).
80 def enable_mcp(self) -> CoolipyAPIResponse[SystemMessage]: 81 """Enable the Coolify MCP server (requires root permissions).""" 82 return parse_response(self._transport.request("POST", "/mcp/enable"), SystemMessage)
Enable the Coolify MCP server (requires root permissions).