blob: f783f791df3a01c367491485c87e30cc877efed9 (
plain)
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
|
from backend.database.validators import ValidationError
class DatabaseScheme:
meta = {}
fields = {}
@classmethod
def get_create_line(cls) -> str:
fields = cls.fields
meta = cls.meta
lines = [f'`{name}` {field.sql_line}' for name, field in fields.items()]
if 'primary_key' in meta:
primary_key = ', PRIMARY KEY (`{}`)'.format(meta['primary_key'])
else:
primary_key = ''
return 'CREATE TABLE IF NOT EXISTS `{name}` (\n{fields}{primary_key}\n);'.format(
name=meta['name'], fields=',\n'.join(lines), primary_key=primary_key
)
@classmethod
def validate(cls, data: dict) -> dict:
data_fields = set(data.keys())
scheme_fields = set(cls.fields.keys())
defined_fields = scheme_fields & data_fields
not_defined_fields = scheme_fields ^ defined_fields
validation_results = {'error': False}
for field in not_defined_fields:
validation_results['error'] = True
validation_results[field] = 'Field is not defined'
for field in defined_fields:
try:
cls.fields[field].validate(data[field])
except ValidationError as e:
validation_results['error'] = True
validation_results[field] = str(e)
else:
validation_results[field] = None
return validation_results
|