Skip to content

Commit 3c70ccc

Browse files
committed
Rename to exports and imports (without "resource")
1 parent eb236cc commit 3c70ccc

13 files changed

Lines changed: 187 additions & 219 deletions

File tree

src/dstack/_internal/server/migrations/versions/2026/03_02_1345_ea7cca121fcb_add_resource_exports_imports.py

Lines changed: 0 additions & 142 deletions
This file was deleted.
Lines changed: 118 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,118 @@
1+
"""Add exports
2+
3+
Revision ID: 5e8c7a9202bc
4+
Revises: 46150101edec
5+
Create Date: 2026-03-04 22:21:54.971260+00:00
6+
7+
"""
8+
9+
import sqlalchemy as sa
10+
import sqlalchemy_utils
11+
from alembic import op
12+
13+
import dstack._internal.server.models
14+
15+
# revision identifiers, used by Alembic.
16+
revision = "5e8c7a9202bc"
17+
down_revision = "46150101edec"
18+
branch_labels = None
19+
depends_on = None
20+
21+
22+
def upgrade() -> None:
23+
# ### commands auto generated by Alembic - please adjust! ###
24+
op.create_table(
25+
"exports",
26+
sa.Column("id", sqlalchemy_utils.types.uuid.UUIDType(binary=False), nullable=False),
27+
sa.Column("name", sa.String(length=100), nullable=False),
28+
sa.Column(
29+
"project_id", sqlalchemy_utils.types.uuid.UUIDType(binary=False), nullable=False
30+
),
31+
sa.Column("created_at", dstack._internal.server.models.NaiveDateTime(), nullable=False),
32+
sa.ForeignKeyConstraint(
33+
["project_id"],
34+
["projects.id"],
35+
name=op.f("fk_exports_project_id_projects"),
36+
ondelete="CASCADE",
37+
),
38+
sa.PrimaryKeyConstraint("id", name=op.f("pk_exports")),
39+
sa.UniqueConstraint("project_id", "name", name="uq_exports_project_id_name"),
40+
)
41+
with op.batch_alter_table("exports", schema=None) as batch_op:
42+
batch_op.create_index(batch_op.f("ix_exports_project_id"), ["project_id"], unique=False)
43+
44+
op.create_table(
45+
"exported_fleets",
46+
sa.Column("id", sqlalchemy_utils.types.uuid.UUIDType(binary=False), nullable=False),
47+
sa.Column("export_id", sqlalchemy_utils.types.uuid.UUIDType(binary=False), nullable=False),
48+
sa.Column("fleet_id", sqlalchemy_utils.types.uuid.UUIDType(binary=False), nullable=False),
49+
sa.ForeignKeyConstraint(
50+
["export_id"],
51+
["exports.id"],
52+
name=op.f("fk_exported_fleets_export_id_exports"),
53+
ondelete="CASCADE",
54+
),
55+
sa.ForeignKeyConstraint(
56+
["fleet_id"],
57+
["fleets.id"],
58+
name=op.f("fk_exported_fleets_fleet_id_fleets"),
59+
ondelete="CASCADE",
60+
),
61+
sa.PrimaryKeyConstraint("id", name=op.f("pk_exported_fleets")),
62+
sa.UniqueConstraint("export_id", "fleet_id", name="uq_exported_fleets_export_id_fleet_id"),
63+
)
64+
with op.batch_alter_table("exported_fleets", schema=None) as batch_op:
65+
batch_op.create_index(
66+
batch_op.f("ix_exported_fleets_export_id"), ["export_id"], unique=False
67+
)
68+
batch_op.create_index(
69+
batch_op.f("ix_exported_fleets_fleet_id"), ["fleet_id"], unique=False
70+
)
71+
72+
op.create_table(
73+
"imports",
74+
sa.Column("id", sqlalchemy_utils.types.uuid.UUIDType(binary=False), nullable=False),
75+
sa.Column(
76+
"project_id", sqlalchemy_utils.types.uuid.UUIDType(binary=False), nullable=False
77+
),
78+
sa.Column("export_id", sqlalchemy_utils.types.uuid.UUIDType(binary=False), nullable=False),
79+
sa.Column("created_at", dstack._internal.server.models.NaiveDateTime(), nullable=False),
80+
sa.ForeignKeyConstraint(
81+
["export_id"],
82+
["exports.id"],
83+
name=op.f("fk_imports_export_id_exports"),
84+
ondelete="CASCADE",
85+
),
86+
sa.ForeignKeyConstraint(
87+
["project_id"],
88+
["projects.id"],
89+
name=op.f("fk_imports_project_id_projects"),
90+
ondelete="CASCADE",
91+
),
92+
sa.PrimaryKeyConstraint("id", name=op.f("pk_imports")),
93+
sa.UniqueConstraint("project_id", "export_id", name="uq_imports_project_id_export_id"),
94+
)
95+
with op.batch_alter_table("imports", schema=None) as batch_op:
96+
batch_op.create_index(batch_op.f("ix_imports_export_id"), ["export_id"], unique=False)
97+
batch_op.create_index(batch_op.f("ix_imports_project_id"), ["project_id"], unique=False)
98+
99+
# ### end Alembic commands ###
100+
101+
102+
def downgrade() -> None:
103+
# ### commands auto generated by Alembic - please adjust! ###
104+
with op.batch_alter_table("imports", schema=None) as batch_op:
105+
batch_op.drop_index(batch_op.f("ix_imports_project_id"))
106+
batch_op.drop_index(batch_op.f("ix_imports_export_id"))
107+
108+
op.drop_table("imports")
109+
with op.batch_alter_table("exported_fleets", schema=None) as batch_op:
110+
batch_op.drop_index(batch_op.f("ix_exported_fleets_fleet_id"))
111+
batch_op.drop_index(batch_op.f("ix_exported_fleets_export_id"))
112+
113+
op.drop_table("exported_fleets")
114+
with op.batch_alter_table("exports", schema=None) as batch_op:
115+
batch_op.drop_index(batch_op.f("ix_exports_project_id"))
116+
117+
op.drop_table("exports")
118+
# ### end Alembic commands ###

