From 7cca757bcc01eb6507f99453eb63b34000389426 Mon Sep 17 00:00:00 2001 From: Ted Chambers Date: Fri, 10 May 2019 11:58:28 -0400 Subject: [PATCH] Add resource area id for Profile client. Look up resource area information from sps deployment, if not found for organization. --- azure-devops/azure/devops/connection.py | 20 ++++++++++++++++++- .../devops/v5_0/profile/profile_client.py | 2 +- .../devops/v5_1/profile/profile_client.py | 2 +- .../profile_regions/profile_regions_client.py | 2 +- 4 files changed, 22 insertions(+), 4 deletions(-) diff --git a/azure-devops/azure/devops/connection.py b/azure-devops/azure/devops/connection.py index e1e3e224..3d0d345a 100644 --- a/azure-devops/azure/devops/connection.py +++ b/azure-devops/azure/devops/connection.py @@ -14,7 +14,6 @@ from .v5_0.client_factory import ClientFactoryV5_0 from .v5_1.client_factory import ClientFactoryV5_1 - logger = logging.getLogger(__name__) @@ -75,10 +74,25 @@ def _get_url_for_client_instance(self, client_class): for resource_area in resource_areas: if resource_area.id.lower() == resource_id.lower(): return resource_area.location_url + + # Check SPS deployment level for the resource area + resource_area = self._get_deployment_resource_area_from_sps(resource_id) + if resource_area is not None: + return resource_area.location_url + raise AzureDevOpsClientRequestError(('Could not find information for resource area {id} ' + 'from server: {url}').format(id=resource_id, url=self.base_url)) + def _get_deployment_resource_area_from_sps(self, resource_id): + resource_id = resource_id.lower() + if resource_id in _deployment_level_resource_areas: + return _deployment_level_resource_areas[resource_id] + location_client = LocationClient(sps_url, self._creds) + resource_area = location_client.get_resource_area(area_id=resource_id) + _deployment_level_resource_areas[resource_id] = resource_area + return resource_area + def authenticate(self): self._get_resource_areas(force=True) @@ -110,3 +124,7 @@ def _get_resource_areas(self, force=False): @staticmethod def _combine_url(part1, part2): return part1.rstrip('/') + '/' + part2.strip('/') + + +_deployment_level_resource_areas = {} +sps_url = 'https://app.vssps.visualstudio.com' diff --git a/azure-devops/azure/devops/v5_0/profile/profile_client.py b/azure-devops/azure/devops/v5_0/profile/profile_client.py index 9a0158c9..65e5148e 100644 --- a/azure-devops/azure/devops/v5_0/profile/profile_client.py +++ b/azure-devops/azure/devops/v5_0/profile/profile_client.py @@ -23,7 +23,7 @@ def __init__(self, base_url=None, creds=None): self._serialize = Serializer(client_models) self._deserialize = Deserializer(client_models) - resource_area_identifier = None + resource_area_identifier = '8ccfef3d-2b87-4e99-8ccb-66e343d2daa8' def get_profile(self, id, details=None, with_attributes=None, partition=None, core_attributes=None, force_refresh=None): """GetProfile. diff --git a/azure-devops/azure/devops/v5_1/profile/profile_client.py b/azure-devops/azure/devops/v5_1/profile/profile_client.py index 3e0eec8d..5fe6df3a 100644 --- a/azure-devops/azure/devops/v5_1/profile/profile_client.py +++ b/azure-devops/azure/devops/v5_1/profile/profile_client.py @@ -23,7 +23,7 @@ def __init__(self, base_url=None, creds=None): self._serialize = Serializer(client_models) self._deserialize = Deserializer(client_models) - resource_area_identifier = None + resource_area_identifier = '8ccfef3d-2b87-4e99-8ccb-66e343d2daa8' def get_profile(self, id, details=None, with_attributes=None, partition=None, core_attributes=None, force_refresh=None): """GetProfile. diff --git a/azure-devops/azure/devops/v5_1/profile_regions/profile_regions_client.py b/azure-devops/azure/devops/v5_1/profile_regions/profile_regions_client.py index b935df5c..8236d553 100644 --- a/azure-devops/azure/devops/v5_1/profile_regions/profile_regions_client.py +++ b/azure-devops/azure/devops/v5_1/profile_regions/profile_regions_client.py @@ -23,7 +23,7 @@ def __init__(self, base_url=None, creds=None): self._serialize = Serializer(client_models) self._deserialize = Deserializer(client_models) - resource_area_identifier = None + resource_area_identifier = '8ccfef3d-2b87-4e99-8ccb-66e343d2daa8' def get_geo_region(self, ip): """GetGeoRegion.