Usage

To use Data Validation in a project:

import datavalidation.datavalidation as dv

request = { ... } # your bike request, possibly from a HTTP request, see below

validated_bike_response = dv.request_validate_bike_geometry(request)

# OR to validate multiple geometries without request

bike_geometry_list = [
    { ... } # bike geometry
]

validated_bike_geometry_list = dv.validate_bike_geometry_list(bike_geometry_list)

# OR to validate only one geometry

single_bike_geometry = {
    "parameter_list": [
        {
            "p": "wheelbase",
            "v": "1024"
        }
        # ... more parameters as needed
    ]
}

validated_bike_geometry = dv.validate_bike_geometry(single_bike_geometry)

Example Bike Request

A request to validate bike geometries can have multiple bike geometries at the same time and these bike geometries do not need to have all the parameters in them.

An example valid request would look like this:

# valid bike 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**"
                },
                {
                    "p": "top_tube",
                    "v": "534",
                    "id": "**any-value**"
                },
                {
                    "p": "seat_tube_length",
                    "v": "",
                    "id": "**any-value**"
                },
                {
                    "p": "seat_tube_length_cc",
                    "v": "",
                    "id": "**any-value**"
                },
                {
                    "p": "seat_tube_length_eff",
                    "v": "",
                    "id": "**any-value**"
                },
                {
                    "p": "head_angle",
                    "v": "71",
                    "id": "**any-value**"
                },
                {
                    "p": "seat_angle",
                    "v": "73",
                    "id": "**any-value**"
                },
                {
                    "p": "head_tube",
                    "v": "107",
                    "id": "**any-value**"
                },
                {
                    "p": "chainstay",
                    "v": "430",
                    "id": "**any-value**"
                },
                {
                    "p": "wheelbase",
                    "v": "1014",
                    "id": "**any-value**"
                },
                {
                    "p": "front_centre",
                    "v": "",
                    "id": "**any-value**"
                },
                {
                    "p": "bb_drop",
                    "v": "57.5",
                    "id": "**any-value**"
                }
            ]
        }
    ]
}

Example Response

An example response of validated bike geometries would look like this:

{
    "geometries": [
        {
            "geometry_threshold": 0.7,
            "parameter_threshold": 0.7,
            "optimistic_validation": False,
            "count_calculated_params": False,
            "confidence": 0.5999918164974749,
            "invalid": True,
            "validated_parameters": 9,
            "validatable_parameters": 15,
            "parameter_list": [
                {
                    "p": "axle_spacing",
                    "v": "",
                    "original_v": None
                },
                {
                    "p": "bb_drop",
                    "id": "**any-value**",
                    "v": "57.5",
                    "original_v": "57.5",
                    "calculated_v": "57.49999999999998",
                    "confidence": 0.9999999999999997,
                    "invalid": False
                },
                {
                    "p": "bb_height",
                    "v": "",
                    "original_v": None
                },
                {
                    "p": "chainstay",
                    "id": "**any-value**",
                    "v": "430",
                    "calculated_v": "430",
                    "confidence": 1.0,
                    "invalid": False
                },
                {
                    "p": "crank_length",
                    "v": "",
                    "original_v": None
                },
                {
                    "p": "fork_length",
                    "v": "413.197384616416",
                    "original_v": None,
                    "calculated_v": "413.197384616416",
                    "confidence": 0.75,
                    "invalid": False
                },
                {
                    "p": "fork_rake",
                    "v": "53.13403806646118",
                    "original_v": None,
                    "calculated_v": "53.13403806646118",
                    "confidence": 0.75,
                    "invalid": False
                },
                {
                    "p": "front_centre",
                    "id": "**any-value**",
                    "v": "590.6672221146129",
                    "original_v": "",
                    "calculated_v": "590.6672221146129",
                    "confidence": 0.75,
                    "invalid": False
                },
                {
                    "p": "handlebar_drop",
                    "v": "",
                    "original_v": None
                },
                {
                    "p": "handlebar_width",
                    "v": "",
                    "original_v": None
                },
                {
                    "p": "head_angle",
                    "id": "**any-value**",
                    "v": "71",
                    "original_v": "71",
                    "calculated_v": "70.9999999999999",
                    "confidence": 0.9999999999999986,
                    "invalid": False
                },
                {
                    "p": "head_tube",
                    "id": "**any-value**",
                    "v": "107",
                    "original_v": "107",
                    "calculated_v": "107.00000000000028",
                    "confidence": 0.9999999999999973,
                    "invalid": False
                },
                {
                    "p": "reach",
                    "id": "**any-value**",
                    "v": "371",
                    "original_v": "371",
                    "calculated_v": "371.045546782534",
                    "confidence": 0.999877247462127,
                    "invalid": False
                },
                {
                    "p": "saddle_height",
                    "v": "",
                    "original_v": None
                },
                {
                    "p": "seat_angle",
                    "id": "**any-value**",
                    "v": "73",
                    "calculated_v": "73",
                    "confidence": 1.0,
                    "invalid": False
                },
                {
                    "p": "seat_tube_length",
                    "id": "**any-value**",
                    "v": ""
                },
                {
                    "p": "seat_tube_length_cc",
                    "id": "**any-value**",
                    "v": ""
                },
                {
                    "p": "seat_tube_length_eff",
                    "id": "**any-value**",
                    "v": "557.3537062076499",
                    "original_v": "",
                    "calculated_v": "557.3537062076499",
                    "confidence": 0.75,
                    "invalid": False
                },
                {
                    "p": "seatpost_diameter",
                    "v": "",
                    "original_v": None
                },
                {
                    "p": "seatpost_length",
                    "v": "",
                    "original_v": None
                },
                {
                    "p": "stack",
                    "id": "**any-value**",
                    "v": "533",
                    "original_v": "533",
                    "calculated_v": "533.0000000000001",
                    "confidence": 0.9999999999999998,
                    "invalid": False
                },
                {
                    "p": "standover",
                    "v": "",
                    "original_v": None
                },
                {
                    "p": "stem_length",
                    "v": "",
                    "original_v": None
                },
                {
                    "p": "top_tube",
                    "id": "**any-value**",
                    "v": "534",
                    "original_v": "534",
                    "calculated_v": "534",
                    "confidence": 1.0,
                    "invalid": False
                },
                {
                    "p": "top_tube_actual",
                    "v": "",
                    "original_v": None
                },
                {
                    "p": "trail",
                    "v": "",
                    "original_v": None
                },
                {
                    "p": "tyre_width",
                    "v": "",
                    "original_v": None
                },
                {
                    "p": "wheelbase",
                    "id": "**any-value**",
                    "v": "1014",
                    "calculated_v": "1014",
                    "confidence": 1.0,
                    "invalid": False
                }
            ]
        }
    ]
}

This response was filled with the additional parameters missing from the previous request.