From e5e94ed54ef92fe850d8bae4a4d1dc1ef3309770 Mon Sep 17 00:00:00 2001 From: Alexander Kharitonov Date: Sat, 16 Jul 2022 00:44:13 +0300 Subject: [PATCH] Add the read timeout option. --- .env.example | 1 + README.md | 6 +++--- pip.conf.example | 3 +++ src/devpisrv.py | 26 +++++++++++++++++++------- 4 files changed, 26 insertions(+), 10 deletions(-) diff --git a/.env.example b/.env.example index 05fd6d8..688ed0d 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=10 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..17ccad1 100755 --- a/src/devpisrv.py +++ b/src/devpisrv.py @@ -6,6 +6,8 @@ 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', @@ -21,19 +23,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(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): + 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)