Edited transfer.py for news, partner, reviews, comment.

Added transfer.py for recipe.
This commit is contained in:
michail 2019-10-10 17:46:52 +05:00
parent 4cc9fabd73
commit b2b8798c6c
5 changed files with 154 additions and 32 deletions

View File

@ -25,21 +25,23 @@ psql_field_type - тип уникального поля в postgresql
"""
card = {
# как работать с GenericForeignKey(content_type) - ?
"Comment": {
"data_type": "objects",
"dependencies": ("User",),
"fields": {
"text": "comment",
"mark": "mark"
# как работать с GenericForeignKey - ?
# "content_object" : ""
"Comments": {
"text": "comment",
"mark": ("mark", "PositiveIntegerField")
# как работать с GenericForeignKey - ?
# "content_object" : ""
},
},
"relations": {
# нужен ответ по вопросу Как поступать со сбором данных
# "Accounts": [
# (("account_id", "account_id"),
# ("User", "id", "user", "PositiveIntegerField"))
# ]
"Accounts": [
(("account", None),
("User", "user", None, None))
]
}
}
}

View File

@ -28,12 +28,29 @@ NOTE: среди legacy таблиц совпадение для таблицы
card = {
# нету аналога для NewsType
"NewsType": {
"data_type": "dictionaries",
"dependencies": None,
"fields": {
"Pages": {
# будет только один тип новости "News"
# значения для поля "name" берутся из поля "type" legacy модели "Pages", притом type="News"
# Mysql - select distinct(type) from pages;
"name": "name"
}
}
},
"News": {
"data_type": "objects",
"dependencies": ("NewsType", "MetaDataContent", "Country", "Address"),
"fields": {
"NewsOlds": {
"title": ("title", "TJSONField"),
# нету аналогов для start, end, playlist
"Pages": {
"state": ("state", "PositiveSmallIntegerField"),
"template": ("template", "PositiveIntegerField"),
"image_url": ("attachment_file_name", "URLField"),
"preview_image_url": ("attachment_file_name", "URLField"),
# в NewsOlds нету аналога для поля subtitle модели News, также нет аналогов для полей start, end, playlist
# "subtitle": ""
@ -44,12 +61,22 @@ card = {
# с вставками шаблонизатора Ruby
# "description" : "body"
},
"relations":[
# "address": "",
# "country": "",
# "tags": "",
# "news_type": ""
# отложено до выяснения Уточнения и вопросы по мигратору(Как поступать со сбором данных)
"relations": {
"PageTexts": {
"key": "page_id",
"fields": {
"title": ("title", "TJSONField"),
"description": ("body", "TJSONField"),
"slug": ("slug", "SlugField")
}
}
},
},
# нету аналога для поля tags
"relations": {
"Pages": [
((None, "type"),
("NewsType", "news_type", "name", "CharField"))
]
}
},

View File

@ -30,6 +30,7 @@ card = {
"data_type": "objects",
"dependencies": None,
"fields": {
# из EstablishmentBacklinks выбирать только те у которых type="Partner"
"EstablishmentBacklinks": {
"url": "backlink_url",
},

86
apps/recipe/transfer.py Normal file
View File

@ -0,0 +1,86 @@
"""
Структура записи в 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)
"""
# значения берутся из legacy модели "Pages", притом type="Recipe"
card = {
"Recipe": {
"data_type": "objects",
"dependencies": None,
"fields": {
"Pages": {
"state": ("state", "PositiveSmallIntegerField")
},
"relations": {
"PageTexts": {
"key": "page_id",
"fields": {
"title": ("title", "TJSONField"),
"description": ("body", "TJSONField")
}
}
}
}
}
}
used_apps = None

View File

@ -26,33 +26,39 @@ psql_field_type - тип уникального поля в postgresql
"""
card = {
# как работать с GenericForeignKey(content_type) - ?
# как работать с ForeignKey на самого себя(self), поле "child"
# вопрос с внешним ключом language на таблицу Language
"Review": {
"data_type": "objects",
"dependencies": ("User",),
"dependencies": ("User", "Language", "Review"),
"fields": {
"Reviews": {
"published_at": "published_at",
"vintage": "vintage",
# как работать с GenericForeignKey - ?
"status": ("aasm_state", "PositiveSmallIntegerField")
# "content_object": ""
},
"ReviewTexts": {
# полу text в модели Review имеет тип TJSONField, а поле text в модели ReviewTexts имеет тип TextField
# при их сопоставлении использовать поле locale модели ReviewTexts
"text": "text"
}
"relations": {
"ReviewTexts": {
"key": "review",
"fields": {
# полу text в модели Review имеет тип TJSONField, а поле text в модели ReviewTexts имеет тип TextField
# при их сопоставлении использовать поле locale модели ReviewTexts
"text": ("text", "TJSONField")
}
}
},
},
"relations": {
# вопрос с внешним ключом language
# нужен ответ по вопросу как поступать со сбором данных
# "Accounts": [
# (("account_id", "account_id"),
# ("User", "id", "reviewer", "PositiveIntegerField"))
# ]
"Accounts": [
(("account", None),
("User", "reviewer", None, None))
]
}
}
}
used_apps = ("account", )
used_apps = ("account", "translation")