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 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 diff --git a/poetry.lock b/poetry.lock index 9def488..c2674f9 100644 --- a/poetry.lock +++ b/poetry.lock @@ -1,4 +1,4 @@ -# This file is automatically @generated by Poetry 2.4.1 and should not be changed by hand. +# This file is automatically @generated by Poetry 2.3.3 and should not be changed by hand. [[package]] name = "argcomplete" @@ -2140,8 +2140,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" @@ -2528,8 +2528,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" @@ -2930,7 +2930,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"}, @@ -2980,6 +2979,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" @@ -3371,35 +3371,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" @@ -3424,4 +3425,4 @@ type = ["pytest-mypy (>=1.0.1) ; platform_python_implementation != \"PyPy\""] [metadata] lock-version = "2.1" python-versions = ">=3.10,<3.13" -content-hash = "01eb67c5189da5f9909e4d69964959191bec7aa557e4afe039058210cf88a64c" +content-hash = "305caceb6c037646196a148e44272bc1a39901af5027c3f27b6858bd67edff41" diff --git a/pyproject.toml b/pyproject.toml index f87e0ae..46b679f 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