Source code for bw2data.validate
from numbers import Number
from voluptuous import All, Any, Invalid, Length, Optional, Required, Schema
[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]])