Newer
Older
import re
import json
from xmlrpc.client import boolean
import rfc3987
f = open('/opt/robot-tests/tests/libraries/common/types.json')
capif_types = json.load(f)
def check_variable(input, data_type):
print(input)
print(type(input))
print(data_type)
if isinstance(input, list):
for one in input:
check_variable(one, data_type)
return True
if data_type == "string":
if isinstance(input, str):
return True
else:
raise Exception("variable is not string type")
elif data_type == "integer":
if isinstance(input, int):
return True
else:
raise Exception("variable is not integer type")
elif data_type == "boolean":
if isinstance(input, boolean):
return True
else:
raise Exception("variable is not integer type")
elif data_type == "URI":
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
return True
elif data_type == "URI_reference":
check_uri(input, data_type)
return True
elif data_type not in capif_types.keys():
raise Exception("ERROR, type " + data_type +
" is not present in types file")
if "Check" in capif_types[data_type].keys():
if not capif_types[data_type]["Check"]:
return True
if "enum" in capif_types[data_type].keys():
if input in capif_types[data_type]["enum"]:
print("value (" + input + ") is present at enum (" +
','.join(capif_types[data_type]["enum"]) + ")")
return True
else:
raise Exception("value (" + input + ") is not present at enum (" +
','.join(capif_types[data_type]["enum"]) + ")")
if "regex" in capif_types[data_type].keys():
check_regex(input, capif_types[data_type]["regex"])
return True
# Check Structure
all_attributes = check_attributes_dict(input, data_type)
print(all_attributes)
print('Check Variable type')
# Check Variable type
for key in input.keys():
print(key)
check_variable(input[key], all_attributes[key])
def check_attributes_dict(body, data_type):
mandatory_attributes = capif_types[data_type]["mandatory_attributes"]
optional_parameters = capif_types[data_type]["optional_attributes"]
regex_attributes = capif_types[data_type].get("regex_attributes", {})
all_attributes = mandatory_attributes | optional_parameters
# Check if body has not allowed attributes
for body_key in body.keys():
print(body_key + " NOT IN ALL ATTRIBUTES")
present = False
if regex_attributes is not None:
print("REGEX ATTRIBUTES PRESENT")
print(regex_attributes)
for regex_key, regex_data_type in regex_attributes.items():
print(regex_key + ":" + regex_data_type)
if check_regex(body_key, regex_key):
print("MATCH with " + body_key)
present = True
all_attributes[body_key] = regex_data_type
break
if not present:
raise Exception('Attribute "' + body_key +
'" is not present as a mandatory or optional key (' + ','.join(all_attributes.keys()) + ')')
if mandatory_attributes:
for mandatory_key in mandatory_attributes.keys():
if mandatory_key not in body.keys():
raise Exception('Mandatory Attribute "' + mandatory_key +
'" is not present at body under check')
if 'oneOf' in capif_types[data_type].keys():
one_of = capif_types[data_type]["oneOf"]
count = 0
for body_key in body.keys():
if body_key in one_of:
count = count+1
if count == 0:
raise Exception('Mandatory oneOf [' + ','.join(one_of) +
'] is not present at body (' + ','.join(body.keys()) + ')')
elif count > 1:
raise Exception('More than one oneOf [' + ','.join(
one_of) + '] is present at body (' + ','.join(body.keys()) + ')')
return all_attributes
if rfc3987.match(input, rule=rule) is not None:
return input
else:
raise Exception(rule + " is not accomplish rfc3986 rule ("+input+")")
def check_regex(input, regex):
matched = re.match(regex, input)
is_match = bool(matched)
if is_match:
print("Regex match")
else:
raise Exception("Input(" + input + ") not match regex (" + regex + ")")