diff --git a/quri_parts/riqu/backend/sampling.py b/quri_parts/riqu/backend/sampling.py index b6d6079..64027b7 100644 --- a/quri_parts/riqu/backend/sampling.py +++ b/quri_parts/riqu/backend/sampling.py @@ -364,7 +364,7 @@ class RiquConfig: ValueError: If ``url`` or ``api_token`` is None. """ - def __init__(self, url: str, api_token: str) -> None: + def __init__(self, url: str, api_token: str, proxy: Optional[str] = None) -> None: super().__init__() if url is None: @@ -375,6 +375,8 @@ def __init__(self, url: str, api_token: str) -> None: raise ValueError("api_token should not be None.") self._api_token: str = api_token + self._proxy: str = proxy + @property def url(self) -> str: return self._url @@ -383,6 +385,10 @@ def url(self) -> str: def api_token(self) -> str: return self._api_token + @property + def proxy(self) -> Optional[str]: + return self._proxy + @staticmethod def from_file(section: str = "default", path: str = "~/.riqu") -> "RiquConfig": """Reads configuration information from a file. @@ -414,6 +420,7 @@ def from_file(section: str = "default", path: str = "~/.riqu") -> "RiquConfig": [sectioB] url= api_token= + proxy=http://: If ``sectionA`` settings are to be used, initialize ``RiquSamplingBackend`` as follows @@ -429,6 +436,7 @@ def from_file(section: str = "default", path: str = "~/.riqu") -> "RiquConfig": config = RiquConfig( url=parser[section]["url"], api_token=parser[section]["api_token"], + proxy=parser[section].get("proxy", None) ) return config @@ -454,6 +462,8 @@ def __init__( # construct JobApi rest_config = Configuration() rest_config.host = config.url + if config.proxy: + rest_config.proxy = config.proxy api_client = ApiClient( configuration=rest_config, header_name="q-api-token", diff --git a/tests/riqu/backend/test_sampling.py b/tests/riqu/backend/test_sampling.py index af5d0b9..ae57155 100644 --- a/tests/riqu/backend/test_sampling.py +++ b/tests/riqu/backend/test_sampling.py @@ -34,6 +34,11 @@ url=test_url api_token=test_api_token +[option] +url=test_url +api_token=test_api_token +proxy=http://testproxy:port + [wrong] url=test_url """ @@ -450,6 +455,7 @@ def test_from_file(self, mocker): # Assert assert actual.url == "default_url" assert actual.api_token == "default_api_token" + assert actual.proxy is None def test_from_file__section(self, mocker): # Arrange @@ -461,6 +467,19 @@ def test_from_file__section(self, mocker): # Assert assert actual.url == "test_url" assert actual.api_token == "test_api_token" + assert actual.proxy is None + + def test_from_file__optional(self, mocker): + # Arrange + mocker.patch("builtins.open", mock_open(read_data=config_file_data)) + + # Act + actual = RiquConfig.from_file(section="option") + + # Assert + assert actual.url == "test_url" + assert actual.api_token == "test_api_token" + assert actual.proxy == "http://testproxy:port" def test_from_file__wrong(self, mocker): # Arrange @@ -478,11 +497,12 @@ def test_from_file__wrong(self, mocker): def test_properties(self): # Act - actual = RiquConfig("dummpy_url", "dummy_api_token") + actual = RiquConfig("dummpy_url", "dummy_api_token", "http://dummy:1234") # Assert assert actual.url == "dummpy_url" assert actual.api_token == "dummy_api_token" + assert actual.proxy == "http://dummy:1234" class TestRiquSamplingBackend: