feat: env vars
This commit is contained in:
+6
-1
@@ -2,7 +2,12 @@ FROM python:3.14-alpine
|
||||
|
||||
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
|
||||
|
||||
|
||||
@@ -10,6 +10,7 @@ RUFF ?= $(UV) run ruff
|
||||
TY ?= $(UV) run ty
|
||||
DOCKER ?= docker
|
||||
DOCKER_TAG ?= localhost/stapler:latest
|
||||
TOKEN ?= secret
|
||||
|
||||
# DOCS
|
||||
|
||||
@@ -60,7 +61,7 @@ docker-build: ## docker build
|
||||
|
||||
.PHONY: 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
|
||||
|
||||
|
||||
@@ -1,24 +1,25 @@
|
||||
# Stapler
|
||||
|
||||
```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
|
||||
|
||||
options:
|
||||
-h, --help show this help message and exit
|
||||
-p, --port PORT server port (default: 8080)
|
||||
--host HOST server default host (default: localhost)
|
||||
-p, --port PORT server port (default: 8080) (env var: PORT)
|
||||
--host HOST server default host (default: localhost) (env var: HOST)
|
||||
-d, --data-dir DATA_DIR
|
||||
directory where files are/will be stored
|
||||
-b, --bind BIND server bind address (default: 0.0.0.0)
|
||||
directory where files are/will be stored (default: ./data) (env var: DATA_DIR)
|
||||
-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
|
||||
|
||||
- [x] basic http server
|
||||
- [x] docker container
|
||||
- [ ] env instead of args when available
|
||||
- [x] env instead of args when available
|
||||
- [ ] POST gzip data into /data/xxx
|
||||
- [ ] DELETE request
|
||||
- [ ] CNAME in /data/xxx can be translated as host in GET /
|
||||
|
||||
+32
-7
@@ -12,35 +12,60 @@ class Parameters:
|
||||
host: str
|
||||
data_dir: str
|
||||
bind: str
|
||||
token: str
|
||||
|
||||
@classmethod
|
||||
def from_namespace(cls, args: argparse.Namespace) -> "Parameters":
|
||||
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:
|
||||
parser = argparse.ArgumentParser(
|
||||
project.get_name(), description=project.get_description()
|
||||
)
|
||||
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(
|
||||
"--host",
|
||||
default="localhost",
|
||||
help="server default host (default: localhost)",
|
||||
default=__get_env_str("HOST", "localhost"),
|
||||
help="server default host (default: localhost) (env var: HOST)",
|
||||
)
|
||||
parser.add_argument(
|
||||
"-d",
|
||||
"--data-dir",
|
||||
help="directory where files are/will be stored",
|
||||
default=os.path.join(os.getcwd(), "data"),
|
||||
default=__get_env_str("DATA_DIR", os.path.join(os.getcwd(), "data")),
|
||||
help="directory where files are/will be stored (default: ./data) (env var: DATA_DIR)",
|
||||
)
|
||||
parser.add_argument(
|
||||
"-b",
|
||||
"--bind",
|
||||
default="0.0.0.0",
|
||||
help="server bind address (default: 0.0.0.0)",
|
||||
default=__get_env_str("BIND", "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()
|
||||
return Parameters.from_namespace(args)
|
||||
|
||||
Reference in New Issue
Block a user