From 2305ced85888a23f86ecfcdfb64a3b69c4997a4c Mon Sep 17 00:00:00 2001 From: Andrew Date: Sun, 21 Jul 2019 12:14:09 +0400 Subject: =?UTF-8?q?=D0=9F=D0=B5=D1=80=D0=B5=D0=BF=D0=B8=D1=81=D0=B0=D0=BD?= =?UTF-8?q?=20=D0=B1=D0=B5=D0=BA=D0=B5=D0=BD=D0=B4.=20=D0=94=D0=BE=D0=B1?= =?UTF-8?q?=D0=B0=D0=B2=D0=BB=D0=B5=D0=BD=D0=B0=20=D0=B2=D0=B0=D0=BB=D0=B8?= =?UTF-8?q?=D0=B4=D0=B0=D1=86=D0=B8=D1=8F=20=D0=BF=D1=80=D0=B8=20=D0=BE?= =?UTF-8?q?=D0=B1=D0=BD=D0=BE=D0=B2=D0=BB=D0=B5=D0=BD=D0=B8=D0=B8=20=D0=B7?= =?UTF-8?q?=D0=BD=D0=B0=D1=87=D0=B5=D0=BD=D0=B8=D0=B9=20=D0=B2=20=D1=80?= =?UTF-8?q?=D1=8F=D0=B4=D1=83.=20=D0=A3=D0=B4=D0=B0=D0=BB=D0=B5=D0=BD?= =?UTF-8?q?=D0=B0=20=D0=BF=D1=80=D0=B5=D0=B4=D1=8B=D0=B4=D1=83=D1=89=D0=B0?= =?UTF-8?q?=D1=8F=20=D0=B2=D0=B5=D1=80=D1=81=D0=B8=D1=8F=20=D0=BF=D1=80?= =?UTF-8?q?=D0=B8=D0=BB=D0=BE=D0=B6=D0=B5=D0=BD=D0=B8=D1=8F=20=D0=B1=D0=B5?= =?UTF-8?q?=D0=B7=20vue.?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- day9/task5_vue/backend/database/scheme.py | 46 +++++++++++++++++++++++++++++++ 1 file changed, 46 insertions(+) create mode 100644 day9/task5_vue/backend/database/scheme.py (limited to 'day9/task5_vue/backend/database/scheme.py') diff --git a/day9/task5_vue/backend/database/scheme.py b/day9/task5_vue/backend/database/scheme.py new file mode 100644 index 0000000..f783f79 --- /dev/null +++ b/day9/task5_vue/backend/database/scheme.py @@ -0,0 +1,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 -- cgit v1.2.3