import logging from typing import Any, Optional import requests _logger = logging.getLogger(__name__) url_template = 'http://localhost:{}/api/v1/nni{}' timeout = 20 def request(method: str, port: Optional[int], api: str, data: Any = None) -> Any: if port is None: raise RuntimeError('Experiment is not running') url = url_template.format(port, api) if data is None: resp = requests.request(method, url, timeout=timeout) else: resp = requests.request(method, url, json=data, timeout=timeout) if not resp.ok: _logger.error('rest request %s %s failed: %s %s', method.upper(), url, resp.status_code, resp.text) resp.raise_for_status() if method.lower() in ['get', 'post'] and len(resp.content) > 0: return resp.json() def get(port: Optional[int], api: str) -> Any: return request('get', port, api) def post(port: Optional[int], api: str, data: Any) -> Any: return request('post', port, api, data) def put(port: Optional[int], api: str, data: Any) -> None: request('put', port, api, data) def delete(port: Optional[int], api: str) -> None: request('delete', port, api)