from django.core.management.base import BaseCommand, CommandError import os import shutil from django.conf import settings class Command(BaseCommand): help = 'Сздаёт супервисор конфиги для селери' def add_arguments(self, parser): parser.add_argument( '--user', type=str, default='www', dest='user', help='Пользователь от имени которого будут запускаться процессы супервизора' ) parser.add_argument( '--env', type=str, default='dev', dest='env', help='Тип кружения из пд которого запускается скрипт (env, dev, test)' ) parser.add_argument( '--celery-path', type=str, dest='celery_path', help='Путь до celery' ) def handle(self, *args, **options): with open(settings.BASE_DIR + '/config_app/supervisor_configs/build.conf') as file_in: text = file_in.read() text = text.replace("$CELERY_PATH$", options['celery_path']) text = text.replace("$USER$", options['user']) text = text.replace("$PROJECT_PATH$", settings.BASE_DIR) if options['env'] == 'dev': text = text.replace("$LOG_LEVEL$", 'info') try: shutil.rmtree(settings.BASE_DIR + '/config_app/supervisor_configs/dist') except FileNotFoundError: pass os.mkdir(settings.BASE_DIR + '/config_app/supervisor_configs/dist') for name in ['beat', 'worker', 'flower']: out_text = text.replace("$NAME$", name) out_file_path = '%s/config_app/supervisor_configs/dist/%s.conf' % (settings.BASE_DIR, name) with open(out_file_path, 'w') as file_out: file_out.write(out_text) try: os.symlink(out_file_path, '/etc/supervisor/conf.d/%s.conf' % name) except FileExistsError: pass else: raise CommandError('No such environ %s use one of (dev, prod, test)')