Skip to content

Commit be888c4

Browse files
feat: add is_public property to projects
1 parent 6200522 commit be888c4

File tree

4 files changed

+51
-7
lines changed

4 files changed

+51
-7
lines changed

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

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -25,3 +25,4 @@ class Project(CoreModel):
2525
created_at: Optional[datetime] = None
2626
backends: List[BackendInfo]
2727
members: List[Member]
28+
is_public: bool = False
Lines changed: 39 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,39 @@
1+
"""Add ProjectModel.is_public
2+
3+
Revision ID: 35f732ee4cf5
4+
Revises: bca2fdf130bf
5+
Create Date: 2025-06-06 13:04:02.912032
6+
7+
"""
8+
9+
import sqlalchemy as sa
10+
from alembic import op
11+
12+
# revision identifiers, used by Alembic.
13+
revision = "35f732ee4cf5"
14+
down_revision = "bca2fdf130bf"
15+
branch_labels = None
16+
depends_on = None
17+
18+
19+
def upgrade() -> None:
20+
# ### commands auto generated by Alembic - please adjust! ###
21+
# Add is_public column as nullable first
22+
with op.batch_alter_table("projects", schema=None) as batch_op:
23+
batch_op.add_column(sa.Column("is_public", sa.Boolean(), nullable=True))
24+
25+
# Set is_public to False for existing projects
26+
op.execute(sa.sql.text("UPDATE projects SET is_public = FALSE"))
27+
28+
# Make is_public non-nullable with default value
29+
with op.batch_alter_table("projects", schema=None) as batch_op:
30+
batch_op.alter_column("is_public", nullable=False, server_default=sa.false())
31+
# ### end Alembic commands ###
32+
33+
34+
def downgrade() -> None:
35+
# ### commands auto generated by Alembic - please adjust! ###
36+
# Remove is_public column
37+
with op.batch_alter_table("projects", schema=None) as batch_op:
38+
batch_op.drop_column("is_public")
39+
# ### end Alembic commands ###

src/dstack/_internal/server/models.py

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -202,6 +202,7 @@ class ProjectModel(BaseModel):
202202
name: Mapped[str] = mapped_column(String(50), unique=True)
203203
created_at: Mapped[datetime] = mapped_column(NaiveDateTime, default=get_current_datetime)
204204
deleted: Mapped[bool] = mapped_column(Boolean, default=False)
205+
is_public: Mapped[bool] = mapped_column(Boolean, default=False)
205206

206207
owner_id: Mapped[uuid.UUID] = mapped_column(ForeignKey("users.id", ondelete="CASCADE"))
207208
owner: Mapped[UserModel] = relationship(lazy="joined")

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

Lines changed: 10 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1,25 +1,28 @@
1-
from typing import Annotated, List
1+
from typing import Annotated, List, Optional
22

33
from pydantic import Field
44

5-
from dstack._internal.core.models.common import CoreModel
5+
from dstack._internal.core.models.base import CoreModel
6+
from dstack._internal.core.models.projects import Project
67
from dstack._internal.core.models.users import ProjectRole
78

89

910
class CreateProjectRequest(CoreModel):
1011
project_name: str
12+
is_public: Optional[bool] = False
1113

1214

1315
class DeleteProjectsRequest(CoreModel):
1416
projects_names: List[str]
1517

1618

19+
class GetProjectRequest(CoreModel):
20+
project_name: str
21+
22+
1723
class MemberSetting(CoreModel):
18-
username: Annotated[
19-
str,
20-
Field(description="The username or email of the user"),
21-
]
22-
project_role: ProjectRole
24+
username: str
25+
project_role: Annotated[ProjectRole, Field(discriminator="project_role")]
2326

2427

2528
class SetProjectMembersRequest(CoreModel):

0 commit comments

Comments
 (0)