diff --git a/src/aignostics/platform/__init__.py b/src/aignostics/platform/__init__.py index 6c5a3e370..4a9d28efd 100644 --- a/src/aignostics/platform/__init__.py +++ b/src/aignostics/platform/__init__.py @@ -38,17 +38,21 @@ 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, @@ -56,17 +60,21 @@ 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 ( @@ -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", @@ -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", diff --git a/src/aignostics/platform/_constants.py b/src/aignostics/platform/_constants.py index 53fcbcaa8..c64315b44 100644 --- a/src/aignostics/platform/_constants.py +++ b/src/aignostics/platform/_constants.py @@ -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 @@ -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" diff --git a/src/aignostics/platform/_settings.py b/src/aignostics/platform/_settings.py index b6c586100..71ca1d3a5 100644 --- a/src/aignostics/platform/_settings.py +++ b/src/aignostics/platform/_settings.py @@ -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 @@ -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 @@ -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) diff --git a/tests/aignostics/platform/settings_test.py b/tests/aignostics/platform/settings_test.py index a74408e6f..72c77d032 100644 --- a/tests/aignostics/platform/settings_test.py +++ b/tests/aignostics/platform/settings_test.py @@ -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, @@ -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."""