def test_connection_error(mock_resp): url = 'https://fake.com' client = HTTPClient() with pytest.raises(SDKException) as exc: client.make_request('GET', url) assert url in exc.value.message
def test_request_content_type_header(mock_resp): url = 'https://fake.com' mock_resp.add('GET', url, content_type='application/json', json={}) client = HTTPClient() client.make_request('GET', url) assert mock_resp.calls[0].request.headers['content-type'] == 'application/json'
def test_invalid_response_content_type(mock_resp): url = 'https://fake.com' mock_resp.add('GET', url, status=200, content_type='plain/text') client = HTTPClient() with pytest.raises(SDKException) as exc: client.make_request('GET', url) assert exc.value.message == 'Invalid Content-Type: plain/text'
def test_args_params(mock_resp): url = 'https://fake.com' params = {'param': 'value'} mock_resp.add('GET', url, content_type='application/json', json={}) client = HTTPClient() client.make_request('GET', url, params=params) assert has_queryparams(mock_resp, params)
def test_args_headers(mock_resp): url = 'https://fake.com' headers = {'header': 'value'} mock_resp.add('GET', url, content_type='application/json', json={}) client = HTTPClient() client.make_request('GET', url, headers=headers) assert contain_headers(mock_resp, headers)
def test_args_data(mock_resp): url = 'https://fake.com' data = {'header': 'value'} mock_resp.add('GET', url, content_type='application/json', json={}) client = HTTPClient() client.make_request('GET', url, data=data) assert has_body(mock_resp, data)
def test_non_json_response(mock_resp): url = 'https://fake.com' text = 'response body' mock_resp.add('GET', url, status=200, content_type='application/json', body=text) client = HTTPClient() with pytest.raises(SDKException) as exc: client.make_request('GET', url) assert 'Invalid JSON response' in exc.value.message
def test_valid_json_response(mock_resp): url = 'https://fake.com' resp_data = {'key': 'value'} mock_resp.add('GET', url, status=200, content_type='application/json', json=resp_data) client = HTTPClient() resp = client.make_request('GET', url) assert resp == resp_data
def test_delete(mock_resp): url = 'https://fake.com' headers = {'header': 'value'} mock_resp.add('DELETE', url, content_type='application/json', json={}) client = HTTPClient() result = client.delete(url, headers=headers) assert contain_headers(mock_resp, headers) assert result == {}
def test_valid_json_error_response(mock_resp): url = 'https://fake.com' resp_data = {'key': 'value'} mock_resp.add('GET', url, status=400, content_type='application/json', json=resp_data) client = HTTPClient() with pytest.raises(SDKException) as exc: client.make_request('GET', url) assert exc.value.message == 400 assert exc.value.data == resp_data
def test_put(mock_resp): url = 'https://fake.com' data = {'key': 'value'} headers = {'header': 'value'} mock_resp.add('PUT', url, content_type='application/json', json={}) client = HTTPClient() result = client.put(url, data=data, headers=headers) assert contain_headers(mock_resp, headers) assert has_body(mock_resp, data) assert result == {}
def test_get(mock_resp): url = 'https://fake.com' headers = {'header': 'value'} params = {'param': 'value'} mock_resp.add('GET', url, content_type='application/json', json={}) client = HTTPClient() result = client.get(url, headers=headers, params=params) assert contain_headers(mock_resp, headers) assert has_queryparams(mock_resp, params) assert result == {}
def __init__(self, base_url: str, access_token: str = None): self.base_url = base_url.rstrip('/') self.access_token = access_token self.client = HTTPClient()
class API: """Slurm REST API""" def __init__(self, base_url: str, access_token: str = None): self.base_url = base_url.rstrip('/') self.access_token = access_token self.client = HTTPClient() @property def auth_header(self) -> dict: """Returns Auhtorization header""" return {'Authorization': f'Bearer {self.access_token}'} def authenticate(self, username: str, password: str) -> dict: """Authenticates with usercreds""" endpoint = f'{self.base_url}/auth/sign-in' payload = {'username': username, 'password': password} return self.client.post(endpoint, data=payload) @protected def create_user(self, username: str, password: str) -> dict: """Creates a user""" endpoint = f'{self.base_url}/users' payload = {'username': username, 'password': password} return self.client.post(endpoint, data=payload, headers=self.auth_header) @protected def list_users(self) -> List[dict]: """Returns a list of users""" endpoint = f'{self.base_url}/users' return self.client.get(endpoint, headers=self.auth_header) @protected def list_jobs(self, q: str = None, offset: int = None, limit: int = None) -> List[dict]: """Returns a list of jobs Args: q: search query offset: offset of the first row limit: limit the number of rows returned """ endpoint = f'{self.base_url}/jobs' params = {'q': q, 'offset': offset, 'limit': limit} return self.client.get(endpoint, headers=self.auth_header, params=params) @protected def pause_job(self, job_id: int) -> dict: """Pauses a job""" endpoint = f'{self.base_url}/jobs/{job_id}/pause' return self.client.post(endpoint, headers=self.auth_header) @protected def resume_job(self, job_id: int) -> dict: """Resumes a job""" endpoint = f'{self.base_url}/jobs/{job_id}/resume' return self.client.post(endpoint, headers=self.auth_header) @protected def retry_job(self, job_id: int) -> dict: """Re-runs a job""" endpoint = f'{self.base_url}/jobs/{job_id}/retry' return self.client.post(endpoint, headers=self.auth_header) @protected def delete_job(self, job_id: int) -> dict: """Deletes a job""" endpoint = f'{self.base_url}/jobs/{job_id}' return self.client.delete(endpoint, headers=self.auth_header)