"""HTTP client wrapper for ows-track integration tests.""" import requests class APIClient: """HTTP client wrapper for ows-track integration tests.""" def __init__(self, base_url, session=None, headers=None): """Create a client for ows-track endpoints. Pass exactly one of: session: Grass session token — sets {'session': } on every request. headers: Full headers dict — used as-is (e.g. {'Authorization': 'Bearer '}). """ if session is None and headers is None: raise ValueError('Either session or headers must be provided.') self.base_url = base_url self._headers = headers if headers is not None else {'session': session} def _request_headers(self): return self._headers def get_track(self, tuid, include=None): """Executes a GET against track API.""" query_string = {} if include: query_string['include'] = ','.join(include) endpoint = '{}/track/track/{}'.format(self.base_url, tuid) return requests.get(endpoint, params=query_string, headers=self._request_headers()) def put_track(self, tuid, track_data): """Executes a PUT against track API.""" endpoint = '{}/track/track/{}'.format(self.base_url, tuid) return requests.put(endpoint, headers=self._request_headers(), json=track_data) def patch_track(self, tuid, track_data): """Executes a PATCH against track API.""" endpoint = '{}/track/track/{}'.format(self.base_url, tuid) return requests.patch(endpoint, headers=self._request_headers(), json=track_data) def get_all_tracks_by_product_id_light(self, product_id): """Executes a GET against product//tracks/light.""" endpoint = '{}/track/product/{}/tracks/light'.format(self.base_url, product_id) return requests.get(endpoint, headers=self._request_headers()) def get_all_tracks_by_product_id(self, product_id): """Executes a GET against product//tracks.""" endpoint = '{}/track/product/{}/tracks'.format(self.base_url, product_id) return requests.get(endpoint, headers=self._request_headers()) def validate_tracks(self, product_id): """Executes a GET against product//tracks/validate.""" endpoint = '{}/track/product/{}/tracks/validate'.format(self.base_url, product_id) return requests.get(endpoint, headers=self._request_headers()) def get_suggested_rights_attributes(self, tuid): """Executes a GET against suggested-rights-attributes/.""" endpoint = '{}/suggested-rights-attributes/{}'.format(self.base_url, tuid) return requests.get(endpoint, headers=self._request_headers())