coolipy.resources.projects
Projects resource clients (sync + async).
1"""Projects resource clients (sync + async).""" 2 3from __future__ import annotations 4 5from typing import Any 6 7from coolipy._base import AsyncResourceBase, ResourceBase 8from coolipy._response import CoolipyAPIResponse 9from coolipy.models.common import MessageResponse, UUIDResponse 10from coolipy.models.projects import ( 11 EnvironmentCreateModel, 12 EnvironmentModel, 13 EnvironmentUpdateModel, 14 ProjectCreateModel, 15 ProjectModel, 16 ProjectUpdateModel, 17) 18 19ProjectList = list[ProjectModel] 20EnvironmentList = list[EnvironmentModel] 21 22 23def _dump(model: Any) -> dict[str, Any]: 24 return model.model_dump(mode="json", exclude_none=True) 25 26 27class Projects(ResourceBase): 28 """Synchronous client for Coolify projects.""" 29 30 def list(self) -> CoolipyAPIResponse[ProjectList]: 31 """List all projects.""" 32 return self._get("/projects", response_model=list[ProjectModel]) 33 34 def get(self, uuid: str) -> CoolipyAPIResponse[ProjectModel]: 35 """Get a project by UUID.""" 36 return self._get(f"/projects/{uuid}", response_model=ProjectModel) 37 38 def create(self, model: ProjectCreateModel) -> CoolipyAPIResponse[UUIDResponse]: 39 """Create a project.""" 40 return self._post("/projects", json=_dump(model), response_model=UUIDResponse) 41 42 def update(self, uuid: str, model: ProjectUpdateModel) -> CoolipyAPIResponse[dict]: 43 """Update a project by UUID.""" 44 return self._patch(f"/projects/{uuid}", json=_dump(model), response_model=dict) 45 46 def delete(self, uuid: str) -> CoolipyAPIResponse[MessageResponse]: 47 """Delete a project by UUID.""" 48 return self._delete(f"/projects/{uuid}", response_model=MessageResponse) 49 50 def environment( 51 self, uuid: str, environment_name_or_uuid: str 52 ) -> CoolipyAPIResponse[EnvironmentModel]: 53 """Get an environment by name or UUID.""" 54 return self._get( 55 f"/projects/{uuid}/{environment_name_or_uuid}", response_model=EnvironmentModel 56 ) 57 58 def environments(self, uuid: str) -> CoolipyAPIResponse[EnvironmentList]: 59 """List environments for a project.""" 60 return self._get(f"/projects/{uuid}/environments", response_model=list[EnvironmentModel]) 61 62 def create_environment( 63 self, uuid: str, model: EnvironmentCreateModel 64 ) -> CoolipyAPIResponse[UUIDResponse]: 65 """Create an environment for a project.""" 66 return self._post( 67 f"/projects/{uuid}/environments", json=_dump(model), response_model=UUIDResponse 68 ) 69 70 def update_environment( 71 self, uuid: str, environment_name_or_uuid: str, model: EnvironmentUpdateModel 72 ) -> CoolipyAPIResponse[EnvironmentModel]: 73 """Update an environment by name or UUID.""" 74 return self._patch( 75 f"/projects/{uuid}/environments/{environment_name_or_uuid}", 76 json=_dump(model), 77 response_model=EnvironmentModel, 78 ) 79 80 def delete_environment( 81 self, uuid: str, environment_name_or_uuid: str 82 ) -> CoolipyAPIResponse[MessageResponse]: 83 """Delete an environment by name or UUID.""" 84 return self._delete( 85 f"/projects/{uuid}/environments/{environment_name_or_uuid}", 86 response_model=MessageResponse, 87 ) 88 89 90class AsyncProjects(AsyncResourceBase): 91 """Asynchronous client for Coolify projects.""" 92 93 async def list(self) -> CoolipyAPIResponse[ProjectList]: 94 """List all projects.""" 95 return await self._get("/projects", response_model=list[ProjectModel]) 96 97 async def get(self, uuid: str) -> CoolipyAPIResponse[ProjectModel]: 98 """Get a project by UUID.""" 99 return await self._get(f"/projects/{uuid}", response_model=ProjectModel) 100 101 async def create(self, model: ProjectCreateModel) -> CoolipyAPIResponse[UUIDResponse]: 102 """Create a project.""" 103 return await self._post("/projects", json=_dump(model), response_model=UUIDResponse) 104 105 async def update(self, uuid: str, model: ProjectUpdateModel) -> CoolipyAPIResponse[dict]: 106 """Update a project by UUID.""" 107 return await self._patch(f"/projects/{uuid}", json=_dump(model), response_model=dict) 108 109 async def delete(self, uuid: str) -> CoolipyAPIResponse[MessageResponse]: 110 """Delete a project by UUID.""" 111 return await self._delete(f"/projects/{uuid}", response_model=MessageResponse) 112 113 async def environment( 114 self, uuid: str, environment_name_or_uuid: str 115 ) -> CoolipyAPIResponse[EnvironmentModel]: 116 """Get an environment by name or UUID.""" 117 return await self._get( 118 f"/projects/{uuid}/{environment_name_or_uuid}", response_model=EnvironmentModel 119 ) 120 121 async def environments(self, uuid: str) -> CoolipyAPIResponse[EnvironmentList]: 122 """List environments for a project.""" 123 return await self._get( 124 f"/projects/{uuid}/environments", response_model=list[EnvironmentModel] 125 ) 126 127 async def create_environment( 128 self, uuid: str, model: EnvironmentCreateModel 129 ) -> CoolipyAPIResponse[UUIDResponse]: 130 """Create an environment for a project.""" 131 return await self._post( 132 f"/projects/{uuid}/environments", json=_dump(model), response_model=UUIDResponse 133 ) 134 135 async def update_environment( 136 self, uuid: str, environment_name_or_uuid: str, model: EnvironmentUpdateModel 137 ) -> CoolipyAPIResponse[EnvironmentModel]: 138 """Update an environment by name or UUID.""" 139 return await self._patch( 140 f"/projects/{uuid}/environments/{environment_name_or_uuid}", 141 json=_dump(model), 142 response_model=EnvironmentModel, 143 ) 144 145 async def delete_environment( 146 self, uuid: str, environment_name_or_uuid: str 147 ) -> CoolipyAPIResponse[MessageResponse]: 148 """Delete an environment by name or UUID.""" 149 return await self._delete( 150 f"/projects/{uuid}/environments/{environment_name_or_uuid}", 151 response_model=MessageResponse, 152 )
ProjectList =
list[coolipy.models.projects.ProjectModel]
EnvironmentList =
list[coolipy.models.projects.EnvironmentModel]
class
Projects(coolipy._base.ResourceBase):
28class Projects(ResourceBase): 29 """Synchronous client for Coolify projects.""" 30 31 def list(self) -> CoolipyAPIResponse[ProjectList]: 32 """List all projects.""" 33 return self._get("/projects", response_model=list[ProjectModel]) 34 35 def get(self, uuid: str) -> CoolipyAPIResponse[ProjectModel]: 36 """Get a project by UUID.""" 37 return self._get(f"/projects/{uuid}", response_model=ProjectModel) 38 39 def create(self, model: ProjectCreateModel) -> CoolipyAPIResponse[UUIDResponse]: 40 """Create a project.""" 41 return self._post("/projects", json=_dump(model), response_model=UUIDResponse) 42 43 def update(self, uuid: str, model: ProjectUpdateModel) -> CoolipyAPIResponse[dict]: 44 """Update a project by UUID.""" 45 return self._patch(f"/projects/{uuid}", json=_dump(model), response_model=dict) 46 47 def delete(self, uuid: str) -> CoolipyAPIResponse[MessageResponse]: 48 """Delete a project by UUID.""" 49 return self._delete(f"/projects/{uuid}", response_model=MessageResponse) 50 51 def environment( 52 self, uuid: str, environment_name_or_uuid: str 53 ) -> CoolipyAPIResponse[EnvironmentModel]: 54 """Get an environment by name or UUID.""" 55 return self._get( 56 f"/projects/{uuid}/{environment_name_or_uuid}", response_model=EnvironmentModel 57 ) 58 59 def environments(self, uuid: str) -> CoolipyAPIResponse[EnvironmentList]: 60 """List environments for a project.""" 61 return self._get(f"/projects/{uuid}/environments", response_model=list[EnvironmentModel]) 62 63 def create_environment( 64 self, uuid: str, model: EnvironmentCreateModel 65 ) -> CoolipyAPIResponse[UUIDResponse]: 66 """Create an environment for a project.""" 67 return self._post( 68 f"/projects/{uuid}/environments", json=_dump(model), response_model=UUIDResponse 69 ) 70 71 def update_environment( 72 self, uuid: str, environment_name_or_uuid: str, model: EnvironmentUpdateModel 73 ) -> CoolipyAPIResponse[EnvironmentModel]: 74 """Update an environment by name or UUID.""" 75 return self._patch( 76 f"/projects/{uuid}/environments/{environment_name_or_uuid}", 77 json=_dump(model), 78 response_model=EnvironmentModel, 79 ) 80 81 def delete_environment( 82 self, uuid: str, environment_name_or_uuid: str 83 ) -> CoolipyAPIResponse[MessageResponse]: 84 """Delete an environment by name or UUID.""" 85 return self._delete( 86 f"/projects/{uuid}/environments/{environment_name_or_uuid}", 87 response_model=MessageResponse, 88 )
Synchronous client for Coolify projects.
31 def list(self) -> CoolipyAPIResponse[ProjectList]: 32 """List all projects.""" 33 return self._get("/projects", response_model=list[ProjectModel])
List all projects.
35 def get(self, uuid: str) -> CoolipyAPIResponse[ProjectModel]: 36 """Get a project by UUID.""" 37 return self._get(f"/projects/{uuid}", response_model=ProjectModel)
Get a project by UUID.
def
create( self, model: coolipy.models.projects.ProjectCreateModel) -> coolipy.CoolipyAPIResponse[coolipy.models.common.UUIDResponse]:
39 def create(self, model: ProjectCreateModel) -> CoolipyAPIResponse[UUIDResponse]: 40 """Create a project.""" 41 return self._post("/projects", json=_dump(model), response_model=UUIDResponse)
Create a project.
def
update( self, uuid: str, model: coolipy.models.projects.ProjectUpdateModel) -> coolipy.CoolipyAPIResponse[dict]:
43 def update(self, uuid: str, model: ProjectUpdateModel) -> CoolipyAPIResponse[dict]: 44 """Update a project by UUID.""" 45 return self._patch(f"/projects/{uuid}", json=_dump(model), response_model=dict)
Update a project by UUID.
47 def delete(self, uuid: str) -> CoolipyAPIResponse[MessageResponse]: 48 """Delete a project by UUID.""" 49 return self._delete(f"/projects/{uuid}", response_model=MessageResponse)
Delete a project by UUID.
def
environment( self, uuid: str, environment_name_or_uuid: str) -> coolipy.CoolipyAPIResponse[coolipy.models.projects.EnvironmentModel]:
51 def environment( 52 self, uuid: str, environment_name_or_uuid: str 53 ) -> CoolipyAPIResponse[EnvironmentModel]: 54 """Get an environment by name or UUID.""" 55 return self._get( 56 f"/projects/{uuid}/{environment_name_or_uuid}", response_model=EnvironmentModel 57 )
Get an environment by name or UUID.
def
environments( self, uuid: str) -> coolipy.CoolipyAPIResponse[list[coolipy.models.projects.EnvironmentModel]]:
59 def environments(self, uuid: str) -> CoolipyAPIResponse[EnvironmentList]: 60 """List environments for a project.""" 61 return self._get(f"/projects/{uuid}/environments", response_model=list[EnvironmentModel])
List environments for a project.
def
create_environment( self, uuid: str, model: coolipy.models.projects.EnvironmentCreateModel) -> coolipy.CoolipyAPIResponse[coolipy.models.common.UUIDResponse]:
63 def create_environment( 64 self, uuid: str, model: EnvironmentCreateModel 65 ) -> CoolipyAPIResponse[UUIDResponse]: 66 """Create an environment for a project.""" 67 return self._post( 68 f"/projects/{uuid}/environments", json=_dump(model), response_model=UUIDResponse 69 )
Create an environment for a project.
def
update_environment( self, uuid: str, environment_name_or_uuid: str, model: coolipy.models.projects.EnvironmentUpdateModel) -> coolipy.CoolipyAPIResponse[coolipy.models.projects.EnvironmentModel]:
71 def update_environment( 72 self, uuid: str, environment_name_or_uuid: str, model: EnvironmentUpdateModel 73 ) -> CoolipyAPIResponse[EnvironmentModel]: 74 """Update an environment by name or UUID.""" 75 return self._patch( 76 f"/projects/{uuid}/environments/{environment_name_or_uuid}", 77 json=_dump(model), 78 response_model=EnvironmentModel, 79 )
Update an environment by name or UUID.
def
delete_environment( self, uuid: str, environment_name_or_uuid: str) -> coolipy.CoolipyAPIResponse[coolipy.models.common.MessageResponse]:
81 def delete_environment( 82 self, uuid: str, environment_name_or_uuid: str 83 ) -> CoolipyAPIResponse[MessageResponse]: 84 """Delete an environment by name or UUID.""" 85 return self._delete( 86 f"/projects/{uuid}/environments/{environment_name_or_uuid}", 87 response_model=MessageResponse, 88 )
Delete an environment by name or UUID.
class
AsyncProjects(coolipy._base.AsyncResourceBase):
91class AsyncProjects(AsyncResourceBase): 92 """Asynchronous client for Coolify projects.""" 93 94 async def list(self) -> CoolipyAPIResponse[ProjectList]: 95 """List all projects.""" 96 return await self._get("/projects", response_model=list[ProjectModel]) 97 98 async def get(self, uuid: str) -> CoolipyAPIResponse[ProjectModel]: 99 """Get a project by UUID.""" 100 return await self._get(f"/projects/{uuid}", response_model=ProjectModel) 101 102 async def create(self, model: ProjectCreateModel) -> CoolipyAPIResponse[UUIDResponse]: 103 """Create a project.""" 104 return await self._post("/projects", json=_dump(model), response_model=UUIDResponse) 105 106 async def update(self, uuid: str, model: ProjectUpdateModel) -> CoolipyAPIResponse[dict]: 107 """Update a project by UUID.""" 108 return await self._patch(f"/projects/{uuid}", json=_dump(model), response_model=dict) 109 110 async def delete(self, uuid: str) -> CoolipyAPIResponse[MessageResponse]: 111 """Delete a project by UUID.""" 112 return await self._delete(f"/projects/{uuid}", response_model=MessageResponse) 113 114 async def environment( 115 self, uuid: str, environment_name_or_uuid: str 116 ) -> CoolipyAPIResponse[EnvironmentModel]: 117 """Get an environment by name or UUID.""" 118 return await self._get( 119 f"/projects/{uuid}/{environment_name_or_uuid}", response_model=EnvironmentModel 120 ) 121 122 async def environments(self, uuid: str) -> CoolipyAPIResponse[EnvironmentList]: 123 """List environments for a project.""" 124 return await self._get( 125 f"/projects/{uuid}/environments", response_model=list[EnvironmentModel] 126 ) 127 128 async def create_environment( 129 self, uuid: str, model: EnvironmentCreateModel 130 ) -> CoolipyAPIResponse[UUIDResponse]: 131 """Create an environment for a project.""" 132 return await self._post( 133 f"/projects/{uuid}/environments", json=_dump(model), response_model=UUIDResponse 134 ) 135 136 async def update_environment( 137 self, uuid: str, environment_name_or_uuid: str, model: EnvironmentUpdateModel 138 ) -> CoolipyAPIResponse[EnvironmentModel]: 139 """Update an environment by name or UUID.""" 140 return await self._patch( 141 f"/projects/{uuid}/environments/{environment_name_or_uuid}", 142 json=_dump(model), 143 response_model=EnvironmentModel, 144 ) 145 146 async def delete_environment( 147 self, uuid: str, environment_name_or_uuid: str 148 ) -> CoolipyAPIResponse[MessageResponse]: 149 """Delete an environment by name or UUID.""" 150 return await self._delete( 151 f"/projects/{uuid}/environments/{environment_name_or_uuid}", 152 response_model=MessageResponse, 153 )
Asynchronous client for Coolify projects.
94 async def list(self) -> CoolipyAPIResponse[ProjectList]: 95 """List all projects.""" 96 return await self._get("/projects", response_model=list[ProjectModel])
List all projects.
async def
get( self, uuid: str) -> coolipy.CoolipyAPIResponse[coolipy.models.projects.ProjectModel]:
98 async def get(self, uuid: str) -> CoolipyAPIResponse[ProjectModel]: 99 """Get a project by UUID.""" 100 return await self._get(f"/projects/{uuid}", response_model=ProjectModel)
Get a project by UUID.
async def
create( self, model: coolipy.models.projects.ProjectCreateModel) -> coolipy.CoolipyAPIResponse[coolipy.models.common.UUIDResponse]:
102 async def create(self, model: ProjectCreateModel) -> CoolipyAPIResponse[UUIDResponse]: 103 """Create a project.""" 104 return await self._post("/projects", json=_dump(model), response_model=UUIDResponse)
Create a project.
async def
update( self, uuid: str, model: coolipy.models.projects.ProjectUpdateModel) -> coolipy.CoolipyAPIResponse[dict]:
106 async def update(self, uuid: str, model: ProjectUpdateModel) -> CoolipyAPIResponse[dict]: 107 """Update a project by UUID.""" 108 return await self._patch(f"/projects/{uuid}", json=_dump(model), response_model=dict)
Update a project by UUID.
async def
delete( self, uuid: str) -> coolipy.CoolipyAPIResponse[coolipy.models.common.MessageResponse]:
110 async def delete(self, uuid: str) -> CoolipyAPIResponse[MessageResponse]: 111 """Delete a project by UUID.""" 112 return await self._delete(f"/projects/{uuid}", response_model=MessageResponse)
Delete a project by UUID.
async def
environment( self, uuid: str, environment_name_or_uuid: str) -> coolipy.CoolipyAPIResponse[coolipy.models.projects.EnvironmentModel]:
114 async def environment( 115 self, uuid: str, environment_name_or_uuid: str 116 ) -> CoolipyAPIResponse[EnvironmentModel]: 117 """Get an environment by name or UUID.""" 118 return await self._get( 119 f"/projects/{uuid}/{environment_name_or_uuid}", response_model=EnvironmentModel 120 )
Get an environment by name or UUID.
async def
environments( self, uuid: str) -> coolipy.CoolipyAPIResponse[list[coolipy.models.projects.EnvironmentModel]]:
122 async def environments(self, uuid: str) -> CoolipyAPIResponse[EnvironmentList]: 123 """List environments for a project.""" 124 return await self._get( 125 f"/projects/{uuid}/environments", response_model=list[EnvironmentModel] 126 )
List environments for a project.
async def
create_environment( self, uuid: str, model: coolipy.models.projects.EnvironmentCreateModel) -> coolipy.CoolipyAPIResponse[coolipy.models.common.UUIDResponse]:
128 async def create_environment( 129 self, uuid: str, model: EnvironmentCreateModel 130 ) -> CoolipyAPIResponse[UUIDResponse]: 131 """Create an environment for a project.""" 132 return await self._post( 133 f"/projects/{uuid}/environments", json=_dump(model), response_model=UUIDResponse 134 )
Create an environment for a project.
async def
update_environment( self, uuid: str, environment_name_or_uuid: str, model: coolipy.models.projects.EnvironmentUpdateModel) -> coolipy.CoolipyAPIResponse[coolipy.models.projects.EnvironmentModel]:
136 async def update_environment( 137 self, uuid: str, environment_name_or_uuid: str, model: EnvironmentUpdateModel 138 ) -> CoolipyAPIResponse[EnvironmentModel]: 139 """Update an environment by name or UUID.""" 140 return await self._patch( 141 f"/projects/{uuid}/environments/{environment_name_or_uuid}", 142 json=_dump(model), 143 response_model=EnvironmentModel, 144 )
Update an environment by name or UUID.
async def
delete_environment( self, uuid: str, environment_name_or_uuid: str) -> coolipy.CoolipyAPIResponse[coolipy.models.common.MessageResponse]:
146 async def delete_environment( 147 self, uuid: str, environment_name_or_uuid: str 148 ) -> CoolipyAPIResponse[MessageResponse]: 149 """Delete an environment by name or UUID.""" 150 return await self._delete( 151 f"/projects/{uuid}/environments/{environment_name_or_uuid}", 152 response_model=MessageResponse, 153 )
Delete an environment by name or UUID.