Skip to content

Commit ab70c50

Browse files
committed
Use TypedDict for reifying "all or nothing" for solver infos
Note that this raises the minimal python version to 3.8
1 parent 76f3719 commit ab70c50

File tree

1 file changed

+18
-20
lines changed

1 file changed

+18
-20
lines changed

thoth/storages/solvers.py

Lines changed: 18 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -19,11 +19,17 @@
1919

2020
from datetime import date
2121
from typing import Optional
22-
from typing import Generator
22+
from typing import Generator, TypedDict
2323

2424
from .result_base import ResultStorageBase
2525

2626

27+
class _SolverInfo(TypedDict):
28+
os_name: str
29+
os_version: str
30+
python_version: str
31+
32+
2733
class SolverResultsStore(ResultStorageBase):
2834
"""Adapter for persisting solver results."""
2935

@@ -36,40 +42,32 @@ def get_solver_name_from_document_id(solver_document_id: str) -> str:
3642

3743
def get_document_listing(
3844
self,
39-
os_name: Optional[str] = None,
40-
os_version: Optional[str] = None,
41-
python_version: Optional[str] = None,
42-
*,
4345
start_date: Optional[date] = None,
4446
end_date: Optional[date] = None,
4547
include_end_date: bool = False,
48+
solver_info: _SolverInfo = None,
4649
) -> Generator[str, None, None]:
4750
"""Get listing of documents available in Ceph as a generator.
4851
4952
Additional parameters can filter results. If start_date is supplied
5053
and no end_date is supplied explicitly, the current date is
5154
considered as end_date (inclusively).
5255
"""
53-
if start_date:
54-
if os_name is None or os_version is None or python_version is None:
55-
raise ValueError("Date filter can be used only when specific solvers are requested")
56+
if solver_info is None and start_date is not None:
57+
raise ValueError("Date filter can be used only when specific solvers are requested")
58+
if solver_info:
59+
_s = solver_info
60+
prefix_solver = f"-{_s['os_name']}-{_s['os_version']}-py{_s['python_version'].replace('.', '')}"
5661

57-
prefix_solver = f"-{os_name}-{os_version}-py{python_version.replace('.', '')}"
62+
if start_date is not None:
5863
for prefix_date in self._iter_dates_prefix_addition(
5964
start_date=start_date, end_date=end_date, include_end_date=include_end_date
6065
):
61-
for document_id in self.ceph.get_document_listing(f"{prefix_solver}{prefix_date}"):
62-
yield document_id
66+
yield from self.ceph.get_document_listing(prefix_solver + prefix_date)
67+
elif solver_info is not None:
68+
yield from self.ceph.get_document_listing(prefix_solver)
6369
else:
64-
if all(i is not None for i in (os_name, os_version, python_version)):
65-
prefix = f"solver-{os_name}-{os_version}-py{python_version.replace('.', '')}"
66-
for document_id in self.ceph.get_document_listing(prefix):
67-
yield document_id
68-
elif all(i is None for i in (os_name, os_version, python_version)):
69-
for document_id in self.ceph.get_document_listing():
70-
yield document_id
71-
else:
72-
raise ValueError("None or all parameters for os_name, os_version, python_version have to be supplied")
70+
yield from self.ceph.get_document_listing()
7371

7472
def get_document_count(
7573
self,

0 commit comments

Comments
 (0)