예제 #1
0
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 == {}
예제 #2
0
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)