Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
48 changes: 32 additions & 16 deletions src/aignostics/platform/__init__.py
Original file line number Diff line number Diff line change
Expand Up @@ -38,35 +38,43 @@
from ._client import Client
from ._constants import (
API_ROOT_DEV,
API_ROOT_PRODUCTION,
API_ROOT_TEST,
API_ROOT_STAGING,
API_ROOT_PRODUCTION,
AUDIENCE_DEV,
AUDIENCE_PRODUCTION,
AUDIENCE_TEST,
AUDIENCE_STAGING,
AUDIENCE_PRODUCTION,
AUTHORIZATION_BASE_URL_DEV,
AUTHORIZATION_BASE_URL_PRODUCTION,
AUTHORIZATION_BASE_URL_TEST,
AUTHORIZATION_BASE_URL_STAGING,
AUTHORIZATION_BASE_URL_PRODUCTION,
CLIENT_ID_INTERACTIVE_DEV,
CLIENT_ID_INTERACTIVE_PRODUCTION,
CLIENT_ID_INTERACTIVE_TEST,
CLIENT_ID_INTERACTIVE_STAGING,
CLIENT_ID_INTERACTIVE_PRODUCTION,
DEFAULT_CPU_PROVISIONING_MODE,
DEFAULT_FLEX_START_MAX_RUN_DURATION_MINUTES,
DEFAULT_GPU_PROVISIONING_MODE,
DEFAULT_GPU_TYPE,
DEFAULT_MAX_GPUS_PER_SLIDE,
DEFAULT_NODE_ACQUISITION_TIMEOUT_MINUTES,
DEVICE_URL_DEV,
DEVICE_URL_PRODUCTION,
DEVICE_URL_TEST,
DEVICE_URL_STAGING,
DEVICE_URL_PRODUCTION,
JWS_JSON_URL_DEV,
JWS_JSON_URL_PRODUCTION,
JWS_JSON_URL_TEST,
JWS_JSON_URL_STAGING,
JWS_JSON_URL_PRODUCTION,
REDIRECT_URI_DEV,
REDIRECT_URI_PRODUCTION,
REDIRECT_URI_TEST,
REDIRECT_URI_STAGING,
REDIRECT_URI_PRODUCTION,
TOKEN_URL_DEV,
TOKEN_URL_PRODUCTION,
TOKEN_URL_TEST,
TOKEN_URL_STAGING,
TOKEN_URL_PRODUCTION,
)
from ._messages import AUTHENTICATION_FAILED, NOT_YET_IMPLEMENTED, UNKNOWN_ENDPOINT_URL
from ._sdk_metadata import (
Expand All @@ -87,18 +95,22 @@

__all__ = [
"API_ROOT_DEV",
"API_ROOT_PRODUCTION",
"API_ROOT_TEST",
"API_ROOT_STAGING",
"API_ROOT_PRODUCTION",
"AUDIENCE_DEV",
"AUDIENCE_PRODUCTION",
"AUDIENCE_TEST",
"AUDIENCE_STAGING",
"AUDIENCE_PRODUCTION",
"AUTHENTICATION_FAILED",
"AUTHORIZATION_BASE_URL_DEV",
"AUTHORIZATION_BASE_URL_PRODUCTION",
"AUTHORIZATION_BASE_URL_TEST",
"AUTHORIZATION_BASE_URL_STAGING",
"AUTHORIZATION_BASE_URL_PRODUCTION",
"CLIENT_ID_INTERACTIVE_DEV",
"CLIENT_ID_INTERACTIVE_PRODUCTION",
"CLIENT_ID_INTERACTIVE_TEST",
"CLIENT_ID_INTERACTIVE_STAGING",
"CLIENT_ID_INTERACTIVE_PRODUCTION",
"DEFAULT_CPU_PROVISIONING_MODE",
"DEFAULT_CPU_PROVISIONING_MODE",
"DEFAULT_FLEX_START_MAX_RUN_DURATION_MINUTES",
Expand All @@ -110,21 +122,25 @@
"DEFAULT_MAX_GPUS_PER_SLIDE",
"DEFAULT_NODE_ACQUISITION_TIMEOUT_MINUTES",
"DEVICE_URL_DEV",
"DEVICE_URL_PRODUCTION",
"DEVICE_URL_TEST",
"DEVICE_URL_STAGING",
"DEVICE_URL_PRODUCTION",
"JWS_JSON_URL_DEV",
"JWS_JSON_URL_PRODUCTION",
"JWS_JSON_URL_TEST",
"JWS_JSON_URL_STAGING",
"JWS_JSON_URL_PRODUCTION",
"LIST_APPLICATION_RUNS_MAX_PAGE_SIZE",
"LIST_APPLICATION_RUNS_MIN_PAGE_SIZE",
"NOT_YET_IMPLEMENTED",
"NOT_YET_IMPLEMENTED",
"REDIRECT_URI_DEV",
"REDIRECT_URI_PRODUCTION",
"REDIRECT_URI_TEST",
"REDIRECT_URI_STAGING",
"REDIRECT_URI_PRODUCTION",
"TOKEN_URL_DEV",
"TOKEN_URL_PRODUCTION",
"TOKEN_URL_TEST",
"TOKEN_URL_STAGING",
"TOKEN_URL_PRODUCTION",
"UNKNOWN_ENDPOINT_URL",
"ApiException",
"Application",
Expand Down
41 changes: 25 additions & 16 deletions src/aignostics/platform/_constants.py
Original file line number Diff line number Diff line change
@@ -1,13 +1,22 @@
"""Client specific and other constants such as defaults."""

API_ROOT_PRODUCTION = "https://platform.aignostics.com"
CLIENT_ID_INTERACTIVE_PRODUCTION = "YtJ7F9lAtxx16SZGQlYPe6wcjlXB78MM" # not a secret, but a public client ID
AUDIENCE_PRODUCTION = "https://aignostics-platform-samia"
AUTHORIZATION_BASE_URL_PRODUCTION = "https://aignostics-platform.eu.auth0.com/authorize"
TOKEN_URL_PRODUCTION = "https://aignostics-platform.eu.auth0.com/oauth/token" # noqa: S105
REDIRECT_URI_PRODUCTION = "http://localhost:8989/"
DEVICE_URL_PRODUCTION = "https://aignostics-platform.eu.auth0.com/oauth/device/code"
JWS_JSON_URL_PRODUCTION = "https://aignostics-platform.eu.auth0.com/.well-known/jwks.json"
API_ROOT_DEV = "https://platform-dev.aignostics.ai"
CLIENT_ID_INTERACTIVE_DEV = "gqduveFvx7LX90drQPGzr4JGUYdh24gA" # not a secret, but a public client ID
AUDIENCE_DEV = "https://dev-8ouohmmrbuh2h4vu-samia"
AUTHORIZATION_BASE_URL_DEV = "https://dev-8ouohmmrbuh2h4vu.eu.auth0.com/authorize"
TOKEN_URL_DEV = "https://dev-8ouohmmrbuh2h4vu.eu.auth0.com/oauth/token" # noqa: S105
REDIRECT_URI_DEV = "http://localhost:8989/"
DEVICE_URL_DEV = "https://dev-8ouohmmrbuh2h4vu.eu.auth0.com/oauth/device/code"
JWS_JSON_URL_DEV = "https://dev-8ouohmmrbuh2h4vu.eu.auth0.com/.well-known/jwks.json"

API_ROOT_TEST = "https://platform-test.aignostics.ai"
CLIENT_ID_INTERACTIVE_TEST = "gqduveFvx7LX90drQPGzr4JGUYdh24gA" # not a secret, but a public client ID (same as dev)
AUDIENCE_TEST = "https://dev-8ouohmmrbuh2h4vu-samia"
AUTHORIZATION_BASE_URL_TEST = "https://dev-8ouohmmrbuh2h4vu.eu.auth0.com/authorize"
TOKEN_URL_TEST = "https://dev-8ouohmmrbuh2h4vu.eu.auth0.com/oauth/token" # noqa: S105
REDIRECT_URI_TEST = "http://localhost:8989/"
DEVICE_URL_TEST = "https://dev-8ouohmmrbuh2h4vu.eu.auth0.com/oauth/device/code"
JWS_JSON_URL_TEST = "https://dev-8ouohmmrbuh2h4vu.eu.auth0.com/.well-known/jwks.json"

API_ROOT_STAGING = "https://platform-staging.aignostics.com"
CLIENT_ID_INTERACTIVE_STAGING = "fQkbvYzQPPVwLxc3uque5JsyFW00rJ7b" # not a secret, but a public client ID
Expand All @@ -18,14 +27,14 @@
DEVICE_URL_STAGING = "https://aignostics-platform-staging.eu.auth0.com/oauth/device/code"
JWS_JSON_URL_STAGING = "https://aignostics-platform-staging.eu.auth0.com/.well-known/jwks.json"

API_ROOT_DEV = "https://platform-dev.aignostics.ai"
CLIENT_ID_INTERACTIVE_DEV = "gqduveFvx7LX90drQPGzr4JGUYdh24gA" # not a secret, but a public client ID
AUDIENCE_DEV = "https://dev-8ouohmmrbuh2h4vu-samia"
AUTHORIZATION_BASE_URL_DEV = "https://dev-8ouohmmrbuh2h4vu.eu.auth0.com/authorize"
TOKEN_URL_DEV = "https://dev-8ouohmmrbuh2h4vu.eu.auth0.com/oauth/token" # noqa: S105
REDIRECT_URI_DEV = "http://localhost:8989/"
DEVICE_URL_DEV = "https://dev-8ouohmmrbuh2h4vu.eu.auth0.com/oauth/device/code"
JWS_JSON_URL_DEV = "https://dev-8ouohmmrbuh2h4vu.eu.auth0.com/.well-known/jwks.json"
API_ROOT_PRODUCTION = "https://platform.aignostics.com"
CLIENT_ID_INTERACTIVE_PRODUCTION = "YtJ7F9lAtxx16SZGQlYPe6wcjlXB78MM" # not a secret, but a public client ID
AUDIENCE_PRODUCTION = "https://aignostics-platform-samia"
AUTHORIZATION_BASE_URL_PRODUCTION = "https://aignostics-platform.eu.auth0.com/authorize"
TOKEN_URL_PRODUCTION = "https://aignostics-platform.eu.auth0.com/oauth/token" # noqa: S105
REDIRECT_URI_PRODUCTION = "http://localhost:8989/"
DEVICE_URL_PRODUCTION = "https://aignostics-platform.eu.auth0.com/oauth/device/code"
JWS_JSON_URL_PRODUCTION = "https://aignostics-platform.eu.auth0.com/.well-known/jwks.json"

# Pipeline orchestration defaults
DEFAULT_GPU_TYPE = "L4"
Expand Down
64 changes: 40 additions & 24 deletions src/aignostics/platform/_settings.py
Original file line number Diff line number Diff line change
Expand Up @@ -23,29 +23,37 @@

from ._constants import (
API_ROOT_DEV,
API_ROOT_PRODUCTION,
API_ROOT_TEST,
API_ROOT_STAGING,
API_ROOT_PRODUCTION,
AUDIENCE_DEV,
AUDIENCE_PRODUCTION,
AUDIENCE_TEST,
AUDIENCE_STAGING,
AUDIENCE_PRODUCTION,
AUTHORIZATION_BASE_URL_DEV,
AUTHORIZATION_BASE_URL_PRODUCTION,
AUTHORIZATION_BASE_URL_TEST,
AUTHORIZATION_BASE_URL_STAGING,
AUTHORIZATION_BASE_URL_PRODUCTION,
CLIENT_ID_INTERACTIVE_DEV,
CLIENT_ID_INTERACTIVE_PRODUCTION,
CLIENT_ID_INTERACTIVE_TEST,
CLIENT_ID_INTERACTIVE_STAGING,
CLIENT_ID_INTERACTIVE_PRODUCTION,
DEVICE_URL_DEV,
DEVICE_URL_PRODUCTION,
DEVICE_URL_TEST,
DEVICE_URL_STAGING,
DEVICE_URL_PRODUCTION,
JWS_JSON_URL_DEV,
JWS_JSON_URL_PRODUCTION,
JWS_JSON_URL_TEST,
JWS_JSON_URL_STAGING,
JWS_JSON_URL_PRODUCTION,
REDIRECT_URI_DEV,
REDIRECT_URI_PRODUCTION,
REDIRECT_URI_TEST,
REDIRECT_URI_STAGING,
REDIRECT_URI_PRODUCTION,
TOKEN_URL_DEV,
TOKEN_URL_PRODUCTION,
TOKEN_URL_TEST,
TOKEN_URL_STAGING,
TOKEN_URL_PRODUCTION,
)
from ._messages import UNKNOWN_ENDPOINT_URL

Expand Down Expand Up @@ -519,22 +527,6 @@ def pre_init(cls, values: dict) -> dict: # type: ignore[type-arg] # noqa: N805
return values

match api_root:
case x if x == API_ROOT_PRODUCTION:
values["audience"] = AUDIENCE_PRODUCTION
values["authorization_base_url"] = AUTHORIZATION_BASE_URL_PRODUCTION
values["token_url"] = TOKEN_URL_PRODUCTION
values["redirect_uri"] = REDIRECT_URI_PRODUCTION
values["device_url"] = DEVICE_URL_PRODUCTION
values["jws_json_url"] = JWS_JSON_URL_PRODUCTION
values["client_id_interactive"] = CLIENT_ID_INTERACTIVE_PRODUCTION
case x if x == API_ROOT_STAGING:
values["audience"] = AUDIENCE_STAGING
values["authorization_base_url"] = AUTHORIZATION_BASE_URL_STAGING
values["token_url"] = TOKEN_URL_STAGING
values["redirect_uri"] = REDIRECT_URI_STAGING
values["device_url"] = DEVICE_URL_STAGING
values["jws_json_url"] = JWS_JSON_URL_STAGING
values["client_id_interactive"] = CLIENT_ID_INTERACTIVE_STAGING
case x if x == API_ROOT_DEV:
values["audience"] = AUDIENCE_DEV
values["authorization_base_url"] = AUTHORIZATION_BASE_URL_DEV
Expand All @@ -543,6 +535,30 @@ def pre_init(cls, values: dict) -> dict: # type: ignore[type-arg] # noqa: N805
values["device_url"] = DEVICE_URL_DEV
values["jws_json_url"] = JWS_JSON_URL_DEV
values["client_id_interactive"] = CLIENT_ID_INTERACTIVE_DEV
case x if x == API_ROOT_TEST:
values["audience"] = AUDIENCE_TEST
values["authorization_base_url"] = AUTHORIZATION_BASE_URL_TEST
values["token_url"] = TOKEN_URL_TEST
values["redirect_uri"] = REDIRECT_URI_TEST
values["device_url"] = DEVICE_URL_TEST
values["jws_json_url"] = JWS_JSON_URL_TEST
values["client_id_interactive"] = CLIENT_ID_INTERACTIVE_TEST
case x if x == API_ROOT_STAGING:
values["audience"] = AUDIENCE_STAGING
values["authorization_base_url"] = AUTHORIZATION_BASE_URL_STAGING
values["token_url"] = TOKEN_URL_STAGING
values["redirect_uri"] = REDIRECT_URI_STAGING
values["device_url"] = DEVICE_URL_STAGING
values["jws_json_url"] = JWS_JSON_URL_STAGING
values["client_id_interactive"] = CLIENT_ID_INTERACTIVE_STAGING
case x if x == API_ROOT_PRODUCTION:
values["audience"] = AUDIENCE_PRODUCTION
values["authorization_base_url"] = AUTHORIZATION_BASE_URL_PRODUCTION
values["token_url"] = TOKEN_URL_PRODUCTION
values["redirect_uri"] = REDIRECT_URI_PRODUCTION
values["device_url"] = DEVICE_URL_PRODUCTION
values["jws_json_url"] = JWS_JSON_URL_PRODUCTION
values["client_id_interactive"] = CLIENT_ID_INTERACTIVE_PRODUCTION
case _:
raise ValueError(UNKNOWN_ENDPOINT_URL)

Expand Down
44 changes: 36 additions & 8 deletions tests/aignostics/platform/settings_test.py
Original file line number Diff line number Diff line change
Expand Up @@ -10,29 +10,37 @@

from aignostics.platform import (
API_ROOT_DEV,
API_ROOT_PRODUCTION,
API_ROOT_TEST,
API_ROOT_STAGING,
API_ROOT_PRODUCTION,
AUDIENCE_DEV,
AUDIENCE_PRODUCTION,
AUDIENCE_TEST,
AUDIENCE_STAGING,
AUDIENCE_PRODUCTION,
AUTHORIZATION_BASE_URL_DEV,
AUTHORIZATION_BASE_URL_PRODUCTION,
AUTHORIZATION_BASE_URL_TEST,
AUTHORIZATION_BASE_URL_STAGING,
AUTHORIZATION_BASE_URL_PRODUCTION,
CLIENT_ID_INTERACTIVE_DEV,
CLIENT_ID_INTERACTIVE_PRODUCTION,
CLIENT_ID_INTERACTIVE_TEST,
CLIENT_ID_INTERACTIVE_STAGING,
CLIENT_ID_INTERACTIVE_PRODUCTION,
DEVICE_URL_DEV,
DEVICE_URL_PRODUCTION,
DEVICE_URL_TEST,
DEVICE_URL_STAGING,
DEVICE_URL_PRODUCTION,
JWS_JSON_URL_DEV,
JWS_JSON_URL_PRODUCTION,
JWS_JSON_URL_TEST,
JWS_JSON_URL_STAGING,
JWS_JSON_URL_PRODUCTION,
REDIRECT_URI_DEV,
REDIRECT_URI_PRODUCTION,
REDIRECT_URI_TEST,
REDIRECT_URI_STAGING,
REDIRECT_URI_PRODUCTION,
TOKEN_URL_DEV,
TOKEN_URL_PRODUCTION,
TOKEN_URL_TEST,
TOKEN_URL_STAGING,
TOKEN_URL_PRODUCTION,
UNKNOWN_ENDPOINT_URL,
Settings,
settings,
Expand Down Expand Up @@ -130,6 +138,26 @@ def test_authentication_settings_dev(record_property, mock_env_vars) -> None:
assert settings.jws_json_url == JWS_JSON_URL_DEV


@pytest.mark.unit
def test_authentication_settings_test(record_property, mock_env_vars) -> None:
"""Test authentication settings with test API root."""
record_property("tested-item-id", "SPEC-PLATFORM-SERVICE")
settings = Settings(
client_id_device=SecretStr("test-client-id-device"),
api_root=API_ROOT_TEST,
)

assert settings.api_root == API_ROOT_TEST
assert settings.client_id_interactive == CLIENT_ID_INTERACTIVE_TEST
assert settings.client_id_device.get_secret_value() == "test-client-id-device"
assert settings.audience == AUDIENCE_TEST
assert settings.authorization_base_url == AUTHORIZATION_BASE_URL_TEST
assert settings.token_url == TOKEN_URL_TEST
assert settings.redirect_uri == REDIRECT_URI_TEST
assert settings.device_url == DEVICE_URL_TEST
assert settings.jws_json_url == JWS_JSON_URL_TEST


@pytest.mark.unit
def test_authentication_settings_unknown_api_root(record_property, mock_env_vars) -> None:
"""Test authentication settings with unknown API root raises ValueError."""
Expand Down
Loading