Source code for bw2data.validate

# -*- coding: utf-8 -*-
from __future__ import print_function, unicode_literals
from eight import *

from voluptuous import Schema, Required, Invalid, Any, All, Length, Optional
from numbers import Number


[docs] def valid_tuple(obj): try: assert isinstance(obj, tuple) assert isinstance(obj[0], str) assert isinstance(obj[1], str) except: raise Invalid("{} is not a valid key tuple".format(obj)) return obj
[docs] uncertainty_dict = { Required("amount"): Number, Optional("uncertainty type"): int, Optional("loc"): Number, Optional("scale"): Number, Optional("shape"): Number, Optional("minimum"): Number, Optional("maximum"): Number }
[docs] exchange = { Required("input"): valid_tuple, Required("type"): str, }
exchange.update(uncertainty_dict)
[docs] lci_dataset = { Optional("categories"): Any(list, tuple), Optional("location"): object, Optional("unit"): str, Optional("name"): str, Optional("type"): str, Optional("exchanges"): [exchange] }
[docs] db_validator = Schema({valid_tuple: lci_dataset}, extra=True)
# TODO: elements in a list don't maintain order # See https://github.com/alecthomas/voluptuous/issues/59 # Each list needs to be a separate function...
[docs] maybe_uncertainty = Any(Number, uncertainty_dict)
[docs] ia_validator = Schema([Any( [valid_tuple, maybe_uncertainty], # site-generic [valid_tuple, maybe_uncertainty, object] # regionalized )])
[docs] weighting_validator = Schema(All( [uncertainty_dict], Length(min=1, max=1) ))
[docs] normalization_validator = Schema([ [valid_tuple, maybe_uncertainty] ])