Source code for thoth.storages.solvers
#!/usr/bin/env python3
# thoth-storages
# Copyright(C) 2018, 2019, 2020 Fridolin Pokorny
#
# This program is free software: you can redistribute it and / or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation, either version 3 of the License, or
# (at your option) any later version.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with this program. If not, see <http://www.gnu.org/licenses/>.
"""Adapter for storing solver results onto a persistence remote store."""
from datetime import date
from typing import Optional
from typing import Generator, TypedDict
from .result_base import ResultStorageBase
class _SolverInfo(TypedDict):
os_name: str
os_version: str
python_version: str
[docs]class SolverResultsStore(ResultStorageBase):
"""Adapter for persisting solver results."""
RESULT_TYPE = "solver"
[docs] @staticmethod
def get_solver_name_from_document_id(solver_document_id: str) -> str:
"""Retrieve solver name from solver's document id."""
return solver_document_id.rsplit("-", maxsplit=2)[0]
[docs] def get_document_listing(
self,
*,
start_date: Optional[date] = None,
end_date: Optional[date] = None,
include_end_date: bool = False,
only_requests: bool = False,
solver_info: _SolverInfo = None,
) -> Generator[str, None, None]:
"""Get listing of documents available in Ceph as a generator.
Additional parameters can filter results. If start_date is supplied
and no end_date is supplied explicitly, the current date is
considered as end_date (inclusively).
"""
if solver_info is None and start_date is not None:
raise ValueError("Date filter can be used only when specific solvers are requested")
if solver_info:
_s = solver_info
prefix_solver = f"-{_s['os_name']}-{_s['os_version']}-py{_s['python_version'].replace('.', '')}"
if start_date is not None:
for prefix_date in self._iter_dates_prefix_addition(
start_date=start_date, end_date=end_date, include_end_date=include_end_date
):
yield from self.ceph.get_document_listing(prefix_solver + prefix_date)
elif solver_info is not None:
yield from self.ceph.get_document_listing(prefix_solver)
else:
yield from self.ceph.get_document_listing()