feat: install tools/oracle as the paperspec package
Other repositories (paperstack, then paperpack) import the reference implementation instead of reimplementing the specification; scienting-core will take the role later behind the same vectors. - pyproject.toml: distribution and import name `paperspec`, version 0.1.0, Python >= 3.12, no base dependencies; `tools/oracle` is the package, and `schemas/`, `sql/` and `vectors/` ship as the data subpackages `paperspec.schemas`, `paperspec.sql` and `paperspec.vectors`. Extras `schema`, `crypto` and `tools`. - tools/oracle/__init__.py: the Python 3.14 and cryptography/jsonschema gate runs only when imported as `tools.oracle` by the repository's own tools. - crypto.py imports `cryptography` on first use of HKDF and Ed25519, with an ImportError naming `paperspec[crypto]`; schema.py imports `jsonschema` and `referencing` in `Store.validator` and `Store.registry`. package.py, db.py and receipts.py then import on a bare interpreter. - pixi.toml installs the package editable (pixi.lock re-solved; no conda pin changed), so the tools and the package resolve to the same code. - tools/README.md names the library surface and the extras; CHANGELOG.md records the packaging change under 0.1.0, since check.py requires the changelog's first heading to equal the format version. No computed value, vector, fixture, schema or SQL file changed. Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
This commit is contained in:
8 files changed
+279
-24
No files matched your search
@@ -3,14 +3,12 @@
|
||||
Non-normative.
|
||||
The spec's schemas are restricted to the keywords below (spec/22-conformance.md) so that every 2020-12
|
||||
validator reads them alike; `lint` refuses any schema that leaves the subset.
|
||||
`jsonschema` and `referencing` are imported on first use, so `Store.load`, `deref` and `lint` work without them.
|
||||
"""
|
||||
|
||||
import json
|
||||
import os
|
||||
|
||||
from jsonschema import Draft202012Validator
|
||||
from referencing import Registry, Resource
|
||||
|
||||
KEYWORDS = {
|
||||
"$schema", "$id", "$ref", "$defs", "$comment", "title", "description", "examples", "default", "deprecated",
|
||||
"type", "enum", "const", "properties", "required", "additionalProperties", "patternProperties",
|
||||
@@ -36,6 +34,8 @@ class Store:
|
||||
|
||||
def registry(self):
|
||||
if self._registry is None:
|
||||
from referencing import Registry, Resource
|
||||
|
||||
names = sorted(f for f in os.listdir(self.root) if f.endswith(".schema.json"))
|
||||
self._registry = Registry().with_resources(
|
||||
[(self.load(f)["$id"], Resource.from_contents(self.load(f))) for f in names])
|
||||
@@ -43,6 +43,8 @@ class Store:
|
||||
|
||||
def validator(self, name):
|
||||
if name not in self._validators:
|
||||
from jsonschema import Draft202012Validator
|
||||
|
||||
self._validators[name] = Draft202012Validator(self.load(name), registry=self.registry())
|
||||
return self._validators[name]
|
||||
|
||||
|
||||
Reference in new issue
Block a user