Skip to content

Commit 0bba28a

Browse files
[Internal] Extend project creation with a customizable config that can be used in hooks
1 parent 88e7146 commit 0bba28a

1 file changed

Lines changed: 14 additions & 2 deletions

File tree

src/dstack/_internal/server/services/projects.py

Lines changed: 14 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,7 @@
1313
)
1414
from dstack._internal.core.backends.models import BackendInfo
1515
from dstack._internal.core.errors import ForbiddenError, ResourceExistsError, ServerClientError
16+
from dstack._internal.core.models.common import CoreModel
1617
from dstack._internal.core.models.projects import Member, MemberPermissions, Project
1718
from dstack._internal.core.models.runs import RunStatus
1819
from dstack._internal.core.models.users import GlobalRole, ProjectRole
@@ -115,11 +116,20 @@ async def get_project_by_name(
115116
return project_model_to_project(project_model)
116117

117118

119+
class ProjectConfig(CoreModel):
120+
"""
121+
This class can be inherited to extend the project creation configuration passed to the hooks.
122+
"""
123+
124+
pass
125+
126+
118127
async def create_project(
119128
session: AsyncSession,
120129
user: UserModel,
121130
project_name: str,
122131
is_public: bool = False,
132+
config: Optional[ProjectConfig] = None,
123133
) -> Project:
124134
user_permissions = users.get_user_permissions(user)
125135
if not user_permissions.can_create_projects:
@@ -147,7 +157,7 @@ async def create_project(
147157
session=session, project_name=project_name
148158
)
149159
for hook in _CREATE_PROJECT_HOOKS:
150-
await hook(session, project_model)
160+
await hook(session, project_model, config)
151161
# a hook may change project
152162
session.expire(project_model)
153163
project_model = await get_project_model_by_name_or_error(
@@ -609,7 +619,9 @@ def get_member_permissions(member_model: MemberModel) -> MemberPermissions:
609619
_CREATE_PROJECT_HOOKS = []
610620

611621

612-
def register_create_project_hook(func: Callable[[AsyncSession, ProjectModel], Awaitable[None]]):
622+
def register_create_project_hook(
623+
func: Callable[[AsyncSession, ProjectModel, Optional[ProjectConfig]], Awaitable[None]],
624+
):
613625
_CREATE_PROJECT_HOOKS.append(func)
614626

615627

0 commit comments

Comments
 (0)