16
16
import warnings
17
17
import itertools
18
18
from contextlib import contextmanager
19
+ from typing import Optional
19
20
20
21
try :
21
22
from http import HTTPStatus
@@ -1323,49 +1324,44 @@ def _do_rest_request(self, function, url, **kwargs):
1323
1324
return new_response
1324
1325
1325
1326
def raw_post (self , entrypoint , ** kwargs ):
1326
- entrypoint = entrypoint .lstrip ("/" ).rstrip ("/" )
1327
- self .log .debug ("Executing [POST] {}" .format (entrypoint ))
1328
- url = "{}/{}" .format (self ._rest_url , entrypoint )
1327
+ url = self ._endpoint_to_url (entrypoint )
1328
+ self .log .debug ("Executing [POST] {}" .format (url ))
1329
1329
return self ._do_rest_request (
1330
1330
RequestTypes .post ,
1331
1331
url ,
1332
1332
** kwargs
1333
1333
)
1334
1334
1335
1335
def raw_put (self , entrypoint , ** kwargs ):
1336
- entrypoint = entrypoint .lstrip ("/" ).rstrip ("/" )
1337
- self .log .debug ("Executing [PUT] {}" .format (entrypoint ))
1338
- url = "{}/{}" .format (self ._rest_url , entrypoint )
1336
+ url = self ._endpoint_to_url (entrypoint )
1337
+ self .log .debug ("Executing [PUT] {}" .format (url ))
1339
1338
return self ._do_rest_request (
1340
1339
RequestTypes .put ,
1341
1340
url ,
1342
1341
** kwargs
1343
1342
)
1344
1343
1345
1344
def raw_patch (self , entrypoint , ** kwargs ):
1346
- entrypoint = entrypoint .lstrip ("/" ).rstrip ("/" )
1347
- self .log .debug ("Executing [PATCH] {}" .format (entrypoint ))
1348
- url = "{}/{}" .format (self ._rest_url , entrypoint )
1345
+ url = self ._endpoint_to_url (entrypoint )
1346
+ self .log .debug ("Executing [PATCH] {}" .format (url ))
1349
1347
return self ._do_rest_request (
1350
1348
RequestTypes .patch ,
1351
1349
url ,
1352
1350
** kwargs
1353
1351
)
1354
1352
1355
1353
def raw_get (self , entrypoint , ** kwargs ):
1356
- entrypoint = entrypoint .lstrip ("/" ).rstrip ("/" )
1357
- self .log .debug ("Executing [GET] {}" .format (entrypoint ))
1358
- url = "{}/{}" .format (self ._rest_url , entrypoint )
1354
+ url = self ._endpoint_to_url (entrypoint )
1355
+ self .log .debug ("Executing [GET] {}" .format (url ))
1359
1356
return self ._do_rest_request (
1360
1357
RequestTypes .get ,
1361
1358
url ,
1362
1359
** kwargs
1363
1360
)
1364
1361
1365
1362
def raw_delete (self , entrypoint , ** kwargs ):
1366
- entrypoint = entrypoint .lstrip ("/" ).rstrip ("/" )
1367
- self .log .debug ("Executing [DELETE] {}" .format (entrypoint ))
1368
- url = "{}/{}" .format (self ._rest_url , entrypoint )
1363
+ url = self ._endpoint_to_url (entrypoint )
1364
+ self .log .debug ("Executing [DELETE] {}" .format (url ))
1369
1365
return self ._do_rest_request (
1370
1366
RequestTypes .delete ,
1371
1367
url ,
@@ -1708,6 +1704,30 @@ def enroll_event_job(
1708
1704
1709
1705
return response .data
1710
1706
1707
+ def _endpoint_to_url (
1708
+ self ,
1709
+ endpoint : str ,
1710
+ use_rest : Optional [bool ] = True
1711
+ ):
1712
+ """Cleanup endpoint and return full url to AYON server.
1713
+
1714
+ If endpoint already starts with server url only slashes are removed.
1715
+
1716
+ Args:
1717
+ endpoint (str): Endpoint to be cleaned.
1718
+ use_rest (Optional[bool]): Use only base server url if set to
1719
+ False, otherwise REST endpoint is used.
1720
+
1721
+ Returns:
1722
+ str: Full url to AYON server.
1723
+
1724
+ """
1725
+ endpoint = endpoint .lstrip ("/" ).rstrip ("/" )
1726
+ if endpoint .startswith (self ._base_url ):
1727
+ return endpoint
1728
+ base_url = self ._rest_url if use_rest else self ._graphql_url
1729
+ return f"{ base_url } /{ endpoint } "
1730
+
1711
1731
def _download_file_to_stream (self , url , stream , chunk_size , progress ):
1712
1732
kwargs = {"stream" : True }
1713
1733
if self ._session is None :
@@ -1752,9 +1772,8 @@ def download_file_to_stream(
1752
1772
1753
1773
if endpoint .startswith (self ._base_url ):
1754
1774
url = endpoint
1755
- else :
1756
- endpoint = endpoint .lstrip ("/" ).rstrip ("/" )
1757
- url = "{}/{}" .format (self ._rest_url , endpoint )
1775
+
1776
+ url = self ._endpoint_to_url (endpoint )
1758
1777
1759
1778
if progress is None :
1760
1779
progress = TransferProgress ()
@@ -1922,11 +1941,7 @@ def upload_file_from_stream(
1922
1941
requests.Response: Response object
1923
1942
1924
1943
"""
1925
- if endpoint .startswith (self ._base_url ):
1926
- url = endpoint
1927
- else :
1928
- endpoint = endpoint .lstrip ("/" ).rstrip ("/" )
1929
- url = "{}/{}" .format (self ._rest_url , endpoint )
1944
+ url = self ._endpoint_to_url (endpoint )
1930
1945
1931
1946
# Create dummy object so the function does not have to check
1932
1947
# 'progress' variable everywhere
@@ -2337,15 +2352,15 @@ def get_addons_info(self, details=True):
2337
2352
response .raise_for_status ()
2338
2353
return response .data
2339
2354
2340
- def get_addon_url (self , addon_name , addon_version , * subpaths ):
2341
- """Calculate url to addon route.
2355
+ def get_addon_endpoint (self , addon_name , addon_version , * subpaths ):
2356
+ """Calculate endpoint to addon route.
2342
2357
2343
2358
Examples:
2344
2359
2345
2360
>>> api = ServerAPI("https://your.url.com")
2346
2361
>>> api.get_addon_url(
2347
2362
... "example", "1.0.0", "private", "my.zip")
2348
- 'https://your.url.com/ addons/example/1.0.0/private/my.zip'
2363
+ 'addons/example/1.0.0/private/my.zip'
2349
2364
2350
2365
Args:
2351
2366
addon_name (str): Name of addon.
@@ -2360,13 +2375,41 @@ def get_addon_url(self, addon_name, addon_version, *subpaths):
2360
2375
ending = ""
2361
2376
if subpaths :
2362
2377
ending = "/{}" .format ("/" .join (subpaths ))
2363
- return "{}/addons/{}/{}{}" .format (
2364
- self ._base_url ,
2378
+ return "addons/{}/{}{}" .format (
2365
2379
addon_name ,
2366
2380
addon_version ,
2367
2381
ending
2368
2382
)
2369
2383
2384
+ def get_addon_url (
2385
+ self , addon_name , addon_version , * subpaths , use_rest = True
2386
+ ):
2387
+ """Calculate url to addon route.
2388
+
2389
+ Examples:
2390
+
2391
+ >>> api = ServerAPI("https://your.url.com")
2392
+ >>> api.get_addon_url(
2393
+ ... "example", "1.0.0", "private", "my.zip")
2394
+ 'https://your.url.com/api/addons/example/1.0.0/private/my.zip'
2395
+
2396
+ Args:
2397
+ addon_name (str): Name of addon.
2398
+ addon_version (str): Version of addon.
2399
+ *subpaths (str): Any amount of subpaths that are added to
2400
+ addon url.
2401
+ use_rest (Optional[bool]): Use rest endpoint.
2402
+
2403
+ Returns:
2404
+ str: Final url.
2405
+
2406
+ """
2407
+ endpoint = self .get_addon_endpoint (
2408
+ addon_name , addon_version , * subpaths
2409
+ )
2410
+ url_base = self ._base_url if use_rest else self ._rest_url
2411
+ return f"{ url_base } /{ endpoint } "
2412
+
2370
2413
def download_addon_private_file (
2371
2414
self ,
2372
2415
addon_name ,
@@ -2404,12 +2447,13 @@ def download_addon_private_file(
2404
2447
dst_dirpath = os .path .dirname (dst_filepath )
2405
2448
os .makedirs (dst_dirpath , exist_ok = True )
2406
2449
2407
- url = self .get_addon_url (
2450
+ endpoint = self .get_addon_endpoint (
2408
2451
addon_name ,
2409
2452
addon_version ,
2410
2453
"private" ,
2411
2454
filename
2412
2455
)
2456
+ url = f"{ self ._base_url } /{ endpoint } "
2413
2457
self .download_file (
2414
2458
url , dst_filepath , chunk_size = chunk_size , progress = progress
2415
2459
)
@@ -3222,7 +3266,7 @@ def get_addon_settings_schema(
3222
3266
if project_name :
3223
3267
args = (project_name , )
3224
3268
3225
- endpoint = self .get_addon_url (
3269
+ endpoint = self .get_addon_endpoint (
3226
3270
addon_name , addon_version , "schema" , * args
3227
3271
)
3228
3272
result = self .get (endpoint )
0 commit comments