summaryrefslogtreecommitdiff
path: root/day9/task5_vue/backend/database/scheme.py
diff options
context:
space:
mode:
authorAndrew <saintruler@gmail.com>2019-07-21 12:14:09 +0400
committerAndrew <saintruler@gmail.com>2019-07-21 12:14:09 +0400
commit2305ced85888a23f86ecfcdfb64a3b69c4997a4c (patch)
tree9d5cc4ad1c322ca2bf46b990498ad0a79d508aff /day9/task5_vue/backend/database/scheme.py
parent8c8712f0e6b165f6967f5d2958f300df6182296c (diff)
Переписан бекенд. Добавлена валидация при обновлении значений в ряду.
Удалена предыдущая версия приложения без vue.
Diffstat (limited to 'day9/task5_vue/backend/database/scheme.py')
-rw-r--r--day9/task5_vue/backend/database/scheme.py46
1 files changed, 46 insertions, 0 deletions
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