19
19
20
20
from datetime import date
21
21
from typing import Optional
22
- from typing import Generator
22
+ from typing import Generator , TypedDict
23
23
24
24
from .result_base import ResultStorageBase
25
25
26
26
27
+ class _SolverInfo (TypedDict ):
28
+ os_name : str
29
+ os_version : str
30
+ python_version : str
31
+
32
+
27
33
class SolverResultsStore (ResultStorageBase ):
28
34
"""Adapter for persisting solver results."""
29
35
@@ -36,40 +42,32 @@ def get_solver_name_from_document_id(solver_document_id: str) -> str:
36
42
37
43
def get_document_listing (
38
44
self ,
39
- os_name : Optional [str ] = None ,
40
- os_version : Optional [str ] = None ,
41
- python_version : Optional [str ] = None ,
42
- * ,
43
45
start_date : Optional [date ] = None ,
44
46
end_date : Optional [date ] = None ,
45
47
include_end_date : bool = False ,
48
+ solver_info : _SolverInfo = None ,
46
49
) -> Generator [str , None , None ]:
47
50
"""Get listing of documents available in Ceph as a generator.
48
51
49
52
Additional parameters can filter results. If start_date is supplied
50
53
and no end_date is supplied explicitly, the current date is
51
54
considered as end_date (inclusively).
52
55
"""
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 ('.' , '' )} "
56
61
57
- prefix_solver = f"- { os_name } - { os_version } -py { python_version . replace ( '.' , '' ) } "
62
+ if start_date is not None :
58
63
for prefix_date in self ._iter_dates_prefix_addition (
59
64
start_date = start_date , end_date = end_date , include_end_date = include_end_date
60
65
):
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 )
63
69
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 ()
73
71
74
72
def get_document_count (
75
73
self ,
0 commit comments