Skip to content

Commit ffce9cd

Browse files
committed
Revert "create domain model for jobs"
This reverts commit 07c7fbc.
1 parent 07c7fbc commit ffce9cd

File tree

7 files changed

+23
-136
lines changed

7 files changed

+23
-136
lines changed

packages/service-library/src/servicelib/rabbitmq/rpc_interfaces/webserver/projects.py

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -81,13 +81,15 @@ async def get_project_marked_as_job(
8181
product_name: ProductName,
8282
user_id: UserID,
8383
project_uuid: ProjectID,
84+
job_parent_resource_name: str,
8485
) -> ProjectJobRpcGet:
8586
result = await rpc_client.request(
8687
WEBSERVER_RPC_NAMESPACE,
8788
TypeAdapter(RPCMethodName).validate_python("get_project_marked_as_job"),
8889
product_name=product_name,
8990
user_id=user_id,
9091
project_uuid=project_uuid,
92+
job_parent_resource_name=job_parent_resource_name,
9193
)
9294
assert TypeAdapter(ProjectJobRpcGet).validate_python(result) # nosec
9395
return cast(ProjectJobRpcGet, result)

services/api-server/src/simcore_service_api_server/_service_jobs.py

Lines changed: 10 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -22,11 +22,8 @@
2222
from pydantic import HttpUrl
2323
from servicelib.logging_utils import log_context
2424

25-
from .models.api_resources import RelativeResourceName
2625
from .models.basic_types import NameValueTuple
27-
from .models.domain.jobs import Job as DomainJob
28-
from .models.schemas.jobs import Job as SchemaJob
29-
from .models.schemas.jobs import JobID, JobInputs
26+
from .models.schemas.jobs import Job, JobID, JobInputs
3027
from .models.schemas.programs import Program
3128
from .models.schemas.solvers import Solver
3229
from .services_http.solver_job_models_converters import (
@@ -60,7 +57,7 @@ async def list_jobs(
6057
filter_any_custom_metadata: list[NameValueTuple] | None = None,
6158
pagination_offset: PageOffsetInt | None = None,
6259
pagination_limit: PageLimitInt | None = None,
63-
) -> tuple[list[SchemaJob], PageMetaInfoLimitOffset]:
60+
) -> tuple[list[Job], PageMetaInfoLimitOffset]:
6461
"""Lists all jobs for a user with pagination based on resource name prefix"""
6562

