-
Notifications
You must be signed in to change notification settings - Fork 29
♻️ Use catalog rpc client in api-server #7541
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Merged
bisgaard-itis
merged 31 commits into
ITISFoundation:master
from
bisgaard-itis:7525-use-catalog-rpc-client
Apr 17, 2025
Merged
Changes from all commits
Commits
Show all changes
31 commits
Select commit
Hold shift + click to select a range
5dfa550
_service.py -> service_jobs.py
bisgaard-itis e894814
start program service
bisgaard-itis 9923b39
create program service
bisgaard-itis be7bff6
add unit test for getting program
bisgaard-itis ca5e159
cleanup function arguments
bisgaard-itis 9e7bd41
introduce job_service and 'constuct' service layers in dependency inj…
bisgaard-itis 03c5eb3
start adding test for creating job
bisgaard-itis 0cf0dd1
minor changes
bisgaard-itis d94caa7
add legacy tasks to webserver
bisgaard-itis b744dd0
mock webserver part of job creation test
bisgaard-itis 5c06e9c
make create job test pass
bisgaard-itis 09c9507
use dependency indenction in class constructor
bisgaard-itis ec6a680
use dependency injection in JobService constructor
bisgaard-itis 93b9966
minor changes
bisgaard-itis aac464c
fix tests
bisgaard-itis e6e6baa
remove get_solver method from http catalog client
bisgaard-itis 65916c4
add test for getting latest solver
bisgaard-itis f51e7c7
Merge branch 'master' into 7525-use-catalog-rpc-client
bisgaard-itis d07461e
make pylint happy
bisgaard-itis 52a97f2
fix webserver openapi test
bisgaard-itis 105b498
Revert "fix webserver openapi test"
bisgaard-itis d67c526
Revert "add legacy tasks to webserver"
bisgaard-itis 35f8097
add exception handling in CatalogService
bisgaard-itis b69c304
add error handling to CatalogService
bisgaard-itis 27ec715
@pcrespov clean up JobService
bisgaard-itis 086f9ea
Merge branch 'master' into 7525-use-catalog-rpc-client
bisgaard-itis fc9245f
add Deprecated note @pcrespov
bisgaard-itis 7318dc1
add deprecation warnings to all listing endpoints
bisgaard-itis 9f591b1
fixes to deprecation warnings
bisgaard-itis c6ee0c8
remove listing programs endpoint
bisgaard-itis 06a98bc
Merge branch 'master' into 7525-use-catalog-rpc-client
bisgaard-itis File filter
Filter by extension
Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
There are no files selected for viewing
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
58 changes: 0 additions & 58 deletions
58
services/api-server/src/simcore_service_api_server/_service.py
This file was deleted.
Oops, something went wrong.
75 changes: 75 additions & 0 deletions
75
services/api-server/src/simcore_service_api_server/_service_job.py
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,75 @@ | ||
import logging | ||
from collections.abc import Callable | ||
from typing import Annotated | ||
|
||
from fastapi import Depends | ||
from models_library.api_schemas_webserver.projects import ProjectCreateNew, ProjectGet | ||
from models_library.projects import ProjectID | ||
from models_library.projects_nodes_io import NodeID | ||
from pydantic import HttpUrl | ||
from servicelib.fastapi.app_state import SingletonInAppStateMixin | ||
from servicelib.logging_utils import log_context | ||
|
||
from .api.dependencies.webserver_http import get_webserver_session | ||
from .models.schemas.jobs import Job, JobInputs | ||
from .models.schemas.programs import Program | ||
from .models.schemas.solvers import Solver | ||
from .services_http.solver_job_models_converters import ( | ||
create_job_from_project, | ||
create_new_project_for_job, | ||
) | ||
from .services_http.webserver import AuthSession | ||
|
||
_logger = logging.getLogger(__name__) | ||
|
||
|
||
class JobService(SingletonInAppStateMixin): | ||
app_state_name = "JobService" | ||
_web_rest_api: AuthSession | ||
|
||
def __init__( | ||
self, web_rest_api: Annotated[AuthSession, Depends(get_webserver_session)] | ||
): | ||
self._web_rest_api = web_rest_api | ||
|
||
async def create_job( | ||
self, | ||
*, | ||
solver_or_program: Solver | Program, | ||
inputs: JobInputs, | ||
parent_project_uuid: ProjectID | None, | ||
parent_node_id: NodeID | None, | ||
url_for: Callable[..., HttpUrl], | ||
hidden: bool, | ||
) -> tuple[Job, ProjectGet]: | ||
# creates NEW job as prototype | ||
pre_job = Job.create_job_from_solver_or_program( | ||
solver_or_program_name=solver_or_program.name, inputs=inputs | ||
) | ||
with log_context( | ||
logger=_logger, level=logging.DEBUG, msg=f"Creating job {pre_job.name}" | ||
): | ||
project_in: ProjectCreateNew = create_new_project_for_job( | ||
solver_or_program, pre_job, inputs | ||
) | ||
new_project: ProjectGet = await self._web_rest_api.create_project( | ||
project_in, | ||
is_hidden=hidden, | ||
parent_project_uuid=parent_project_uuid, | ||
parent_node_id=parent_node_id, | ||
) | ||
|
||
assert new_project # nosec | ||
assert new_project.uuid == pre_job.id # nosec | ||
|
||
# for consistency, it rebuild job | ||
job = create_job_from_project( | ||
solver_or_program=solver_or_program, project=new_project, url_for=url_for | ||
) | ||
assert job.id == pre_job.id # nosec | ||
assert job.name == pre_job.name # nosec | ||
assert job.name == Job.compose_resource_name( | ||
parent_name=solver_or_program.resource_name, | ||
job_id=job.id, | ||
) | ||
return job, new_project |
33 changes: 33 additions & 0 deletions
33
services/api-server/src/simcore_service_api_server/_service_programs.py
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,33 @@ | ||
from typing import Annotated | ||
|
||
from fastapi import Depends | ||
from models_library.basic_types import VersionStr | ||
from models_library.services_enums import ServiceType | ||
|
||
from .models.schemas.programs import Program, ProgramKeyId | ||
from .services_rpc.catalog import CatalogService | ||
|
||
|
||
class ProgramService: | ||
_catalog_service: CatalogService | ||
|
||
def __init__(self, _catalog_service: Annotated[CatalogService, Depends()]): | ||
self._catalog_service = _catalog_service | ||
|
||
async def get_program( | ||
self, | ||
*, | ||
user_id: int, | ||
name: ProgramKeyId, | ||
version: VersionStr, | ||
product_name: str, | ||
) -> Program: | ||
service = await self._catalog_service.get( | ||
user_id=user_id, | ||
name=name, | ||
version=version, | ||
product_name=product_name, | ||
) | ||
assert service.service_type == ServiceType.DYNAMIC # nosec | ||
bisgaard-itis marked this conversation as resolved.
Show resolved
Hide resolved
|
||
|
||
return Program.create_from_service(service) |
72 changes: 72 additions & 0 deletions
72
services/api-server/src/simcore_service_api_server/_service_solvers.py
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,72 @@ | ||
from typing import Annotated | ||
|
||
from common_library.pagination_tools import iter_pagination_params | ||
from fastapi import Depends | ||
from models_library.basic_types import VersionStr | ||
from models_library.products import ProductName | ||
from models_library.rest_pagination import MAXIMUM_NUMBER_OF_ITEMS_PER_PAGE | ||
from models_library.services_enums import ServiceType | ||
from models_library.services_history import ServiceRelease | ||
from models_library.users import UserID | ||
from packaging.version import Version | ||
|
||
from .models.schemas.solvers import Solver, SolverKeyId | ||
from .services_rpc.catalog import CatalogService | ||
|
||
DEFAULT_PAGINATION_LIMIT = MAXIMUM_NUMBER_OF_ITEMS_PER_PAGE - 1 | ||
|
||
|
||
class SolverService: | ||
_catalog_service: CatalogService | ||
|
||
def __init__(self, catalog_service: Annotated[CatalogService, Depends()]): | ||
self._catalog_service = catalog_service | ||
|
||
async def get_solver( | ||
self, | ||
*, | ||
user_id: UserID, | ||
name: SolverKeyId, | ||
version: VersionStr, | ||
product_name: ProductName, | ||
) -> Solver: | ||
bisgaard-itis marked this conversation as resolved.
Show resolved
Hide resolved
|
||
service = await self._catalog_service.get( | ||
user_id=user_id, | ||
name=name, | ||
version=version, | ||
product_name=product_name, | ||
) | ||
assert ( # nosec | ||
service.service_type == ServiceType.COMPUTATIONAL | ||
), "Expected by SolverName regex" | ||
|
||
return Solver.create_from_service(service) | ||
|
||
async def get_latest_release( | ||
self, | ||
*, | ||
user_id: int, | ||
solver_key: SolverKeyId, | ||
product_name: str, | ||
) -> Solver: | ||
service_releases: list[ServiceRelease] = [] | ||
for page_params in iter_pagination_params(limit=DEFAULT_PAGINATION_LIMIT): | ||
releases, page_meta = await self._catalog_service.list_release_history( | ||
user_id=user_id, | ||
service_key=solver_key, | ||
product_name=product_name, | ||
offset=page_params.offset, | ||
limit=page_params.limit, | ||
) | ||
page_params.total_number_of_items = page_meta.total | ||
service_releases.extend(releases) | ||
|
||
release = sorted(service_releases, key=lambda s: Version(s.version))[-1] | ||
service = await self._catalog_service.get( | ||
user_id=user_id, | ||
name=solver_key, | ||
version=release.version, | ||
product_name=product_name, | ||
) | ||
|
||
return Solver.create_from_service(service) |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Oops, something went wrong.
Oops, something went wrong.
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
Uh oh!
There was an error while loading. Please reload this page.