From 7bcd2edab60516cc240904855458ef0a1ace4357 Mon Sep 17 00:00:00 2001 From: michail Date: Fri, 11 Oct 2019 15:41:09 +0500 Subject: [PATCH] Added transfer.py into timetable. Edited transfer.py for collection and location. --- apps/collection/transfer.py | 11 +++++- apps/location/transfer.py | 5 +++ apps/timetable/transfer.py | 78 +++++++++++++++++++++++++++++++++++++ 3 files changed, 92 insertions(+), 2 deletions(-) create mode 100644 apps/timetable/transfer.py diff --git a/apps/collection/transfer.py b/apps/collection/transfer.py index aac4a6a2..0d276030 100644 --- a/apps/collection/transfer.py +++ b/apps/collection/transfer.py @@ -11,12 +11,16 @@ field[1] - название поля в таблице legacy """ card = { "Collection": { + "data_type": "objects", "dependencies": ("Country", ), "fields": { "Collections": { - # нету аналогов для полей start и end + # нету аналогов для полей description, start и end "name": "title", "slug": "slug", + "block_size": ("geometries", "JSONField"), + "is_publish": ("active", "BooleanField"), + "image_url": ("attachment_file_name", "URLField") } }, "relations": { @@ -24,7 +28,9 @@ card = { } }, "Guide": { - "dependencies": ("Collection", ), + # как работать с ForeignKey на самого себя(self), поле "parent" + "data_type": "objects", + "dependencies": ("Collection", "self"), "fields": { "Guides": { # нету аналогов для полей start и end @@ -32,6 +38,7 @@ card = { } }, "relations": { + # аналалог для поля "collection" не найдено # "parent": "Guide", # "collection": "Collection" } diff --git a/apps/location/transfer.py b/apps/location/transfer.py index 3c9900f4..517db183 100644 --- a/apps/location/transfer.py +++ b/apps/location/transfer.py @@ -72,6 +72,11 @@ card = { }, "Region": { + # subregion_code -> code + # region_code -> parent_region + # MySQL: select distinct(country_code_2) from cities where subregion_code is not NULL; + # только у пяти стран есть понятие "subregion_code"(не NULL): fr, be, ma, aa, gr (country_code_2) + # Возможно получиться обойтись без изменений модели Region "data_type": "dictionaries", "dependencies": ("Country", "Region"), "fields": { diff --git a/apps/timetable/transfer.py b/apps/timetable/transfer.py new file mode 100644 index 00000000..915b9ad5 --- /dev/null +++ b/apps/timetable/transfer.py @@ -0,0 +1,78 @@ +""" + +Структура записи в card: +Название таблицы в postgresql: { + "data_type": "тип данных в таблице (словарь, объект, дочерний объект и так далее)", + "dependencies": кортеж с зависимостями от других таблиц в postgresql, + "fields": список полей для таблицы postgresql, пример: + { + "название legacy таблицы": { + список полей для переноса, пример структуры описан далее + }, + "relations": список зависимостей legacy-таблицы, пример: + { + # имеет внешний ключ на "название legacy таблицы" из "fields" + "название legacy таблицы": { + "key": ключ для связи. Строка, если тип поля в legacy таблице - ForeignKey, или кортеж из названия поля + в дочерней таблице и названия поля в родительской таблице в ином случае + "fields": { + список полей для переноса, пример структуры описан далее + } + } + } + }, + "relations": список внешних ключей таблицы postgresql, пример структуры описан далее + { + "Cities": [( + (None, "region_code"), + ("Region", "region", "code", "CharField")), + ((None, "country_code_2"), + ("Country", "country", "code", "CharField")) + ] + } +}, + + +Структура fields: +key - поле в таблице postgres +value - поле или группа полей в таблице legacy + +В случае передачи группы полей каждое поле представляет собой кортеж, где: +field[0] - название аргумента +field[1] - название поля в таблице legacy +Опционально: field[2] - тип данных для преобразования + +Структура внешних ключей: +"legacy_table" - спикок кортежей для сопоставления полей +"legacy_table": [ + (("legacy_key", "legacy_field"), + ("psql_table", "psql_key", "psql_field", "psql_field_type")) +], где: +legacy_table - название модели legacy +legacy_key - ForeignKey в legacy +legacy_field - уникальное поле в модели legacy для сопоставления с postgresql +psql_table - название модели psql +psql_key - ForeignKey в postgresql +psql_field - уникальное поле в модели postgresql для сопоставления с legacy +psql_field_type - тип уникального поля в postgresql + + +""" + +card = { + "Timetable": { + "data_type": "objects", + "dependencies": None, + "fields": { + "Schedules": { + # нет аналогов для weekday, opening_at, closed_at + "lunch_start": "lunch_start", + "lunch_end": "lunch_end", + "diner_start": "diner_start", + "diner_end": "diner_end" + } + } + } +} + +used_apps = None \ No newline at end of file