Source code for thoth.storages.result_schema

#!/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/>.

"""Schema definition for analyzer results."""

from voluptuous import Required
from voluptuous import Optional
from voluptuous import Schema

from thoth.common import parse_datetime


[docs]class Datetime(object): """Check datetime fields against ISO format.""" def __call__(self, dt): """Make check for datetime fields against ISO format.""" return parse_datetime(dt)
# Describe Python version used by the analyzer image. PYTHON_SCHEMA = Schema( { Required("api_version"): int, Required("implementation_name"): str, # e.g. cpython Required("major"): int, Required("micro"): int, Required("minor"): int, Required("releaselevel"): str, Required("serial"): int, } ) # Describe Linux distribution details that was run in the analyzer image. DISTRIBUTION_SCHEMA = Schema( { Required("codename"): str, # e.g. "Twenty Seven" Required("id"): str, # e.g. "fedora" Required("like"): str, Required("version"): str, Required("version_parts"): {Required("build_number"): str, Required("major"): str, Required("minor"): str}, } ) OS_RELEASE_SCHEMA = Schema( { Optional("redhat_bugzilla_product"): str, Optional("redhat_bugzilla_product_version"): str, Optional("redhat_support_product"): str, Optional("redhat_support_product_version"): str, Optional("variant_id"): str, Required("id"): str, Required("name"): str, Required("platform_id"): str, Required("version_id"): str, Required("version"): str, } ) # Metadata about results produced by analyzers. METADATA_SCHEMA = Schema( { Required("analyzer"): str, Required("analyzer_version"): str, Required("arguments"): dict, Required("datetime"): Datetime(), Required("distribution"): DISTRIBUTION_SCHEMA, Required("document_id"): str, Required("duration"): int, Required("hostname"): str, Required("os_release"): OS_RELEASE_SCHEMA, Required("python"): PYTHON_SCHEMA, Required("thoth_deployment_name"): str, Required("timestamp"): int, } ) # Top level schema for analyzer results. RESULT_SCHEMA = Schema({Required("metadata"): METADATA_SCHEMA, Required("result"): object})