diff --git a/cista/__main__.py b/cista/__main__.py index 05a42dc..94f2afb 100644 --- a/cista/__main__.py +++ b/cista/__main__.py @@ -98,6 +98,7 @@ def _main(): return 0 + def _confdir(args): if args["-c"]: # Custom config directory diff --git a/cista/api.py b/cista/api.py index 38b16d1..cb1e41a 100644 --- a/cista/api.py +++ b/cista/api.py @@ -82,6 +82,7 @@ async def control(req, ws): await asend(ws, StatusMsg(status="ack", req=cmd)) + @bp.websocket("watch") @websocket_wrapper async def watch(req, ws): diff --git a/cista/app.py b/cista/app.py index 2b8d80d..1d5906b 100644 --- a/cista/app.py +++ b/cista/app.py @@ -39,12 +39,14 @@ async def main_start(app, loop): app.ctx.threadexec = ThreadPoolExecutor(max_workers=8) + @app.after_server_stop async def main_stop(app, loop): await watching.stop(app, loop) app.ctx.threadexec.shutdown() + @app.on_request async def use_session(req): req.ctx.session = session.get(req) diff --git a/cista/auth.py b/cista/auth.py index b3d27d4..e4647c7 100644 --- a/cista/auth.py +++ b/cista/auth.py @@ -74,6 +74,7 @@ def verify(request, *, privileged=False): raise Unauthorized("Login required", "cookie") + bp = Blueprint("auth") diff --git a/cista/config.py b/cista/config.py index 56aa708..7883e00 100644 --- a/cista/config.py +++ b/cista/config.py @@ -24,6 +24,7 @@ class User(msgspec.Struct, omit_defaults=True): lastSeen: int = 0 # noqa: N815 + class Link(msgspec.Struct, omit_defaults=True): location: str creator: str = "" diff --git a/cista/protocol.py b/cista/protocol.py index a949d67..2e97176 100644 --- a/cista/protocol.py +++ b/cista/protocol.py @@ -25,6 +25,7 @@ class MkDir(ControlBase): path.mkdir(parents=True, exist_ok=False) + class Rename(ControlBase): path: str to: str @@ -50,6 +51,7 @@ class Rm(ControlBase): p.unlink() + class Mv(ControlBase): sel: list[str] dst: str diff --git a/cista/serve.py b/cista/serve.py index f9b5fa2..8ac2166 100644 --- a/cista/serve.py +++ b/cista/serve.py @@ -36,6 +36,7 @@ def run(*, dev=False): Sanic.serve_single() + def check_cert(certdir, domain): if (certdir / "privkey.pem").exist() and (certdir / "fullchain.pem").exists(): return diff --git a/cista/watching.py b/cista/watching.py index 978a056..fd4861f 100644 --- a/cista/watching.py +++ b/cista/watching.py @@ -221,6 +221,7 @@ async def broadcast(msg): logging.exception("Broadcast error") + async def start(app, loop): config.load_config() app.ctx.watcher = threading.Thread( diff --git a/pyproject.toml b/pyproject.toml index 30fb25c..f8e721b 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -27,6 +27,7 @@ dependencies = [ "stream-zip", "tomli_w", ] +requires-python = ">=3.10" [project.urls] Homepage = "" diff --git a/tests/test_control.py b/tests/test_control.py index ebd77a8..02552f8 100644 --- a/tests/test_control.py +++ b/tests/test_control.py @@ -2,7 +2,6 @@ import tempfile from pathlib import Path import pytest - from cista import config from cista.protocol import Cp, MkDir, Mv, Rename, Rm