def _url_for(self, attr=None, filter_value=None, endpoint_type='public'): """Fetch requested URL. Fetch the public URL from the Trove service for a particular endpoint attribute. If none given, return the first. """ """Fetch the requested end point URL. """ matching_endpoints = [] catalog = self.body['token']['catalog'] for service in catalog: if service.get("type") != self.service_type: continue if (self.service_name and self.service_type == 'database' and service.get('name') != self.service_name): continue endpoints = service['endpoints'] for endpoint in endpoints: if endpoint.get('interface') == endpoint_type and \ (not filter_value or endpoint.get(attr) == filter_value): matching_endpoints.append(endpoint) if not matching_endpoints: raise exceptions.EndpointNotFound() else: return matching_endpoints[0].get('url')
def _url_for(self, attr=None, filter_value=None, endpoint_type='publicURL'): """Fetch requested URL. Fetch the public URL from the Trove service for a particular endpoint attribute. If none given, return the first. """ matching_endpoints = [] if 'endpoints' in self.catalog: # We have a bastardized service catalog. Treat it special. :/ for endpoint in self.catalog['endpoints']: if not filter_value or endpoint[attr] == filter_value: matching_endpoints.append(endpoint) if not matching_endpoints: raise exceptions.EndpointNotFound() # We don't always get a service catalog back ... if 'serviceCatalog' not in self.catalog[self.root_key]: raise exceptions.EndpointNotFound() # Full catalog ... catalog = self.catalog[self.root_key]['serviceCatalog'] for service in catalog: if service.get("type") != self.service_type: continue if (self.service_name and self.service_type == 'database' and service.get('name') != self.service_name): continue endpoints = service['endpoints'] for endpoint in endpoints: if not filter_value or endpoint.get(attr) == filter_value: endpoint["serviceName"] = service.get("name") matching_endpoints.append(endpoint) if not matching_endpoints: raise exceptions.EndpointNotFound() elif len(matching_endpoints) > 1: raise exceptions.AmbiguousEndpoints(endpoints=matching_endpoints) else: return matching_endpoints[0].get(endpoint_type, None)