Skip to content

Commit d5b898b

Browse files
authored
Merge pull request #11 from Microsoft/users/tedchamb/initial
better error message when we can't retrieve resource areas.
2 parents 79dfa18 + 4a1c2b5 commit d5b898b

3 files changed

Lines changed: 29 additions & 8 deletions

File tree

vsts/vsts/git/v4_0/git_client.py

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -30,3 +30,15 @@ def get_vsts_info(self, relative_remote_url):
3030
response = self._send_request(request, headers)
3131
return self._deserialize('VstsInfo', response)
3232

33+
@staticmethod
34+
def get_vsts_info_by_remote_url(remote_url, credentials, suppress_fedauth_redirect=True):
35+
request = ClientRequest()
36+
request.url = remote_url.rstrip('/') + '/vsts/info'
37+
request.method = 'GET'
38+
headers = {'Accept': 'application/json'}
39+
if suppress_fedauth_redirect:
40+
headers['X-TFS-FedAuthRedirect'] = 'Suppress'
41+
git_client = GitClient(base_url=remote_url, creds=credentials)
42+
response = git_client._send_request(request, headers)
43+
return git_client._deserialize('VstsInfo', response)
44+

vsts/vsts/vss_client.py

Lines changed: 5 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -47,7 +47,7 @@ def _send_request(self, request, headers=None, content=None, **operation_config)
4747
:param content: Any body data to add to the request.
4848
:param config: Any specific config overrides
4949
"""
50-
if self._trace_env_var in os.environ and os.environ[self._trace_env_var] == 'true':
50+
if TRACE_ENV_VAR in os.environ and os.environ[TRACE_ENV_VAR] == 'true':
5151
print(request.method + ' ' + request.url)
5252
response = self._client.send(request=request, headers=headers,
5353
content=content, **operation_config)
@@ -235,12 +235,11 @@ def _handle_error(self, request, response):
235235

236236
@staticmethod
237237
def _normalize_url(url):
238-
if url.endswith("/"):
239-
url = url[:-1]
240-
url = url.lower()
241-
return url
238+
return url.rstrip('/').lower()
242239

243240
_locations_cache = {}
244-
_trace_env_var = 'vsts_python_print_urls'
245241
_session_header_key = 'X-TFS-Session'
246242
_session_data = {_session_header_key: str(uuid.uuid4())}
243+
244+
245+
TRACE_ENV_VAR = 'vsts_python_print_urls'

vsts/vsts/vss_connection.py

Lines changed: 12 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -56,10 +56,16 @@ def _get_url_for_client_instance(self, client_class):
5656
return self.base_url
5757
else:
5858
resource_areas = self._get_resource_areas()
59+
if resource_areas is None:
60+
raise VstsClientRequestError(('Failed to retrieve resource areas '
61+
+ 'from server: {url}').format(url=self.base_url))
62+
if len(resource_areas) == 0:
63+
# For OnPrem environments we get an empty list.
64+
return self.base_url
5965
for resource_area in resource_areas:
6066
if resource_area.id.lower() == resource_id.lower():
6167
return resource_area.location_url
62-
raise VstsClientRequestError(('Could not find information for resource area {id}'
68+
raise VstsClientRequestError(('Could not find information for resource area {id} '
6369
+ 'from server: {url}').format(id=resource_id,
6470
url=self.base_url))
6571

@@ -80,8 +86,12 @@ def _get_resource_areas(self, force=False):
8086
elif not force:
8187
logging.info('File cache miss for resources on: %s', location_client.normalized_url)
8288
self._resource_areas = location_client.get_resource_areas()
89+
if self._resource_areas is None:
90+
# For OnPrem environments we get an empty collection wrapper.
91+
self._resource_areas = []
8392
try:
84-
serialized = location_client._base_serialize.serialize_data(self._resource_areas, '[ResourceAreaInfo]')
93+
serialized = location_client._base_serialize.serialize_data(self._resource_areas,
94+
'[ResourceAreaInfo]')
8595
RESOURCE_FILE_CACHE[location_client.normalized_url] = serialized
8696
except Exception as ex:
8797
logging.exception(str(ex))

0 commit comments

Comments
 (0)