src/dstack/_internal/server/models.py

Lines changed: 16 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -980,11 +980,9 @@ class EventTargetModel(BaseModel):
980980
entity_name: Mapped[str] = mapped_column(String(200))
981981

982982

983-
class ResourceExportModel(BaseModel):
984-
__tablename__ = "resource_exports"
985-
__table_args__ = (
986-
UniqueConstraint("project_id", "name", name="uq_resource_exports_project_id_name"),
987-
)
983+
class ExportModel(BaseModel):
984+
__tablename__ = "exports"
985+
__table_args__ = (UniqueConstraint("project_id", "name", name="uq_exports_project_id_name"),)
988986

989987
id: Mapped[uuid.UUID] = mapped_column(
990988
UUIDType(binary=False), primary_key=True, default=uuid.uuid4
@@ -995,21 +993,17 @@ class ResourceExportModel(BaseModel):
995993
)
996994
project: Mapped["ProjectModel"] = relationship()
997995
created_at: Mapped[datetime] = mapped_column(NaiveDateTime, default=get_current_datetime)
998-
resource_imports: Mapped[List["ResourceImportModel"]] = relationship(
999-
back_populates="resource_export"
1000-
)
1001-
exported_fleets: Mapped[List["ExportedFleetModel"]] = relationship(
1002-
back_populates="resource_export"
1003-
)
996+
imports: Mapped[List["ImportModel"]] = relationship(back_populates="export")
997+
exported_fleets: Mapped[List["ExportedFleetModel"]] = relationship(back_populates="export")
1004998

1005999

1006-
class ResourceImportModel(BaseModel):
1007-
__tablename__ = "resource_imports"
1000+
class ImportModel(BaseModel):
1001+
__tablename__ = "imports"
10081002
__table_args__ = (
10091003
UniqueConstraint(
10101004
"project_id",
1011-
"resource_export_id",
1012-
name="uq_resource_imports_project_id_resource_export_id",
1005+
"export_id",
1006+
name="uq_imports_project_id_export_id",
10131007
),
10141008
)
10151009