6663
pagination_kwargs = as_dict_exclude_none(
@@ -77,7 +74,7 @@ async def list_jobs(
7774
)
7875

7976
# 2. Convert projects to jobs
80-
jobs: list[SchemaJob] = []
77+
jobs: list[Job] = []
8178
for project_job in projects_page.data:
8279
assert ( # nosec
8380
len(project_job.workbench) == 1
@@ -90,9 +87,9 @@ async def list_jobs(
9087
assert project_job.job_parent_resource_name # nosec
9188

9289
jobs.append(
93-
SchemaJob(
90+
Job(
9491
id=project_job.uuid,
95-
name=SchemaJob.compose_resource_name(
92+
name=Job.compose_resource_name(
9693
project_job.job_parent_resource_name, project_job.uuid
9794
),
9895
inputs_checksum=job_inputs.compute_checksum(),
@@ -117,12 +114,12 @@ async def create_job(
117114
hidden: bool,
118115
project_name: str | None,
119116
description: str | None,
120-
) -> tuple[SchemaJob, ProjectGet]:
117+
) -> tuple[Job, ProjectGet]:
121118
"""If no project_name is provided, the job name is used as project name"""
122119

123120
# creates NEW job as prototype
124121

125-
pre_job = SchemaJob.create_job_from_solver_or_program(
122+
pre_job = Job.create_job_from_solver_or_program(
126123
solver_or_program_name=solver_or_program.name, inputs=inputs
127124
)
128125
with log_context(
@@ -158,7 +155,7 @@ async def create_job(
158155
)
159156
assert job.id == pre_job.id # nosec
160157
assert job.name == pre_job.name # nosec
161-
assert job.name == SchemaJob.compose_resource_name(
158+
assert job.name == Job.compose_resource_name(
162159
parent_name=solver_or_program.resource_name,
163160
job_id=job.id,
164161
)
@@ -178,18 +175,8 @@ async def start_log_export(
178175
)
179176
return async_job_get
180177

181-
async def get_job(
182-
self,
183-
job_id: JobID,
184-
) -> DomainJob:
185-
return await self._web_rpc_client.get_project_marked_as_job(
186-
product_name=self.product_name,
187-
user_id=self.user_id,
188-
project_id=job_id,
189-
)
190-
191178
async def delete_job_assets(
192-
self, job_parent_resource_name: RelativeResourceName, project_id: ProjectID
179+
self, solver_or_program: Solver | Program, project_id: ProjectID
193180
):
194181
"""Marks job project as hidden and deletes S3 assets associated it"""
195182
await self._web_rest_client.patch_project(
@@ -202,6 +189,6 @@ async def delete_job_assets(
202189
product_name=self.product_name,
203190
user_id=self.user_id,
204191
project_uuid=project_id,
205-
job_parent_resource_name=job_parent_resource_name,
192+
job_parent_resource_name=solver_or_program.name,
206193
storage_data_deleted=True,
207194
)

services/api-server/src/simcore_service_api_server/api/routes/solvers_jobs.py

Lines changed: 7 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,7 @@
1414

1515
from ..._service_jobs import JobService
1616
from ..._service_solvers import SolverService
17-
from ...exceptions.backend_errors import JobNotFoundError, ProjectAlreadyStartedError
17+
from ...exceptions.backend_errors import ProjectAlreadyStartedError
1818
from ...exceptions.service_errors_utils import DEFAULT_BACKEND_SERVICE_STATUS_CODES
1919
from ...models.basic_types import VersionStr
2020
from ...models.schemas.errors import ErrorGet
@@ -167,16 +167,14 @@ async def delete_job_assets(
167167
version: VersionStr,
168168
job_id: JobID,
169169
job_service: Annotated[JobService, Depends(get_job_service)],
170+
solver_service: Annotated[SolverService, Depends(get_solver_service)],
170171
):
171-
job = await job_service.get_job(job_id=job_id)
172-
if job.job_parent_resource_name != compose_job_resource_name(
173-
solver_key, version, job_id
174-
):
175-
raise JobNotFoundError(
176-
project_id=job_id,
177-
)
172+
solver = await solver_service.get_solver(
173+
solver_key=solver_key,
174+
solver_version=version,
175+
)
178176
await job_service.delete_job_assets(
179-
job_parent_resource_name=job.job_parent_resource_name, project_id=job_id
177+
job_parent_resource_name=solver.name, project_id=job_id
180178
)
181179

182180

services/api-server/src/simcore_service_api_server/exceptions/backend_errors.py

Lines changed: 0 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -57,11 +57,6 @@ class ServiceForbiddenAccessError(BaseBackEndError):
5757
status_code = status.HTTP_403_FORBIDDEN
5858

5959

60-
class JobForbiddenAccessError(BaseBackEndError):
61-
msg_template = "Could not get solver/study job {project_id}"
62-
status_code = status.HTTP_403_FORBIDDEN
63-
64-
6560
class JobNotFoundError(BaseBackEndError):
6661
msg_template = "Could not get solver/study job {project_id}"
6762
status_code = status.HTTP_404_NOT_FOUND

services/api-server/src/simcore_service_api_server/models/domain/jobs.py

Lines changed: 0 additions & 46 deletions
This file was deleted.

services/api-server/src/simcore_service_api_server/models/schemas/jobs.py

Lines changed: 2 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -38,8 +38,6 @@
3838
from ..basic_types import VersionStr
3939
from ..domain.files import File as DomainFile
4040
from ..domain.files import FileInProgramJobData
41-
from ..domain.jobs import Job as DomainJob
42-
from ..domain.jobs import JobID
4341
from ..schemas.files import UserFile
4442
from .base import ApiServerInputSchema
4543

@@ -52,6 +50,8 @@
5250
from .programs import Program, ProgramKeyId
5351
from .solvers import Solver
5452

53+
JobID: TypeAlias = UUID
54+
5555
# ArgumentTypes are types used in the job inputs (see ResultsTypes)
5656
ArgumentTypes: TypeAlias = (
5757
File | StrictFloat | StrictInt | StrictBool | str | list | None
@@ -324,11 +324,6 @@ def resource_name(self) -> str:
324324
return self.name
325325

326326

327-
assert set(DomainJob.model_fields.keys()).issubset(
328-
set(Job.model_fields.keys())
329-
) # nosec
330-
331-
332327
def get_url(
333328
solver_or_program: Solver | Program, url_for: Callable[..., HttpUrl], job_id: JobID
334329
) -> HttpUrl | None:

services/api-server/src/simcore_service_api_server/services_rpc/wb_api_server.py

Lines changed: 2 additions & 46 deletions
Original file line numberDiff line numberDiff line change
@@ -44,7 +44,6 @@
4444
from models_library.rpc.webserver.projects import (
4545
ListProjectsMarkedAsJobRpcFilters,
4646
MetadataFilterItem,
47-
PageRpcProjectJobRpcGet,
4847
)
4948
from models_library.services_types import ServiceRunID
5049
from models_library.users import UserID
@@ -64,10 +63,6 @@
6463
NotEnoughAvailableSeatsError,
6564
)
6665
from servicelib.rabbitmq.rpc_interfaces.webserver import projects as projects_rpc
67-
from servicelib.rabbitmq.rpc_interfaces.webserver.errors import (
68-
ProjectForbiddenRpcError,
69-
ProjectNotFoundRpcError,
70-
)
7166
from servicelib.rabbitmq.rpc_interfaces.webserver.functions import (
7267
functions_rpc_interface,
7368
)
@@ -84,21 +79,14 @@
8479
release_licensed_item_for_wallet as _release_licensed_item_for_wallet,
8580
)
8681
from simcore_service_api_server.models.basic_types import NameValueTuple
87-
from simcore_service_api_server.models.domain.jobs import Job
8882

8983
from ..exceptions.backend_errors import (
9084
CanNotCheckoutServiceIsNotRunningError,
9185
InsufficientNumberOfSeatsError,
92-
JobForbiddenAccessError,
93-
JobNotFoundError,
9486
LicensedItemCheckoutNotFoundError,
9587
)
9688
from ..exceptions.service_errors_utils import service_exception_mapper
97-
from ..models.api_resources import (
98-
RelativeResourceName,
99-
compose_resource_name,
100-
split_resource_name,
101-
)
89+
from ..models.api_resources import RelativeResourceName
10290
from ..models.pagination import Page, PaginationParams
10391
from ..models.schemas.model_adapter import (
10492
LicensedItemCheckoutGet,
@@ -274,7 +262,7 @@ async def list_projects_marked_as_jobs(
274262
pagination_limit: int = 50,
275263
filter_by_job_parent_resource_name_prefix: str | None,
276264
filter_any_custom_metadata: list[NameValueTuple] | None,
277-
) -> PageRpcProjectJobRpcGet:
265+
):
278266
pagination_kwargs = as_dict_exclude_none(
279267
offset=pagination_offset, limit=pagination_limit
280268
)
@@ -299,38 +287,6 @@ async def list_projects_marked_as_jobs(
299287
**pagination_kwargs,
300288
)
301289

302-
@_exception_mapper(
303-
rpc_exception_map={
304-
ProjectForbiddenRpcError: JobForbiddenAccessError,
305-
ProjectNotFoundRpcError: JobNotFoundError,
306-
}
307-
)
308-
async def get_project_marked_as_job(
309-
self,
310-
*,
311-
product_name: ProductName,
312-
user_id: UserID,
313-
project_id: ProjectID,
314-
) -> Job:
315-
project_job_rpc = await projects_rpc.get_project_marked_as_job(
316-
rpc_client=self._client,
317-
product_name=product_name,
318-
user_id=user_id,
319-
project_uuid=project_id,
320-
)
321-
collection_or_resource_ids = [
322-
*split_resource_name(project_job_rpc.job_parent_resource_name),
323-
"jobs",
324-
f"{project_job_rpc.uuid}",
325-
]
326-
return Job(
327-
id=project_job_rpc.uuid,
328-
name=compose_resource_name(*collection_or_resource_ids),
329-
job_parent_resource_name=project_job_rpc.job_parent_resource_name,
330-
created_at=project_job_rpc.created_at,
331-
runner_name=project_job_rpc.job_parent_resource_name,
332-
)
333-
334290
async def register_function(
335291
self, *, user_id: UserID, product_name: ProductName, function: Function
336292
) -> RegisteredFunction:

0 commit comments

Comments
 (0)