From 59aa5544e96e6da635caf1d075851bf2760d8397 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Oliver=20Gro=C3=9Fklo=C3=9F?= Date: Sun, 7 Dec 2025 15:16:21 +0100 Subject: [PATCH] Fix setup.py: use download-then-run instead of pipe to avoid EOF error --- Readme.md | 15 +++------------ setup.py | 40 ++++------------------------------------ 2 files changed, 7 insertions(+), 48 deletions(-) diff --git a/Readme.md b/Readme.md index 7594ffe..da423d9 100644 --- a/Readme.md +++ b/Readme.md @@ -26,20 +26,11 @@ Open Termux and run: # Grant storage access termux-setup-storage -# Install Python +# Install Python and download setup pkg update -y && pkg install -y python +mkdir -p ~/scripts && curl -sL https://git.olli.info/Oliver/GadgetbridgeMqtt/raw/branch/main/setup.py -o ~/scripts/setup.py -# Download and run setup -curl -sL https://git.olli.info/Oliver/GadgetbridgeMqtt/raw/branch/main/setup.py | python -``` - -Or step-by-step: - -```bash -termux-setup-storage -pkg update -y && pkg install -y python wget -mkdir -p ~/scripts -wget -O ~/scripts/setup.py https://git.olli.info/Oliver/GadgetbridgeMqtt/raw/branch/main/setup.py +# Run setup (interactive) python ~/scripts/setup.py ``` diff --git a/setup.py b/setup.py index 82526d7..da0af22 100644 --- a/setup.py +++ b/setup.py @@ -30,27 +30,15 @@ def get_input(prompt, default=None, required=True): prompt = f"{prompt} [{default}]: " else: prompt = f"{prompt}: " - - try: - value = input(prompt).strip() - except EOFError: - # Non-interactive environment (e.g. piped via curl | python) - # Return default when provided, otherwise raise a clear error - if default is not None: - return default - raise RuntimeError( - "No stdin available for interactive input.\n" - "Provide configuration via environment variables or run setup.py interactively.\n" - "Example (non-interactive):\n" - " MQTT_BROKER=1.2.3.4 MQTT_PORT=1883 \\n+ MQTT_USERNAME=user MQTT_PASSWORD=pass \\n+ EXPORT_DIR=/storage/emulated/0/Documents/GB_Export \\n+ PUBLISH_INTERVAL=300 \\n+ curl -sL https://git.olli.info/Oliver/GadgetbridgeMqtt/raw/branch/main/setup.py | python" - ) - + + value = input(prompt).strip() + if not value and default: return default if not value and required: print("This field is required!") return get_input(prompt.replace(f" [{default}]", "").replace(": ", ""), default, required) - + return value @@ -73,26 +61,6 @@ def setup_mqtt(): return config -def load_noninteractive_config_from_env(): - """Load configuration from environment variables when stdin is not a TTY. - - Required: MQTT_BROKER - Optional: MQTT_PORT, MQTT_USERNAME, MQTT_PASSWORD, EXPORT_DIR, PUBLISH_INTERVAL - """ - cfg = {} - broker = os.environ.get("MQTT_BROKER") - if not broker: - return None - - cfg["mqtt_broker"] = broker - cfg["mqtt_port"] = int(os.environ.get("MQTT_PORT", "1883")) - cfg["mqtt_username"] = os.environ.get("MQTT_USERNAME", "") - cfg["mqtt_password"] = os.environ.get("MQTT_PASSWORD", "") - cfg["export_dir"] = os.environ.get("EXPORT_DIR", DEFAULT_EXPORT_DIR) - cfg["publish_interval"] = int(os.environ.get("PUBLISH_INTERVAL", str(DEFAULT_INTERVAL))) - return cfg - - def save_config(config): """Save configuration to file""" os.makedirs(CONFIG_DIR, exist_ok=True)