142 lines
5.7 KiB
Python
142 lines
5.7 KiB
Python
"""
|
||
|
||
Структура записи в 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
|
||
|
||
|
||
NOTE: среди legacy таблиц совпадение для таблицы Address не найдено (Возможно для Address подходит Locations в legacy)
|
||
"""
|
||
|
||
card = {
|
||
"Country": {
|
||
"data_type": "dictionaries",
|
||
"dependencies": None,
|
||
"fields": {
|
||
"Cities": {
|
||
"code": "country_code_2",
|
||
}
|
||
}
|
||
},
|
||
|
||
"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": {
|
||
# нету аналога для поля name
|
||
"Cities": {
|
||
"code": "region_code",
|
||
},
|
||
},
|
||
"relations": {
|
||
"Cities": [(
|
||
(None, "country_code_2"),
|
||
("Country", "country", "code", "django.db.models.CharField")),
|
||
# ((None, "subregion_code"), #TODO: как сопоставлять parent_region из postgres с subregion_code из legacy ?
|
||
# ("Region", "parent_region", "code", "CharField"))
|
||
|
||
]
|
||
}
|
||
},
|
||
|
||
"City": {
|
||
"data_type": "dictionaries",
|
||
"dependencies": ("Country", "Region"),
|
||
"fields": {
|
||
"Cities": {
|
||
"name": "name",
|
||
"code": "country_code_2",
|
||
"postal_code": "zip_code",
|
||
"is_island": ("is_island", "is_island", "django.db.models.Boolean")
|
||
}
|
||
},
|
||
"relations": {
|
||
"Cities": [(
|
||
(None, "region_code"),
|
||
("Region", "region", "code", "django.db.models.CharField")),
|
||
((None, "country_code_2"),
|
||
("Country", "country", "code", "django.db.models.CharField"))
|
||
]
|
||
}
|
||
},
|
||
|
||
|
||
"Address": {
|
||
"data_type": "dictionaries",
|
||
"dependencies": ("City",),
|
||
"fields": {
|
||
# нету аналога для поля number
|
||
"Locations": {
|
||
"postal_code": "zip_code",
|
||
"coordinates": (("lat", "latitude"), ("long", "longitude"))
|
||
},
|
||
},
|
||
"relations": {
|
||
"Cities": [ #TODO: Locations ссылается внешним ключом на Cities
|
||
(("city", None),
|
||
("City", "city", None, None))
|
||
]
|
||
}
|
||
}
|
||
}
|
||
|
||
|
||
used_apps = None
|