Skip to content

Commit 98aee00

Browse files
[Internal] Project config support (#3097)
1 parent 90fc7c9 commit 98aee00

File tree

2 files changed

+19
-3
lines changed

2 files changed

+19
-3
lines changed

src/dstack/_internal/core/models/projects.py

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -26,3 +26,11 @@ class Project(CoreModel):
2626
backends: List[BackendInfo]
2727
members: List[Member]
2828
is_public: bool = False
29+
30+
31+
class ProjectHookConfig(CoreModel):
32+
"""
33+
This class can be inherited to extend the project creation configuration passed to the hooks.
34+
"""
35+
36+
pass

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

Lines changed: 11 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,12 @@
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.projects import Member, MemberPermissions, Project
16+
from dstack._internal.core.models.projects import (
17+
Member,
18+
MemberPermissions,
19+
Project,
20+
ProjectHookConfig,
21+
)
1722
from dstack._internal.core.models.runs import RunStatus
1823
from dstack._internal.core.models.users import GlobalRole, ProjectRole
1924
from dstack._internal.server.models import (
@@ -120,6 +125,7 @@ async def create_project(
120125
user: UserModel,
121126
project_name: str,
122127
is_public: bool = False,
128+
config: Optional[ProjectHookConfig] = None,
123129
) -> Project:
124130
user_permissions = users.get_user_permissions(user)
125131
if not user_permissions.can_create_projects:
@@ -147,7 +153,7 @@ async def create_project(
147153
session=session, project_name=project_name
148154
)
149155
for hook in _CREATE_PROJECT_HOOKS:
150-
await hook(session, project_model)
156+
await hook(session, project_model, config)
151157
# a hook may change project
152158
session.expire(project_model)
153159
project_model = await get_project_model_by_name_or_error(
@@ -609,7 +615,9 @@ def get_member_permissions(member_model: MemberModel) -> MemberPermissions:
609615
_CREATE_PROJECT_HOOKS = []
610616

611617

612-
def register_create_project_hook(func: Callable[[AsyncSession, ProjectModel], Awaitable[None]]):
618+
def register_create_project_hook(
619+
func: Callable[[AsyncSession, ProjectModel, Optional[ProjectHookConfig]], Awaitable[None]],
620+
):
613621
_CREATE_PROJECT_HOOKS.append(func)
614622

615623

0 commit comments

Comments
 (0)