Skip to content

Commit 1db6008

Browse files
committed
Add option to define custom public url
1 parent bb5a260 commit 1db6008

File tree

5 files changed

+11
-8
lines changed

5 files changed

+11
-8
lines changed

src/apify_client/client.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -85,7 +85,7 @@ def __init__(
8585
self.token = token
8686
api_url = (api_url or DEFAULT_API_URL).rstrip('/')
8787
self.base_url = f'{api_url}/{API_VERSION}'
88-
self.public_base_url = (api_public_url or self.base_url).rstrip('/')
88+
self.public_base_url = (api_public_url or DEFAULT_API_URL).rstrip('/')
8989
self.max_retries = max_retries or 8
9090
self.min_delay_between_retries_millis = min_delay_between_retries_millis or 500
9191
self.timeout_secs = timeout_secs or DEFAULT_TIMEOUT

src/apify_client/clients/base/base_client.py

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
from __future__ import annotations
22

33
from typing import TYPE_CHECKING, Any
4-
from urllib.parse import urlparse
4+
from urllib.parse import urljoin, urlparse
55

66
from apify_client._logging import WithLogDetailsClient
77
from apify_client._utils import to_safe_id
@@ -23,8 +23,7 @@ def _url(self, path: str | None = None, *, public: bool = False) -> str:
2323
url = f'{self.url}/{path}' if path is not None else self.url
2424

2525
if public:
26-
url_path = urlparse(url).path
27-
return urlparse(self.root_client.public_base_url)._replace(path=url_path).geturl()
26+
return urljoin(self.root_client.public_base_url + '/', urlparse(url).path.strip('/'))
2827
return url
2928

3029
def _params(self, **kwargs: Any) -> dict:

tests/integration/conftest.py

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,8 @@
1313
('https://api.apify.com', 'https://api.apify.com'),
1414
('https://api.apify.com', None),
1515
('https://api.apify.com', 'https://custom-public-url.com'),
16+
('https://api.apify.com', 'https://custom-public-url.com/with/custom/path'),
17+
('https://api.apify.com', 'https://custom-public-url.com/with/custom/path/'),
1618
],
1719
)
1820

tests/integration/test_dataset.py

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@
66
from integration.integration_test_utils import random_resource_name
77

88
from apify_client import ApifyClient, ApifyClientAsync
9+
from apify_client.client import DEFAULT_API_URL
910

1011

1112
class TestDatasetSync:
@@ -53,7 +54,7 @@ def test_public_url(self, api_token: str, api_url: str, api_public_url: str) ->
5354
try:
5455
public_url = dataset.create_items_public_url()
5556
assert public_url == (
56-
f'{api_public_url or api_url}/v2/datasets/'
57+
f'{(api_public_url or DEFAULT_API_URL).strip("/")}/v2/datasets/'
5758
f'{created_store["id"]}/items?signature={public_url.split("signature=")[1]}'
5859
)
5960
finally:
@@ -109,7 +110,7 @@ async def test_public_url(self, api_token: str, api_url: str, api_public_url: st
109110
try:
110111
public_url = await dataset.create_items_public_url()
111112
assert public_url == (
112-
f'{api_public_url or api_url}/v2/datasets/'
113+
f'{(api_public_url or DEFAULT_API_URL).strip("/")}/v2/datasets/'
113114
f'{created_store["id"]}/items?signature={public_url.split("signature=")[1]}'
114115
)
115116
finally:

tests/integration/test_key_value_store.py

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@
66
from integration.integration_test_utils import random_resource_name
77

88
from apify_client import ApifyClient, ApifyClientAsync
9+
from apify_client.client import DEFAULT_API_URL
910

1011

1112
class TestKeyValueStoreSync:
@@ -53,7 +54,7 @@ def test_public_url(self, api_token: str, api_url: str, api_public_url: str) ->
5354
try:
5455
public_url = kvs.create_keys_public_url()
5556
assert public_url == (
56-
f'{api_public_url or api_url}/v2/key-value-stores/'
57+
f'{(api_public_url or DEFAULT_API_URL).strip("/")}/v2/key-value-stores/'
5758
f'{created_store["id"]}/keys?signature={public_url.split("signature=")[1]}'
5859
)
5960
finally:
@@ -113,7 +114,7 @@ async def test_public_url(self, api_token: str, api_url: str, api_public_url: st
113114
try:
114115
public_url = await kvs.create_keys_public_url()
115116
assert public_url == (
116-
f'{api_public_url or api_url}/v2/key-value-stores/'
117+
f'{(api_public_url or DEFAULT_API_URL).strip("/")}/v2/key-value-stores/'
117118
f'{created_store["id"]}/keys?signature={public_url.split("signature=")[1]}'
118119
)
119120
finally:

0 commit comments

Comments
 (0)