sort4circ-dpp 1.3.1__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- sort4circ_dpp-1.3.1/.dockerignore +133 -0
- sort4circ_dpp-1.3.1/.editorconfig +17 -0
- sort4circ_dpp-1.3.1/.gitattributes +1 -0
- sort4circ_dpp-1.3.1/.github/CODEOWNERS +20 -0
- sort4circ_dpp-1.3.1/.github/ISSUE_TEMPLATE/bug_report.yml +65 -0
- sort4circ_dpp-1.3.1/.github/ISSUE_TEMPLATE/spec_question.yml +69 -0
- sort4circ_dpp-1.3.1/.github/PULL_REQUEST_TEMPLATE.md +23 -0
- sort4circ_dpp-1.3.1/.github/dependabot.yml +27 -0
- sort4circ_dpp-1.3.1/.github/workflows/ci.yml +255 -0
- sort4circ_dpp-1.3.1/.github/workflows/release.yml +116 -0
- sort4circ_dpp-1.3.1/.gitignore +29 -0
- sort4circ_dpp-1.3.1/CHANGELOG.md +393 -0
- sort4circ_dpp-1.3.1/CITATION.cff +54 -0
- sort4circ_dpp-1.3.1/CODE_OF_CONDUCT.md +103 -0
- sort4circ_dpp-1.3.1/CONTRIBUTING.md +170 -0
- sort4circ_dpp-1.3.1/LICENSE +202 -0
- sort4circ_dpp-1.3.1/LICENSE-DOCS +47 -0
- sort4circ_dpp-1.3.1/LICENSING.md +90 -0
- sort4circ_dpp-1.3.1/MANIFEST.in +203 -0
- sort4circ_dpp-1.3.1/MANIFEST.sha256 +200 -0
- sort4circ_dpp-1.3.1/Makefile +17 -0
- sort4circ_dpp-1.3.1/PKG-INFO +276 -0
- sort4circ_dpp-1.3.1/PUBLICATION_BOUNDARY.md +51 -0
- sort4circ_dpp-1.3.1/README.md +242 -0
- sort4circ_dpp-1.3.1/SECURITY.md +87 -0
- sort4circ_dpp-1.3.1/constraints-py311-py312-py313.txt +42 -0
- sort4circ_dpp-1.3.1/docker/Dockerfile +10 -0
- sort4circ_dpp-1.3.1/docker/compose.example.yml +32 -0
- sort4circ_dpp-1.3.1/docs/api.md +313 -0
- sort4circ_dpp-1.3.1/docs/architecture.md +130 -0
- sort4circ_dpp-1.3.1/docs/assets/eu-emblem.svg +36 -0
- sort4circ_dpp-1.3.1/docs/assets/sort4circ-hero-dark.svg +351 -0
- sort4circ_dpp-1.3.1/docs/benchmarks/README.md +238 -0
- sort4circ_dpp-1.3.1/docs/benchmarks/anchor-selftest.json +47 -0
- sort4circ_dpp-1.3.1/docs/benchmarks/anchor-targets.example.json +43 -0
- sort4circ_dpp-1.3.1/docs/benchmarks/loadtest-results.json +284 -0
- sort4circ_dpp-1.3.1/docs/carrier-binding.md +204 -0
- sort4circ_dpp-1.3.1/docs/concepts.md +207 -0
- sort4circ_dpp-1.3.1/docs/conformance.md +263 -0
- sort4circ_dpp-1.3.1/docs/customisation.md +145 -0
- sort4circ_dpp-1.3.1/docs/enterprise-integration.md +215 -0
- sort4circ_dpp-1.3.1/docs/first-dpp.md +299 -0
- sort4circ_dpp-1.3.1/docs/getting-started.md +215 -0
- sort4circ_dpp-1.3.1/docs/glossary.md +48 -0
- sort4circ_dpp-1.3.1/docs/governance.md +28 -0
- sort4circ_dpp-1.3.1/docs/identifiers.md +193 -0
- sort4circ_dpp-1.3.1/docs/index.md +99 -0
- sort4circ_dpp-1.3.1/docs/integrity.md +282 -0
- sort4circ_dpp-1.3.1/docs/interoperability.md +214 -0
- sort4circ_dpp-1.3.1/docs/lifecycle-events.md +209 -0
- sort4circ_dpp-1.3.1/docs/provenance.md +200 -0
- sort4circ_dpp-1.3.1/docs/public-release.md +24 -0
- sort4circ_dpp-1.3.1/docs/regulatory-context.md +78 -0
- sort4circ_dpp-1.3.1/docs/scalability.md +167 -0
- sort4circ_dpp-1.3.1/docs/security.md +228 -0
- sort4circ_dpp-1.3.1/docs/sorting-integration.md +277 -0
- sort4circ_dpp-1.3.1/docs/testing-methodology.md +11 -0
- sort4circ_dpp-1.3.1/docs/traceability.md +242 -0
- sort4circ_dpp-1.3.1/docs/validation.md +195 -0
- sort4circ_dpp-1.3.1/docs/versioning-and-migration.md +111 -0
- sort4circ_dpp-1.3.1/docs/vocabularies.md +174 -0
- sort4circ_dpp-1.3.1/examples/README.md +64 -0
- sort4circ_dpp-1.3.1/examples/fixtures/README.md +40 -0
- sort4circ_dpp-1.3.1/examples/fixtures/invalid-article-class-token.json +44 -0
- sort4circ_dpp-1.3.1/examples/fixtures/invalid-composition-above-one-hundred.json +44 -0
- sort4circ_dpp-1.3.1/examples/fixtures/invalid-confidence-without-scale.json +47 -0
- sort4circ_dpp-1.3.1/examples/fixtures/invalid-fibre-token.json +44 -0
- sort4circ_dpp-1.3.1/examples/fixtures/invalid-item-without-item-id.json +43 -0
- sort4circ_dpp-1.3.1/examples/fixtures/invalid-no-material-observation.json +23 -0
- sort4circ_dpp-1.3.1/examples/fixtures/invalid-observation-without-method.json +43 -0
- sort4circ_dpp-1.3.1/examples/fixtures/invalid-percentage-without-basis.json +43 -0
- sort4circ_dpp-1.3.1/examples/fixtures/invalid-timestamp-without-offset.json +44 -0
- sort4circ_dpp-1.3.1/examples/fixtures/invalid-unknown-carrying-a-value.json +44 -0
- sort4circ_dpp-1.3.1/examples/fixtures/valid-annex-g-garment.json +46 -0
- sort4circ_dpp-1.3.1/examples/fixtures/valid-minimum.json +43 -0
- sort4circ_dpp-1.3.1/examples/fixtures/valid-two-technologies-disagree.json +61 -0
- sort4circ_dpp-1.3.1/examples/fixtures/valid-uncharacterised-garment.json +31 -0
- sort4circ_dpp-1.3.1/examples/fixtures/xml/invalid-observation-without-method.xml +7 -0
- sort4circ_dpp-1.3.1/examples/fixtures/xml/valid-annex-g-garment.xml +28 -0
- sort4circ_dpp-1.3.1/examples/worked_example.py +44 -0
- sort4circ_dpp-1.3.1/public-release-policy.json +307 -0
- sort4circ_dpp-1.3.1/pyproject.toml +67 -0
- sort4circ_dpp-1.3.1/pytest.ini +6 -0
- sort4circ_dpp-1.3.1/setup.cfg +4 -0
- sort4circ_dpp-1.3.1/setup.py +50 -0
- sort4circ_dpp-1.3.1/spec/access-matrix.json +145 -0
- sort4circ_dpp-1.3.1/spec/governance/en18223-deviation-open-template.json +21 -0
- sort4circ_dpp-1.3.1/spec/governance/en18223-deviation.schema.json +70 -0
- sort4circ_dpp-1.3.1/spec/governance/environmental-selection-template.json +30 -0
- sort4circ_dpp-1.3.1/spec/governance/environmental-selection.schema.json +72 -0
- sort4circ_dpp-1.3.1/spec/mappings/README.md +46 -0
- sort4circ_dpp-1.3.1/spec/mappings/dpp-mapping-1.0.0.csv +125 -0
- sort4circ_dpp-1.3.1/spec/mappings/dpp-mapping-1.0.0.json +2370 -0
- sort4circ_dpp-1.3.1/spec/mappings/dpp-mapping-1.0.0.schema.json +93 -0
- sort4circ_dpp-1.3.1/spec/ontology/sort4circ-1.0.1.ttl +372 -0
- sort4circ_dpp-1.3.1/spec/openapi/dpp-api-v1.json +782 -0
- sort4circ_dpp-1.3.1/spec/queries/environmental-values-1.0.0.rq +2 -0
- sort4circ_dpp-1.3.1/spec/queries/expected-results-1.0.0.json +10 -0
- sort4circ_dpp-1.3.1/spec/queries/identity-resolution-1.0.0.rq +7 -0
- sort4circ_dpp-1.3.1/spec/queries/lifecycle-events-1.0.0.rq +2 -0
- sort4circ_dpp-1.3.1/spec/queries/material-divergence-1.0.0.rq +12 -0
- sort4circ_dpp-1.3.1/spec/queries/product-hierarchy-1.0.0.rq +2 -0
- sort4circ_dpp-1.3.1/spec/queries/sorting-results-1.0.0.rq +2 -0
- sort4circ_dpp-1.3.1/spec/reason-codes.json +232 -0
- sort4circ_dpp-1.3.1/spec/schemas/dpp-1.0.0.schema.json +288 -0
- sort4circ_dpp-1.3.1/spec/schemas/dpp-1.0.0.xsd +148 -0
- sort4circ_dpp-1.3.1/spec/vocabularies/article-class.json +93 -0
- sort4circ_dpp-1.3.1/spec/vocabularies/binding-status.json +33 -0
- sort4circ_dpp-1.3.1/spec/vocabularies/carrier-type.json +33 -0
- sort4circ_dpp-1.3.1/spec/vocabularies/colour-family.json +51 -0
- sort4circ_dpp-1.3.1/spec/vocabularies/component-type.json +75 -0
- sort4circ_dpp-1.3.1/spec/vocabularies/condition.json +45 -0
- sort4circ_dpp-1.3.1/spec/vocabularies/confidence-scale.json +21 -0
- sort4circ_dpp-1.3.1/spec/vocabularies/encoding-scheme.json +33 -0
- sort4circ_dpp-1.3.1/spec/vocabularies/event-type.json +87 -0
- sort4circ_dpp-1.3.1/spec/vocabularies/evidence-state.json +45 -0
- sort4circ_dpp-1.3.1/spec/vocabularies/fabric-construction.json +51 -0
- sort4circ_dpp-1.3.1/spec/vocabularies/fibre-type.json +194 -0
- sort4circ_dpp-1.3.1/spec/vocabularies/method.json +65 -0
- sort4circ_dpp-1.3.1/spec/vocabularies/passport-status.json +33 -0
- sort4circ_dpp-1.3.1/spec/vocabularies/percentage-basis.json +21 -0
- sort4circ_dpp-1.3.1/spec/vocabularies/sorting-category.json +69 -0
- sort4circ_dpp-1.3.1/spec/vocabularies/technical-flag.json +93 -0
- sort4circ_dpp-1.3.1/spec/vocabularies/value-status.json +39 -0
- sort4circ_dpp-1.3.1/src/sort4circ_dpp/__init__.py +30 -0
- sort4circ_dpp-1.3.1/src/sort4circ_dpp/_spec/access-matrix.json +145 -0
- sort4circ_dpp-1.3.1/src/sort4circ_dpp/_spec/reason-codes.json +232 -0
- sort4circ_dpp-1.3.1/src/sort4circ_dpp/_spec/schemas/dpp-1.0.0.schema.json +288 -0
- sort4circ_dpp-1.3.1/src/sort4circ_dpp/_spec/schemas/dpp-1.0.0.xsd +148 -0
- sort4circ_dpp-1.3.1/src/sort4circ_dpp/_spec/vocabularies/article-class.json +93 -0
- sort4circ_dpp-1.3.1/src/sort4circ_dpp/_spec/vocabularies/binding-status.json +33 -0
- sort4circ_dpp-1.3.1/src/sort4circ_dpp/_spec/vocabularies/carrier-type.json +33 -0
- sort4circ_dpp-1.3.1/src/sort4circ_dpp/_spec/vocabularies/colour-family.json +51 -0
- sort4circ_dpp-1.3.1/src/sort4circ_dpp/_spec/vocabularies/component-type.json +75 -0
- sort4circ_dpp-1.3.1/src/sort4circ_dpp/_spec/vocabularies/condition.json +45 -0
- sort4circ_dpp-1.3.1/src/sort4circ_dpp/_spec/vocabularies/confidence-scale.json +21 -0
- sort4circ_dpp-1.3.1/src/sort4circ_dpp/_spec/vocabularies/encoding-scheme.json +33 -0
- sort4circ_dpp-1.3.1/src/sort4circ_dpp/_spec/vocabularies/event-type.json +87 -0
- sort4circ_dpp-1.3.1/src/sort4circ_dpp/_spec/vocabularies/evidence-state.json +45 -0
- sort4circ_dpp-1.3.1/src/sort4circ_dpp/_spec/vocabularies/fabric-construction.json +51 -0
- sort4circ_dpp-1.3.1/src/sort4circ_dpp/_spec/vocabularies/fibre-type.json +194 -0
- sort4circ_dpp-1.3.1/src/sort4circ_dpp/_spec/vocabularies/method.json +65 -0
- sort4circ_dpp-1.3.1/src/sort4circ_dpp/_spec/vocabularies/passport-status.json +33 -0
- sort4circ_dpp-1.3.1/src/sort4circ_dpp/_spec/vocabularies/percentage-basis.json +21 -0
- sort4circ_dpp-1.3.1/src/sort4circ_dpp/_spec/vocabularies/sorting-category.json +69 -0
- sort4circ_dpp-1.3.1/src/sort4circ_dpp/_spec/vocabularies/technical-flag.json +93 -0
- sort4circ_dpp-1.3.1/src/sort4circ_dpp/_spec/vocabularies/value-status.json +39 -0
- sort4circ_dpp-1.3.1/src/sort4circ_dpp/access.py +210 -0
- sort4circ_dpp-1.3.1/src/sort4circ_dpp/api.py +435 -0
- sort4circ_dpp-1.3.1/src/sort4circ_dpp/auth.py +38 -0
- sort4circ_dpp-1.3.1/src/sort4circ_dpp/canonical.py +141 -0
- sort4circ_dpp-1.3.1/src/sort4circ_dpp/cli.py +41 -0
- sort4circ_dpp-1.3.1/src/sort4circ_dpp/config.py +76 -0
- sort4circ_dpp-1.3.1/src/sort4circ_dpp/evidence.py +137 -0
- sort4circ_dpp-1.3.1/src/sort4circ_dpp/exchange.py +286 -0
- sort4circ_dpp-1.3.1/src/sort4circ_dpp/gateway/__init__.py +5 -0
- sort4circ_dpp-1.3.1/src/sort4circ_dpp/gateway/readzone.py +89 -0
- sort4circ_dpp-1.3.1/src/sort4circ_dpp/governance.py +77 -0
- sort4circ_dpp-1.3.1/src/sort4circ_dpp/index.py +146 -0
- sort4circ_dpp-1.3.1/src/sort4circ_dpp/ledger/__init__.py +11 -0
- sort4circ_dpp-1.3.1/src/sort4circ_dpp/ledger/base.py +78 -0
- sort4circ_dpp-1.3.1/src/sort4circ_dpp/ledger/besu.py +136 -0
- sort4circ_dpp-1.3.1/src/sort4circ_dpp/ledger/memory.py +77 -0
- sort4circ_dpp-1.3.1/src/sort4circ_dpp/mapping.py +177 -0
- sort4circ_dpp-1.3.1/src/sort4circ_dpp/public_summary.py +53 -0
- sort4circ_dpp-1.3.1/src/sort4circ_dpp/py.typed +0 -0
- sort4circ_dpp-1.3.1/src/sort4circ_dpp/reasons.py +112 -0
- sort4circ_dpp-1.3.1/src/sort4circ_dpp/store.py +365 -0
- sort4circ_dpp-1.3.1/src/sort4circ_dpp/synthetic.py +154 -0
- sort4circ_dpp-1.3.1/src/sort4circ_dpp/validation.py +112 -0
- sort4circ_dpp-1.3.1/src/sort4circ_dpp/vocab.py +151 -0
- sort4circ_dpp-1.3.1/src/sort4circ_dpp.egg-info/SOURCES.txt +201 -0
- sort4circ_dpp-1.3.1/tests/conformance/__init__.py +0 -0
- sort4circ_dpp-1.3.1/tests/conformance/test_checklist.py +484 -0
- sort4circ_dpp-1.3.1/tests/conftest.py +71 -0
- sort4circ_dpp-1.3.1/tests/test_access.py +140 -0
- sort4circ_dpp-1.3.1/tests/test_api_contract.py +348 -0
- sort4circ_dpp-1.3.1/tests/test_besu.py +39 -0
- sort4circ_dpp-1.3.1/tests/test_canonical.py +169 -0
- sort4circ_dpp-1.3.1/tests/test_evidence.py +107 -0
- sort4circ_dpp-1.3.1/tests/test_exchange.py +161 -0
- sort4circ_dpp-1.3.1/tests/test_governance.py +100 -0
- sort4circ_dpp-1.3.1/tests/test_index_staleness.py +129 -0
- sort4circ_dpp-1.3.1/tests/test_ledger_contract.py +78 -0
- sort4circ_dpp-1.3.1/tests/test_licensing.py +83 -0
- sort4circ_dpp-1.3.1/tests/test_manifest.py +8 -0
- sort4circ_dpp-1.3.1/tests/test_mapping.py +359 -0
- sort4circ_dpp-1.3.1/tests/test_packaged_resources.py +73 -0
- sort4circ_dpp-1.3.1/tests/test_public_release.py +200 -0
- sort4circ_dpp-1.3.1/tests/test_public_summary.py +28 -0
- sort4circ_dpp-1.3.1/tests/test_readzone.py +85 -0
- sort4circ_dpp-1.3.1/tests/test_repository_alignment.py +40 -0
- sort4circ_dpp-1.3.1/tests/test_store.py +123 -0
- sort4circ_dpp-1.3.1/tests/test_synthetic.py +31 -0
- sort4circ_dpp-1.3.1/tests/test_validation.py +67 -0
- sort4circ_dpp-1.3.1/tests/test_vocab.py +62 -0
- sort4circ_dpp-1.3.1/tools/anchor_bench.py +39 -0
- sort4circ_dpp-1.3.1/tools/conformance_report.py +75 -0
- sort4circ_dpp-1.3.1/tools/gen_mapping_csv.py +52 -0
- sort4circ_dpp-1.3.1/tools/gen_openapi.py +50 -0
- sort4circ_dpp-1.3.1/tools/loadtest.py +65 -0
- sort4circ_dpp-1.3.1/tools/validate_fixtures.py +58 -0
- sort4circ_dpp-1.3.1/tools/verify_public_release.py +380 -0
- sort4circ_dpp-1.3.1/verify_files.py +22 -0
|
@@ -0,0 +1,133 @@
|
|
|
1
|
+
**
|
|
2
|
+
!docker
|
|
3
|
+
docker/**
|
|
4
|
+
!spec
|
|
5
|
+
spec/**
|
|
6
|
+
!spec/governance
|
|
7
|
+
spec/governance/**
|
|
8
|
+
!spec/mappings
|
|
9
|
+
spec/mappings/**
|
|
10
|
+
!spec/ontology
|
|
11
|
+
spec/ontology/**
|
|
12
|
+
!spec/openapi
|
|
13
|
+
spec/openapi/**
|
|
14
|
+
!spec/queries
|
|
15
|
+
spec/queries/**
|
|
16
|
+
!spec/schemas
|
|
17
|
+
spec/schemas/**
|
|
18
|
+
!spec/vocabularies
|
|
19
|
+
spec/vocabularies/**
|
|
20
|
+
!src
|
|
21
|
+
src/**
|
|
22
|
+
!src/sort4circ_dpp
|
|
23
|
+
src/sort4circ_dpp/**
|
|
24
|
+
!src/sort4circ_dpp/_spec
|
|
25
|
+
src/sort4circ_dpp/_spec/**
|
|
26
|
+
!src/sort4circ_dpp/_spec/schemas
|
|
27
|
+
src/sort4circ_dpp/_spec/schemas/**
|
|
28
|
+
!src/sort4circ_dpp/_spec/vocabularies
|
|
29
|
+
src/sort4circ_dpp/_spec/vocabularies/**
|
|
30
|
+
!src/sort4circ_dpp/gateway
|
|
31
|
+
src/sort4circ_dpp/gateway/**
|
|
32
|
+
!src/sort4circ_dpp/ledger
|
|
33
|
+
src/sort4circ_dpp/ledger/**
|
|
34
|
+
!tools
|
|
35
|
+
tools/**
|
|
36
|
+
!.dockerignore
|
|
37
|
+
!LICENSE
|
|
38
|
+
!LICENSE-DOCS
|
|
39
|
+
!LICENSING.md
|
|
40
|
+
!MANIFEST.in
|
|
41
|
+
!README.md
|
|
42
|
+
!docker/Dockerfile
|
|
43
|
+
!docker/compose.example.yml
|
|
44
|
+
!public-release-policy.json
|
|
45
|
+
!pyproject.toml
|
|
46
|
+
!setup.py
|
|
47
|
+
!spec/access-matrix.json
|
|
48
|
+
!spec/governance/en18223-deviation-open-template.json
|
|
49
|
+
!spec/governance/en18223-deviation.schema.json
|
|
50
|
+
!spec/governance/environmental-selection-template.json
|
|
51
|
+
!spec/governance/environmental-selection.schema.json
|
|
52
|
+
!spec/mappings/README.md
|
|
53
|
+
!spec/mappings/dpp-mapping-1.0.0.csv
|
|
54
|
+
!spec/mappings/dpp-mapping-1.0.0.json
|
|
55
|
+
!spec/mappings/dpp-mapping-1.0.0.schema.json
|
|
56
|
+
!spec/ontology/sort4circ-1.0.1.ttl
|
|
57
|
+
!spec/openapi/dpp-api-v1.json
|
|
58
|
+
!spec/queries/environmental-values-1.0.0.rq
|
|
59
|
+
!spec/queries/expected-results-1.0.0.json
|
|
60
|
+
!spec/queries/identity-resolution-1.0.0.rq
|
|
61
|
+
!spec/queries/lifecycle-events-1.0.0.rq
|
|
62
|
+
!spec/queries/material-divergence-1.0.0.rq
|
|
63
|
+
!spec/queries/product-hierarchy-1.0.0.rq
|
|
64
|
+
!spec/queries/sorting-results-1.0.0.rq
|
|
65
|
+
!spec/reason-codes.json
|
|
66
|
+
!spec/schemas/dpp-1.0.0.schema.json
|
|
67
|
+
!spec/schemas/dpp-1.0.0.xsd
|
|
68
|
+
!spec/vocabularies/article-class.json
|
|
69
|
+
!spec/vocabularies/binding-status.json
|
|
70
|
+
!spec/vocabularies/carrier-type.json
|
|
71
|
+
!spec/vocabularies/colour-family.json
|
|
72
|
+
!spec/vocabularies/component-type.json
|
|
73
|
+
!spec/vocabularies/condition.json
|
|
74
|
+
!spec/vocabularies/confidence-scale.json
|
|
75
|
+
!spec/vocabularies/encoding-scheme.json
|
|
76
|
+
!spec/vocabularies/event-type.json
|
|
77
|
+
!spec/vocabularies/evidence-state.json
|
|
78
|
+
!spec/vocabularies/fabric-construction.json
|
|
79
|
+
!spec/vocabularies/fibre-type.json
|
|
80
|
+
!spec/vocabularies/method.json
|
|
81
|
+
!spec/vocabularies/passport-status.json
|
|
82
|
+
!spec/vocabularies/percentage-basis.json
|
|
83
|
+
!spec/vocabularies/sorting-category.json
|
|
84
|
+
!spec/vocabularies/technical-flag.json
|
|
85
|
+
!spec/vocabularies/value-status.json
|
|
86
|
+
!src/sort4circ_dpp/__init__.py
|
|
87
|
+
!src/sort4circ_dpp/_spec/access-matrix.json
|
|
88
|
+
!src/sort4circ_dpp/_spec/reason-codes.json
|
|
89
|
+
!src/sort4circ_dpp/_spec/schemas/dpp-1.0.0.schema.json
|
|
90
|
+
!src/sort4circ_dpp/_spec/schemas/dpp-1.0.0.xsd
|
|
91
|
+
!src/sort4circ_dpp/_spec/vocabularies/article-class.json
|
|
92
|
+
!src/sort4circ_dpp/_spec/vocabularies/binding-status.json
|
|
93
|
+
!src/sort4circ_dpp/_spec/vocabularies/carrier-type.json
|
|
94
|
+
!src/sort4circ_dpp/_spec/vocabularies/colour-family.json
|
|
95
|
+
!src/sort4circ_dpp/_spec/vocabularies/component-type.json
|
|
96
|
+
!src/sort4circ_dpp/_spec/vocabularies/condition.json
|
|
97
|
+
!src/sort4circ_dpp/_spec/vocabularies/confidence-scale.json
|
|
98
|
+
!src/sort4circ_dpp/_spec/vocabularies/encoding-scheme.json
|
|
99
|
+
!src/sort4circ_dpp/_spec/vocabularies/event-type.json
|
|
100
|
+
!src/sort4circ_dpp/_spec/vocabularies/evidence-state.json
|
|
101
|
+
!src/sort4circ_dpp/_spec/vocabularies/fabric-construction.json
|
|
102
|
+
!src/sort4circ_dpp/_spec/vocabularies/fibre-type.json
|
|
103
|
+
!src/sort4circ_dpp/_spec/vocabularies/method.json
|
|
104
|
+
!src/sort4circ_dpp/_spec/vocabularies/passport-status.json
|
|
105
|
+
!src/sort4circ_dpp/_spec/vocabularies/percentage-basis.json
|
|
106
|
+
!src/sort4circ_dpp/_spec/vocabularies/sorting-category.json
|
|
107
|
+
!src/sort4circ_dpp/_spec/vocabularies/technical-flag.json
|
|
108
|
+
!src/sort4circ_dpp/_spec/vocabularies/value-status.json
|
|
109
|
+
!src/sort4circ_dpp/access.py
|
|
110
|
+
!src/sort4circ_dpp/api.py
|
|
111
|
+
!src/sort4circ_dpp/auth.py
|
|
112
|
+
!src/sort4circ_dpp/canonical.py
|
|
113
|
+
!src/sort4circ_dpp/cli.py
|
|
114
|
+
!src/sort4circ_dpp/config.py
|
|
115
|
+
!src/sort4circ_dpp/evidence.py
|
|
116
|
+
!src/sort4circ_dpp/exchange.py
|
|
117
|
+
!src/sort4circ_dpp/gateway/__init__.py
|
|
118
|
+
!src/sort4circ_dpp/gateway/readzone.py
|
|
119
|
+
!src/sort4circ_dpp/governance.py
|
|
120
|
+
!src/sort4circ_dpp/index.py
|
|
121
|
+
!src/sort4circ_dpp/ledger/__init__.py
|
|
122
|
+
!src/sort4circ_dpp/ledger/base.py
|
|
123
|
+
!src/sort4circ_dpp/ledger/besu.py
|
|
124
|
+
!src/sort4circ_dpp/ledger/memory.py
|
|
125
|
+
!src/sort4circ_dpp/mapping.py
|
|
126
|
+
!src/sort4circ_dpp/public_summary.py
|
|
127
|
+
!src/sort4circ_dpp/py.typed
|
|
128
|
+
!src/sort4circ_dpp/reasons.py
|
|
129
|
+
!src/sort4circ_dpp/store.py
|
|
130
|
+
!src/sort4circ_dpp/synthetic.py
|
|
131
|
+
!src/sort4circ_dpp/validation.py
|
|
132
|
+
!src/sort4circ_dpp/vocab.py
|
|
133
|
+
!tools/verify_public_release.py
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
root = true
|
|
2
|
+
|
|
3
|
+
[*]
|
|
4
|
+
charset = utf-8
|
|
5
|
+
end_of_line = lf
|
|
6
|
+
insert_final_newline = true
|
|
7
|
+
trim_trailing_whitespace = true
|
|
8
|
+
indent_style = space
|
|
9
|
+
|
|
10
|
+
[*.py]
|
|
11
|
+
indent_size = 4
|
|
12
|
+
|
|
13
|
+
[*.{json,yml,yaml,md,ttl}]
|
|
14
|
+
indent_size = 2
|
|
15
|
+
|
|
16
|
+
[Makefile]
|
|
17
|
+
indent_style = tab
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
* text=auto eol=lf
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
# Review ownership for this repository.
|
|
2
|
+
#
|
|
3
|
+
# GitHub requests a review from the owning team on any pull request touching a
|
|
4
|
+
# matching path. These entries only gate a merge once branch protection on the
|
|
5
|
+
# default branch requires review from code owners, which is a repository setting
|
|
6
|
+
# and not something this file can enable.
|
|
7
|
+
#
|
|
8
|
+
# The team must exist in the Constructor-Uni organisation and hold write access on
|
|
9
|
+
# this repository. GitHub ignores an entry naming a team that does not exist, or
|
|
10
|
+
# that lacks write access, without reporting an error.
|
|
11
|
+
|
|
12
|
+
* @Constructor-Uni/sort4circ-wp4
|
|
13
|
+
|
|
14
|
+
# Specification assets, the publication allowlist, the licence coverage map, and the
|
|
15
|
+
# workflows that build and publish releases. Later rules win in CODEOWNERS, so these
|
|
16
|
+
# are listed after the global rule to keep them authoritative for their paths.
|
|
17
|
+
spec/** @Constructor-Uni/sort4circ-wp4
|
|
18
|
+
public-release-policy.json @Constructor-Uni/sort4circ-wp4
|
|
19
|
+
LICENSING.md @Constructor-Uni/sort4circ-wp4
|
|
20
|
+
.github/workflows/** @Constructor-Uni/sort4circ-wp4
|
|
@@ -0,0 +1,65 @@
|
|
|
1
|
+
name: Non-sensitive bug report
|
|
2
|
+
description: Report a non-sensitive bug in the public DPP reference implementation.
|
|
3
|
+
labels:
|
|
4
|
+
- bug
|
|
5
|
+
body:
|
|
6
|
+
- type: markdown
|
|
7
|
+
attributes:
|
|
8
|
+
value: 'Public GitHub issues are only for non-sensitive bugs and feature requests.
|
|
9
|
+
|
|
10
|
+
Do not post security vulnerabilities or suspected accidental project-data exposure here.
|
|
11
|
+
|
|
12
|
+
Use GitHub Private Vulnerability Reporting and follow SECURITY.md. If that option is
|
|
13
|
+
|
|
14
|
+
unavailable, keep the report private; do not use a public issue as a fallback.
|
|
15
|
+
|
|
16
|
+
|
|
17
|
+
Use independently synthetic reproductions only, including in private reports.
|
|
18
|
+
|
|
19
|
+
Do not submit real credentials, private configuration, partner data, project data,
|
|
20
|
+
|
|
21
|
+
pilot data or internal endpoints in payloads, attachments, screenshots, logs or comments.
|
|
22
|
+
|
|
23
|
+
Describe suspected exposure privately without reproducing the exposed material.
|
|
24
|
+
|
|
25
|
+
|
|
26
|
+
Synthetic example. Not SORT4CIRC project data.'
|
|
27
|
+
- type: textarea
|
|
28
|
+
id: expected
|
|
29
|
+
attributes:
|
|
30
|
+
label: What the specification requires
|
|
31
|
+
description: Name a public specification artefact, field, API route or reason code.
|
|
32
|
+
validations:
|
|
33
|
+
required: true
|
|
34
|
+
- type: textarea
|
|
35
|
+
id: actual
|
|
36
|
+
attributes:
|
|
37
|
+
label: What happens instead
|
|
38
|
+
validations:
|
|
39
|
+
required: true
|
|
40
|
+
- type: textarea
|
|
41
|
+
id: reproduce
|
|
42
|
+
attributes:
|
|
43
|
+
label: Smallest synthetic reproduction
|
|
44
|
+
description: Use fictional inputs only; never attach operational logs or private data.
|
|
45
|
+
render: shell
|
|
46
|
+
validations:
|
|
47
|
+
required: true
|
|
48
|
+
- type: input
|
|
49
|
+
id: version
|
|
50
|
+
attributes:
|
|
51
|
+
label: Public release version
|
|
52
|
+
description: Name a public release version; do not include private references or endpoints.
|
|
53
|
+
validations:
|
|
54
|
+
required: true
|
|
55
|
+
- type: checkboxes
|
|
56
|
+
id: public_synthetic_confirmation
|
|
57
|
+
attributes:
|
|
58
|
+
label: Public issue confirmation
|
|
59
|
+
options:
|
|
60
|
+
- label: This is a non-sensitive bug or feature request, not a security or suspected data-exposure
|
|
61
|
+
report.
|
|
62
|
+
required: true
|
|
63
|
+
- label: All reproduction material is synthetic and excludes real credentials, private configuration,
|
|
64
|
+
partner/project/pilot data and internal endpoints.
|
|
65
|
+
required: true
|
|
@@ -0,0 +1,69 @@
|
|
|
1
|
+
name: Specification bug or feature request
|
|
2
|
+
description: Report a non-sensitive public-profile defect or propose a feature.
|
|
3
|
+
labels:
|
|
4
|
+
- specification
|
|
5
|
+
body:
|
|
6
|
+
- type: markdown
|
|
7
|
+
attributes:
|
|
8
|
+
value: 'Public GitHub issues are only for non-sensitive bugs and feature requests.
|
|
9
|
+
|
|
10
|
+
Do not post security vulnerabilities or suspected accidental project-data exposure here.
|
|
11
|
+
|
|
12
|
+
Use GitHub Private Vulnerability Reporting and follow SECURITY.md. If that option is
|
|
13
|
+
|
|
14
|
+
unavailable, keep the report private; do not use a public issue as a fallback.
|
|
15
|
+
|
|
16
|
+
|
|
17
|
+
Use independently synthetic reproductions only, including in private reports.
|
|
18
|
+
|
|
19
|
+
Do not submit real credentials, private configuration, partner data, project data,
|
|
20
|
+
|
|
21
|
+
pilot data or internal endpoints in payloads, attachments, screenshots, logs or comments.
|
|
22
|
+
|
|
23
|
+
Describe suspected exposure privately without reproducing the exposed material.
|
|
24
|
+
|
|
25
|
+
|
|
26
|
+
Synthetic example. Not SORT4CIRC project data.'
|
|
27
|
+
- type: dropdown
|
|
28
|
+
id: kind
|
|
29
|
+
attributes:
|
|
30
|
+
label: Kind
|
|
31
|
+
options:
|
|
32
|
+
- 'Bug: the documentation or rule is unclear'
|
|
33
|
+
- 'Bug: a public-profile rule cannot be implemented as written'
|
|
34
|
+
- 'Bug: an implemented rule has incorrect behaviour'
|
|
35
|
+
- 'Feature: a public-profile capability is missing'
|
|
36
|
+
- 'Feature: a new controlled value is needed'
|
|
37
|
+
validations:
|
|
38
|
+
required: true
|
|
39
|
+
- type: textarea
|
|
40
|
+
id: artefact
|
|
41
|
+
attributes:
|
|
42
|
+
label: Which artefact and clause
|
|
43
|
+
validations:
|
|
44
|
+
required: true
|
|
45
|
+
- type: textarea
|
|
46
|
+
id: consequence
|
|
47
|
+
attributes:
|
|
48
|
+
label: What breaks if it stays as it is
|
|
49
|
+
description: Give a concrete case with independently synthetic data only.
|
|
50
|
+
validations:
|
|
51
|
+
required: true
|
|
52
|
+
- type: textarea
|
|
53
|
+
id: migration
|
|
54
|
+
attributes:
|
|
55
|
+
label: What happens to records already written under the current rule
|
|
56
|
+
description: Describe migration with fictional records only; do not provide real datasets.
|
|
57
|
+
validations:
|
|
58
|
+
required: true
|
|
59
|
+
- type: checkboxes
|
|
60
|
+
id: public_synthetic_confirmation
|
|
61
|
+
attributes:
|
|
62
|
+
label: Public issue confirmation
|
|
63
|
+
options:
|
|
64
|
+
- label: This is a non-sensitive bug or feature request, not a security or suspected data-exposure
|
|
65
|
+
report.
|
|
66
|
+
required: true
|
|
67
|
+
- label: All reproduction material is synthetic and excludes real credentials, private configuration,
|
|
68
|
+
partner/project/pilot data and internal endpoints.
|
|
69
|
+
required: true
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
## Public contribution only
|
|
2
|
+
|
|
3
|
+
Use this template only for non-sensitive changes. Security vulnerabilities and suspected accidental project-data exposure must not be posted in public issues or pull requests. Use GitHub Private Vulnerability Reporting and follow SECURITY.md.
|
|
4
|
+
|
|
5
|
+
All reproductions must be independently synthetic, including private reports. Do not submit real credentials, private configuration, partner data, project data, pilot data or internal endpoints in changes, attachments, screenshots, logs or comments. Describe suspected exposure privately without reproducing the exposed material.
|
|
6
|
+
|
|
7
|
+
## Public-profile change
|
|
8
|
+
|
|
9
|
+
Describe the problem, resulting behaviour and any version/migration impact using synthetic examples only.
|
|
10
|
+
|
|
11
|
+
## Validation
|
|
12
|
+
|
|
13
|
+
List the tests actually run. Confirm fixture, mapping/OpenAPI and release-policy checks where relevant. Do not attach raw operational output.
|
|
14
|
+
|
|
15
|
+
## Publication boundary
|
|
16
|
+
|
|
17
|
+
- [ ] This pull request contains no security vulnerability report or suspected project-data exposure report.
|
|
18
|
+
- [ ] Reproductions and examples are independently synthetic.
|
|
19
|
+
- [ ] No real credentials, private configuration, partner data, project data, pilot data or internal endpoints are included.
|
|
20
|
+
- [ ] No personal data, private reviews, raw operational logs or historical evidence are attached.
|
|
21
|
+
- [ ] New public files were deliberately reviewed for the explicit allowlist.
|
|
22
|
+
- [ ] Claims describe public-profile conformance only.
|
|
23
|
+
- [ ] The component licences (Apache-2.0 software, CC BY 4.0 docs/spec) and third-party notices are respected; new public files have explicit coverage under LICENSING.md.
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
version: 2
|
|
2
|
+
|
|
3
|
+
updates:
|
|
4
|
+
# Runtime and development Python dependencies. Version bumps must keep the pinned
|
|
5
|
+
# constraints file in step: see constraints-py311-py312-py313.txt.
|
|
6
|
+
- package-ecosystem: pip
|
|
7
|
+
directory: /
|
|
8
|
+
schedule:
|
|
9
|
+
interval: weekly
|
|
10
|
+
open-pull-requests-limit: 5
|
|
11
|
+
labels:
|
|
12
|
+
- dependencies
|
|
13
|
+
commit-message:
|
|
14
|
+
prefix: "deps"
|
|
15
|
+
|
|
16
|
+
# Workflow actions are pinned to commit SHAs. Dependabot updates the SHA and the
|
|
17
|
+
# trailing version comment together, which keeps the pinning intact.
|
|
18
|
+
- package-ecosystem: github-actions
|
|
19
|
+
directory: /
|
|
20
|
+
schedule:
|
|
21
|
+
interval: weekly
|
|
22
|
+
open-pull-requests-limit: 5
|
|
23
|
+
labels:
|
|
24
|
+
- dependencies
|
|
25
|
+
- ci
|
|
26
|
+
commit-message:
|
|
27
|
+
prefix: "ci"
|
|
@@ -0,0 +1,255 @@
|
|
|
1
|
+
name: CI
|
|
2
|
+
|
|
3
|
+
on:
|
|
4
|
+
push:
|
|
5
|
+
branches: [main]
|
|
6
|
+
pull_request:
|
|
7
|
+
workflow_dispatch:
|
|
8
|
+
|
|
9
|
+
permissions:
|
|
10
|
+
contents: read
|
|
11
|
+
|
|
12
|
+
jobs:
|
|
13
|
+
test:
|
|
14
|
+
name: Test on Python ${{ matrix.python-version }}
|
|
15
|
+
runs-on: ubuntu-latest
|
|
16
|
+
strategy:
|
|
17
|
+
fail-fast: false
|
|
18
|
+
matrix:
|
|
19
|
+
python-version: ["3.11", "3.12", "3.13"]
|
|
20
|
+
steps:
|
|
21
|
+
- uses: actions/checkout@11d5960a326750d5838078e36cf38b85af677262 # v4.4.0
|
|
22
|
+
|
|
23
|
+
- uses: actions/setup-python@a26af69be951a213d495a4c3e4e4022e16d87065 # v5.6.0
|
|
24
|
+
with:
|
|
25
|
+
python-version: ${{ matrix.python-version }}
|
|
26
|
+
cache: pip
|
|
27
|
+
|
|
28
|
+
- name: Install
|
|
29
|
+
run: python -m pip install -c constraints-py311-py312-py313.txt -e ".[dev]"
|
|
30
|
+
|
|
31
|
+
- name: Lint
|
|
32
|
+
run: ruff check src tests tools examples
|
|
33
|
+
|
|
34
|
+
- name: Test
|
|
35
|
+
run: python -m pytest -q
|
|
36
|
+
|
|
37
|
+
- name: Validate fixtures
|
|
38
|
+
run: python tools/validate_fixtures.py
|
|
39
|
+
|
|
40
|
+
- name: Worked example
|
|
41
|
+
run: python examples/worked_example.py
|
|
42
|
+
|
|
43
|
+
- name: Mapping CSV is up to date
|
|
44
|
+
run: python tools/gen_mapping_csv.py --check
|
|
45
|
+
|
|
46
|
+
- name: Public file policy
|
|
47
|
+
run: python tools/verify_public_release.py --files-only
|
|
48
|
+
|
|
49
|
+
- name: Public manifest
|
|
50
|
+
run: python verify_files.py
|
|
51
|
+
|
|
52
|
+
spec:
|
|
53
|
+
name: Specification artefacts
|
|
54
|
+
runs-on: ubuntu-latest
|
|
55
|
+
steps:
|
|
56
|
+
- uses: actions/checkout@11d5960a326750d5838078e36cf38b85af677262 # v4.4.0
|
|
57
|
+
|
|
58
|
+
- uses: actions/setup-python@a26af69be951a213d495a4c3e4e4022e16d87065 # v5.6.0
|
|
59
|
+
with:
|
|
60
|
+
python-version: "3.12"
|
|
61
|
+
cache: pip
|
|
62
|
+
|
|
63
|
+
- name: Install
|
|
64
|
+
run: pip install -c constraints-py311-py312-py313.txt -e ".[dev]"
|
|
65
|
+
|
|
66
|
+
- name: Ontology parses without error
|
|
67
|
+
run: |
|
|
68
|
+
python - <<'PY'
|
|
69
|
+
from rdflib import Graph
|
|
70
|
+
g = Graph().parse("spec/ontology/sort4circ-1.0.1.ttl", format="turtle")
|
|
71
|
+
print(f"{len(g)} triples")
|
|
72
|
+
assert len(g) > 200, "the ontology lost content"
|
|
73
|
+
PY
|
|
74
|
+
|
|
75
|
+
- name: Every JSON artefact parses
|
|
76
|
+
run: |
|
|
77
|
+
python - <<'PY'
|
|
78
|
+
import json, pathlib
|
|
79
|
+
for path in sorted(pathlib.Path("spec").rglob("*.json")):
|
|
80
|
+
json.loads(path.read_text(encoding="utf-8"))
|
|
81
|
+
print("ok", path)
|
|
82
|
+
PY
|
|
83
|
+
|
|
84
|
+
- name: The OpenAPI contract is up to date
|
|
85
|
+
run: |
|
|
86
|
+
python tools/gen_openapi.py
|
|
87
|
+
git diff --exit-code spec/openapi/ || {
|
|
88
|
+
echo "::error::spec/openapi is stale. Run 'make openapi' and commit the result."
|
|
89
|
+
exit 1
|
|
90
|
+
}
|
|
91
|
+
|
|
92
|
+
conformance:
|
|
93
|
+
name: Conformance report
|
|
94
|
+
runs-on: ubuntu-latest
|
|
95
|
+
steps:
|
|
96
|
+
- uses: actions/checkout@11d5960a326750d5838078e36cf38b85af677262 # v4.4.0
|
|
97
|
+
- uses: actions/setup-python@a26af69be951a213d495a4c3e4e4022e16d87065 # v5.6.0
|
|
98
|
+
with:
|
|
99
|
+
python-version: "3.12"
|
|
100
|
+
cache: pip
|
|
101
|
+
- run: pip install -c constraints-py311-py312-py313.txt -e ".[dev]"
|
|
102
|
+
- run: python tools/conformance_report.py --output conformance-report.json
|
|
103
|
+
- uses: actions/upload-artifact@ea165f8d65b6e75b540449e92b4886f43607fa02 # v4.6.2
|
|
104
|
+
with:
|
|
105
|
+
name: conformance-report
|
|
106
|
+
path: conformance-report.json
|
|
107
|
+
if-no-files-found: error
|
|
108
|
+
|
|
109
|
+
wheel-smoke:
|
|
110
|
+
name: Installed wheel smoke
|
|
111
|
+
runs-on: ubuntu-latest
|
|
112
|
+
steps:
|
|
113
|
+
- uses: actions/checkout@11d5960a326750d5838078e36cf38b85af677262 # v4.4.0
|
|
114
|
+
|
|
115
|
+
- uses: actions/setup-python@a26af69be951a213d495a4c3e4e4022e16d87065 # v5.6.0
|
|
116
|
+
with:
|
|
117
|
+
python-version: "3.12"
|
|
118
|
+
cache: pip
|
|
119
|
+
|
|
120
|
+
- name: Build wheel outside the checkout
|
|
121
|
+
run: |
|
|
122
|
+
set -euo pipefail
|
|
123
|
+
mkdir -p "$RUNNER_TEMP/s4c-wheel"
|
|
124
|
+
mkdir -p "$RUNNER_TEMP/s4c-wheel-smoke"
|
|
125
|
+
python -m pip wheel . --no-deps --wheel-dir "$RUNNER_TEMP/s4c-wheel"
|
|
126
|
+
|
|
127
|
+
- name: Inspect packaged runtime resources
|
|
128
|
+
run: |
|
|
129
|
+
python - <<'PY'
|
|
130
|
+
import os
|
|
131
|
+
import pathlib
|
|
132
|
+
import zipfile
|
|
133
|
+
|
|
134
|
+
root = pathlib.Path.cwd()
|
|
135
|
+
wheel = next((pathlib.Path(os.environ["RUNNER_TEMP"]) / "s4c-wheel").glob("*.whl"))
|
|
136
|
+
expected = {
|
|
137
|
+
"access-matrix.json",
|
|
138
|
+
"reason-codes.json",
|
|
139
|
+
"schemas/dpp-1.0.0.schema.json",
|
|
140
|
+
"schemas/dpp-1.0.0.xsd",
|
|
141
|
+
*(path.relative_to(root / "spec").as_posix()
|
|
142
|
+
for path in (root / "spec" / "vocabularies").glob("*.json")),
|
|
143
|
+
}
|
|
144
|
+
with zipfile.ZipFile(wheel) as archive:
|
|
145
|
+
prefix = "sort4circ_dpp/_spec/"
|
|
146
|
+
actual = {
|
|
147
|
+
name.removeprefix(prefix)
|
|
148
|
+
for name in archive.namelist()
|
|
149
|
+
if name.startswith(prefix) and not name.endswith("/")
|
|
150
|
+
}
|
|
151
|
+
assert actual == expected, (sorted(actual), sorted(expected))
|
|
152
|
+
print(f"verified {len(actual)} runtime resources")
|
|
153
|
+
PY
|
|
154
|
+
|
|
155
|
+
- name: Install wheel in a clean environment
|
|
156
|
+
run: |
|
|
157
|
+
set -euo pipefail
|
|
158
|
+
python -m venv "$RUNNER_TEMP/s4c-wheel-venv"
|
|
159
|
+
"$RUNNER_TEMP/s4c-wheel-venv/bin/python" -m pip install \
|
|
160
|
+
-c "$GITHUB_WORKSPACE/constraints-py311-py312-py313.txt" \
|
|
161
|
+
"$(find "$RUNNER_TEMP/s4c-wheel" -name '*.whl' -print -quit)"
|
|
162
|
+
|
|
163
|
+
- name: Exercise installed wheel outside the checkout
|
|
164
|
+
env:
|
|
165
|
+
WHEEL_VENV: ${{ runner.temp }}/s4c-wheel-venv
|
|
166
|
+
working-directory: ${{ runner.temp }}/s4c-wheel-smoke
|
|
167
|
+
run: |
|
|
168
|
+
set -euo pipefail
|
|
169
|
+
test ! -e spec
|
|
170
|
+
"$WHEEL_VENV/bin/python" - <<'PY'
|
|
171
|
+
import asyncio
|
|
172
|
+
import os
|
|
173
|
+
import pathlib
|
|
174
|
+
import sys
|
|
175
|
+
|
|
176
|
+
import sort4circ_dpp
|
|
177
|
+
from fastapi import FastAPI
|
|
178
|
+
from sort4circ_dpp.api import create_app
|
|
179
|
+
from sort4circ_dpp.reasons import released_codes
|
|
180
|
+
from sort4circ_dpp.validation import schema, validate_schema
|
|
181
|
+
from sort4circ_dpp.vocab import load
|
|
182
|
+
|
|
183
|
+
origin = pathlib.Path(sort4circ_dpp.__file__).resolve()
|
|
184
|
+
prefix = pathlib.Path(sys.prefix).resolve()
|
|
185
|
+
assert origin.is_relative_to(prefix), (origin, prefix)
|
|
186
|
+
assert released_codes()
|
|
187
|
+
assert load("article-class").tokens
|
|
188
|
+
assert schema()["$schema"]
|
|
189
|
+
try:
|
|
190
|
+
validate_schema({})
|
|
191
|
+
except Exception:
|
|
192
|
+
pass
|
|
193
|
+
else:
|
|
194
|
+
raise AssertionError("an empty payload unexpectedly passed schema validation")
|
|
195
|
+
|
|
196
|
+
app = create_app()
|
|
197
|
+
assert isinstance(app, FastAPI)
|
|
198
|
+
messages = []
|
|
199
|
+
|
|
200
|
+
async def receive():
|
|
201
|
+
return {"type": "http.request", "body": b"", "more_body": False}
|
|
202
|
+
|
|
203
|
+
async def send(message):
|
|
204
|
+
messages.append(message)
|
|
205
|
+
|
|
206
|
+
scope = {
|
|
207
|
+
"type": "http",
|
|
208
|
+
"asgi": {"version": "3.0", "spec_version": "2.0"},
|
|
209
|
+
"method": "GET",
|
|
210
|
+
"path": "/health",
|
|
211
|
+
"raw_path": b"/health",
|
|
212
|
+
"query_string": b"",
|
|
213
|
+
"headers": [],
|
|
214
|
+
"http_version": "1.1",
|
|
215
|
+
"client": ("127.0.0.1", 1),
|
|
216
|
+
"server": ("test", 80),
|
|
217
|
+
"scheme": "http",
|
|
218
|
+
"root_path": "",
|
|
219
|
+
}
|
|
220
|
+
|
|
221
|
+
asyncio.run(app(scope, receive, send))
|
|
222
|
+
response = next(message for message in messages if message["type"] == "http.response.start")
|
|
223
|
+
assert response["status"] == 200
|
|
224
|
+
print("installed wheel smoke passed")
|
|
225
|
+
PY
|
|
226
|
+
|
|
227
|
+
- name: Clean temporary wheel resources
|
|
228
|
+
if: always()
|
|
229
|
+
run: |
|
|
230
|
+
rm -rf "$RUNNER_TEMP/s4c-wheel" \
|
|
231
|
+
"$RUNNER_TEMP/s4c-wheel-venv" \
|
|
232
|
+
"$RUNNER_TEMP/s4c-wheel-smoke"
|
|
233
|
+
|
|
234
|
+
package:
|
|
235
|
+
name: Public export and distributions
|
|
236
|
+
runs-on: ubuntu-latest
|
|
237
|
+
steps:
|
|
238
|
+
- uses: actions/checkout@11d5960a326750d5838078e36cf38b85af677262 # v4.4.0
|
|
239
|
+
- uses: actions/setup-python@a26af69be951a213d495a4c3e4e4022e16d87065 # v5.6.0
|
|
240
|
+
with:
|
|
241
|
+
python-version: "3.12"
|
|
242
|
+
cache: pip
|
|
243
|
+
- run: python -m pip install -c constraints-py311-py312-py313.txt build
|
|
244
|
+
- name: Export only the allowlisted public files
|
|
245
|
+
run: python tools/verify_public_release.py --files-only --export ../public-profile-export
|
|
246
|
+
- name: Build the distributions from the export
|
|
247
|
+
run: python -m build ../public-profile-export --outdir ../public-profile-dist
|
|
248
|
+
- name: Verify the built distributions against the file policy
|
|
249
|
+
run: |
|
|
250
|
+
python - <<'PY'
|
|
251
|
+
from pathlib import Path
|
|
252
|
+
from tools.verify_public_release import verify_archive
|
|
253
|
+
for path in sorted(Path("../public-profile-dist").iterdir()):
|
|
254
|
+
print(path.name, verify_archive(path), "files verified")
|
|
255
|
+
PY
|