this derivation will be built: /nix/store/ldl3py2l3363wmiydz06d6fg0i53kwk0-zhost-cli-0.1.0.drv these 9 paths will be fetched (47.0 MiB download, 96.3 MiB unpacked): /nix/store/k60mn0bz26xdaxisqfy1v00klpba3j5m-gumbo-0.13.2 /nix/store/4d7fydg3h5mwml02n4fpshwg0c46ddbz-jbig2dec-0.20 /nix/store/whlnnkcg6jzww3flayxrppz7fl7yd9qc-lcms2-2.19.1 /nix/store/dn6iqvsmrially0xjj71zgpd2506jsqm-leptonica-1.87.0 /nix/store/z1zhs0ghqppk8ik9dznwhm30acgm1y1v-mupdf-1.27.2 /nix/store/srk5k24hdnz21vm29wwyblv5a38h31c4-openjpeg-2.5.4 /nix/store/ysk81sg4qrwfvim2abglq7wzwpi8qabm-python3.14-pymupdf-1.27.2.3 /nix/store/f87ns5vl166f9xwzj8711lw2p855ljgw-tesseract-5.5.2 /nix/store/q7nkyvk96i4k3hylc5xdl4qp6pm1655l-tesseract-5.5.2 building '/nix/store/ldl3py2l3363wmiydz06d6fg0i53kwk0-zhost-cli-0.1.0.drv' zhost-cli-0.1.0> Sourcing python-remove-tests-dir-hook zhost-cli-0.1.0> Sourcing python-catch-conflicts-hook.sh zhost-cli-0.1.0> Sourcing python-remove-bin-bytecode-hook.sh zhost-cli-0.1.0> Sourcing pypa-build-hook zhost-cli-0.1.0> Using pypaBuildPhase zhost-cli-0.1.0> Sourcing python-runtime-deps-check-hook zhost-cli-0.1.0> Using pythonRuntimeDepsCheckHook zhost-cli-0.1.0> Sourcing pypa-install-hook zhost-cli-0.1.0> Using pypaInstallPhase zhost-cli-0.1.0> Sourcing python-imports-check-hook.sh zhost-cli-0.1.0> Using pythonImportsCheckPhase zhost-cli-0.1.0> Sourcing python-namespaces-hook zhost-cli-0.1.0> Sourcing python-catch-conflicts-hook.sh zhost-cli-0.1.0> Sourcing pytest-check-hook zhost-cli-0.1.0> Using pytestCheckPhase zhost-cli-0.1.0> Running phase: unpackPhase zhost-cli-0.1.0> unpacking source archive /nix/store/nbbck5mbjbvf4ndsly4l1kzm9i7lbczv-zhost-cli zhost-cli-0.1.0> source root is zhost-cli zhost-cli-0.1.0> setting SOURCE_DATE_EPOCH to timestamp 315619200 of file "zhost-cli/zhost_cli/pdf.py" zhost-cli-0.1.0> Running phase: patchPhase zhost-cli-0.1.0> Running phase: updateAutotoolsGnuConfigScriptsPhase zhost-cli-0.1.0> Running phase: configurePhase zhost-cli-0.1.0> no configure script, doing nothing zhost-cli-0.1.0> Running phase: buildPhase zhost-cli-0.1.0> Executing pypaBuildPhase zhost-cli-0.1.0> Creating a wheel... zhost-cli-0.1.0> pypa build flags: --no-isolation --outdir dist/ --wheel zhost-cli-0.1.0> * Getting build dependencies for wheel... zhost-cli-0.1.0> * Building wheel... zhost-cli-0.1.0> Successfully built zhost_cli-0.1.0-py3-none-any.whl zhost-cli-0.1.0> Finished creating a wheel... zhost-cli-0.1.0> Finished executing pypaBuildPhase zhost-cli-0.1.0> Running phase: pythonRuntimeDepsCheckHook zhost-cli-0.1.0> Executing pythonRuntimeDepsCheck zhost-cli-0.1.0> Checking runtime dependencies for zhost_cli-0.1.0-py3-none-any.whl zhost-cli-0.1.0> Finished executing pythonRuntimeDepsCheck zhost-cli-0.1.0> Running phase: installPhase zhost-cli-0.1.0> Executing pypaInstallPhase zhost-cli-0.1.0> Successfully installed zhost_cli-0.1.0-py3-none-any.whl zhost-cli-0.1.0> Finished executing pypaInstallPhase zhost-cli-0.1.0> Running phase: pythonOutputDistPhase zhost-cli-0.1.0> Executing pythonOutputDistPhase zhost-cli-0.1.0> Finished executing pythonOutputDistPhase zhost-cli-0.1.0> Running phase: fixupPhase zhost-cli-0.1.0> shrinking RPATHs of ELF executables and libraries in /nix/store/xwmk6nwcd8qiyd9k3kzd6jvv53jxgc8x-zhost-cli-0.1.0 zhost-cli-0.1.0> checking for references to /build/ in /nix/store/xwmk6nwcd8qiyd9k3kzd6jvv53jxgc8x-zhost-cli-0.1.0... zhost-cli-0.1.0> patching script interpreter paths in /nix/store/xwmk6nwcd8qiyd9k3kzd6jvv53jxgc8x-zhost-cli-0.1.0 zhost-cli-0.1.0> stripping (with command strip and flags -S -p) in /nix/store/xwmk6nwcd8qiyd9k3kzd6jvv53jxgc8x-zhost-cli-0.1.0/lib /nix/store/xwmk6nwcd8qiyd9k3kzd6jvv53jxgc8x-zhost-cli-0.1.0/bin zhost-cli-0.1.0> shrinking RPATHs of ELF executables and libraries in /nix/store/5rj6v5fd4q4iprwv95vyv820fpymilkk-zhost-cli-0.1.0-dist zhost-cli-0.1.0> checking for references to /build/ in /nix/store/5rj6v5fd4q4iprwv95vyv820fpymilkk-zhost-cli-0.1.0-dist... zhost-cli-0.1.0> patching script interpreter paths in /nix/store/5rj6v5fd4q4iprwv95vyv820fpymilkk-zhost-cli-0.1.0-dist zhost-cli-0.1.0> Rewriting #!/nix/store/gxzhl7aaiid7zp3y47jqqiq7zg5mqpwp-python3-3.14.6/bin/python3.14 to #!/nix/store/gxzhl7aaiid7zp3y47jqqiq7zg5mqpwp-python3-3.14.6 zhost-cli-0.1.0> wrapping `/nix/store/xwmk6nwcd8qiyd9k3kzd6jvv53jxgc8x-zhost-cli-0.1.0/bin/zhost-cli'... zhost-cli-0.1.0> Executing pythonRemoveTestsDir zhost-cli-0.1.0> Finished executing pythonRemoveTestsDir zhost-cli-0.1.0> Running phase: installCheckPhase zhost-cli-0.1.0> no Makefile or custom installCheckPhase, doing nothing zhost-cli-0.1.0> Running phase: pythonCatchConflictsPhase zhost-cli-0.1.0> Running phase: pythonRemoveBinBytecodePhase zhost-cli-0.1.0> Running phase: pythonImportsCheckPhase zhost-cli-0.1.0> Executing pythonImportsCheckPhase zhost-cli-0.1.0> Running phase: pytestCheckPhase zhost-cli-0.1.0> Executing pytestCheckPhase zhost-cli-0.1.0> 12 files already formatted zhost-cli-0.1.0> RUF012 Mutable default value for class attribute zhost-cli-0.1.0> --> tests/test_cli.py:19:46 zhost-cli-0.1.0> | zhost-cli-0.1.0> 17 | class State: zhost-cli-0.1.0> 18 | version = 10 zhost-cli-0.1.0> 19 | collections: dict[str, dict[str, Any]] = {} zhost-cli-0.1.0> | ^^ zhost-cli-0.1.0> 20 | items: dict[str, dict[str, Any]] = {} zhost-cli-0.1.0> 21 | settings: dict[str, dict[str, Any]] = {} zhost-cli-0.1.0> | zhost-cli-0.1.0> help: Consider initializing in `__init__` or annotating with `typing.ClassVar` zhost-cli-0.1.0> zhost-cli-0.1.0> RUF012 Mutable default value for class attribute zhost-cli-0.1.0> --> tests/test_cli.py:20:40 zhost-cli-0.1.0> | zhost-cli-0.1.0> 18 | version = 10 zhost-cli-0.1.0> 19 | collections: dict[str, dict[str, Any]] = {} zhost-cli-0.1.0> 20 | items: dict[str, dict[str, Any]] = {} zhost-cli-0.1.0> | ^^ zhost-cli-0.1.0> 21 | settings: dict[str, dict[str, Any]] = {} zhost-cli-0.1.0> 22 | fulltext: dict[str, dict[str, Any]] = {} zhost-cli-0.1.0> | zhost-cli-0.1.0> help: Consider initializing in `__init__` or annotating with `typing.ClassVar` zhost-cli-0.1.0> zhost-cli-0.1.0> RUF012 Mutable default value for class attribute zhost-cli-0.1.0> --> tests/test_cli.py:21:43 zhost-cli-0.1.0> | zhost-cli-0.1.0> 19 | collections: dict[str, dict[str, Any]] = {} zhost-cli-0.1.0> 20 | items: dict[str, dict[str, Any]] = {} zhost-cli-0.1.0> 21 | settings: dict[str, dict[str, Any]] = {} zhost-cli-0.1.0> | ^^ zhost-cli-0.1.0> 22 | fulltext: dict[str, dict[str, Any]] = {} zhost-cli-0.1.0> 23 | requests: list[dict[str, Any]] = [] zhost-cli-0.1.0> | zhost-cli-0.1.0> help: Consider initializing in `__init__` or annotating with `typing.ClassVar` zhost-cli-0.1.0> zhost-cli-0.1.0> RUF012 Mutable default value for class attribute zhost-cli-0.1.0> --> tests/test_cli.py:22:43 zhost-cli-0.1.0> | zhost-cli-0.1.0> 20 | items: dict[str, dict[str, Any]] = {} zhost-cli-0.1.0> 21 | settings: dict[str, dict[str, Any]] = {} zhost-cli-0.1.0> 22 | fulltext: dict[str, dict[str, Any]] = {} zhost-cli-0.1.0> | ^^ zhost-cli-0.1.0> 23 | requests: list[dict[str, Any]] = [] zhost-cli-0.1.0> 24 | counter = 0 zhost-cli-0.1.0> | zhost-cli-0.1.0> help: Consider initializing in `__init__` or annotating with `typing.ClassVar` zhost-cli-0.1.0> zhost-cli-0.1.0> RUF012 Mutable default value for class attribute zhost-cli-0.1.0> --> tests/test_cli.py:23:38 zhost-cli-0.1.0> | zhost-cli-0.1.0> 21 | settings: dict[str, dict[str, Any]] = {} zhost-cli-0.1.0> 22 | fulltext: dict[str, dict[str, Any]] = {} zhost-cli-0.1.0> 23 | requests: list[dict[str, Any]] = [] zhost-cli-0.1.0> | ^^ zhost-cli-0.1.0> 24 | counter = 0 zhost-cli-0.1.0> | zhost-cli-0.1.0> help: Consider initializing in `__init__` or annotating with `typing.ClassVar` zhost-cli-0.1.0> zhost-cli-0.1.0> UP043 [*] Unnecessary default type arguments zhost-cli-0.1.0> --> tests/test_cli.py:261:48 zhost-cli-0.1.0> | zhost-cli-0.1.0> 260 | @pytest.fixture() zhost-cli-0.1.0> 261 | def server(monkeypatch: pytest.MonkeyPatch) -> Generator[str, None, None]: zhost-cli-0.1.0> | ^^^^^^^^^^^^^^^^^^^^^^^^^^ zhost-cli-0.1.0> 262 | State.version, State.collections, State.items, State.requests, State.counter = ( zhost-cli-0.1.0> 263 | 10, zhost-cli-0.1.0> | zhost-cli-0.1.0> help: Remove default type arguments zhost-cli-0.1.0> | zhost-cli-0.1.0> 260 | @pytest.fixture() zhost-cli-0.1.0> - def server(monkeypatch: pytest.MonkeyPatch) -> Generator[str, None, None]: zhost-cli-0.1.0> 261 + def server(monkeypatch: pytest.MonkeyPatch) -> Generator[str]: zhost-cli-0.1.0> 262 | State.version, State.collections, State.items, State.requests, State.counter = ( zhost-cli-0.1.0> | zhost-cli-0.1.0> zhost-cli-0.1.0> RUF015 Prefer `next(...)` over single element slice zhost-cli-0.1.0> --> tests/test_cli.py:325:9 zhost-cli-0.1.0> | zhost-cli-0.1.0> 323 | main(["-j", "item", "find", "x"]) zhost-cli-0.1.0> 324 | assert {i["key"] for i in json.loads(capsys.readouterr().out)} == {"PAPER222"} zhost-cli-0.1.0> 325 | q = [r for r in _reqs("GET", "/users/1/items") if "q" in r["query"]][0] zhost-cli-0.1.0> | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ zhost-cli-0.1.0> 326 | assert q["query"]["qmode"] == ["everything"] zhost-cli-0.1.0> | zhost-cli-0.1.0> help: Replace with `next(...)` zhost-cli-0.1.0> zhost-cli-0.1.0> RUF015 Prefer `next(...)` over single element slice zhost-cli-0.1.0> --> tests/test_cli.py:412:12 zhost-cli-0.1.0> | zhost-cli-0.1.0> 410 | State.items["PAPER222"] = {"key": "PAPER222", "itemType": "journalArticle"} zhost-cli-0.1.0> 411 | main(["note", "add", "PAPER222", "--text", "
hi
"]) zhost-cli-0.1.0> 412 | note = [ zhost-cli-0.1.0> | ____________^ zhost-cli-0.1.0> 413 | | r for r in _reqs("POST", "/users/1/items") if r["body"][0]["itemType"] == "note" zhost-cli-0.1.0> 414 | | ][0] zhost-cli-0.1.0> | |________^ zhost-cli-0.1.0> 415 | assert note["body"][0]["parentItem"] == "PAPER222" zhost-cli-0.1.0> 416 | main(["note", "list", "PAPER222"]) zhost-cli-0.1.0> | zhost-cli-0.1.0> help: Replace with `next(...)` zhost-cli-0.1.0> zhost-cli-0.1.0> SIM115 Use a context manager for opening files zhost-cli-0.1.0> --> tests/test_cli.py:424:5 zhost-cli-0.1.0> | zhost-cli-0.1.0> 422 | ) -> None: zhost-cli-0.1.0> 423 | pdf = f"{tmp_path}/p.pdf" zhost-cli-0.1.0> 424 | open(pdf, "wb").write(b"%PDF-1.7 data") zhost-cli-0.1.0> | ^^^^ zhost-cli-0.1.0> 425 | State.items["PAPER222"] = {"key": "PAPER222", "itemType": "journalArticle"} zhost-cli-0.1.0> 426 | main(["pdf", "attach", "PAPER222", "--pdf", pdf]) zhost-cli-0.1.0> | zhost-cli-0.1.0> zhost-cli-0.1.0> RUF015 Prefer `next(...)` over single element slice zhost-cli-0.1.0> --> tests/test_cli.py:429:11 zhost-cli-0.1.0> | zhost-cli-0.1.0> 427 | assert any(r["path"].startswith("/uploads/") for r in State.requests) zhost-cli-0.1.0> 428 | # the attachment was created under the paper zhost-cli-0.1.0> 429 | att = [ zhost-cli-0.1.0> | ___________^ zhost-cli-0.1.0> 430 | | r zhost-cli-0.1.0> 431 | | for r in _reqs("POST", "/users/1/items") zhost-cli-0.1.0> 432 | | if r["body"][0]["itemType"] == "attachment" zhost-cli-0.1.0> 433 | | ][0] zhost-cli-0.1.0> | |________^ zhost-cli-0.1.0> 434 | assert att["body"][0]["parentItem"] == "PAPER222" zhost-cli-0.1.0> 435 | out_path = f"{tmp_path}/dl.pdf" zhost-cli-0.1.0> | zhost-cli-0.1.0> help: Replace with `next(...)` zhost-cli-0.1.0> zhost-cli-0.1.0> SIM115 Use a context manager for opening files zhost-cli-0.1.0> --> tests/test_cli.py:437:12 zhost-cli-0.1.0> | zhost-cli-0.1.0> 435 | out_path = f"{tmp_path}/dl.pdf" zhost-cli-0.1.0> 436 | main(["pdf", "fetch", "PAPER222", "--output", out_path]) zhost-cli-0.1.0> 437 | assert open(out_path, "rb").read().startswith(b"%PDF") zhost-cli-0.1.0> | ^^^^ zhost-cli-0.1.0> zhost-cli-0.1.0> RUF015 Prefer `next(...)` over single element slice zhost-cli-0.1.0> --> tests/test_cli.py:458:11 zhost-cli-0.1.0> | zhost-cli-0.1.0> 456 | } zhost-cli-0.1.0> 457 | main(["highlight", "add", "PAPER222", "--pdf", pdf, "--text", "highlight this"]) zhost-cli-0.1.0> 458 | ann = [ zhost-cli-0.1.0> | ___________^ zhost-cli-0.1.0> 459 | | r zhost-cli-0.1.0> 460 | | for r in _reqs("POST", "/users/1/items") zhost-cli-0.1.0> 461 | | if r["body"][0]["itemType"] == "annotation" zhost-cli-0.1.0> 462 | | ][0] zhost-cli-0.1.0> | |________^ zhost-cli-0.1.0> 463 | assert ann["body"][0]["parentItem"] == "ATTAC222" zhost-cli-0.1.0> 464 | assert ann["body"][0]["annotationText"] == "highlight this" zhost-cli-0.1.0> | zhost-cli-0.1.0> help: Replace with `next(...)` zhost-cli-0.1.0> zhost-cli-0.1.0> SIM115 Use a context manager for opening files zhost-cli-0.1.0> --> tests/test_cli.py:503:5 zhost-cli-0.1.0> | zhost-cli-0.1.0> 501 | ) -> None: zhost-cli-0.1.0> 502 | pdf = f"{tmp_path}/p.pdf" zhost-cli-0.1.0> 503 | open(pdf, "wb").write(b"%PDF-1.7 data") zhost-cli-0.1.0> | ^^^^ zhost-cli-0.1.0> 504 | main(["-j", "item", "add", "--title", "P", "--pdf", pdf]) zhost-cli-0.1.0> 505 | out = json.loads(capsys.readouterr().out) zhost-cli-0.1.0> | zhost-cli-0.1.0> zhost-cli-0.1.0> SIM115 Use a context manager for opening files zhost-cli-0.1.0> --> tests/test_cli.py:546:5 zhost-cli-0.1.0> | zhost-cli-0.1.0> 544 | ) -> None: zhost-cli-0.1.0> 545 | pdf = f"{tmp_path}/p.pdf" zhost-cli-0.1.0> 546 | open(pdf, "wb").write(b"%PDF-1.7 new") zhost-cli-0.1.0> | ^^^^ zhost-cli-0.1.0> 547 | State.items["PAPER222"] = {"key": "PAPER222", "itemType": "journalArticle"} zhost-cli-0.1.0> 548 | State.items["ATTAC222"] = { zhost-cli-0.1.0> | zhost-cli-0.1.0> zhost-cli-0.1.0> SIM115 Use a context manager for opening files zhost-cli-0.1.0> --> tests/test_cli.py:656:27 zhost-cli-0.1.0> | zhost-cli-0.1.0> 654 | main(["library", "export", out]) zhost-cli-0.1.0> 655 | zhost-cli-0.1.0> 656 | manifest = json.loads(open(f"{out}/manifest.json").read()) zhost-cli-0.1.0> | ^^^^ zhost-cli-0.1.0> 657 | assert manifest["counts"]["items"] == 1 # one top-level paper zhost-cli-0.1.0> | zhost-cli-0.1.0> zhost-cli-0.1.0> SIM115 Use a context manager for opening files zhost-cli-0.1.0> --> tests/test_cli.py:659:22 zhost-cli-0.1.0> | zhost-cli-0.1.0> 657 | assert manifest["counts"]["items"] == 1 # one top-level paper zhost-cli-0.1.0> 658 | zhost-cli-0.1.0> 659 | rec = json.loads(open(f"{out}/items/PAPER222.json").read()) zhost-cli-0.1.0> | ^^^^ zhost-cli-0.1.0> 660 | assert rec["item"]["data"]["title"] == "P" zhost-cli-0.1.0> 661 | assert {c["key"] for c in rec["children"]} == {"ATTAC222", "NOTE2222"} zhost-cli-0.1.0> | zhost-cli-0.1.0> zhost-cli-0.1.0> SIM115 Use a context manager for opening files zhost-cli-0.1.0> --> tests/test_cli.py:664:12 zhost-cli-0.1.0> | zhost-cli-0.1.0> 662 | assert rec["fulltext"]["ATTAC222"]["content"] == "full body" zhost-cli-0.1.0> 663 | zhost-cli-0.1.0> 664 | assert open(f"{out}/files/ATTAC222/p.pdf", "rb").read().startswith(b"%PDF") zhost-cli-0.1.0> | ^^^^ zhost-cli-0.1.0> 665 | colls = json.loads(open(f"{out}/collections.json").read()) zhost-cli-0.1.0> 666 | assert any(c["key"] == "FOLDER22" for c in colls) zhost-cli-0.1.0> | zhost-cli-0.1.0> zhost-cli-0.1.0> SIM115 Use a context manager for opening files zhost-cli-0.1.0> --> tests/test_cli.py:665:24 zhost-cli-0.1.0> | zhost-cli-0.1.0> 664 | assert open(f"{out}/files/ATTAC222/p.pdf", "rb").read().startswith(b"%PDF") zhost-cli-0.1.0> 665 | colls = json.loads(open(f"{out}/collections.json").read()) zhost-cli-0.1.0> | ^^^^ zhost-cli-0.1.0> 666 | assert any(c["key"] == "FOLDER22" for c in colls) zhost-cli-0.1.0> | zhost-cli-0.1.0> zhost-cli-0.1.0> SIM115 Use a context manager for opening files zhost-cli-0.1.0> --> tests/test_cli.py:717:43 zhost-cli-0.1.0> | zhost-cli-0.1.0> 715 | exported_items = {p[:-5] for p in os.listdir(f"{out}/items")} zhost-cli-0.1.0> 716 | assert exported_items == {"PAPER222", "SUBPAP22", "CROSS222"} zhost-cli-0.1.0> 717 | colls = {c["key"] for c in json.loads(open(f"{out}/collections.json").read())} zhost-cli-0.1.0> | ^^^^ zhost-cli-0.1.0> 718 | assert colls == {"ROOT2222", "FOLDER22", "SUBCOL22"} zhost-cli-0.1.0> 719 | cross = json.loads(open(f"{out}/items/CROSS222.json").read()) zhost-cli-0.1.0> | zhost-cli-0.1.0> zhost-cli-0.1.0> SIM115 Use a context manager for opening files zhost-cli-0.1.0> --> tests/test_cli.py:719:24 zhost-cli-0.1.0> | zhost-cli-0.1.0> 717 | colls = {c["key"] for c in json.loads(open(f"{out}/collections.json").read())} zhost-cli-0.1.0> 718 | assert colls == {"ROOT2222", "FOLDER22", "SUBCOL22"} zhost-cli-0.1.0> 719 | cross = json.loads(open(f"{out}/items/CROSS222.json").read()) zhost-cli-0.1.0> | ^^^^ zhost-cli-0.1.0> 720 | assert cross["item"]["data"]["collections"] == ["FOLDER22"] zhost-cli-0.1.0> | zhost-cli-0.1.0> zhost-cli-0.1.0> SIM115 Use a context manager for opening files zhost-cli-0.1.0> --> tests/test_cli.py:734:27 zhost-cli-0.1.0> | zhost-cli-0.1.0> 732 | main(["library", "export", out]) zhost-cli-0.1.0> 733 | zhost-cli-0.1.0> 734 | settings = json.loads(open(f"{out}/settings.json").read()) zhost-cli-0.1.0> | ^^^^ zhost-cli-0.1.0> 735 | assert settings["tagColors"]["value"] == [{"name": "read", "color": "#5fb236"}] zhost-cli-0.1.0> | zhost-cli-0.1.0> zhost-cli-0.1.0> SIM115 Use a context manager for opening files zhost-cli-0.1.0> --> zhost_cli/client.py:274:16 zhost-cli-0.1.0> | zhost-cli-0.1.0> 272 | ) -> Response: zhost-cli-0.1.0> 273 | """Run the full authorize -> upload -> register sequence for `path`.""" zhost-cli-0.1.0> 274 | data = open(path, "rb").read() zhost-cli-0.1.0> | ^^^^ zhost-cli-0.1.0> 275 | md5 = hashlib.md5(data).hexdigest() zhost-cli-0.1.0> 276 | stat = os.stat(path) zhost-cli-0.1.0> | zhost-cli-0.1.0> zhost-cli-0.1.0> Found 22 errors. zhost-cli-0.1.0> [*] 1 fixable with the `--fix` option (4 hidden fixes can be enabled with the `--unsafe-fixes` option). error: Cannot build '/nix/store/ldl3py2l3363wmiydz06d6fg0i53kwk0-zhost-cli-0.1.0.drv'. Reason: builder failed with exit code 1. Output paths: /nix/store/5rj6v5fd4q4iprwv95vyv820fpymilkk-zhost-cli-0.1.0-dist /nix/store/xwmk6nwcd8qiyd9k3kzd6jvv53jxgc8x-zhost-cli-0.1.0 Last 25 log lines: > | > > SIM115 Use a context manager for opening files > --> tests/test_cli.py:734:27 > | > 732 | main(["library", "export", out]) > 733 | > 734 | settings = json.loads(open(f"{out}/settings.json").read()) > | ^^^^ > 735 | assert settings["tagColors"]["value"] == [{"name": "read", "color": "#5fb236"}] > | > > SIM115 Use a context manager for opening files > --> zhost_cli/client.py:274:16 > | > 272 | ) -> Response: > 273 | """Run the full authorize -> upload -> register sequence for `path`.""" > 274 | data = open(path, "rb").read() > | ^^^^ > 275 | md5 = hashlib.md5(data).hexdigest() > 276 | stat = os.stat(path) > | > > Found 22 errors. > [*] 1 fixable with the `--fix` option (4 hidden fixes can be enabled with the `--unsafe-fixes` option). For full logs, run: nix log /nix/store/ldl3py2l3363wmiydz06d6fg0i53kwk0-zhost-cli-0.1.0.drv