Skip to content

Commit b7bbe70

Browse files
fix tests
1 parent 0a0d705 commit b7bbe70

File tree

5 files changed

+36
-5
lines changed

5 files changed

+36
-5
lines changed

services/web/server/src/simcore_service_webserver/director_v2/_client.py

Lines changed: 10 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,7 @@
1616
)
1717
from models_library.projects import ProjectID
1818
from models_library.users import UserID
19+
from pydantic import AnyHttpUrl, TypeAdapter
1920

2021
from ._client_base import request_director_v2
2122
from .settings import DirectorV2Settings, get_client_session, get_plugin_settings
@@ -62,7 +63,12 @@ async def get_computation(
6263
return DirectorV2ComputationGet.model_validate(computation_task_out)
6364

6465
async def start_computation(
65-
self, project_id: ProjectID, user_id: UserID, product_name: str, **options
66+
self,
67+
project_id: ProjectID,
68+
user_id: UserID,
69+
product_name: str,
70+
product_api_base_url: str,
71+
**options,
6672
) -> str:
6773
computation_task_out = await request_director_v2(
6874
self._app,
@@ -73,6 +79,9 @@ async def start_computation(
7379
user_id=user_id,
7480
project_id=project_id,
7581
product_name=product_name,
82+
product_api_base_url=TypeAdapter(AnyHttpUrl).validate_python(
83+
product_api_base_url
84+
),
7685
**options,
7786
).model_dump(mode="json", exclude_unset=True),
7887
)

services/web/server/src/simcore_service_webserver/director_v2/_controller/rest.py

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -26,7 +26,7 @@
2626
from ...models import RequestContext
2727
from ...products import products_web
2828
from ...security.decorators import permission_required
29-
from ...utils_aiohttp import envelope_json_response
29+
from ...utils_aiohttp import envelope_json_response, get_api_base_url
3030
from .. import _director_v2_service
3131
from .._client import DirectorV2RestClient
3232
from .._director_v2_abc_service import get_project_run_policy
@@ -111,7 +111,11 @@ async def start_computation(request: web.Request) -> web.Response:
111111
_started_pipelines_ids = await asyncio.gather(
112112
*[
113113
computations.start_computation(
114-
pid, req_ctx.user_id, req_ctx.product_name, **options
114+
pid,
115+
req_ctx.user_id,
116+
req_ctx.product_name,
117+
get_api_base_url(request),
118+
**options,
115119
)
116120
for pid in running_project_ids
117121
]

services/web/server/src/simcore_service_webserver/projects/_controller/nodes_rest.py

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -62,7 +62,7 @@
6262
from ...login.decorators import login_required
6363
from ...security.decorators import permission_required
6464
from ...users.api import get_user_id_from_gid, get_user_role
65-
from ...utils_aiohttp import envelope_json_response
65+
from ...utils_aiohttp import envelope_json_response, get_api_base_url
6666
from .. import _access_rights_service as access_rights_service
6767
from .. import _nodes_service, _projects_service, nodes_utils
6868
from .._nodes_service import NodeScreenshot, get_node_screenshots
@@ -278,6 +278,7 @@ async def start_node(request: web.Request) -> web.Response:
278278
await _projects_service.start_project_node(
279279
request,
280280
product_name=req_ctx.product_name,
281+
product_api_base_url=get_api_base_url(request),
281282
user_id=req_ctx.user_id,
282283
project_id=path_params.project_id,
283284
node_id=path_params.node_id,

services/web/server/src/simcore_service_webserver/projects/_projects_service.py

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -596,6 +596,7 @@ async def _start_dynamic_service( # noqa: C901
596596
service_key: ServiceKey,
597597
service_version: ServiceVersion,
598598
product_name: str,
599+
product_api_base_url: str,
599600
user_id: UserID,
600601
project_uuid: ProjectID,
601602
node_uuid: NodeID,
@@ -767,6 +768,7 @@ async def _() -> None:
767768
app=request.app,
768769
dynamic_service_start=DynamicServiceStart(
769770
product_name=product_name,
771+
product_api_base_url=product_api_base_url,
770772
can_save=save_state,
771773
project_id=project_uuid,
772774
user_id=user_id,
@@ -869,7 +871,8 @@ async def add_project_node(
869871

870872
async def start_project_node(
871873
request: web.Request,
872-
product_name: str,
874+
product_name: ProductName,
875+
product_api_base_url: str,
873876
user_id: UserID,
874877
project_id: ProjectID,
875878
node_id: NodeID,

services/web/server/src/simcore_service_webserver/utils_aiohttp.py

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@
77
from aiohttp.web_exceptions import HTTPError, HTTPException
88
from aiohttp.web_routedef import RouteDef, RouteTableDef
99
from common_library.json_serialization import json_dumps
10+
from common_library.network import is_ip_address
1011
from models_library.generics import Envelope
1112
from pydantic import BaseModel, Field
1213
from servicelib.common_headers import X_FORWARDED_PROTO
@@ -151,3 +152,16 @@ def iter_originating_hosts(request: web.Request) -> Iterator[str]:
151152
host = request.host.partition(":")[0]
152153
if host not in seen:
153154
yield host
155+
156+
157+
def get_api_base_url(request: web.Request) -> str | None:
158+
originating_host = next(iter_originating_hosts(request), None)
159+
if not originating_host:
160+
return None
161+
162+
api_host = (
163+
f"api.{originating_host}"
164+
if not is_ip_address(originating_host)
165+
else originating_host
166+
)
167+
return f"{request.url.with_host(api_host).with_port(None).with_path('')}"

0 commit comments

Comments
 (0)