Added transfer.py into timetable.

Edited transfer.py for collection and location.
This commit is contained in:
michail 2019-10-11 15:41:09 +05:00
parent 839491c740
commit 7bcd2edab6
3 changed files with 92 additions and 2 deletions

View File

@ -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"
}

View File

@ -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": {

View File

@ -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