Added transfer.py into main app.
Added legacy models into transfer/models.py
This commit is contained in:
parent
51b63335d7
commit
8ca27c7f87
146
apps/main/transfer.py
Normal file
146
apps/main/transfer.py
Normal file
|
|
@ -0,0 +1,146 @@
|
||||||
|
"""
|
||||||
|
|
||||||
|
Структура записи в 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 = {
|
||||||
|
"SiteSettings": {
|
||||||
|
"data_type": "objects",
|
||||||
|
"dependencies": ("Country",),
|
||||||
|
"fields": {
|
||||||
|
"SiteSettings": {
|
||||||
|
"subdomain": "country_code_2",
|
||||||
|
"pinterest_page_url": "pinterest_page_url",
|
||||||
|
"twitter_page_url": "twitter_page_url",
|
||||||
|
"facebook_page_url": "facebook_page_url",
|
||||||
|
"instagram_page_url": "instagram_page_url",
|
||||||
|
"contact_email": "contact_email",
|
||||||
|
"config": ("config", "JSONField") #TODO в качесте ключа использовать country_code_2 из legacy - ?
|
||||||
|
},
|
||||||
|
# "relations": {
|
||||||
|
# # Как работать c отношение OneToOneField
|
||||||
|
# }
|
||||||
|
}
|
||||||
|
|
||||||
|
},
|
||||||
|
"Feature": {
|
||||||
|
"data_type": "objects",
|
||||||
|
"dependencies": ("SiteSettings",),
|
||||||
|
"fields": {
|
||||||
|
"Features": {
|
||||||
|
"slug": "slug"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
# поле "site_settings" ManyToManyField имеет through='SiteFeature' в postgres
|
||||||
|
# "relations": { # как работать с ManyToManyField
|
||||||
|
#
|
||||||
|
# }
|
||||||
|
},
|
||||||
|
"SiteFeature": {
|
||||||
|
"data_type": "objects",
|
||||||
|
"dependencies": ("SiteSettings", "Feature"),
|
||||||
|
"fields": {
|
||||||
|
"SiteFeatures": {
|
||||||
|
"published": ("state", "BooleanField")
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"relations": {
|
||||||
|
"Sites": [(
|
||||||
|
("site", None),
|
||||||
|
("SiteSettings", "site_settings", None, None))
|
||||||
|
],
|
||||||
|
"Features": [(
|
||||||
|
("feature", None),
|
||||||
|
("Feature", "feature", None, None))
|
||||||
|
]
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"AwardType": {
|
||||||
|
"data_type": "objects",
|
||||||
|
"dependencies": ("Country",),
|
||||||
|
"fields": {
|
||||||
|
"AwardTypes": {
|
||||||
|
"name": "title"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
# вопрос с ForeignKey на Country
|
||||||
|
# "relations": {
|
||||||
|
#
|
||||||
|
# }
|
||||||
|
},
|
||||||
|
"Award": {
|
||||||
|
"data_type": "objects",
|
||||||
|
"dependencies": ("AwardType", "ContentType"),
|
||||||
|
"fields": {
|
||||||
|
"Awards": {
|
||||||
|
"title": ("title", "TJSONField"),
|
||||||
|
"vintage_year": "year",
|
||||||
|
}
|
||||||
|
},
|
||||||
|
#TODO вопрос с content_type
|
||||||
|
"relations": {
|
||||||
|
"AwardTypes": [(
|
||||||
|
("award_type", None),
|
||||||
|
("AwardType", "award_type", None, None))
|
||||||
|
]
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
used_apps = ("locations", )
|
||||||
|
|
@ -10,6 +10,84 @@ from django.contrib.gis.db import models
|
||||||
from transfer.mixins import MigrateMixin
|
from transfer.mixins import MigrateMixin
|
||||||
|
|
||||||
|
|
||||||
|
class Sites(MigrateMixin):
|
||||||
|
using = 'legacy'
|
||||||
|
|
||||||
|
country_code_2 = models.CharField(max_length=255, blank=True, null=True)
|
||||||
|
pinterest_page_url = models.CharField(max_length=255, blank=True, null=True)
|
||||||
|
twitter_page_url = models.CharField(max_length=255, blank=True, null=True)
|
||||||
|
facebook_page_url = models.CharField(max_length=255, blank=True, null=True)
|
||||||
|
created_at = models.DateTimeField()
|
||||||
|
updated_at = models.DateTimeField()
|
||||||
|
contact_email = models.CharField(max_length=255, blank=True, null=True)
|
||||||
|
config = models.CharField(max_length=3000, blank=True, null=True)
|
||||||
|
released = models.IntegerField(blank=True, null=True)
|
||||||
|
instagram_page_url = models.CharField(max_length=255, blank=True, null=True)
|
||||||
|
ad_config = models.TextField(blank=True, null=True)
|
||||||
|
|
||||||
|
class Meta:
|
||||||
|
managed = False
|
||||||
|
db_table = 'sites'
|
||||||
|
|
||||||
|
|
||||||
|
class Features(MigrateMixin):
|
||||||
|
using = 'legacy'
|
||||||
|
|
||||||
|
slug = models.CharField(max_length=255, blank=True, null=True)
|
||||||
|
created_at = models.DateTimeField()
|
||||||
|
updated_at = models.DateTimeField()
|
||||||
|
|
||||||
|
class Meta:
|
||||||
|
managed = False
|
||||||
|
db_table = 'features'
|
||||||
|
|
||||||
|
|
||||||
|
class SiteFeatures(MigrateMixin):
|
||||||
|
using = 'legacy'
|
||||||
|
|
||||||
|
site = models.ForeignKey('Sites', models.DO_NOTHING, blank=True, null=True)
|
||||||
|
feature = models.ForeignKey(Features, models.DO_NOTHING, blank=True, null=True)
|
||||||
|
state = models.CharField(max_length=255, blank=True, null=True)
|
||||||
|
created_at = models.DateTimeField()
|
||||||
|
updated_at = models.DateTimeField()
|
||||||
|
|
||||||
|
class Meta:
|
||||||
|
managed = False
|
||||||
|
db_table = 'site_features'
|
||||||
|
|
||||||
|
|
||||||
|
class AwardTypes(MigrateMixin):
|
||||||
|
using = 'legacy'
|
||||||
|
|
||||||
|
site = models.ForeignKey('Sites', models.DO_NOTHING, blank=True, null=True)
|
||||||
|
title = models.CharField(max_length=255, blank=True, null=True)
|
||||||
|
region = models.IntegerField(blank=True, null=True)
|
||||||
|
created_at = models.DateTimeField()
|
||||||
|
updated_at = models.DateTimeField()
|
||||||
|
|
||||||
|
class Meta:
|
||||||
|
managed = False
|
||||||
|
db_table = 'award_types'
|
||||||
|
|
||||||
|
|
||||||
|
class Awards(MigrateMixin):
|
||||||
|
using = 'legacy'
|
||||||
|
|
||||||
|
profile_id = models.IntegerField(blank=True, null=True)
|
||||||
|
award_type = models.ForeignKey(AwardTypes, models.DO_NOTHING, blank=True, null=True)
|
||||||
|
award = models.CharField(max_length=255, blank=True, null=True)
|
||||||
|
title = models.CharField(max_length=255, blank=True, null=True)
|
||||||
|
region_code = models.CharField(max_length=255, blank=True, null=True)
|
||||||
|
year = models.CharField(max_length=255, blank=True, null=True)
|
||||||
|
created_at = models.DateTimeField()
|
||||||
|
updated_at = models.DateTimeField()
|
||||||
|
state = models.CharField(max_length=255, blank=True, null=True)
|
||||||
|
|
||||||
|
class Meta:
|
||||||
|
managed = False
|
||||||
|
db_table = 'awards'
|
||||||
|
|
||||||
|
|
||||||
class Ezuser(MigrateMixin):
|
class Ezuser(MigrateMixin):
|
||||||
using = 'legacy'
|
using = 'legacy'
|
||||||
|
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue
Block a user