From 9dc29395f779d7f02322d81288568bf1af7d45c8 Mon Sep 17 00:00:00 2001 From: georgeRobertson <50412379+georgeRobertson@users.noreply.github.com> Date: Mon, 13 Jul 2026 11:20:12 +0100 Subject: [PATCH 1/3] build: upgrade zensical from 0.0.31 to 0.0.46 --- poetry.lock | 43 ++++++++++++++++++++++--------------------- pyproject.toml | 3 ++- 2 files changed, 24 insertions(+), 22 deletions(-) diff --git a/poetry.lock b/poetry.lock index 320ff93..a171666 100644 --- a/poetry.lock +++ b/poetry.lock @@ -2124,8 +2124,8 @@ files = [ [package.dependencies] numpy = [ {version = ">=1.22.4", markers = "python_version < \"3.11\""}, - {version = ">=1.23.2", markers = "python_version == \"3.11\""}, {version = ">=1.26.0", markers = "python_version >= \"3.12\""}, + {version = ">=1.23.2", markers = "python_version == \"3.11\""}, ] python-dateutil = ">=2.8.2" pytz = ">=2020.1" @@ -2512,8 +2512,8 @@ astroid = ">=3.3.8,<=3.4.0.dev0" colorama = {version = ">=0.4.5", markers = "sys_platform == \"win32\""} dill = [ {version = ">=0.2", markers = "python_version < \"3.11\""}, - {version = ">=0.3.6", markers = "python_version == \"3.11\""}, {version = ">=0.3.7", markers = "python_version >= \"3.12\""}, + {version = ">=0.3.6", markers = "python_version == \"3.11\""}, ] isort = ">=4.2.5,<5.13 || >5.13,<7" mccabe = ">=0.6,<0.8" @@ -2914,7 +2914,6 @@ description = "A lil' TOML parser" optional = false python-versions = ">=3.8" groups = ["dev", "docs", "lint", "test"] -markers = "python_version == \"3.10\"" files = [ {file = "tomli-2.4.1-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:f8f0fc26ec2cc2b965b7a3b87cd19c5c6b8c5e5f436b984e85f486d652285c30"}, {file = "tomli-2.4.1-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:4ab97e64ccda8756376892c53a72bd1f964e519c77236368527f758fbc36a53a"}, @@ -2964,6 +2963,7 @@ files = [ {file = "tomli-2.4.1-py3-none-any.whl", hash = "sha256:0d85819802132122da43cb86656f8d1f8c6587d54ae7dcaf30e90533028b49fe"}, {file = "tomli-2.4.1.tar.gz", hash = "sha256:7c7e1a961a0b2f2472c1ac5b69affa0ae1132c39adcb67aba98568702b9cc23f"}, ] +markers = {dev = "python_version == \"3.10\"", lint = "python_version == \"3.10\"", test = "python_version == \"3.10\""} [[package]] name = "tomlkit" @@ -3355,35 +3355,36 @@ test = ["pytest", "pytest-cov"] [[package]] name = "zensical" -version = "0.0.31" +version = "0.0.46" description = "A modern static site generator built by the creators of Material for MkDocs" optional = false python-versions = ">=3.10" groups = ["docs"] files = [ - {file = "zensical-0.0.31-cp310-abi3-macosx_10_12_x86_64.whl", hash = "sha256:b489936d670733dd204f16b689a2acc0e45b69e42cc4901f5131ae57658b8fbc"}, - {file = "zensical-0.0.31-cp310-abi3-macosx_11_0_arm64.whl", hash = "sha256:d9f678efc0d9918e45eeb8bc62847b2cce23db7393c8c59c1be6d1c064bbaacd"}, - {file = "zensical-0.0.31-cp310-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:fb2b50ecf674997f818e53f12f2a67875a21b0c79ed74c151dfaef2f1475e5bf"}, - {file = "zensical-0.0.31-cp310-abi3-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:6fb5c634fe88254770a2d4db5c05b06f1c3ee5e29d2ae3e7efdae8905e435b1d"}, - {file = "zensical-0.0.31-cp310-abi3-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:94e64630552793274db1ec66c971e49a15ad351536d5d12de67ec6da7358ac50"}, - {file = "zensical-0.0.31-cp310-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:738a2fd5832e3b3c10ff642eebaf89c89ca1d28e4451dad0f36fdac53c415577"}, - {file = "zensical-0.0.31-cp310-abi3-musllinux_1_2_aarch64.whl", hash = "sha256:bd601f6132e285ef6c3e4c3852be2094fc0473295a8080003db76a79760f84fb"}, - {file = "zensical-0.0.31-cp310-abi3-musllinux_1_2_armv7l.whl", hash = "sha256:dc3b6a9dfb5903c0aa779ef65cd6185add2b8aa1db237be840874b8c9db761b8"}, - {file = "zensical-0.0.31-cp310-abi3-musllinux_1_2_i686.whl", hash = "sha256:ddd4321b275e82c4897aa45b05038ce204b88fb311ad55f8c2af572173a9b56c"}, - {file = "zensical-0.0.31-cp310-abi3-musllinux_1_2_x86_64.whl", hash = "sha256:147ab4bc17f3088f703aa6c4b9c416411f4ea8ca64d26f6586beae49d97fd3c7"}, - {file = "zensical-0.0.31-cp310-abi3-win32.whl", hash = "sha256:03fa11e629a308507693489541f43e751697784e94365e7435b02104aefd1c2c"}, - {file = "zensical-0.0.31-cp310-abi3-win_amd64.whl", hash = "sha256:d6621d4bb46af4143560045d4a18c8c76302db56bf1dbb6e2ce107d7fb643e09"}, - {file = "zensical-0.0.31.tar.gz", hash = "sha256:9c12f07bde70c4bfdb13d6cae1bedf8d18064d257a6e81128a152502b28a8fc3"}, + {file = "zensical-0.0.46-cp310-abi3-macosx_10_12_x86_64.whl", hash = "sha256:d91af81ab058c8693dfd75f2f77b4c73bcba4125681d1d276f38624291820bd2"}, + {file = "zensical-0.0.46-cp310-abi3-macosx_11_0_arm64.whl", hash = "sha256:d9221264a9a87409900a47e29985607b0c9245dacb89077e87c8e16e31edc167"}, + {file = "zensical-0.0.46-cp310-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:ec43018d5343ca2e1d71aa352eeddd560fef504effd03025840a5a783abefa4f"}, + {file = "zensical-0.0.46-cp310-abi3-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:26e98fb8ab7ab50cdd20a73e2c7d4d9aae0b46cf2d8691e6bb22f9c261b8a60a"}, + {file = "zensical-0.0.46-cp310-abi3-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:46fe578f26963f8ee89567983e62737b6fadc9197d4742e1020b522e092d7baa"}, + {file = "zensical-0.0.46-cp310-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:aef03fa186a5589148e10b62610500989c6b075a2c08e1554233adbf91b2a3dc"}, + {file = "zensical-0.0.46-cp310-abi3-musllinux_1_2_aarch64.whl", hash = "sha256:bc7446cdf97a8dea390f20ed2bd6b030cddc1bd36a8ce113ea3efef6fa61c573"}, + {file = "zensical-0.0.46-cp310-abi3-musllinux_1_2_armv7l.whl", hash = "sha256:bbee37801f1ed500f158dc0992c569282950f780ae353c37fe6969f99983d701"}, + {file = "zensical-0.0.46-cp310-abi3-musllinux_1_2_i686.whl", hash = "sha256:9487c147c9cceb50c04d0ad70b024821a6eab1629dafd70ab6d1e86ec841e623"}, + {file = "zensical-0.0.46-cp310-abi3-musllinux_1_2_x86_64.whl", hash = "sha256:f42a4683c762f026878d19ede4bcf7bfbb84dbecb5ad923949abb77806ed88a5"}, + {file = "zensical-0.0.46-cp310-abi3-win32.whl", hash = "sha256:85f018f2a7ee76a83915c87ddb12b58cf343fd6154081d33ac95b6751b011dd7"}, + {file = "zensical-0.0.46-cp310-abi3-win_amd64.whl", hash = "sha256:1543a693a160de60e86ca589592401b584670e7e12c5ae30e3c2ba76786f7ec3"}, + {file = "zensical-0.0.46.tar.gz", hash = "sha256:3ec21f4fb1e78cd7c0d6b07ae336b04770e27ba020dabc457b2790e5d34f1978"}, ] [package.dependencies] click = ">=8.1.8" deepmerge = ">=2.0" +jinja2 = ">=3.1" markdown = ">=3.7" -pygments = ">=2.16" -pymdown-extensions = ">=10.15" +pygments = ">=2.20" +pymdown-extensions = ">=10.21.3" pyyaml = ">=6.0.2" -tomli = {version = ">=2.0", markers = "python_full_version < \"3.11.0\""} +tomli = ">=2.4.0" [[package]] name = "zipp" @@ -3408,4 +3409,4 @@ type = ["pytest-mypy"] [metadata] lock-version = "2.1" python-versions = ">=3.10,<3.13" -content-hash = "9a5c663fa3e691692e436c406dbb282b8657c5fc7f5eb70d26928191b4f9896c" +content-hash = "26ded7930581165a8c497a7f94104388560642868400114ff8438bb53732b500" diff --git a/pyproject.toml b/pyproject.toml index 17d5bff..e7d102a 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -10,6 +10,7 @@ classifiers = [ "Programming Language :: Python :: 3", "Programming Language :: Python :: 3.10", "Programming Language :: Python :: 3.11", + "Programming Language :: Python :: 3.12", "Operating System :: OS Independent", "Topic :: Software Development :: Libraries", "Typing :: Typed", @@ -106,7 +107,7 @@ mkdocs = "1.6.1" mkdocstrings = { version = "1.0.3", extras = ["python"] } griffelib = "2.0.1" pymdown-extensions = "10.21.3" -zensical = "0.0.31" +zensical = "0.0.46" [tool.ruff] line-length = 100 From 02641d85e4d7cca61dcdde6dfe62262e469712cc Mon Sep 17 00:00:00 2001 From: georgeRobertson <50412379+georgeRobertson@users.noreply.github.com> Date: Mon, 13 Jul 2026 11:22:54 +0100 Subject: [PATCH 2/3] docs: fix 'Bad Value' in cases where it should be 'Bad value' fix some of the urls that are pointing at invalid locations --- docs/user_guidance/business_rules.md | 6 +++--- docs/user_guidance/data_contract.md | 4 ++-- docs/user_guidance/install.md | 2 +- 3 files changed, 6 insertions(+), 6 deletions(-) diff --git a/docs/user_guidance/business_rules.md b/docs/user_guidance/business_rules.md index e7bd8b6..0f4093f 100644 --- a/docs/user_guidance/business_rules.md +++ b/docs/user_guidance/business_rules.md @@ -50,7 +50,7 @@ For the simplest rules, you can write them in the filters section. For example, "failure_type": "record", "error_code": "MOVIE_TOO_LONG", "failure_message": "Movie must be less than 4 hours long.", - "category": "Bad Value" + "category": "Bad value" } ] } @@ -81,7 +81,7 @@ For the simplest rules, you can write them in the filters section. For example, "failure_type": "submission", "error_code": "MOVIE_TOO_LONG", "failure_message": "Movie must be less than 4 hours long.", - "category": "Bad Value" + "category": "Bad value" } ] } @@ -113,7 +113,7 @@ For the simplest rules, you can write them in the filters section. For example, "is_informational": true, "error_code": "MOVIE_TOO_LONG", "failure_message": "Movie must be less than 4 hours long.", - "category": "Bad Value", + "category": "Bad value", } ] } diff --git a/docs/user_guidance/data_contract.md b/docs/user_guidance/data_contract.md index 3c931b1..55913da 100644 --- a/docs/user_guidance/data_contract.md +++ b/docs/user_guidance/data_contract.md @@ -417,13 +417,13 @@ When a [Feedback Message](./feedback_messages.md) is produced during the contrac "error_message": "File Rejected - movie_uuid is blank.", "error_level": "submission" }, - "Bad Value": { + "Bad value": { "error_code": "MOVIE_UUID_02", "error_message": "Record Rejected - movie_uuid has an incorrect data format. movie_uuid={{ movie_uuid }}.", } }, "movie_name": { - "Bad Value": { + "Bad value": { "error_code": "MOVIE_NAME_01", "error_message": "Warning - movie_name has an incorrect data format. movie_name={{ movie_name }}.", "is_informational": true diff --git a/docs/user_guidance/install.md b/docs/user_guidance/install.md index 8c93e5c..e0c2ce4 100644 --- a/docs/user_guidance/install.md +++ b/docs/user_guidance/install.md @@ -79,7 +79,7 @@ You can install the DVE package through python package managers such as [pip](ht Python dependencies are listed in the [`pyproject.toml`](https://github.com/NHSDigital/data-validation-engine/blob/main/pyproject.toml). Many of the dependencies are locked to quite restrictive versions due to complexity of this package. Core packages such as Pydantic, Pyspark and DuckDB are unlikely to receive flexible version constraints as changes in those packages could cause the DVE to malfunction. For less important dependencies, we have tried to make the contraints more flexible. Therefore, we would advise you to install the DVE into a seperate environment rather than trying to integrate it into an existing Python environment. -Once you have installed the DVE you are almost ready to use it. To be able to run the DVE, you will need to choose one of the supported pipeline runners (see Backend implementations here - [DuckDB](user_guidance/implementations/duckdb.md) *or* [Spark](user_guidance/implementations/spark.md)) and you will need to create your own dischema document to configure how the DVE should validate incoming data. You can read more about this in the [Getting Started](getting_started.md) page. +Once you have installed the DVE you are almost ready to use it. To be able to run the DVE, you will need to choose one of the supported pipeline runners (see Backend implementations here - [DuckDB](implementations/duckdb.md) *or* [Spark](implementations/spark.md)) and you will need to create your own dischema document to configure how the DVE should validate incoming data. You can read more about this in the [Getting Started](getting_started.md) page. ## DVE Version Compatability Matrix From f13edb9defe9473daf2ea19a33a7ba68a02cdc30 Mon Sep 17 00:00:00 2001 From: georgeRobertson <50412379+georgeRobertson@users.noreply.github.com> Date: Mon, 13 Jul 2026 12:03:02 +0100 Subject: [PATCH 3/3] ci: add ci job to ensure that docs are building correctly --- .github/workflows/ci_docs_build.yml | 37 +++++++++++++++++++++++++++++ 1 file changed, 37 insertions(+) create mode 100644 .github/workflows/ci_docs_build.yml diff --git a/.github/workflows/ci_docs_build.yml b/.github/workflows/ci_docs_build.yml new file mode 100644 index 0000000..2ae0fcc --- /dev/null +++ b/.github/workflows/ci_docs_build.yml @@ -0,0 +1,37 @@ +name: Verify docs build correctly + +on: + pull_request: + branches: + - main + types: [opened, reopened, synchronize] + +jobs: + build: + runs-on: ubuntu-24.04 + steps: + - uses: actions/checkout@v5 + + - name: Install extra dependencies for a python install + run: | + sudo apt-get update + sudo apt -y install --no-install-recommends liblzma-dev libbz2-dev libreadline-dev + + - name: Install asdf cli + uses: asdf-vm/actions/setup@b7bcd026f18772e44fe1026d729e1611cc435d47 + + - name: Install software through asdf + uses: asdf-vm/actions/install@b7bcd026f18772e44fe1026d729e1611cc435d47 + + - name: reshim asdf + run: asdf reshim + + - name: ensure poetry using desired python version + run: poetry env use $(asdf which python) + + - name: install docs requirements + run: | + poetry install --sync --no-interaction --with docs + + - name: verify docs build correctly + run: poetry run zensical build --strict