[build-system] requires = ["setuptools>=68"] build-backend = "setuptools.build_meta" [project] name = "xceadmin" version = "0.1.0" description = "XCE cluster configuration admin CLI (config build / config push)" requires-python = ">=3.10" dependencies = [ "click>=8.0", "pycapnp>=1.3", "PyYAML>=6.0", "jsonschema>=4.0", ] # All four are real runtime imports (capnp/click/jsonschema/yaml — grep # src/xceadmin src/xcecommon for `^import |^from `), not just dev/test # tooling: an installed-but-undeclared dependency here would let `pip # install` "succeed" while leaving the CLI broken at first real use # (`ModuleNotFoundError` the moment `config build` touches capnp/jsonschema/ # yaml) — exactly the class of gap a wheel built for install-outside-this- # repo needs to not have. pycapnp specifically: the nix dev shell's # python3Packages.pycapnp (src/nixSupport/xce.nix) is preferred when # available because it links against the same capnproto C++ runtime this # repo's C code uses; PyPI's prebuilt pycapnp wheels are usually fine too # for a plain `pip install` outside the nix shell, but that's a "usually," # not the guaranteed-consistent link this repo's own build gets. # Wired into meson (src/xceadmin/meson.build custom_target, pulled in by # src/meson.build's subdir('xceadmin')) so `nix build .#xcecore[_debug]` # and `meson compile` install + test this package like every other # component; src/tools/xce-build.sh's xceadmin case now just delegates to # that same meson target. [project.optional-dependencies] test = ["pytest"] [project.scripts] xceadmin = "xceadmin.cli:main" [tool.setuptools.packages.find] where = ["src"] include = ["xceadmin*", "xcecommon*"] [tool.setuptools.package-dir] "" = "src" # Bundled copies of controller.capnp/c.capnp and the 7 JSON validation # schemas (synced from src/schema/ and src/configs/schema/ into # xcecommon/schema_files/ by src/xceadmin/meson-build.sh, the meson # custom_target xce-build.sh's `xceadmin)` case now delegates to, before # either the pinned test-install or the wheel build run against that same # tree — see Requirement 5.5). Without this, a non-editable `pip install .` # (or a wheel build) produces a package containing only *.py files and # silently drops schema_files/ — an editable install would never catch this # since it resolves straight into the checked-out source tree. [tool.setuptools.package-data] xcecommon = ["schema_files/*.capnp", "schema_files/json/*.schema.json"]