# dkepy — the customer-side Python companion to DKE Python (`.dpy`). # # Distribution name `dkepy`, import name `dke`. The two differ because `dke` is # taken on PyPI by an unrelated project; the import name is the one that # appears in customer code, so it is the one that was worth keeping. # # NO RUNTIME DEPENDENCIES, and that is a property rather than a coincidence: # this package writes facts and must be safe to run over a customer's source # without their auditing a dependency tree first. The package's tests assert that # no module here imports a networking or process-spawning module, walked over # the package rather than over a named list. # # ONE OPTIONAL EXTRA. `dkepy[keys]` adds `cryptography`, for AES-GCM alone, to # `dke.keys`, the module that makes store keys. Nothing the core imports # reaches that module, so the core stays dependency-free, and the package's # tests assert that no other module imports any third-party package. [build-system] requires = ["setuptools>=68"] build-backend = "setuptools.build_meta" [project] name = "dkepy" version = "0.8.1" description = "Write facts into a DKE store, from Python, for kinds you define yourself" readme = "README.md" license = { file = "LICENSE" } authors = [{ name = "Are Bjørby", email = "are.bjorby@langsyn.org" }] keywords = ["dke", "reasoning", "facts", "knowledge"] # 3.10 is a HARD floor, not a preference: the Python reader walks `ast.Match`, # which does not exist below it, so the module fails to import rather than # degrading. The package's tests assert the floor against this file. requires-python = ">=3.10" dependencies = [] classifiers = [ "License :: OSI Approved :: MIT License", "Programming Language :: Python :: 3", "Topic :: Software Development :: Libraries", ] [project.urls] Homepage = "https://dke.langsyn.com/" Documentation = "https://dke.langsyn.com/tutorial/dke/python/" # 38 is the floor because it is the oldest release this was tested against # (Debian 12's); AES-GCM itself is far older. [project.optional-dependencies] keys = ["cryptography>=38"] [project.scripts] dke-ingest-python = "dke.ingest.python:main" dke-ingest-cpp = "dke.ingest.cpp:main" dke-quantum-device = "dke.quantum.device:main" dke-pqc-cbom = "dke.pqc.cbom:main" [tool.setuptools.packages.find] where = ["src"] # PEP 561. Without this marker a type checker IGNORES an installed package # entirely, however well annotated it is — and this one was: 90 of 90 # functions carry return annotations and every parameter is typed, all of it # invisible to a customer until the marker shipped. The package's tests assert # both halves: the file is here, and it is listed for the build. [tool.setuptools.package-data] dke = ["py.typed"]