Thanks to visit codestin.com
Credit goes to github.com

Skip to content

Commit d0f8a05

Browse files
prkbpartheagcf-owl-bot[bot]
authored
fix: Fix media upload URI when API endpoint is overridden with client_opions.api_endpoint (googleapis#1992)
* Fix media upload URI when API endpoint is overridden with client_options.api_endpoint This can happen when using Private Service Connect to access the APIs. * 🦉 Updates from OwlBot post-processor See https://github.com/googleapis/repo-automation-bots/blob/main/packages/owl-bot/README.md Co-authored-by: Anthonios Partheniou <[email protected]> Co-authored-by: Owl Bot <gcf-owl-bot[bot]@users.noreply.github.com>
1 parent fa65fca commit d0f8a05

File tree

2 files changed

+39
-0
lines changed

2 files changed

+39
-0
lines changed

googleapiclient/discovery.py

Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -887,6 +887,29 @@ def _fix_up_method_description(method_desc, root_desc, schema):
887887
return path_url, http_method, method_id, accept, max_size, media_path_url
888888

889889

890+
def _fix_up_media_path_base_url(media_path_url, base_url):
891+
"""
892+
Update the media upload base url if its netloc doesn't match base url netloc.
893+
894+
This can happen in case the base url was overridden by
895+
client_options.api_endpoint.
896+
897+
Args:
898+
media_path_url: String; the absolute URI for media upload.
899+
base_url: string, base URL for the API. All requests are relative to this URI.
900+
901+
Returns:
902+
String; the absolute URI for media upload.
903+
"""
904+
parsed_media_url = urllib.parse.urlparse(media_path_url)
905+
parsed_base_url = urllib.parse.urlparse(base_url)
906+
if parsed_media_url.netloc == parsed_base_url.netloc:
907+
return media_path_url
908+
return urllib.parse.urlunparse(
909+
parsed_media_url._replace(netloc=parsed_base_url.netloc)
910+
)
911+
912+
890913
def _urljoin(base, url):
891914
"""Custom urljoin replacement supporting : before / in url."""
892915
# In general, it's unsafe to simply join base and url. However, for
@@ -1133,6 +1156,7 @@ def method(self, **kwargs):
11331156
# Use the media path uri for media uploads
11341157
expanded_url = uritemplate.expand(mediaPathUrl, params)
11351158
url = _urljoin(self._baseUrl, expanded_url + query)
1159+
url = _fix_up_media_path_base_url(url, self._baseUrl)
11361160
if media_upload.resumable():
11371161
url = _add_query_parameter(url, "uploadType", "resumable")
11381162

tests/test_discovery.py

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -58,6 +58,7 @@
5858
V1_DISCOVERY_URI,
5959
V2_DISCOVERY_URI,
6060
ResourceMethodParameters,
61+
_fix_up_media_path_base_url,
6162
_fix_up_media_upload,
6263
_fix_up_method_description,
6364
_fix_up_parameters,
@@ -374,6 +375,20 @@ def test_fix_up_method_description_insert(self):
374375
result, (path_url, http_method, method_id, accept, max_size, media_path_url)
375376
)
376377

378+
def test_fix_up_media_path_base_url_same_netloc(self):
379+
result = _fix_up_media_path_base_url(
380+
"https://www.googleapis.com/upload/foo",
381+
"https://www.googleapis.com/upload/bar",
382+
)
383+
self.assertEqual(result, "https://www.googleapis.com/upload/foo")
384+
385+
def test_fix_up_media_path_base_url_different_netloc(self):
386+
result = _fix_up_media_path_base_url(
387+
"https://www.googleapis.com/upload/foo",
388+
"https://www.example.com/upload/bar",
389+
)
390+
self.assertEqual(result, "https://www.example.com/upload/foo")
391+
377392
def test_urljoin(self):
378393
# We want to exhaustively test various URL combinations.
379394
simple_bases = ["https://www.googleapis.com", "https://www.googleapis.com/"]

0 commit comments

Comments
 (0)