Skip to content

Commit 3ed7c16

Browse files
committed
feat: Add support for all relevant keywords to get_schema_fields. Add name, deprecated_self, pattern, merge_by_id to Field.
- Rename definition_path to definition - Remove support for null schema, which are invalid JSON Schema and prohibited by OCDS - Remove definition_pointer, definition_pointer_components, definition_path_components from Field - Remove support for adding fields to Field.__dict__ test: Add benchmark and regression tests. Add manage.py script to generate regression scenarios.
1 parent b026e18 commit 3ed7c16

36 files changed

+39461
-145
lines changed

.github/workflows/ci.yml

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -34,4 +34,9 @@ jobs:
3434
pip install orjson
3535
coverage run --source=ocdskit --append -m pytest -W error -W default::ocdsmerge.exceptions.DuplicateIdValueWarning -W ignore::DeprecationWarning:requests_cache.models.response
3636
pip uninstall -y orjson
37+
- name: Save libcove performance
38+
env:
39+
BENCHMARK_SAVE: 1
40+
run: pytest --benchmark-save=libcove --benchmark-only
41+
- run: pytest --benchmark-only --benchmark-compare=0001 --benchmark-compare-fail=median:0.001
3742
- uses: coverallsapp/github-action@v2

.gitignore

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
11
/*.egg-info
2+
/.benchmarks
23
/.coverage
34
/build
45
/dist

docs/changelog.rst

Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,34 @@
11
Changelog
22
=========
33

4+
1.2.1
5+
-----
6+
7+
Added
8+
~~~~~
9+
10+
- :class:`ocdskit.schema.Field`: Add ``name``, ``deprecated_self``, ``pattern``, ``merge_by_id``.
11+
- :func:`ocdskit.schema.get_schema_fields`:
12+
13+
- Add support for ``allOf``, ``anyOf``, ``oneOf``, ``then``, ``else``, ``$defs``.
14+
- Add support for ``items`` within ``definitions``.
15+
- Add support for ``patternProperties`` and ``items`` within ``items``.
16+
- Add support for ``properties``, ``patternProperties`` and ``items`` within ``patternProperties``.
17+
18+
Changed
19+
~~~~~~~
20+
21+
- :class:`ocdskit.schema.Field`: Rename ``definition_path`` to ``definition``.
22+
23+
Removed
24+
~~~~~~~
25+
26+
- :func:`ocdskit.schema.get_schema_fields`: Remove support for ``null`` schema, which is invalid.
27+
- :class:`ocdskit.schema.Field`:
28+
29+
- Remove ``definition_pointer``, ``definition_pointer_components``, ``definition_path_components``.
30+
- Remove support for adding fields to ``__dict__``.
31+
432
1.2.0 (2024-09-15)
533
------------------
634

docs/contributing.rst

Lines changed: 33 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -44,23 +44,46 @@ And run, for example:
4444

4545
.. code-block:: bash
4646
47-
python -c 'import json; print("\n".join(json.dumps({"releases": [{"ocid": str(y), "date": ""} for x in range(100)]}) for y in range(10000)))' | ocdskit compile --package > /dev/null
48-
python -c 'print("\n".join(map(str, range(5000000))))' | ocdskit package-records > /dev/null
49-
python -c 'print("\n".join(map(str, range(5000000))))' | ocdskit package-releases > /dev/null
50-
python -c 'import json; print("\n".join(json.dumps({"records": list(range(500))}) for x in range(10000)))' | ocdskit echo --root-path records.item | ocdskit package-records --size 999 > /dev/null
51-
python -c 'import json; print("\n".join(json.dumps({"releases": list(range(500))}) for x in range(10000)))' | ocdskit echo --root-path releases.item | ocdskit package-releases --size 999 > /dev/null
47+
python -c 'import json; print("\n".join(json.dumps({"releases": [{"ocid": str(y), "date": ""} for x in range(100)]}) for y in range(10000)))' | ocdskit compile --package > /dev/null
48+
python -c 'print("\n".join(map(str, range(5000000))))' | ocdskit package-records > /dev/null
49+
python -c 'print("\n".join(map(str, range(5000000))))' | ocdskit package-releases > /dev/null
50+
python -c 'import json; print("\n".join(json.dumps({"records": list(range(500))}) for x in range(10000)))' | ocdskit echo --root-path records.item | ocdskit package-records --size 999 > /dev/null
51+
python -c 'import json; print("\n".join(json.dumps({"releases": list(range(500))}) for x in range(10000)))' | ocdskit echo --root-path releases.item | ocdskit package-releases --size 999 > /dev/null
5252
5353
To test whether commands stream input, you can run, for example:
5454

5555
.. code-block:: bash
5656
57-
echo 'cat tests/fixtures/realdata/record-package_versioned.json tests/fixtures/realdata/record-package_versioned.json; sleep 3; cat tests/fixtures/record-package_minimal.json' > input.sh
58-
sh input.sh | ocdskit upgrade 1.0:1.1
59-
sh input.sh | ocdskit split-record-packages 1
57+
echo 'cat tests/fixtures/realdata/record-package_versioned.json tests/fixtures/realdata/record-package_versioned.json; sleep 3; cat tests/fixtures/record-package_minimal.json' > input.sh
58+
sh input.sh | ocdskit upgrade 1.0:1.1
59+
sh input.sh | ocdskit split-record-packages 1
6060
6161
.. code-block:: bash
6262
63-
echo 'cat tests/fixtures/realdata/release-package-1-2.json tests/fixtures/realdata/release-package-1-2.json; sleep 7; cat tests/fixtures/release-package_minimal.json' > input.sh
64-
sh input.sh | ocdskit split-release-packages 1
63+
echo 'cat tests/fixtures/realdata/release-package-1-2.json tests/fixtures/realdata/release-package-1-2.json; sleep 7; cat tests/fixtures/release-package_minimal.json' > input.sh
64+
sh input.sh | ocdskit split-release-packages 1
6565
6666
You can run ``sh input.sh | tee`` to compare the timing of ``tee`` to the timings above.
67+
68+
Performance
69+
-----------
70+
71+
pytest-benchmark tests ensure that :func:`ocdskit.schema.get_schema_fields` is faster than `libcove <https://pypi.org/project/libcove/>`__.
72+
73+
Before making changes:
74+
75+
.. code-block:: bash
76+
77+
pytest --benchmark-only --benchmark-min-rounds=10 --benchmark-save=tmp
78+
79+
After making changes:
80+
81+
.. code-block:: bash
82+
83+
pytest --benchmark-only --benchmark-min-rounds=10 --benchmark-compare=0002 --benchmark-compare-fail=mean:0%
84+
85+
Clean up saved benchmarks:
86+
87+
.. code-block:: bash
88+
89+
rm -f .benchmarks/*/*_tmp.json

0 commit comments

Comments
 (0)