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        )
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.

def list( self) -> coolipy.CoolipyAPIResponse[list[coolipy.models.projects.ProjectModel]]:
31    def list(self) -> CoolipyAPIResponse[ProjectList]:
32        """List all projects."""
33        return self._get("/projects", response_model=list[ProjectModel])

List all projects.

def get( self, uuid: str) -> coolipy.CoolipyAPIResponse[coolipy.models.projects.ProjectModel]:
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.

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.

def delete( self, uuid: str) -> coolipy.CoolipyAPIResponse[coolipy.models.common.MessageResponse]:
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.

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.

async def list( self) -> coolipy.CoolipyAPIResponse[list[coolipy.models.projects.ProjectModel]]:
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.

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.