-
Notifications
You must be signed in to change notification settings - Fork 0
/
generate_validator.py
74 lines (50 loc) · 1.93 KB
/
generate_validator.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
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
72
73
74
import os
module_first_line= """const Joi = require('joi');\n\n"""
def generate_validator(module_name, fields):
#creating validator output file
model_output_file= './output/validators/'+ module_name +'.js'
os.makedirs(os.path.dirname(model_output_file), exist_ok=True)
first_schema_line= "const {}Schema = Joi.object({{\n".format(module_name)
output= open(model_output_file, 'w')
output.write(module_first_line)
output.write(first_schema_line)
# writing all fields
for field in fields:
size_val=""",\n\n"""
dataType=field['type']
if dataType=='string':
size_val=".min(5).max(255)"+size_val
elif isinstance(dataType, list):
dataType= 'array'
elif dataType=='mongoose.Schema.Types.ObjectId':
dataType= 'string'
else:
dataType= dataType.lower()
if 'params' in field and 'enum' in field['params']:
curr_line= '.valid('
for data in field['params']['enum']:
curr_line+= "'{}',".format(data)
curr_line+='),\n\n'
size_val= curr_line
if 'params' in field and 'required' in field['params']:
size_val='.required()'+size_val
curr_line= "\t{}: Joi.{}()".format(field['key'], dataType)+size_val
output.write(curr_line)
# closing joi object
output.write('})\n')
# validator function
output.write(generate_function(module_name))
# module exports line
function_name= module_name[0].upper()+module_name[1:]
module_last_line= """
module.exports = validate{};
""".format(function_name)
output.write(module_last_line)
def generate_function(module_name):
function_name= module_name[0].upper()+module_name[1:]
res= """
const validate{}= async({}) => {{
return {}Schema.validate({})
}}
""".format(function_name, module_name, module_name, module_name)
return res