ecmwf-datastores-client 0.2.0__tar.gz → 0.3.0__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Potentially problematic release.
This version of ecmwf-datastores-client might be problematic. Click here for more details.
- {ecmwf_datastores_client-0.2.0 → ecmwf_datastores_client-0.3.0}/.github/workflows/on-push.yml +2 -2
- {ecmwf_datastores_client-0.2.0 → ecmwf_datastores_client-0.3.0}/PKG-INFO +1 -1
- {ecmwf_datastores_client-0.2.0 → ecmwf_datastores_client-0.3.0}/ecmwf/datastores/client.py +19 -2
- {ecmwf_datastores_client-0.2.0 → ecmwf_datastores_client-0.3.0}/ecmwf/datastores/processing.py +8 -1
- {ecmwf_datastores_client-0.2.0 → ecmwf_datastores_client-0.3.0}/ecmwf/datastores/version.py +1 -1
- {ecmwf_datastores_client-0.2.0 → ecmwf_datastores_client-0.3.0}/ecmwf_datastores_client.egg-info/PKG-INFO +1 -1
- {ecmwf_datastores_client-0.2.0 → ecmwf_datastores_client-0.3.0}/ecmwf_datastores_client.egg-info/SOURCES.txt +2 -2
- {ecmwf_datastores_client-0.2.0 → ecmwf_datastores_client-0.3.0}/tests/conftest.py +1 -4
- {ecmwf_datastores_client-0.2.0 → ecmwf_datastores_client-0.3.0}/tests/integration_test_20_processing.py +9 -0
- ecmwf_datastores_client-0.2.0/tests/integration_test_60_api_client.py → ecmwf_datastores_client-0.3.0/tests/integration_test_60_client.py +9 -9
- ecmwf_datastores_client-0.2.0/tests/integration_test_70_legacy_api_client.py → ecmwf_datastores_client-0.3.0/tests/integration_test_70_legacy_client.py +13 -13
- {ecmwf_datastores_client-0.2.0 → ecmwf_datastores_client-0.3.0}/tests/test_20_processing.py +6 -1
- {ecmwf_datastores_client-0.2.0 → ecmwf_datastores_client-0.3.0}/.cruft.json +0 -0
- {ecmwf_datastores_client-0.2.0 → ecmwf_datastores_client-0.3.0}/.github/workflows/on-pr-closed.yml +0 -0
- {ecmwf_datastores_client-0.2.0 → ecmwf_datastores_client-0.3.0}/.gitignore +0 -0
- {ecmwf_datastores_client-0.2.0 → ecmwf_datastores_client-0.3.0}/.pre-commit-config-cruft.yaml +0 -0
- {ecmwf_datastores_client-0.2.0 → ecmwf_datastores_client-0.3.0}/.pre-commit-config.yaml +0 -0
- {ecmwf_datastores_client-0.2.0 → ecmwf_datastores_client-0.3.0}/Dockerfile +0 -0
- {ecmwf_datastores_client-0.2.0 → ecmwf_datastores_client-0.3.0}/LICENSE +0 -0
- {ecmwf_datastores_client-0.2.0 → ecmwf_datastores_client-0.3.0}/Makefile +0 -0
- {ecmwf_datastores_client-0.2.0 → ecmwf_datastores_client-0.3.0}/README.md +0 -0
- {ecmwf_datastores_client-0.2.0 → ecmwf_datastores_client-0.3.0}/ci/environment-ci.yml +0 -0
- {ecmwf_datastores_client-0.2.0 → ecmwf_datastores_client-0.3.0}/ci/environment-integration.yml +0 -0
- {ecmwf_datastores_client-0.2.0 → ecmwf_datastores_client-0.3.0}/docs/Makefile +0 -0
- {ecmwf_datastores_client-0.2.0 → ecmwf_datastores_client-0.3.0}/docs/_static/.gitkeep +0 -0
- {ecmwf_datastores_client-0.2.0 → ecmwf_datastores_client-0.3.0}/docs/_templates/.gitkeep +0 -0
- {ecmwf_datastores_client-0.2.0 → ecmwf_datastores_client-0.3.0}/docs/conf.py +0 -0
- {ecmwf_datastores_client-0.2.0 → ecmwf_datastores_client-0.3.0}/docs/index.md +0 -0
- {ecmwf_datastores_client-0.2.0 → ecmwf_datastores_client-0.3.0}/docs/make.bat +0 -0
- {ecmwf_datastores_client-0.2.0 → ecmwf_datastores_client-0.3.0}/docs/notebooks/index.md +0 -0
- {ecmwf_datastores_client-0.2.0 → ecmwf_datastores_client-0.3.0}/docs/notebooks/quick_start.ipynb +0 -0
- {ecmwf_datastores_client-0.2.0 → ecmwf_datastores_client-0.3.0}/ecmwf/datastores/__init__.py +0 -0
- {ecmwf_datastores_client-0.2.0 → ecmwf_datastores_client-0.3.0}/ecmwf/datastores/catalogue.py +0 -0
- {ecmwf_datastores_client-0.2.0 → ecmwf_datastores_client-0.3.0}/ecmwf/datastores/config.py +0 -0
- {ecmwf_datastores_client-0.2.0 → ecmwf_datastores_client-0.3.0}/ecmwf/datastores/legacy_client.py +0 -0
- {ecmwf_datastores_client-0.2.0 → ecmwf_datastores_client-0.3.0}/ecmwf/datastores/profile.py +0 -0
- {ecmwf_datastores_client-0.2.0 → ecmwf_datastores_client-0.3.0}/ecmwf/datastores/py.typed +0 -0
- {ecmwf_datastores_client-0.2.0 → ecmwf_datastores_client-0.3.0}/ecmwf/datastores/utils.py +0 -0
- {ecmwf_datastores_client-0.2.0 → ecmwf_datastores_client-0.3.0}/ecmwf_datastores_client.egg-info/dependency_links.txt +0 -0
- {ecmwf_datastores_client-0.2.0 → ecmwf_datastores_client-0.3.0}/ecmwf_datastores_client.egg-info/requires.txt +0 -0
- {ecmwf_datastores_client-0.2.0 → ecmwf_datastores_client-0.3.0}/ecmwf_datastores_client.egg-info/top_level.txt +0 -0
- {ecmwf_datastores_client-0.2.0 → ecmwf_datastores_client-0.3.0}/environment.yml +0 -0
- {ecmwf_datastores_client-0.2.0 → ecmwf_datastores_client-0.3.0}/pyproject.toml +0 -0
- {ecmwf_datastores_client-0.2.0 → ecmwf_datastores_client-0.3.0}/setup.cfg +0 -0
- {ecmwf_datastores_client-0.2.0 → ecmwf_datastores_client-0.3.0}/tests/integration_test_10_catalogue.py +0 -0
- {ecmwf_datastores_client-0.2.0 → ecmwf_datastores_client-0.3.0}/tests/integration_test_30_remote.py +0 -0
- {ecmwf_datastores_client-0.2.0 → ecmwf_datastores_client-0.3.0}/tests/integration_test_40_results.py +0 -0
- {ecmwf_datastores_client-0.2.0 → ecmwf_datastores_client-0.3.0}/tests/integration_test_50_profile.py +0 -0
- {ecmwf_datastores_client-0.2.0 → ecmwf_datastores_client-0.3.0}/tests/integration_test_80_adaptors.py +0 -0
- {ecmwf_datastores_client-0.2.0 → ecmwf_datastores_client-0.3.0}/tests/integration_test_90_features.py +0 -0
- {ecmwf_datastores_client-0.2.0 → ecmwf_datastores_client-0.3.0}/tests/test_00_version.py +0 -0
- {ecmwf_datastores_client-0.2.0 → ecmwf_datastores_client-0.3.0}/tests/test_01_config.py +0 -0
- {ecmwf_datastores_client-0.2.0 → ecmwf_datastores_client-0.3.0}/tests/test_10_catalogue.py +0 -0
- {ecmwf_datastores_client-0.2.0 → ecmwf_datastores_client-0.3.0}/tests/test_40_results.py +0 -0
{ecmwf_datastores_client-0.2.0 → ecmwf_datastores_client-0.3.0}/.github/workflows/on-push.yml
RENAMED
|
@@ -145,7 +145,7 @@ jobs:
|
|
|
145
145
|
env:
|
|
146
146
|
ECMWF_DATASTORES_URL: ${{ secrets.ECMWF_DATASTORES_URL }}
|
|
147
147
|
ECMWF_DATASTORES_KEY: ${{ secrets.ECMWF_DATASTORES_KEY }}
|
|
148
|
-
|
|
148
|
+
ANONYMOUS_PAT: ${{ secrets.ECMWF_DATASTORES_ANON_KEY }}
|
|
149
149
|
run: |
|
|
150
150
|
make docs-build
|
|
151
151
|
- uses: rossjrw/pr-preview-action@v1
|
|
@@ -199,7 +199,7 @@ jobs:
|
|
|
199
199
|
env:
|
|
200
200
|
ECMWF_DATASTORES_URL: ${{ secrets.ECMWF_DATASTORES_URL }}
|
|
201
201
|
ECMWF_DATASTORES_KEY: ${{ secrets.ECMWF_DATASTORES_KEY }}
|
|
202
|
-
|
|
202
|
+
ANONYMOUS_PAT: ${{ secrets.ECMWF_DATASTORES_ANON_KEY }}
|
|
203
203
|
run: |
|
|
204
204
|
make ci-integration-tests COV_REPORT=xml
|
|
205
205
|
|
|
@@ -28,6 +28,8 @@ from ecmwf.datastores.catalogue import Catalogue
|
|
|
28
28
|
from ecmwf.datastores.processing import Processing, RequestKwargs
|
|
29
29
|
from ecmwf.datastores.profile import Profile
|
|
30
30
|
|
|
31
|
+
T_STATUS = Literal["accepted", "running", "successful", "failed", "rejected"]
|
|
32
|
+
|
|
31
33
|
|
|
32
34
|
@attrs.define(slots=False)
|
|
33
35
|
class Client:
|
|
@@ -179,6 +181,21 @@ class Client:
|
|
|
179
181
|
"""
|
|
180
182
|
return self._profile_api.check_authentication()
|
|
181
183
|
|
|
184
|
+
def delete(self, *request_ids: str) -> dict[str, Any]:
|
|
185
|
+
"""Delete requests.
|
|
186
|
+
|
|
187
|
+
Parameters
|
|
188
|
+
----------
|
|
189
|
+
*request_ids: str
|
|
190
|
+
Request IDs.
|
|
191
|
+
|
|
192
|
+
Returns
|
|
193
|
+
-------
|
|
194
|
+
dict[str,Any]
|
|
195
|
+
Content of the response.
|
|
196
|
+
"""
|
|
197
|
+
return self._retrieve_api.delete(*request_ids)
|
|
198
|
+
|
|
182
199
|
def download_results(self, request_id: str, target: str | None = None) -> str:
|
|
183
200
|
"""Download the results of a request.
|
|
184
201
|
|
|
@@ -259,7 +276,7 @@ class Client:
|
|
|
259
276
|
self,
|
|
260
277
|
limit: int | None = None,
|
|
261
278
|
sortby: Literal[None, "created", "-created"] = None,
|
|
262
|
-
status:
|
|
279
|
+
status: None | T_STATUS | list[T_STATUS] = None,
|
|
263
280
|
) -> datastores.Jobs:
|
|
264
281
|
"""Retrieve submitted jobs.
|
|
265
282
|
|
|
@@ -269,7 +286,7 @@ class Client:
|
|
|
269
286
|
Number of jobs per page.
|
|
270
287
|
sortby: {None, 'created', '-created'}
|
|
271
288
|
Field to sort results by.
|
|
272
|
-
status:
|
|
289
|
+
status: None or {'accepted', 'running', 'successful', 'failed', 'rejected'} or list
|
|
273
290
|
Status of the results.
|
|
274
291
|
|
|
275
292
|
Returns
|
{ecmwf_datastores_client-0.2.0 → ecmwf_datastores_client-0.3.0}/ecmwf/datastores/processing.py
RENAMED
|
@@ -467,7 +467,7 @@ class Remote:
|
|
|
467
467
|
return True
|
|
468
468
|
if status in ("accepted", "running"):
|
|
469
469
|
return False
|
|
470
|
-
if status
|
|
470
|
+
if status in ("failed", "rejected"):
|
|
471
471
|
results = self._make_results(wait=False)
|
|
472
472
|
raise ProcessingFailedError(error_json_to_message(results._json_dict))
|
|
473
473
|
if status in ("dismissed", "deleted"):
|
|
@@ -705,6 +705,13 @@ class Processing:
|
|
|
705
705
|
log_callback=self.log_callback,
|
|
706
706
|
)
|
|
707
707
|
|
|
708
|
+
def delete(self, *job_ids: str) -> dict[str, Any]:
|
|
709
|
+
url = f"{self.url}/jobs/delete"
|
|
710
|
+
response = ApiResponse.from_request(
|
|
711
|
+
"post", url, json={"job_ids": job_ids}, **self._request_kwargs
|
|
712
|
+
)
|
|
713
|
+
return response._json_dict
|
|
714
|
+
|
|
708
715
|
def get_processes(self, **params: Any) -> Processes:
|
|
709
716
|
url = f"{self.url}/processes"
|
|
710
717
|
return Processes.from_request("get", url, params=params, **self._request_kwargs)
|
|
@@ -1,2 +1,2 @@
|
|
|
1
1
|
# Do not change! Do not track in version control!
|
|
2
|
-
__version__ = "0.
|
|
2
|
+
__version__ = "0.3.0"
|
|
@@ -41,8 +41,8 @@ tests/integration_test_20_processing.py
|
|
|
41
41
|
tests/integration_test_30_remote.py
|
|
42
42
|
tests/integration_test_40_results.py
|
|
43
43
|
tests/integration_test_50_profile.py
|
|
44
|
-
tests/
|
|
45
|
-
tests/
|
|
44
|
+
tests/integration_test_60_client.py
|
|
45
|
+
tests/integration_test_70_legacy_client.py
|
|
46
46
|
tests/integration_test_80_adaptors.py
|
|
47
47
|
tests/integration_test_90_features.py
|
|
48
48
|
tests/test_00_version.py
|
|
@@ -21,10 +21,7 @@ def api_root_url() -> str:
|
|
|
21
21
|
|
|
22
22
|
@pytest.fixture
|
|
23
23
|
def api_anon_key() -> str:
|
|
24
|
-
return os.getenv(
|
|
25
|
-
"ECMWF_DATASTORES_ANON_KEY",
|
|
26
|
-
"00112233-4455-6677-c899-aabbccddeeff", # gitleaks:allow
|
|
27
|
-
)
|
|
24
|
+
return os.getenv("ANONYMOUS_PAT", "00112233-4455-6677-c899-aabbccddeeff")
|
|
28
25
|
|
|
29
26
|
|
|
30
27
|
@pytest.fixture
|
|
@@ -73,3 +73,12 @@ def test_processing_get_jobs_sortby(api_anon_client: Client) -> None:
|
|
|
73
73
|
ids = api_anon_client.get_jobs(sortby="-created").request_ids
|
|
74
74
|
assert ids.index(id2) < ids.index(id1)
|
|
75
75
|
assert [id2] != api_anon_client.get_jobs(sortby="created", limit=1).request_ids
|
|
76
|
+
|
|
77
|
+
|
|
78
|
+
def test_processing_delete(api_anon_client: Client) -> None:
|
|
79
|
+
id1 = api_anon_client.submit("test-adaptor-dummy", {}).request_id
|
|
80
|
+
id2 = api_anon_client.submit("test-adaptor-dummy", {}).request_id
|
|
81
|
+
job1, job2 = api_anon_client.delete(id1, id2)["jobs"]
|
|
82
|
+
assert job1["status"] == job2["status"] == "dismissed"
|
|
83
|
+
assert job1["jobID"] == id1
|
|
84
|
+
assert job2["jobID"] == id2
|
|
@@ -9,7 +9,7 @@ from urllib3.exceptions import InsecureRequestWarning
|
|
|
9
9
|
from ecmwf.datastores import Client, Remote, Results, processing
|
|
10
10
|
|
|
11
11
|
|
|
12
|
-
def
|
|
12
|
+
def test_client_download_results(
|
|
13
13
|
api_anon_client: Client, tmp_path: pathlib.Path
|
|
14
14
|
) -> None:
|
|
15
15
|
remote = api_anon_client.submit("test-adaptor-dummy", {})
|
|
@@ -20,27 +20,27 @@ def test_api_client_download_results(
|
|
|
20
20
|
assert os.path.exists(result)
|
|
21
21
|
|
|
22
22
|
|
|
23
|
-
def
|
|
23
|
+
def test_client_get_process(api_anon_client: Client) -> None:
|
|
24
24
|
process = api_anon_client.get_process("test-adaptor-dummy")
|
|
25
25
|
assert isinstance(process, processing.Process)
|
|
26
26
|
assert process.id == "test-adaptor-dummy"
|
|
27
27
|
assert set(process.headers) == {"User-Agent", "PRIVATE-TOKEN"}
|
|
28
28
|
|
|
29
29
|
|
|
30
|
-
def
|
|
30
|
+
def test_client_get_remote(api_anon_client: Client) -> None:
|
|
31
31
|
request_id = api_anon_client.submit("test-adaptor-dummy", {}).request_id
|
|
32
32
|
remote = api_anon_client.get_remote(request_id)
|
|
33
33
|
assert remote.request_id == request_id
|
|
34
34
|
assert set(remote.headers) == {"User-Agent", "PRIVATE-TOKEN"}
|
|
35
35
|
|
|
36
36
|
|
|
37
|
-
def
|
|
37
|
+
def test_client_get_results(api_anon_client: Client) -> None:
|
|
38
38
|
request_id = api_anon_client.submit("test-adaptor-dummy", {}).request_id
|
|
39
39
|
results = api_anon_client.get_results(request_id)
|
|
40
40
|
assert isinstance(results, Results)
|
|
41
41
|
|
|
42
42
|
|
|
43
|
-
def
|
|
43
|
+
def test_client_retrieve(
|
|
44
44
|
api_anon_client: Client,
|
|
45
45
|
tmp_path: pathlib.Path,
|
|
46
46
|
) -> None:
|
|
@@ -54,24 +54,24 @@ def test_api_client_retrieve(
|
|
|
54
54
|
assert os.path.getsize(actual_target) == 1
|
|
55
55
|
|
|
56
56
|
|
|
57
|
-
def
|
|
57
|
+
def test_client_submit(api_anon_client: Client) -> None:
|
|
58
58
|
remote = api_anon_client.submit("test-adaptor-dummy", {})
|
|
59
59
|
assert isinstance(remote, Remote)
|
|
60
60
|
|
|
61
61
|
|
|
62
|
-
def
|
|
62
|
+
def test_client_submit_and_wait_on_results(api_anon_client: Client) -> None:
|
|
63
63
|
results = api_anon_client.submit_and_wait_on_results("test-adaptor-dummy", {})
|
|
64
64
|
assert isinstance(results, Results)
|
|
65
65
|
|
|
66
66
|
|
|
67
|
-
def
|
|
67
|
+
def test_client_verify(api_root_url: str, api_anon_key: str) -> None:
|
|
68
68
|
if not api_root_url.startswith("https"):
|
|
69
69
|
pytest.skip(f"{api_root_url=} does not use https protocol")
|
|
70
70
|
with pytest.warns(InsecureRequestWarning):
|
|
71
71
|
Client(url=api_root_url, key=api_anon_key, verify=False, maximum_tries=0)
|
|
72
72
|
|
|
73
73
|
|
|
74
|
-
def
|
|
74
|
+
def test_client_timeout(
|
|
75
75
|
api_root_url: str,
|
|
76
76
|
api_anon_key: str,
|
|
77
77
|
tmp_path: pathlib.Path,
|
|
@@ -54,7 +54,7 @@ def legacy_update(remote: processing.Remote) -> None:
|
|
|
54
54
|
)
|
|
55
55
|
|
|
56
56
|
|
|
57
|
-
def
|
|
57
|
+
def test_legacy_client_retrieve(
|
|
58
58
|
tmp_path: pathlib.Path, legacy_client: LegacyClient
|
|
59
59
|
) -> None:
|
|
60
60
|
collection_id = "test-adaptor-dummy"
|
|
@@ -65,7 +65,7 @@ def test_legacy_api_client_retrieve(
|
|
|
65
65
|
assert os.path.getsize(target) == 1
|
|
66
66
|
|
|
67
67
|
|
|
68
|
-
def
|
|
68
|
+
def test_legacy_client_result(
|
|
69
69
|
monkeypatch: pytest.MonkeyPatch,
|
|
70
70
|
tmp_path: pathlib.Path,
|
|
71
71
|
legacy_client: LegacyClient,
|
|
@@ -92,7 +92,7 @@ def test_legacy_api_client_result(
|
|
|
92
92
|
|
|
93
93
|
|
|
94
94
|
@pytest.mark.parametrize("quiet", [True, False])
|
|
95
|
-
def
|
|
95
|
+
def test_legacy_client_quiet(
|
|
96
96
|
caplog: pytest.LogCaptureFixture,
|
|
97
97
|
api_root_url: str,
|
|
98
98
|
api_anon_key: str,
|
|
@@ -105,7 +105,7 @@ def test_legacy_api_client_quiet(
|
|
|
105
105
|
|
|
106
106
|
|
|
107
107
|
@pytest.mark.parametrize("debug", [True, False])
|
|
108
|
-
def
|
|
108
|
+
def test_legacy_client_debug(
|
|
109
109
|
caplog: pytest.LogCaptureFixture,
|
|
110
110
|
api_root_url: str,
|
|
111
111
|
api_anon_key: str,
|
|
@@ -120,7 +120,7 @@ def test_legacy_api_client_debug(
|
|
|
120
120
|
"wait_until_complete,expected_type",
|
|
121
121
|
[(True, processing.Results), (False, processing.Remote)],
|
|
122
122
|
)
|
|
123
|
-
def
|
|
123
|
+
def test_legacy_client_wait_until_complete(
|
|
124
124
|
tmp_path: pathlib.Path,
|
|
125
125
|
api_root_url: str,
|
|
126
126
|
api_anon_key: str,
|
|
@@ -156,7 +156,7 @@ def test_legacy_api_client_wait_until_complete(
|
|
|
156
156
|
),
|
|
157
157
|
],
|
|
158
158
|
)
|
|
159
|
-
def
|
|
159
|
+
def test_legacy_client_update(
|
|
160
160
|
api_root_url: str,
|
|
161
161
|
api_anon_key: str,
|
|
162
162
|
collection_id: str,
|
|
@@ -173,7 +173,7 @@ def test_legacy_api_client_update(
|
|
|
173
173
|
|
|
174
174
|
|
|
175
175
|
@pytest.mark.filterwarnings("ignore:Unverified HTTPS")
|
|
176
|
-
def
|
|
176
|
+
def test_legacy_client_kwargs(api_root_url: str, api_anon_key: str) -> None:
|
|
177
177
|
session = requests.Session()
|
|
178
178
|
client = LegacyClient(
|
|
179
179
|
url=api_root_url,
|
|
@@ -198,7 +198,7 @@ def test_legacy_api_client_kwargs(api_root_url: str, api_anon_key: str) -> None:
|
|
|
198
198
|
assert client.client.session is session
|
|
199
199
|
|
|
200
200
|
|
|
201
|
-
def
|
|
201
|
+
def test_legacy_client_logging(
|
|
202
202
|
caplog: pytest.LogCaptureFixture,
|
|
203
203
|
api_root_url: str,
|
|
204
204
|
api_anon_key: str,
|
|
@@ -226,7 +226,7 @@ def test_legacy_api_client_logging(
|
|
|
226
226
|
]
|
|
227
227
|
|
|
228
228
|
|
|
229
|
-
def
|
|
229
|
+
def test_legacy_client_download(
|
|
230
230
|
tmp_path: pathlib.Path,
|
|
231
231
|
monkeypatch: pytest.MonkeyPatch,
|
|
232
232
|
api_root_url: str,
|
|
@@ -258,7 +258,7 @@ def test_legacy_api_client_download(
|
|
|
258
258
|
assert all(os.path.getsize(target) == 1 for target in targets)
|
|
259
259
|
|
|
260
260
|
|
|
261
|
-
def
|
|
261
|
+
def test_legacy_client_status(legacy_client: LegacyClient) -> None:
|
|
262
262
|
status = legacy_client.status()
|
|
263
263
|
assert set(status) <= {
|
|
264
264
|
"critical",
|
|
@@ -277,7 +277,7 @@ def test_legacy_api_client_status(legacy_client: LegacyClient) -> None:
|
|
|
277
277
|
)
|
|
278
278
|
|
|
279
279
|
|
|
280
|
-
def
|
|
280
|
+
def test_legacy_client_remote(
|
|
281
281
|
legacy_client: LegacyClient, tmp_path: pathlib.Path
|
|
282
282
|
) -> None:
|
|
283
283
|
results = legacy_client.retrieve("test-adaptor-dummy", {"size": 1})
|
|
@@ -288,7 +288,7 @@ def test_legacy_api_client_remote(
|
|
|
288
288
|
assert os.path.getsize(target) == 1
|
|
289
289
|
|
|
290
290
|
|
|
291
|
-
def
|
|
291
|
+
def test_legacy_client_warning(
|
|
292
292
|
api_root_url: str,
|
|
293
293
|
api_anon_key: str,
|
|
294
294
|
) -> None:
|
|
@@ -305,7 +305,7 @@ def test_legacy_api_client_warning(
|
|
|
305
305
|
)
|
|
306
306
|
|
|
307
307
|
|
|
308
|
-
def
|
|
308
|
+
def test_legacy_client_toolbox(legacy_client: LegacyClient) -> None:
|
|
309
309
|
with pytest.raises(NotImplementedError):
|
|
310
310
|
legacy_client.service("service")
|
|
311
311
|
with pytest.raises(NotImplementedError):
|
|
@@ -411,8 +411,12 @@ def test_wait_on_result(cat: catalogue.Catalogue) -> None:
|
|
|
411
411
|
remote._wait_on_results()
|
|
412
412
|
|
|
413
413
|
|
|
414
|
+
@pytest.mark.parametrize("status", ["failed", "rejected"])
|
|
414
415
|
@responses.activate
|
|
415
|
-
def test_wait_on_result_failed(
|
|
416
|
+
def test_wait_on_result_failed(
|
|
417
|
+
cat: catalogue.Catalogue, status: str, monkeypatch: pytest.MonkeyPatch
|
|
418
|
+
) -> None:
|
|
419
|
+
monkeypatch.setitem(JOB_FAILED_JSON, "status", status)
|
|
416
420
|
responses_add()
|
|
417
421
|
|
|
418
422
|
collection = cat.get_collection(COLLECTION_ID)
|
|
@@ -424,6 +428,7 @@ def test_wait_on_result_failed(cat: catalogue.Catalogue) -> None:
|
|
|
424
428
|
):
|
|
425
429
|
remote._wait_on_results()
|
|
426
430
|
|
|
431
|
+
assert remote.status == status
|
|
427
432
|
assert remote.created_at.isoformat() == "2022-09-02T17:30:48.201213+00:00"
|
|
428
433
|
assert remote.started_at is not None
|
|
429
434
|
assert remote.started_at.isoformat() == "2022-09-02T17:32:43.890617+00:00"
|
|
File without changes
|
{ecmwf_datastores_client-0.2.0 → ecmwf_datastores_client-0.3.0}/.github/workflows/on-pr-closed.yml
RENAMED
|
File without changes
|
|
File without changes
|
{ecmwf_datastores_client-0.2.0 → ecmwf_datastores_client-0.3.0}/.pre-commit-config-cruft.yaml
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{ecmwf_datastores_client-0.2.0 → ecmwf_datastores_client-0.3.0}/ci/environment-integration.yml
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{ecmwf_datastores_client-0.2.0 → ecmwf_datastores_client-0.3.0}/docs/notebooks/quick_start.ipynb
RENAMED
|
File without changes
|
{ecmwf_datastores_client-0.2.0 → ecmwf_datastores_client-0.3.0}/ecmwf/datastores/__init__.py
RENAMED
|
File without changes
|
{ecmwf_datastores_client-0.2.0 → ecmwf_datastores_client-0.3.0}/ecmwf/datastores/catalogue.py
RENAMED
|
File without changes
|
|
File without changes
|
{ecmwf_datastores_client-0.2.0 → ecmwf_datastores_client-0.3.0}/ecmwf/datastores/legacy_client.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{ecmwf_datastores_client-0.2.0 → ecmwf_datastores_client-0.3.0}/tests/integration_test_30_remote.py
RENAMED
|
File without changes
|
{ecmwf_datastores_client-0.2.0 → ecmwf_datastores_client-0.3.0}/tests/integration_test_40_results.py
RENAMED
|
File without changes
|
{ecmwf_datastores_client-0.2.0 → ecmwf_datastores_client-0.3.0}/tests/integration_test_50_profile.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|