Skip to content

Commit f7af834

Browse files
Fix sync client Configuration (#341)
1 parent 1c3fc29 commit f7af834

File tree

3 files changed

+65
-4
lines changed

3 files changed

+65
-4
lines changed

src/conductor/client/configuration/configuration.py

Lines changed: 10 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,9 @@
44

55
import logging
66
import os
7+
import re
78
import time
9+
import warnings
810
from typing import Optional, Dict, Union
911

1012
from conductor.shared.configuration.settings.authentication_settings import (
@@ -113,7 +115,13 @@ def __init__(
113115
if server_api_url is not None:
114116
self.host = server_api_url
115117
elif base_url is not None:
116-
self.host = base_url + "/api"
118+
if re.search(r'/api(/|$)', base_url):
119+
warnings.warn(
120+
"'base_url' been passed with '/api' path. Consider using 'server_api_url' instead"
121+
)
122+
else:
123+
base_url += "/api"
124+
self.host = base_url
117125
else:
118126
self.host = os.getenv("CONDUCTOR_SERVER_URL")
119127

@@ -131,9 +139,7 @@ def __init__(
131139
key = os.getenv("CONDUCTOR_AUTH_KEY")
132140
secret = os.getenv("CONDUCTOR_AUTH_SECRET")
133141
if key is not None and secret is not None:
134-
self.authentication_settings = AuthenticationSettings(
135-
key_id=key, key_secret=secret
136-
)
142+
self.authentication_settings = AuthenticationSettings(key_id=key, key_secret=secret)
137143
else:
138144
self.authentication_settings = None
139145

src/conductor/client/http/models/__init__.py

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -257,6 +257,9 @@
257257
from conductor.client.http.models.start_workflow import StartWorkflow
258258
from conductor.shared.http.enums.idempotency_strategy import IdempotencyStrategy
259259
from conductor.client.http.models.task_result_status import TaskResultStatus
260+
from conductor.client.http.models.task_details import TaskDetails
261+
from conductor.client.http.models.terminate_workflow import TerminateWorkflow
262+
from conductor.client.http.models.update_workflow_variables import UpdateWorkflowVariables
260263

261264
__all__ = [ # noqa: RUF022
262265
"Action",
@@ -403,4 +406,7 @@
403406
"StateChangeEventType",
404407
"StateChangeConfig",
405408
"TaskResultStatus",
409+
"TaskDetails",
410+
"TerminateWorkflow",
411+
"UpdateWorkflowVariables",
406412
]

tests/unit/configuration/test_configuration.py

Lines changed: 49 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
11
import base64
2+
import warnings
23
import json
34

45
from conductor.client.configuration.configuration import Configuration
@@ -34,6 +35,54 @@ def test_initialization_with_basic_auth_server_api_url():
3435
}
3536

3637

38+
def test_base_url_with_api_path():
39+
with warnings.catch_warnings(record=True) as w:
40+
warnings.simplefilter("always")
41+
configuration = Configuration(base_url="https://domain.com/api")
42+
assert len(w) == 1
43+
assert "base_url' been passed with '/api' path" in str(w[0].message)
44+
assert configuration.host == "https://domain.com/api"
45+
46+
47+
def test_base_url_with_api_path_and_version():
48+
with warnings.catch_warnings(record=True) as w:
49+
warnings.simplefilter("always")
50+
configuration = Configuration(base_url="https://domain.com/api/v1")
51+
assert len(w) == 1
52+
assert "base_url' been passed with '/api' path" in str(w[0].message)
53+
assert configuration.host == "https://domain.com/api/v1"
54+
55+
56+
def test_base_url_with_api_subdomain_no_warning():
57+
with warnings.catch_warnings(record=True) as w:
58+
warnings.simplefilter("always")
59+
configuration = Configuration(base_url="https://api.domain.com")
60+
assert len(w) == 0
61+
assert configuration.host == "https://api.domain.com/api"
62+
63+
64+
def test_valid_base_url_no_warning():
65+
with warnings.catch_warnings(record=True) as w:
66+
warnings.simplefilter("always")
67+
configuration = Configuration(base_url="https://domain.com")
68+
assert len(w) == 0
69+
assert configuration.host == "https://domain.com/api"
70+
71+
72+
def test_base_url_with_port_no_warning():
73+
with warnings.catch_warnings(record=True) as w:
74+
warnings.simplefilter("always")
75+
configuration = Configuration(base_url="https://domain.com:8080")
76+
assert len(w) == 0
77+
assert configuration.host == "https://domain.com:8080/api"
78+
79+
80+
def test_base_url_with_api_subdomain_and_port_no_warning():
81+
with warnings.catch_warnings(record=True) as w:
82+
warnings.simplefilter("always")
83+
configuration = Configuration(base_url="https://api.domain.com:8080")
84+
assert len(w) == 0
85+
assert configuration.host == "https://api.domain.com:8080/api"
3786
def test_ssl_ca_cert_initialization():
3887
configuration = Configuration(
3988
base_url="https://internal.conductor.dev", ssl_ca_cert="/path/to/ca-cert.pem"

0 commit comments

Comments
 (0)