feat: env vars

This commit is contained in:
2026-04-11 19:20:40 +02:00
parent f70a893fd4
commit a6a7d1bf80
4 changed files with 47 additions and 15 deletions
+6 -1
View File
@@ -2,7 +2,12 @@ FROM python:3.14-alpine
WORKDIR /app WORKDIR /app
VOLUME [ "/app/data" ] VOLUME [ "/data" ]
ENV HOST=localhost
ENV PORT=8080
ENV BIND=0.0.0.0
ENV DATA_DIR=/data
RUN PIP_ROOT_USER_ACTION=ignore python3 -m pip install uv RUN PIP_ROOT_USER_ACTION=ignore python3 -m pip install uv
+2 -1
View File
@@ -10,6 +10,7 @@ RUFF ?= $(UV) run ruff
TY ?= $(UV) run ty TY ?= $(UV) run ty
DOCKER ?= docker DOCKER ?= docker
DOCKER_TAG ?= localhost/stapler:latest DOCKER_TAG ?= localhost/stapler:latest
TOKEN ?= secret
# DOCS # DOCS
@@ -60,7 +61,7 @@ docker-build: ## docker build
.PHONY: docker-run .PHONY: docker-run
docker-run: docker-build ## docker run docker-run: docker-build ## docker run
@$(DOCKER) run -it -p 8080:8080 -v ./data:/app/data $(DOCKER_TAG) @$(DOCKER) run -it -p 8080:8080 -v ./data:/data $(DOCKER_TAG) --token $(TOKEN)
# ACTIONS # ACTIONS
+7 -6
View File
@@ -1,24 +1,25 @@
# Stapler # Stapler
```txt ```txt
usage: stapler [-h] [-p PORT] [--host HOST] [-d DATA_DIR] [-b BIND] usage: stapler [-h] [-p PORT] [--host HOST] [-d DATA_DIR] [-b BIND] [-t TOKEN]
Static pages as simple as a gzip file Static pages as simple as a gzip file
options: options:
-h, --help show this help message and exit -h, --help show this help message and exit
-p, --port PORT server port (default: 8080) -p, --port PORT server port (default: 8080) (env var: PORT)
--host HOST server default host (default: localhost) --host HOST server default host (default: localhost) (env var: HOST)
-d, --data-dir DATA_DIR -d, --data-dir DATA_DIR
directory where files are/will be stored directory where files are/will be stored (default: ./data) (env var: DATA_DIR)
-b, --bind BIND server bind address (default: 0.0.0.0) -b, --bind BIND server bind address (default: 0.0.0.0) (env var: BIND)
-t, --token TOKEN secret token for update requests (env var: TOKEN)
``` ```
## TODO ## TODO
- [x] basic http server - [x] basic http server
- [x] docker container - [x] docker container
- [ ] env instead of args when available - [x] env instead of args when available
- [ ] POST gzip data into /data/xxx - [ ] POST gzip data into /data/xxx
- [ ] DELETE request - [ ] DELETE request
- [ ] CNAME in /data/xxx can be translated as host in GET / - [ ] CNAME in /data/xxx can be translated as host in GET /
+32 -7
View File
@@ -12,35 +12,60 @@ class Parameters:
host: str host: str
data_dir: str data_dir: str
bind: str bind: str
token: str
@classmethod @classmethod
def from_namespace(cls, args: argparse.Namespace) -> "Parameters": def from_namespace(cls, args: argparse.Namespace) -> "Parameters":
return Parameters(**vars(args)) return Parameters(**vars(args))
def __get_env_str(var: str, default: str) -> str:
if (result := os.getenv(var)) is None:
return default
return result
def __get_env_int(var: str, default: int) -> int:
value = __get_env_str(var, str(default))
if value.isnumeric():
return int(value)
return default
def parse_parameters() -> Parameters: def parse_parameters() -> Parameters:
parser = argparse.ArgumentParser( parser = argparse.ArgumentParser(
project.get_name(), description=project.get_description() project.get_name(), description=project.get_description()
) )
parser.add_argument( parser.add_argument(
"-p", "--port", type=int, default=8080, help="server port (default: 8080)" "-p",
"--port",
type=int,
default=__get_env_int("PORT", 8080),
help="server port (default: 8080) (env var: PORT)",
) )
parser.add_argument( parser.add_argument(
"--host", "--host",
default="localhost", default=__get_env_str("HOST", "localhost"),
help="server default host (default: localhost)", help="server default host (default: localhost) (env var: HOST)",
) )
parser.add_argument( parser.add_argument(
"-d", "-d",
"--data-dir", "--data-dir",
help="directory where files are/will be stored", default=__get_env_str("DATA_DIR", os.path.join(os.getcwd(), "data")),
default=os.path.join(os.getcwd(), "data"), help="directory where files are/will be stored (default: ./data) (env var: DATA_DIR)",
) )
parser.add_argument( parser.add_argument(
"-b", "-b",
"--bind", "--bind",
default="0.0.0.0", default=__get_env_str("BIND", "0.0.0.0"),
help="server bind address (default: 0.0.0.0)", help="server bind address (default: 0.0.0.0) (env var: BIND)",
)
parser.add_argument(
"-t",
"--token",
required=os.getenv("TOKEN") is None,
default=os.getenv("TOKEN"),
help="secret token for update requests (env var: TOKEN)",
) )
args = parser.parse_args() args = parser.parse_args()
return Parameters.from_namespace(args) return Parameters.from_namespace(args)