@@ -1020,28 +1014,26 @@ class ResourceImportModel(BaseModel):
10201014
ForeignKey("projects.id", ondelete="CASCADE"), index=True
10211015
)
10221016
project: Mapped["ProjectModel"] = relationship()
1023-
resource_export_id: Mapped[uuid.UUID] = mapped_column(
1024-
ForeignKey("resource_exports.id", ondelete="CASCADE"), index=True
1017+
export_id: Mapped[uuid.UUID] = mapped_column(
1018+
ForeignKey("exports.id", ondelete="CASCADE"), index=True
10251019
)
1026-
resource_export: Mapped["ResourceExportModel"] = relationship()
1020+
export: Mapped["ExportModel"] = relationship()
10271021
created_at: Mapped[datetime] = mapped_column(NaiveDateTime, default=get_current_datetime)
10281022

10291023

10301024
class ExportedFleetModel(BaseModel):
10311025
__tablename__ = "exported_fleets"
10321026
__table_args__ = (
1033-
UniqueConstraint(
1034-
"resource_export_id", "fleet_id", name="uq_exported_fleets_resource_export_id_fleet_id"
1035-
),
1027+
UniqueConstraint("export_id", "fleet_id", name="uq_exported_fleets_export_id_fleet_id"),
10361028
)
10371029

10381030
id: Mapped[uuid.UUID] = mapped_column(
10391031
UUIDType(binary=False), primary_key=True, default=uuid.uuid4
10401032
)
1041-
resource_export_id: Mapped[uuid.UUID] = mapped_column(
1042-
ForeignKey("resource_exports.id", ondelete="CASCADE"), index=True
1033+
export_id: Mapped[uuid.UUID] = mapped_column(
1034+
ForeignKey("exports.id", ondelete="CASCADE"), index=True
10431035
)
1044-
resource_export: Mapped["ResourceExportModel"] = relationship()
1036+
export: Mapped["ExportModel"] = relationship()
10451037
fleet_id: Mapped[uuid.UUID] = mapped_column(
10461038
ForeignKey("fleets.id", ondelete="CASCADE"), index=True
10471039
)

src/dstack/_internal/server/security/permissions.py

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -12,10 +12,10 @@
1212
from dstack._internal.server.models import (
1313
ExportedFleetModel,
1414
FleetModel,
15+
ImportModel,
1516
InstanceModel,
1617
MemberModel,
1718
ProjectModel,
18-
ResourceImportModel,
1919
UserModel,
2020
)
2121
from dstack._internal.server.services.projects import (
@@ -277,8 +277,8 @@ async def check_can_access_fleet(
277277
FleetModel.project_id == fleet_project.id,
278278
exists().where(
279279
MemberModel.user_id == user.id,
280-
MemberModel.project_id == ResourceImportModel.project_id,
281-
ResourceImportModel.resource_export_id == ExportedFleetModel.resource_export_id,
280+
MemberModel.project_id == ImportModel.project_id,
281+
ImportModel.export_id == ExportedFleetModel.export_id,
282282
ExportedFleetModel.fleet_id == FleetModel.id,
283283
),
284284
]
@@ -307,8 +307,8 @@ async def check_can_access_instance(
307307
InstanceModel.id == instance_id,
308308
exists().where(
309309
MemberModel.user_id == user.id,
310-
MemberModel.project_id == ResourceImportModel.project_id,
311-
ResourceImportModel.resource_export_id == ExportedFleetModel.resource_export_id,
310+
MemberModel.project_id == ImportModel.project_id,
311+
ImportModel.export_id == ExportedFleetModel.export_id,
312312
ExportedFleetModel.fleet_id == InstanceModel.fleet_id,
313313
),
314314
]

0 commit comments

Comments
 (0)