Skip to content
Merged
Show file tree
Hide file tree
Changes from 3 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
14 changes: 10 additions & 4 deletions src/conductor/client/configuration/configuration.py
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,9 @@

import logging
import os
import re
import time
import warnings
from typing import Optional

from conductor.shared.configuration.settings.authentication_settings import (
Expand All @@ -27,7 +29,13 @@ def __init__(
if server_api_url is not None:
self.host = server_api_url
elif base_url is not None:
self.host = base_url + "/api"
if re.search(r'/api(/|$)', base_url):
warnings.warn(
"'base_url' been passed with '/api' path. Consider using 'server_api_url' instead"
)
else:
base_url += "/api"
self.host = base_url
else:
self.host = os.getenv("CONDUCTOR_SERVER_URL")

Expand All @@ -45,9 +53,7 @@ def __init__(
key = os.getenv("CONDUCTOR_AUTH_KEY")
secret = os.getenv("CONDUCTOR_AUTH_SECRET")
if key is not None and secret is not None:
self.authentication_settings = AuthenticationSettings(
key_id=key, key_secret=secret
)
self.authentication_settings = AuthenticationSettings(key_id=key, key_secret=secret)
else:
self.authentication_settings = None

Expand Down
6 changes: 6 additions & 0 deletions src/conductor/client/http/models/__init__.py
Original file line number Diff line number Diff line change
Expand Up @@ -257,6 +257,9 @@
from conductor.client.http.models.start_workflow import StartWorkflow
from conductor.shared.http.enums.idempotency_strategy import IdempotencyStrategy
from conductor.client.http.models.task_result_status import TaskResultStatus
from conductor.client.http.models.task_details import TaskDetails
from conductor.client.http.models.terminate_workflow import TerminateWorkflow
from conductor.client.http.models.update_workflow_variables import UpdateWorkflowVariables

__all__ = [ # noqa: RUF022
"Action",
Expand Down Expand Up @@ -403,4 +406,7 @@
"StateChangeEventType",
"StateChangeConfig",
"TaskResultStatus",
"TaskDetails",
"TerminateWorkflow",
"UpdateWorkflowVariables",
]
55 changes: 52 additions & 3 deletions tests/unit/configuration/test_configuration.py
Original file line number Diff line number Diff line change
@@ -1,4 +1,5 @@
import base64
import warnings

from conductor.client.configuration.configuration import Configuration
from conductor.client.http.api_client import ApiClient
Expand All @@ -21,9 +22,7 @@ def test_initialization_with_server_api_url():


def test_initialization_with_basic_auth_server_api_url():
configuration = Configuration(
server_api_url="https://user:password@play.orkes.io/api"
)
configuration = Configuration(server_api_url="https://user:password@play.orkes.io/api")
basic_auth = "user:password"
expected_host = f"https://{basic_auth}@play.orkes.io/api"
assert configuration.host == expected_host
Expand All @@ -33,3 +32,53 @@ def test_initialization_with_basic_auth_server_api_url():
"Accept-Encoding": "gzip",
"authorization": token,
}


def test_base_url_with_api_path():
with warnings.catch_warnings(record=True) as w:
warnings.simplefilter("always")
configuration = Configuration(base_url="https://domain.com/api")
assert len(w) == 1
assert "base_url' been passed with '/api' path" in str(w[0].message)
assert configuration.host == "https://domain.com/api"


def test_base_url_with_api_path_and_version():
with warnings.catch_warnings(record=True) as w:
warnings.simplefilter("always")
configuration = Configuration(base_url="https://domain.com/api/v1")
assert len(w) == 1
assert "base_url' been passed with '/api' path" in str(w[0].message)
assert configuration.host == "https://domain.com/api/v1"


def test_base_url_with_api_subdomain_no_warning():
with warnings.catch_warnings(record=True) as w:
warnings.simplefilter("always")
configuration = Configuration(base_url="https://api.domain.com")
assert len(w) == 0
assert configuration.host == "https://api.domain.com/api"


def test_valid_base_url_no_warning():
with warnings.catch_warnings(record=True) as w:
warnings.simplefilter("always")
configuration = Configuration(base_url="https://domain.com")
assert len(w) == 0
assert configuration.host == "https://domain.com/api"


def test_base_url_with_port_no_warning():
with warnings.catch_warnings(record=True) as w:
warnings.simplefilter("always")
configuration = Configuration(base_url="https://domain.com:8080")
assert len(w) == 0
assert configuration.host == "https://domain.com:8080/api"


def test_base_url_with_api_subdomain_and_port_no_warning():
with warnings.catch_warnings(record=True) as w:
warnings.simplefilter("always")
configuration = Configuration(base_url="https://api.domain.com:8080")
assert len(w) == 0
assert configuration.host == "https://api.domain.com:8080/api"