#!/usr/bin/env python
# -*- coding: utf-8 -*-
"""
datavalidation
----------------------------------
Main module of the datavalidation package. It contains functions to validate bike geometries.
Author: Javier Chiyah and Mario Vasilev, Heriot-Watt University, 2019
"""
import logging
# from .core import BikeGeometry, set_up_logging
import datavalidation.core as dvcore
import datavalidation.core.config as dvconfig
import datavalidation.validation as validation
import datavalidation.normalisation as normalisation
# set up the logger of the whole package with the config file
dvconfig.set_up_logging()
[docs]def request_validate_bike_geometry(request_content: dict) -> dict:
"""
Request to validate a bike geometry.
Example request::
{
"geometries": [
{
"geometry_threshold": 0.7,
"parameter_threshold": 0.7,
"parameter_list": [
{
"p": "reach",
"v": "371",
"id": "**any-value**"
},
{
"p": "stack",
"v": "533",
"id": "**any-value**"
}
]
}
]
# more parameters of the request ...
}
Check the `usage` document for more information.
:param request_content: content of the request as a dict
:return: request response as a dict
"""
logging.info("Received validate_bike_geometry request")
request_content['geometries'] = validate_bike_geometry_list(request_content['geometries'])
# return correctly formatted request
logging.info("Responding to validate_bike_geometry request")
logging.debug("Response: {}".format(request_content))
return request_content
[docs]def validate_bike_geometry_list(bike_geometry_list: list) -> list:
"""
Validates a list of bike geometries.
Example list::
[
# bike geometry
{
"parameter_list": [
{
"p": "reach",
"v": "371"
},
{
"p": "stack",
"v": "533"
}
]
},
# more geometries ...
]
:param bike_geometry_list: list of bike geometry dicts
:return: list of bike geometry dicts validated
"""
validated_geometry_list = []
# for each bike geometry, normalise it and validate
for geometry in bike_geometry_list:
validated_geometry = validate_bike_geometry(geometry)
# add it to list in dict format
validated_geometry_list.append(validated_geometry)
return validated_geometry_list
[docs]def validate_bike_geometry(bike_geometry_dict: dict) -> dict:
"""
Validates a bike geometry given a dictionary representing one.
Example bike geometry dict::
{
"parameter_list": [
{
"p": "reach",
"v": "371"
},
{
"p": "stack",
"v": "533"
},
# more bike geometry parameters ...
]
}
:param bike_geometry_dict: bike geometry dict
:return: bike geometry dict
"""
bike_geometry = dvcore.BikeGeometry(bike_geometry_dict)
logging.debug("Bike geometry dump: {}".format(bike_geometry.to_dict()))
normalisation.normalise_bike_geometry(bike_geometry)
validation.validate_bike_geometry(bike_geometry)
# return correctly formatted request
bike_dict = bike_geometry.to_dict()
logging.debug("Validated bike geometry dump: {}".format(bike_dict))
return bike_dict