From 7a0d0b23dc7b3bcfd39578c835222f29f6c6b265 Mon Sep 17 00:00:00 2001 From: Alexander Kharitonov Date: Sat, 16 Jul 2022 02:12:51 +0300 Subject: [PATCH] Add the .env file option 'REQUEST_TIMEOUT_SEC' --- .env.example | 1 + Dockerfile | 2 +- README.md | 6 +++--- pip.conf.example | 3 +++ src/devpisrv.py | 38 ++++++++++++++++++++++++++++---------- 5 files changed, 36 insertions(+), 14 deletions(-) diff --git a/.env.example b/.env.example index 05fd6d8..7452eaa 100644 --- a/.env.example +++ b/.env.example @@ -1,4 +1,5 @@ SERVER_IP=0.0.0.0 SERVER_PORT=3141 ROOT_PASSWORD=root +REQUEST_TIMEOUT_SEC=120 diff --git a/Dockerfile b/Dockerfile index ff8586f..a0c34e4 100644 --- a/Dockerfile +++ b/Dockerfile @@ -10,5 +10,5 @@ RUN pip3 install -U pip ENV PATH="/home/devpisrv/.local/bin:${PATH}" RUN pip install -U -r /tmp/requirements.txt COPY src/devpisrv.py /usr/local/bin/ -ENTRYPOINT ["devpisrv.py"] +ENTRYPOINT ["devpisrv.py", "--overwrite-config"] diff --git a/README.md b/README.md index 8ab31e0..9f12d80 100644 --- a/README.md +++ b/README.md @@ -1,7 +1,7 @@ -# Конфигурационные файлы для запуска частичного зеркала PyPi используя docker-compose +# Конфигурационные файлы для запуска частичного зеркала PyPI используя docker-compose -Конфигурационные файлы предназначены для развёртывания зеркала PyPi для -локального применения, например, на случай, если доступ к серверам PyPi окажется +Конфигурационные файлы предназначены для развёртывания зеркала PyPI для +локального применения, например, на случай, если доступ к серверам PyPI окажется заблокирован. Используется [devpi](https://devpi.net/), который запускается используя docker-compose. diff --git a/pip.conf.example b/pip.conf.example index 00335ea..025af00 100644 --- a/pip.conf.example +++ b/pip.conf.example @@ -2,3 +2,6 @@ index-url=http://mirror.example.com:3141/root/pypi/+simple/ trusted-host=mirror.example.com timeout=120 + +[search] +index=http://mirror.example.com:3141/root/pypi/ diff --git a/src/devpisrv.py b/src/devpisrv.py index d05d21c..4c65b93 100755 --- a/src/devpisrv.py +++ b/src/devpisrv.py @@ -6,14 +6,22 @@ import subprocess from dotenv import dotenv_values import yaml +DEFAULT_REQUEST_TIMEOUT_SEC = 10 + arg_parser = argparse.ArgumentParser(description="The script for start devpi-server") arg_parser.add_argument( '-d', '--data-dir', type=str, - default = '/var/local/devpisrv', - help = 'Path to the data directory' + default='/var/local/devpisrv', + help='Path to the data directory' ) +arg_parser.add_argument( + '-w', + '--overwrite-config', + action='store_true', + default=False, + help='Overwrite the config file if exists') args = arg_parser.parse_args() server_dir = os.path.join(args.data_dir, "server") @@ -21,19 +29,29 @@ config_dir = os.path.join(args.data_dir, "config") env_file = os.path.join(config_dir, ".env") config_file = os.path.join(config_dir, "devpi.conf") -if not os.path.exists(config_file): +if not(os.path.exists(args.data_dir) and os.path.isdir(args.data_dir)): + sys.exit(f"The data directory {args.data_dir} not available.") +for subdir_path in [server_dir, config_dir]: + if not os.path.exists(subdir_path): + os.mkdir(subdir_path, mode=0o770) + +if not os.path.exists(config_file) or args.overwrite_config: + env_config_values = dotenv_values(env_file) if os.path.isfile(env_file) else { } + config_data = { 'devpi-server': { 'serverdir': os.path.abspath(server_dir), 'host': '0.0.0.0', - 'restrict-modify': 'root' + 'restrict-modify': 'root', + 'request-timeout': int(env_config_values.get('REQUEST_TIMEOUT_SEC') or \ + DEFAULT_REQUEST_TIMEOUT_SEC) } - } - if os.path.isfile(env_file): - env_config_values = dotenv_values(env_file) - if 'ROOT_PASSWORD' in env_config_values.keys(): - config_data['devpi-server']['root-passwd'] = \ - env_config_values['ROOT_PASSWORD'] + } + + if 'ROOT_PASSWORD' in env_config_values.keys(): + config_data['devpi-server']['root-passwd'] = \ + env_config_values['ROOT_PASSWORD'] + with open(config_file, 'w') as file: yaml.dump(config_data, file)