100 lines
4.4 KiB
Python
100 lines
4.4 KiB
Python
from django.core.management.base import BaseCommand
|
||
|
||
from transfer.utils import transfer_objects
|
||
|
||
|
||
class Command(BaseCommand):
|
||
help = 'Transfer data between databases'
|
||
|
||
"""Типы данных для трансфера
|
||
ВНИМАНИЕ: первые буквы типов данных должны быть уникальны!
|
||
"""
|
||
SHORT_DATA_TYPES = [
|
||
'dictionaries', # №2 - перенос стран, регионов, городов, адресов
|
||
'news', # перенос новостей (после №2)
|
||
# 'account', # №1 - перенос пользователей - нет, см make_data_migrations.sh !!!
|
||
'subscriber',
|
||
'recipe', # №2 - рецепты
|
||
'partner',
|
||
'establishment', # №3 - перенос заведений
|
||
'gallery',
|
||
'commercial', # перенос рекламмы (очередность не важна)
|
||
'overlook', # №5 - перенос языков, отзывов
|
||
'tmp',
|
||
'menu',
|
||
'location_establishment', # №4 - добавление адресов для перенесенных заведений
|
||
'whirligig',
|
||
'identities',
|
||
]
|
||
|
||
LONG_DATA_TYPES = [
|
||
'update_country_flag',
|
||
'comment',
|
||
'inquiries', # №6 - перенос запросов оценок
|
||
'wine_characteristics', # №5 - перенос характиристик вин
|
||
'product', # №5 - перенос продуктов
|
||
'product_note', # №6 - перенос заметок продуктов
|
||
'souvenir', # №5 - перенос продуктов типа - сувениры
|
||
'establishment_note', # №5 - перенос заметок заведений
|
||
'assemblage', # №6 - перенос тегов для типа продуктов - вино
|
||
'rating_count',
|
||
'product_review',
|
||
'newsletter_subscriber', # подписчики на рассылку - переносить после переноса пользователей №1
|
||
'purchased_plaques', # №6 - перенос купленных тарелок
|
||
'guides',
|
||
'guide_filters',
|
||
'guide_element_sections',
|
||
'guide_wine_color_sections',
|
||
'guide_element_types',
|
||
'guide_elements_bulk',
|
||
'guide_element_advertorials',
|
||
'guide_element_label_photo',
|
||
'guide_complete',
|
||
'update_city_info',
|
||
'fix_location',
|
||
'remove_old_locations',
|
||
'add_fake_country',
|
||
'setup_clean_db',
|
||
'languages', # №4 - перенос языков
|
||
'set_unused_regions',
|
||
'update_fake_country_flag',
|
||
'transfer_text_review', # переводы для review с их авторами - запускать после overlook и product_review
|
||
'a_la_cartes',
|
||
]
|
||
|
||
def handle(self, *args, **options):
|
||
"""
|
||
Находим включённую опцию путём пересечения множества типов данных и множества включённых опций"""
|
||
data_type = list(set(option for option in options.keys() if options[option]) & set(self.LONG_DATA_TYPES))
|
||
if len(data_type) != 1:
|
||
data_type = list(set(option for option in options.keys() if options[option]) & set(self.SHORT_DATA_TYPES))
|
||
if len(data_type) != 1:
|
||
print(
|
||
"You must set correct option!\r\nYou can get options list with \r\n\r\n\tmanage.py help transfer\r\n")
|
||
exit(1)
|
||
else:
|
||
data_type = data_type[0]
|
||
else:
|
||
data_type = data_type[0]
|
||
|
||
transfer_objects(data_type)
|
||
|
||
def add_arguments(self, parser):
|
||
for option_type in self.LONG_DATA_TYPES:
|
||
parser.add_argument(
|
||
f'--{option_type}',
|
||
action='store_true',
|
||
default=False,
|
||
help=f'Transfer {option_type} objects'
|
||
)
|
||
|
||
"""Добавляем опции к команде, основываясь на типах данных, определённых в DATA_TYPES"""
|
||
for option_type in self.SHORT_DATA_TYPES:
|
||
parser.add_argument(
|
||
f'-{option_type[:1]}',
|
||
f'--{option_type}',
|
||
action='store_true',
|
||
default=False,
|
||
help=f'Transfer {option_type} objects'
|
||
)
|