def generate_dev_env():
    """
    Авто-генератор переменных среды для докера
    :return:
    """
    new_render = {
        'core_folder':
        RENDER_DOCKERFILE['core_folder'],
        'db_path':
        'postgresql://*****:*****@general_postgres:5432/__test_app_core'
    }

    # Берём настройки базы данных из композа
    core_folder = RENDER_DOCKERFILE['core_folder']
    guid = RENDER_DOCKERFILE['guid']
    name_psql_container = f'{core_folder}{guid}_postgres'

    with open(GENERAL_DOCKER_COMPOSE) as file:
        docker_dict = yml_load(file, Loader=FullLoader)
        psql_settings = docker_dict['services'].get(name_psql_container)

        if psql_settings:
            environment_psql = psql_settings.get('environment')
            if environment_psql:
                user = environment_psql['POSTGRES_USER']
                pswd = environment_psql['POSTGRES_PASSWORD']
                db = environment_psql['POSTGRES_DB']
                port = psql_settings['ports'][0][:4]

                new_render[
                    'db_path'] = f'postgresql://{user}:{pswd}@{name_psql_container}:{port}/{db}'

    jinja_render_to_file(GENERAL_PATH_JINJA_ENV_DEV, GENERAL_ENV_DEV,
                         new_render)
def generate_docker_compose():
    """
    Автогенератор докер-композа по конфигу. JINJA2
    :return:
    """
    jinja_render_to_file(GENERAL_PATH_JINJA_DOCKER_COMPOSE,
                         GENERAL_DOCKER_COMPOSE, RENDER_DOCKERFILE)
def create_orm_gen(columns, model_name, dict_comment, client_folder, name_dict,
                   name_client):
    """
    Автогенератор классов ОРМ
    """

    proc_model_name = model_name.replace(get_project_prefix(), '')

    #   ORM
    render_orm = create_jinja_dict_for_python(columns=columns,
                                              model_name=proc_model_name,
                                              dict_comment=dict_comment,
                                              name_dict=name_dict,
                                              name_client=name_client)

    #   Pydantic
    render_pydantic = {
        'file_import': DEFAULT_MODEL_FILE_NAME,
        'class_import': proc_model_name
    }

    # Шаг 1 - Автогенератор классов
    jinja_render_to_file(src=DEFAULT_JINJA_PATTERN_ORM,
                         dst=client_folder / f'{DEFAULT_MODEL_FILE_NAME}.py',
                         render=render_orm)

    jinja_render_to_file(src=DEFAULT_JINJA_PATTERN_PYD,
                         dst=client_folder /
                         f'{DEFAULT_PYDANTIC_FILE_NAME}.py',
                         render=render_pydantic)

    with open(file=client_folder / '__init__.py', mode='w') as fb:
        pass
def generate_nginx_conf():
    """
    Автогенератор nginx по конфигу. JINJA2
    :return:
    """

    jinja_render_to_file(GENERAL_PATH_JINJA_NGINX, GENERAL_NGINX_CONF,
                         RENDER_DOCKERFILE)
def generate_docker_file():
    """
    Автогенератор докер-файла по конфигу. JINJA2
    :return:
    """

    jinja_render_to_file(GENERAL_PATH_JINJA_DOCKERFILE, GENERAL_DOCKERFILE,
                         RENDER_DOCKERFILE)
Example #6
0
def migration_aerich_tortoise():
    """
    AERICH TORTOISE ORM FAST API
    """

    print('INIT AERICH CORE')

    aerich_name = asf('aerich')

    from aerich.models import Aerich
    path = inspect_getfile(Aerich)
    with open(path, 'r+') as file:
        lines = file.readlines()
        if lines[-1].find('table') < 0:
            file.writelines(f"\n        table = '{aerich_name}'")

    from aerich.cli import coro
    path = inspect_getfile(coro)

    cfg_import = GeneralConfig.DEFAULT_AERICH_CFG_PATH.replace(
        '.TORTOISE_ORM', '')
    first_line = 'sys.path.insert(0, os.getcwd())'
    line_repair = f"{first_line}\nfrom importlib import import_module\nimport_module('{cfg_import}')\n"

    repair = False
    with open(path, 'r') as file:
        lines = file.readlines()
        if lines[4].find(first_line) < 0:
            lines.insert(4, line_repair)
            repair = True
    if repair:
        with open(path, 'w') as file:
            file.writelines(lines)

    if GeneralConfig.DEFAULT_AERICH_INI_FILE.is_file():
        # Проект уже успешно инициализирован, либо порезан

        if GeneralConfig.DEFAULT_AERICH_INI_PATH.is_file():
            print('AERICH WILL BE INIT EARLY')
        else:
            # Проект порезан. Это значит, что кто-то всё стёр на локальной машине
            print('AERICH REPAIR RUN')

            _, data_cmd = run(
                f'aerich init -t {GeneralConfig.DEFAULT_AERICH_CFG_PATH} --location {GeneralConfig.DEFAULT_AERICH_MIGR_PATH.absolute()}'
            )
            print(data_cmd)

            _, data_cmd = run('aerich init-db')
            print(data_cmd)

            # Сохранение конфигурации (для последующего перемещения)
            shutil_copy(src=GeneralConfig.DEFAULT_AERICH_INI_FILE,
                        dst=GeneralConfig.DEFAULT_AERICH_INI_PATH)
    else:
        if GeneralConfig.DEFAULT_AERICH_INI_PATH.is_file():
            # Перенос проекта куда-либо

            print('PROJECT WILL BE MOVE. RECOMBINE AERICH')
            shutil_copy(src=GeneralConfig.DEFAULT_AERICH_INI_PATH,
                        dst=GeneralConfig.DEFAULT_AERICH_INI_FILE)
        else:
            # Первый старт
            print('AERICH FIRST RUN')

            _, data_cmd = run(
                f'aerich init -t {GeneralConfig.DEFAULT_AERICH_CFG_PATH} --location {GeneralConfig.DEFAULT_AERICH_MIGR_PATH.absolute()}'
            )
            print(data_cmd)

            _, data_cmd = run('aerich init-db')
            print(data_cmd)

            # Сохранение конфигурации (для последующего перемещения)
            shutil_copy(src=GeneralConfig.DEFAULT_AERICH_INI_FILE,
                        dst=GeneralConfig.DEFAULT_AERICH_INI_PATH)

    # Авто-рендер каждый раз из-за возможных переносов приложения между мирами
    src_jinja = Path(
        __file__).parent.parent / 'aerich_proc' / 'pattern_aerich_init.jinja'
    dict_jinja = {
        'tortoise_orm': GeneralConfig.DEFAULT_AERICH_CFG_PATH,
        'location': GeneralConfig.DEFAULT_AERICH_MIGR_PATH.absolute()
    }

    jinja_render_to_file(src=src_jinja,
                         render=dict_jinja,
                         dst=GeneralConfig.DEFAULT_AERICH_INI_PATH)
    jinja_render_to_file(src=src_jinja,
                         render=dict_jinja,
                         dst=GeneralConfig.DEFAULT_AERICH_INI_FILE)