diff --git a/.devcontainer/devcontainer.json b/.devcontainer/devcontainer.json new file mode 100644 index 0000000..627ffe4 --- /dev/null +++ b/.devcontainer/devcontainer.json @@ -0,0 +1,31 @@ +// For format details, see https://aka.ms/devcontainer.json. For config options, see the +// README at: https://github.com/devcontainers/templates/tree/main/src/python +{ + "name": "Python 3", + // Or use a Dockerfile or Docker Compose file. More info: https://containers.dev/guide/dockerfile + "image": "mcr.microsoft.com/devcontainers/python:1-3.10-bullseye", + "features": { + "ghcr.io/devcontainers/features/node:1": { + "nodeGypDependencies": true, + "installYarnUsingApt": true, + "version": "lts", + "pnpmVersion": "latest", + "nvmVersion": "latest" + } + }, + + // Features to add to the dev container. More info: https://containers.dev/features. + // "features": {}, + + // Use 'forwardPorts' to make a list of ports inside the container available locally. + "forwardPorts": [5000, 32201], + + // Use 'postCreateCommand' to run commands after the container is created. + "postCreateCommand": "./.devcontainer/postCreateCommand.sh" + + // Configure tool-specific properties. + // "customizations": {}, + + // Uncomment to connect as root instead. More info: https://aka.ms/dev-containers-non-root. + // "remoteUser": "root" +} diff --git a/.devcontainer/postCreateCommand.sh b/.devcontainer/postCreateCommand.sh new file mode 100755 index 0000000..74b4ac9 --- /dev/null +++ b/.devcontainer/postCreateCommand.sh @@ -0,0 +1,15 @@ +#!/bin/bash + +# Install JVM + +sudo apt update +sudo apt install -y default-jdk + +# Install poetry + +#!/bin/bash +curl -sSL https://install.python-poetry.org | python3 - +echo 'export PATH="$HOME/.local/bin:$PATH"' >> ~/.bashrc + +make install +echo "..Now you can 'make lint', 'make publish', 'npm run serve'" \ No newline at end of file diff --git a/.github/dependabot.yml b/.github/dependabot.yml new file mode 100644 index 0000000..f33a02c --- /dev/null +++ b/.github/dependabot.yml @@ -0,0 +1,12 @@ +# To get started with Dependabot version updates, you'll need to specify which +# package ecosystems to update and where the package manifests are located. +# Please see the documentation for more information: +# https://docs.github.com/github/administering-a-repository/configuration-options-for-dependency-updates +# https://containers.dev/guide/dependabot + +version: 2 +updates: + - package-ecosystem: "devcontainers" + directory: "/" + schedule: + interval: weekly diff --git a/Makefile b/Makefile index 674e754..bbb3c80 100644 --- a/Makefile +++ b/Makefile @@ -12,6 +12,7 @@ install-node: #Configures Git Hooks, which are scripts that run given a specified event. .git/hooks/pre-commit: cp scripts/pre-commit .git/hooks/pre-commit + chmod +x .git/hooks/pre-commit #Condensed Target to run all targets above. install: install-node install-python .git/hooks/pre-commit @@ -31,6 +32,10 @@ publish: clean mkdir -p build npm run publish 2> /dev/null +#Serve the API description locally +serve: + npm run serve + #Runs build proxy script build-proxy: scripts/build_proxy.sh diff --git a/README.md b/README.md index 09d54dc..0707a3e 100644 --- a/README.md +++ b/README.md @@ -21,18 +21,31 @@ The contents of this repository are protected by Crown Copyright (C). ## Development -### Requirements +You can set up your development manually on your development machine, or :bulb: use the supplied devcontainer specification to set up +the required environment automatically. + +### :bulb: Developing in a devcontainer + +If you are unfamiliar with the use of devcontainers, these resources may be helpful: +- VSCode: https://code.visualstudio.com/docs/devcontainers/tutorial +- JetBrains/pycharm: https://www.jetbrains.com/help/idea/prerequisites-for-dev-containers.html + +The provided configuration in the .devcontainer folder will set up all the required tooling as detailed in the following section automatically. + +### Developing without a devcontainer + +#### Requirements * make * nodejs + npm/yarn * [poetry](https://github.com/python-poetry/poetry) * Java 8+ -### Install +#### Install ``` $ make install ``` -#### Updating hooks +##### Updating hooks You can install some pre-commit hooks to ensure you can't commit invalid spec changes by accident. These are also run in CI, but it's useful to run them locally too. @@ -49,7 +62,7 @@ Various scripts and commands rely on environment variables being set. These are There are `make` commands that alias some of this functionality: * `lint` -- Lints the spec and code * `publish` -- Outputs the specification as a **single file** into the `build/` directory - * `serve` -- Serves a preview of the specification in human-readable format + * `serve` -- Serves a preview of the specification in human-readable format on http://127.0.0.1:5000 ### Testing Each API and team is unique. We encourage you to use a `test/` folder in the root of the project, and use whatever testing frameworks or apps your team feels comfortable with. It is important that the URL your test points to be configurable. We have included some stubs in the Makefile for running tests. diff --git a/package-lock.json b/package-lock.json index bb3966f..94d389d 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,12 +1,12 @@ { "name": "nhs-website-content-api", - "version": "0.0.1", + "version": "2.0.0", "lockfileVersion": 2, "requires": true, "packages": { "": { "name": "nhs-website-content-api", - "version": "0.0.1", + "version": "2.0.0", "license": "MIT", "dependencies": { "newman-reporter-htmlextra": "^1.20.1" diff --git a/poetry.lock b/poetry.lock index 44294f5..b9a331c 100644 --- a/poetry.lock +++ b/poetry.lock @@ -1,4 +1,4 @@ -# This file is automatically @generated by Poetry 1.5.1 and should not be changed by hand. +# This file is automatically @generated by Poetry 2.1.1 and should not be changed by hand. [[package]] name = "aiohappyeyeballs" @@ -6,6 +6,7 @@ version = "2.4.4" description = "Happy Eyeballs for asyncio" optional = false python-versions = ">=3.8" +groups = ["dev"] files = [ {file = "aiohappyeyeballs-2.4.4-py3-none-any.whl", hash = "sha256:a980909d50efcd44795c4afeca523296716d50cd756ddca6af8c65b996e27de8"}, {file = "aiohappyeyeballs-2.4.4.tar.gz", hash = "sha256:5fdd7d87889c63183afc18ce9271f9b0a7d32c2303e394468dd45d514a757745"}, @@ -17,6 +18,7 @@ version = "3.10.11" description = "Async http client/server framework (asyncio)" optional = false python-versions = ">=3.8" +groups = ["dev"] files = [ {file = "aiohttp-3.10.11-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:5077b1a5f40ffa3ba1f40d537d3bec4383988ee51fbba6b74aa8fb1bc466599e"}, {file = "aiohttp-3.10.11-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:8d6a14a4d93b5b3c2891fca94fa9d41b2322a68194422bef0dd5ec1e57d7d298"}, @@ -121,7 +123,7 @@ multidict = ">=4.5,<7.0" yarl = ">=1.12.0,<2.0" [package.extras] -speedups = ["Brotli", "aiodns (>=3.2.0)", "brotlicffi"] +speedups = ["Brotli ; platform_python_implementation == \"CPython\"", "aiodns (>=3.2.0) ; sys_platform == \"linux\" or sys_platform == \"darwin\"", "brotlicffi ; platform_python_implementation != \"CPython\""] [[package]] name = "aiosignal" @@ -129,6 +131,7 @@ version = "1.3.1" description = "aiosignal: a list of registered asynchronous callbacks" optional = false python-versions = ">=3.7" +groups = ["dev"] files = [ {file = "aiosignal-1.3.1-py3-none-any.whl", hash = "sha256:f8376fb07dd1e86a584e4fcdec80b36b7f81aac666ebc724e2c090300dd83b17"}, {file = "aiosignal-1.3.1.tar.gz", hash = "sha256:54cd96e15e1649b75d6c87526a6ff0b6c1b0dd3459f43d9ca11d48c339b68cfc"}, @@ -143,6 +146,7 @@ version = "1.4.4" description = "A small Python module for determining appropriate platform-specific dirs, e.g. a \"user data dir\"." optional = false python-versions = "*" +groups = ["dev"] files = [ {file = "appdirs-1.4.4-py2.py3-none-any.whl", hash = "sha256:a841dacd6b99318a741b166adb07e19ee71a274450e68237b4650ca1055ab128"}, {file = "appdirs-1.4.4.tar.gz", hash = "sha256:7d5d0167b2b1ba821647616af46a749d1c653740dd0d2415100fe26e27afdf41"}, @@ -154,6 +158,8 @@ version = "5.0.1" description = "Timeout context manager for asyncio programs" optional = false python-versions = ">=3.8" +groups = ["dev"] +markers = "python_version < \"3.11\"" files = [ {file = "async_timeout-5.0.1-py3-none-any.whl", hash = "sha256:39e3809566ff85354557ec2398b55e096c8364bacac9405a7a1fa429e77fe76c"}, {file = "async_timeout-5.0.1.tar.gz", hash = "sha256:d9321a7a3d5a6a5e187e824d2fa0793ce379a202935782d555d6e9d2735677d3"}, @@ -165,6 +171,8 @@ version = "1.4.1" description = "Atomic file writes." optional = false python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*" +groups = ["main", "dev"] +markers = "sys_platform == \"win32\"" files = [ {file = "atomicwrites-1.4.1.tar.gz", hash = "sha256:81b2c9071a49367a7f770170e5eec8cb66567cfbbc8c73d20ce5ca4a8d71cf11"}, ] @@ -175,18 +183,19 @@ version = "25.1.0" description = "Classes Without Boilerplate" optional = false python-versions = ">=3.8" +groups = ["main", "dev"] files = [ {file = "attrs-25.1.0-py3-none-any.whl", hash = "sha256:c75a69e28a550a7e93789579c22aa26b0f5b83b75dc4e08fe092980051e1090a"}, {file = "attrs-25.1.0.tar.gz", hash = "sha256:1c97078a80c814273a76b2a298a932eb681c87415c11dee0a6921de7f1b02c3e"}, ] [package.extras] -benchmark = ["cloudpickle", "hypothesis", "mypy (>=1.11.1)", "pympler", "pytest (>=4.3.0)", "pytest-codspeed", "pytest-mypy-plugins", "pytest-xdist[psutil]"] -cov = ["cloudpickle", "coverage[toml] (>=5.3)", "hypothesis", "mypy (>=1.11.1)", "pympler", "pytest (>=4.3.0)", "pytest-mypy-plugins", "pytest-xdist[psutil]"] -dev = ["cloudpickle", "hypothesis", "mypy (>=1.11.1)", "pre-commit-uv", "pympler", "pytest (>=4.3.0)", "pytest-mypy-plugins", "pytest-xdist[psutil]"] +benchmark = ["cloudpickle ; platform_python_implementation == \"CPython\"", "hypothesis", "mypy (>=1.11.1) ; platform_python_implementation == \"CPython\" and python_version >= \"3.10\"", "pympler", "pytest (>=4.3.0)", "pytest-codspeed", "pytest-mypy-plugins ; platform_python_implementation == \"CPython\" and python_version >= \"3.10\"", "pytest-xdist[psutil]"] +cov = ["cloudpickle ; platform_python_implementation == \"CPython\"", "coverage[toml] (>=5.3)", "hypothesis", "mypy (>=1.11.1) ; platform_python_implementation == \"CPython\" and python_version >= \"3.10\"", "pympler", "pytest (>=4.3.0)", "pytest-mypy-plugins ; platform_python_implementation == \"CPython\" and python_version >= \"3.10\"", "pytest-xdist[psutil]"] +dev = ["cloudpickle ; platform_python_implementation == \"CPython\"", "hypothesis", "mypy (>=1.11.1) ; platform_python_implementation == \"CPython\" and python_version >= \"3.10\"", "pre-commit-uv", "pympler", "pytest (>=4.3.0)", "pytest-mypy-plugins ; platform_python_implementation == \"CPython\" and python_version >= \"3.10\"", "pytest-xdist[psutil]"] docs = ["cogapp", "furo", "myst-parser", "sphinx", "sphinx-notfound-page", "sphinxcontrib-towncrier", "towncrier (<24.7)"] -tests = ["cloudpickle", "hypothesis", "mypy (>=1.11.1)", "pympler", "pytest (>=4.3.0)", "pytest-mypy-plugins", "pytest-xdist[psutil]"] -tests-mypy = ["mypy (>=1.11.1)", "pytest-mypy-plugins"] +tests = ["cloudpickle ; platform_python_implementation == \"CPython\"", "hypothesis", "mypy (>=1.11.1) ; platform_python_implementation == \"CPython\" and python_version >= \"3.10\"", "pympler", "pytest (>=4.3.0)", "pytest-mypy-plugins ; platform_python_implementation == \"CPython\" and python_version >= \"3.10\"", "pytest-xdist[psutil]"] +tests-mypy = ["mypy (>=1.11.1) ; platform_python_implementation == \"CPython\" and python_version >= \"3.10\"", "pytest-mypy-plugins ; platform_python_implementation == \"CPython\" and python_version >= \"3.10\""] [[package]] name = "authlib" @@ -194,6 +203,7 @@ version = "0.15.5" description = "The ultimate Python library in building OAuth and OpenID Connect servers." optional = false python-versions = "*" +groups = ["main"] files = [ {file = "Authlib-0.15.5-py2.py3-none-any.whl", hash = "sha256:ecf4a7a9f2508c0bb07e93a752dd3c495cfaffc20e864ef0ffc95e3f40d2abaf"}, {file = "Authlib-0.15.5.tar.gz", hash = "sha256:b83cf6360c8e92b0e9df0d1f32d675790bcc4e3c03977499b1eed24dcdef4252"}, @@ -211,6 +221,7 @@ version = "20.8b1" description = "The uncompromising code formatter." optional = false python-versions = ">=3.6" +groups = ["dev"] files = [ {file = "black-20.8b1.tar.gz", hash = "sha256:1c02557aa099101b9d21496f8a914e9ed2222ef70336404eeeac8edba836fbea"}, ] @@ -235,6 +246,7 @@ version = "2025.1.31" description = "Python package for providing Mozilla's CA Bundle." optional = false python-versions = ">=3.6" +groups = ["main"] files = [ {file = "certifi-2025.1.31-py3-none-any.whl", hash = "sha256:ca78db4565a652026a4db2bcdf68f2fb589ea80d0be70e03929ed730746b84fe"}, {file = "certifi-2025.1.31.tar.gz", hash = "sha256:3d5da6925056f6f18f119200434a4780a94263f10d1c21d032a6f6b2baa20651"}, @@ -246,6 +258,7 @@ version = "1.17.1" description = "Foreign Function Interface for Python calling C code." optional = false python-versions = ">=3.8" +groups = ["main"] files = [ {file = "cffi-1.17.1-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:df8b1c11f177bc2313ec4b2d46baec87a5f3e71fc8b45dab2ee7cae86d9aba14"}, {file = "cffi-1.17.1-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:8f2cdc858323644ab277e9bb925ad72ae0e67f69e804f4898c070998d50b1a67"}, @@ -319,12 +332,25 @@ files = [ [package.dependencies] pycparser = "*" +[[package]] +name = "cfgv" +version = "3.4.0" +description = "Validate configuration and produce human readable error messages." +optional = false +python-versions = ">=3.8" +groups = ["dev"] +files = [ + {file = "cfgv-3.4.0-py2.py3-none-any.whl", hash = "sha256:b7265b1f29fd3316bfcd2b330d63d024f2bfd8bcb8b0272f8e19a504856c48f9"}, + {file = "cfgv-3.4.0.tar.gz", hash = "sha256:e52591d4c5f5dead8e0f673fb16db7949d2cfb3f7da4582893288f0ded8fe560"}, +] + [[package]] name = "charset-normalizer" version = "2.0.12" description = "The Real First Universal Charset Detector. Open, modern and actively maintained alternative to Chardet." optional = false python-versions = ">=3.5.0" +groups = ["main"] files = [ {file = "charset-normalizer-2.0.12.tar.gz", hash = "sha256:2857e29ff0d34db842cd7ca3230549d1a697f96ee6d3fb071cfa6c7393832597"}, {file = "charset_normalizer-2.0.12-py3-none-any.whl", hash = "sha256:6881edbebdb17b39b4eaaa821b438bf6eddffb4468cf344f09f89def34a8b1df"}, @@ -339,6 +365,7 @@ version = "8.1.8" description = "Composable command line interface toolkit" optional = false python-versions = ">=3.7" +groups = ["dev"] files = [ {file = "click-8.1.8-py3-none-any.whl", hash = "sha256:63c132bbbed01578a06712a2d1f497bb62d9c1c0d329b7903a866228027263b2"}, {file = "click-8.1.8.tar.gz", hash = "sha256:ed53c9d8990d83c2a27deae68e4ee337473f6330c040a31d4225c9574d16096a"}, @@ -353,10 +380,12 @@ version = "0.4.6" description = "Cross-platform colored terminal text." optional = false python-versions = "!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*,!=3.4.*,!=3.5.*,!=3.6.*,>=2.7" +groups = ["main", "dev"] files = [ {file = "colorama-0.4.6-py2.py3-none-any.whl", hash = "sha256:4f1d9991f5acc0ca119f9d443620b77f9d6b33703e51011c16baf57afb285fc6"}, {file = "colorama-0.4.6.tar.gz", hash = "sha256:08695f5cb7ed6e0531a20572697297273c47b8cae5a63ffc6d6ed5c201be6e44"}, ] +markers = {main = "sys_platform == \"win32\"", dev = "sys_platform == \"win32\" or platform_system == \"Windows\""} [[package]] name = "coverage" @@ -364,6 +393,7 @@ version = "5.5" description = "Code coverage measurement for Python" optional = false python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*, <4" +groups = ["dev"] files = [ {file = "coverage-5.5-cp27-cp27m-macosx_10_9_x86_64.whl", hash = "sha256:b6d534e4b2ab35c9f93f46229363e17f63c53ad01330df9f2d6bd1187e5eaacf"}, {file = "coverage-5.5-cp27-cp27m-manylinux1_i686.whl", hash = "sha256:b7895207b4c843c76a25ab8c1e866261bcfe27bfaa20c192de5190121770672b"}, @@ -428,6 +458,7 @@ version = "36.0.1" description = "cryptography is a package which provides cryptographic recipes and primitives to Python developers." optional = false python-versions = ">=3.6" +groups = ["main"] files = [ {file = "cryptography-36.0.1-cp36-abi3-macosx_10_10_universal2.whl", hash = "sha256:73bc2d3f2444bcfeac67dd130ff2ea598ea5f20b40e36d19821b4df8c9c5037b"}, {file = "cryptography-36.0.1-cp36-abi3-macosx_10_10_x86_64.whl", hash = "sha256:2d87cdcb378d3cfed944dac30596da1968f88fb96d7fc34fdae30a99054b2e31"}, @@ -468,27 +499,59 @@ version = "5.1.1" description = "Decorators for Humans" optional = false python-versions = ">=3.5" +groups = ["dev"] files = [ {file = "decorator-5.1.1-py3-none-any.whl", hash = "sha256:b8c3f85900b9dc423225913c5aace94729fe1fa9763b38939a95226f02d37186"}, {file = "decorator-5.1.1.tar.gz", hash = "sha256:637996211036b6385ef91435e4fae22989472f9d571faba8927ba8253acbc330"}, ] +[[package]] +name = "distlib" +version = "0.3.9" +description = "Distribution utilities" +optional = false +python-versions = "*" +groups = ["dev"] +files = [ + {file = "distlib-0.3.9-py2.py3-none-any.whl", hash = "sha256:47f8c22fd27c27e25a65601af709b38e4f0a45ea4fc2e710f65755fa8caaaf87"}, + {file = "distlib-0.3.9.tar.gz", hash = "sha256:a60f20dea646b8a33f3e7772f74dc0b2d0772d2837ee1342a00645c81edf9403"}, +] + [[package]] name = "docopt" version = "0.6.2" description = "Pythonic argument parser, that will make you smile" optional = false python-versions = "*" +groups = ["dev"] files = [ {file = "docopt-0.6.2.tar.gz", hash = "sha256:49b3a825280bd66b3aa83585ef59c4a8c82f2c8a522dbe754a8bc8d08c85c491"}, ] +[[package]] +name = "filelock" +version = "3.18.0" +description = "A platform independent file lock." +optional = false +python-versions = ">=3.9" +groups = ["dev"] +files = [ + {file = "filelock-3.18.0-py3-none-any.whl", hash = "sha256:c401f4f8377c4464e6db25fff06205fd89bdd83b65eb0488ed1b160f780e21de"}, + {file = "filelock-3.18.0.tar.gz", hash = "sha256:adbc88eabb99d2fec8c9c1b229b171f18afa655400173ddc653d5d01501fb9f2"}, +] + +[package.extras] +docs = ["furo (>=2024.8.6)", "sphinx (>=8.1.3)", "sphinx-autodoc-typehints (>=3)"] +testing = ["covdefaults (>=2.3)", "coverage (>=7.6.10)", "diff-cover (>=9.2.1)", "pytest (>=8.3.4)", "pytest-asyncio (>=0.25.2)", "pytest-cov (>=6)", "pytest-mock (>=3.14)", "pytest-timeout (>=2.3.1)", "virtualenv (>=20.28.1)"] +typing = ["typing-extensions (>=4.12.2) ; python_version < \"3.11\""] + [[package]] name = "flake8" version = "3.9.2" description = "the modular source code checker: pep8 pyflakes and co" optional = false python-versions = "!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*,!=3.4.*,>=2.7" +groups = ["dev"] files = [ {file = "flake8-3.9.2-py2.py3-none-any.whl", hash = "sha256:bf8fd333346d844f616e8d47905ef3a3384edae6b4e9beb0c5101e25e3110907"}, {file = "flake8-3.9.2.tar.gz", hash = "sha256:07528381786f2a6237b061f6e96610a4167b226cb926e2aa2b6b1d78057c576b"}, @@ -505,6 +568,7 @@ version = "1.5.0" description = "A list-like structure which implements collections.abc.MutableSequence" optional = false python-versions = ">=3.8" +groups = ["dev"] files = [ {file = "frozenlist-1.5.0-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:5b6a66c18b5b9dd261ca98dffcb826a525334b2f29e7caa54e182255c5f6a65a"}, {file = "frozenlist-1.5.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:d1b3eb7b05ea246510b43a7e53ed1653e55c2121019a97e60cad7efb881a97bb"}, @@ -606,6 +670,7 @@ version = "4.0.12" description = "Git Object Database" optional = false python-versions = ">=3.7" +groups = ["dev"] files = [ {file = "gitdb-4.0.12-py3-none-any.whl", hash = "sha256:67073e15955400952c6565cc3e707c554a4eea2e428946f7a4c162fab9bd9bcf"}, {file = "gitdb-4.0.12.tar.gz", hash = "sha256:5ef71f855d191a3326fcfbc0d5da835f26b13fbcba60c32c21091c349ffdb571"}, @@ -620,6 +685,7 @@ version = "3.1.44" description = "GitPython is a Python library used to interact with Git repositories" optional = false python-versions = ">=3.7" +groups = ["dev"] files = [ {file = "GitPython-3.1.44-py3-none-any.whl", hash = "sha256:9e0e10cda9bed1ee64bc9a6de50e7e38a9c9943241cd7f585f6df3ed28011110"}, {file = "gitpython-3.1.44.tar.gz", hash = "sha256:c87e30b26253bf5418b01b0660f818967f3c503193838337fe5e573331249269"}, @@ -630,7 +696,22 @@ gitdb = ">=4.0.1,<5" [package.extras] doc = ["sphinx (>=7.1.2,<7.2)", "sphinx-autodoc-typehints", "sphinx_rtd_theme"] -test = ["coverage[toml]", "ddt (>=1.1.1,!=1.4.3)", "mock", "mypy", "pre-commit", "pytest (>=7.3.1)", "pytest-cov", "pytest-instafail", "pytest-mock", "pytest-sugar", "typing-extensions"] +test = ["coverage[toml]", "ddt (>=1.1.1,!=1.4.3)", "mock ; python_version < \"3.8\"", "mypy", "pre-commit", "pytest (>=7.3.1)", "pytest-cov", "pytest-instafail", "pytest-mock", "pytest-sugar", "typing-extensions ; python_version < \"3.11\""] + +[[package]] +name = "identify" +version = "2.6.9" +description = "File identification library for Python" +optional = false +python-versions = ">=3.9" +groups = ["dev"] +files = [ + {file = "identify-2.6.9-py2.py3-none-any.whl", hash = "sha256:c98b4322da415a8e5a70ff6e51fbc2d2932c015532d77e9f8537b4ba7813b150"}, + {file = "identify-2.6.9.tar.gz", hash = "sha256:d40dfe3142a1421d8518e3d3985ef5ac42890683e32306ad614a29490abeb6bf"}, +] + +[package.extras] +license = ["ukkonen"] [[package]] name = "idna" @@ -638,6 +719,7 @@ version = "3.10" description = "Internationalized Domain Names in Applications (IDNA)" optional = false python-versions = ">=3.6" +groups = ["main", "dev"] files = [ {file = "idna-3.10-py3-none-any.whl", hash = "sha256:946d195a0d259cbba61165e88e65941f16e9b36ea6ddb97f00452bae8b1287d3"}, {file = "idna-3.10.tar.gz", hash = "sha256:12f65c9b470abda6dc35cf8e63cc574b1c52b11df2c86030af0ac09b01b13ea9"}, @@ -652,6 +734,7 @@ version = "2.0.0" description = "brain-dead simple config-ini parsing" optional = false python-versions = ">=3.7" +groups = ["main", "dev"] files = [ {file = "iniconfig-2.0.0-py3-none-any.whl", hash = "sha256:b6a85871a79d2e3b22d2d1b94ac2824226a63c6b741c88f7ae975f18b6778374"}, {file = "iniconfig-2.0.0.tar.gz", hash = "sha256:2d91e135bf72d31a410b17c16da610a82cb55f6b0477d1a902134b24a455b8b3"}, @@ -663,6 +746,7 @@ version = "2.11.3" description = "A very fast and expressive template engine." optional = false python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*" +groups = ["dev"] files = [ {file = "Jinja2-2.11.3-py2.py3-none-any.whl", hash = "sha256:03e47ad063331dd6a3f04a43eddca8a966a26ba0c5b7207a9a9e4e08f1b29419"}, {file = "Jinja2-2.11.3.tar.gz", hash = "sha256:a6d58433de0ae800347cab1fa3043cebbabe8baa9d29e668f1c768cb87a333c6"}, @@ -680,6 +764,7 @@ version = "1.4.0" description = "A robust and significantly extended implementation of JSONPath for Python, with a clear AST for metaprogramming." optional = false python-versions = "*" +groups = ["dev"] files = [ {file = "jsonpath-rw-1.4.0.tar.gz", hash = "sha256:05c471281c45ae113f6103d1268ec7a4831a2e96aa80de45edc89b11fac4fbec"}, ] @@ -695,6 +780,7 @@ version = "4.7.1" description = "Powerful and Pythonic XML processing library combining libxml2/libxslt with the ElementTree API." optional = false python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, != 3.4.*" +groups = ["main"] files = [ {file = "lxml-4.7.1-cp27-cp27m-macosx_10_14_x86_64.whl", hash = "sha256:d546431636edb1d6a608b348dd58cc9841b81f4116745857b6cb9f8dadb2725f"}, {file = "lxml-4.7.1-cp27-cp27m-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:6308062534323f0d3edb4e702a0e26a76ca9e0e23ff99be5d82750772df32a9e"}, @@ -770,6 +856,7 @@ version = "2.1.5" description = "Safely add untrusted strings to HTML/XML markup." optional = false python-versions = ">=3.7" +groups = ["dev"] files = [ {file = "MarkupSafe-2.1.5-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:a17a92de5231666cfbe003f0e4b9b3a7ae3afb1ec2845aadc2bacc93ff85febc"}, {file = "MarkupSafe-2.1.5-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:72b6be590cc35924b02c78ef34b467da4ba07e4e0f0454a2c5907f473fc50ce5"}, @@ -839,6 +926,7 @@ version = "0.6.1" description = "McCabe checker, plugin for flake8" optional = false python-versions = "*" +groups = ["dev"] files = [ {file = "mccabe-0.6.1-py2.py3-none-any.whl", hash = "sha256:ab8a6258860da4b6677da4bd2fe5dc2c659cff31b3ee4f7f5d64e79735b80d42"}, {file = "mccabe-0.6.1.tar.gz", hash = "sha256:dd8d182285a0fe56bace7f45b5e7d1a6ebcbf524e8f3bd87eb0f125271b8831f"}, @@ -850,6 +938,7 @@ version = "6.1.0" description = "multidict implementation" optional = false python-versions = ">=3.8" +groups = ["dev"] files = [ {file = "multidict-6.1.0-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:3380252550e372e8511d49481bd836264c009adb826b23fefcc5dd3c69692f60"}, {file = "multidict-6.1.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:99f826cbf970077383d7de805c0681799491cb939c25450b9b5b3ced03ca99f1"}, @@ -954,17 +1043,31 @@ version = "1.0.0" description = "Type system extensions for programs checked with the mypy type checker." optional = false python-versions = ">=3.5" +groups = ["dev"] files = [ {file = "mypy_extensions-1.0.0-py3-none-any.whl", hash = "sha256:4392f6c0eb8a5668a69e23d168ffa70f0be9ccfd32b5cc2d26a34ae5b844552d"}, {file = "mypy_extensions-1.0.0.tar.gz", hash = "sha256:75dbf8955dc00442a438fc4d0666508a9a97b6bd41aa2f0ffe9d2f2725af0782"}, ] +[[package]] +name = "nodeenv" +version = "1.9.1" +description = "Node.js virtual environment builder" +optional = false +python-versions = "!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*,!=3.4.*,!=3.5.*,!=3.6.*,>=2.7" +groups = ["dev"] +files = [ + {file = "nodeenv-1.9.1-py2.py3-none-any.whl", hash = "sha256:ba11c9782d29c27c70ffbdda2d7415098754709be8a7056d79a737cd901155c9"}, + {file = "nodeenv-1.9.1.tar.gz", hash = "sha256:6ec12890a2dab7946721edbfbcd91f3319c6ccc9aec47be7c7e6b7011ee6645f"}, +] + [[package]] name = "packaging" version = "24.2" description = "Core utilities for Python packages" optional = false python-versions = ">=3.8" +groups = ["main", "dev"] files = [ {file = "packaging-24.2-py3-none-any.whl", hash = "sha256:09abb1bccd265c01f4a3aa3f7a7db064b36514d2cba19a2f694fe6150451a759"}, {file = "packaging-24.2.tar.gz", hash = "sha256:c228a6dc5e932d346bc5739379109d49e8853dd8223571c7c5b55260edc0b97f"}, @@ -976,6 +1079,7 @@ version = "0.12.1" description = "Utility library for gitignore style pattern matching of file paths." optional = false python-versions = ">=3.8" +groups = ["dev"] files = [ {file = "pathspec-0.12.1-py3-none-any.whl", hash = "sha256:a0d503e138a4c123b27490a4f7beda6a01c6f288df0e4a8b79c7eb0dc7b4cc08"}, {file = "pathspec-0.12.1.tar.gz", hash = "sha256:a482d51503a1ab33b1c67a6c3813a26953dbdc71c31dacaef9a838c4e29f5712"}, @@ -987,6 +1091,7 @@ version = "2.3.0" description = "Dump the software license list of Python packages installed with pip." optional = false python-versions = "~=3.5" +groups = ["dev"] files = [ {file = "pip-licenses-2.3.0.tar.gz", hash = "sha256:630f7e1b51ac0751c9c218e2ed76bb982e769301510a0bcca0dd4a47d05198fd"}, {file = "pip_licenses-2.3.0-py3-none-any.whl", hash = "sha256:b3922fc71e819c1a155460116d2fcf15eca85a22ebe057cd1e1dedb951b1199f"}, @@ -998,12 +1103,30 @@ PTable = "*" [package.extras] test = ["docutils", "pytest-cov", "pytest-pycodestyle", "pytest-runner"] +[[package]] +name = "platformdirs" +version = "4.3.7" +description = "A small Python package for determining appropriate platform-specific dirs, e.g. a `user data dir`." +optional = false +python-versions = ">=3.9" +groups = ["dev"] +files = [ + {file = "platformdirs-4.3.7-py3-none-any.whl", hash = "sha256:a03875334331946f13c549dbd8f4bac7a13a50a895a0eb1e8c6a8ace80d40a94"}, + {file = "platformdirs-4.3.7.tar.gz", hash = "sha256:eb437d586b6a0986388f0d6f74aa0cde27b48d0e3d66843640bfb6bdcdb6e351"}, +] + +[package.extras] +docs = ["furo (>=2024.8.6)", "proselint (>=0.14)", "sphinx (>=8.1.3)", "sphinx-autodoc-typehints (>=3)"] +test = ["appdirs (==1.4.4)", "covdefaults (>=2.3)", "pytest (>=8.3.4)", "pytest-cov (>=6)", "pytest-mock (>=3.14)"] +type = ["mypy (>=1.14.1)"] + [[package]] name = "pluggy" version = "1.5.0" description = "plugin and hook calling mechanisms for python" optional = false python-versions = ">=3.8" +groups = ["main", "dev"] files = [ {file = "pluggy-1.5.0-py3-none-any.whl", hash = "sha256:44e1ad92c8ca002de6377e165f3e0f1be63266ab4d554740532335b9d75ea669"}, {file = "pluggy-1.5.0.tar.gz", hash = "sha256:2cffa88e94fdc978c4c574f15f9e59b7f4201d439195c3715ca9e2486f1d0cf1"}, @@ -1019,17 +1142,38 @@ version = "3.11" description = "Python Lex & Yacc" optional = false python-versions = "*" +groups = ["dev"] files = [ {file = "ply-3.11-py2.py3-none-any.whl", hash = "sha256:096f9b8350b65ebd2fd1346b12452efe5b9607f7482813ffca50c22722a807ce"}, {file = "ply-3.11.tar.gz", hash = "sha256:00c7c1aaa88358b9c765b6d3000c6eec0ba42abca5351b095321aef446081da3"}, ] +[[package]] +name = "pre-commit" +version = "4.2.0" +description = "A framework for managing and maintaining multi-language pre-commit hooks." +optional = false +python-versions = ">=3.9" +groups = ["dev"] +files = [ + {file = "pre_commit-4.2.0-py2.py3-none-any.whl", hash = "sha256:a009ca7205f1eb497d10b845e52c838a98b6cdd2102a6c8e4540e94ee75c58bd"}, + {file = "pre_commit-4.2.0.tar.gz", hash = "sha256:601283b9757afd87d40c4c4a9b2b5de9637a8ea02eaff7adc2d0fb4e04841146"}, +] + +[package.dependencies] +cfgv = ">=2.0.0" +identify = ">=1.0.0" +nodeenv = ">=0.11.1" +pyyaml = ">=5.1" +virtualenv = ">=20.10.0" + [[package]] name = "propcache" version = "0.2.0" description = "Accelerated property cache" optional = false python-versions = ">=3.8" +groups = ["dev"] files = [ {file = "propcache-0.2.0-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:c5869b8fd70b81835a6f187c5fdbe67917a04d7e52b6e7cc4e5fe39d55c39d58"}, {file = "propcache-0.2.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:952e0d9d07609d9c5be361f33b0d6d650cd2bae393aabb11d9b719364521984b"}, @@ -1137,6 +1281,7 @@ version = "0.9.2" description = "A simple Python library for easily displaying tabular data in a visually appealing ASCII table format" optional = false python-versions = "*" +groups = ["dev"] files = [ {file = "PTable-0.9.2.tar.gz", hash = "sha256:aa7fc151cb40f2dabcd2275ba6f7fd0ff8577a86be3365cd3fb297cbe09cc292"}, ] @@ -1147,6 +1292,7 @@ version = "1.11.0" description = "library with cross-python path, ini-parsing, io, code, log facilities" optional = false python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*" +groups = ["main", "dev"] files = [ {file = "py-1.11.0-py2.py3-none-any.whl", hash = "sha256:607c53218732647dff4acdfcd50cb62615cedf612e72d1724fb1a0cc6405b378"}, {file = "py-1.11.0.tar.gz", hash = "sha256:51c75c4126074b472f746a24399ad32f6053d1b34b68d2fa41e558e6f4a98719"}, @@ -1158,6 +1304,7 @@ version = "2.7.0" description = "Python style guide checker" optional = false python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*" +groups = ["dev"] files = [ {file = "pycodestyle-2.7.0-py2.py3-none-any.whl", hash = "sha256:514f76d918fcc0b55c6680472f0a37970994e07bbb80725808c17089be302068"}, {file = "pycodestyle-2.7.0.tar.gz", hash = "sha256:c389c1d06bf7904078ca03399a4816f974a1d590090fecea0c63ec26ebaf1cef"}, @@ -1169,6 +1316,7 @@ version = "2.22" description = "C parser in Python" optional = false python-versions = ">=3.8" +groups = ["main"] files = [ {file = "pycparser-2.22-py3-none-any.whl", hash = "sha256:c3702b6d3dd8c7abc1afa565d7e63d53a1d0bd86cdc24edd75470f4de499cfcc"}, {file = "pycparser-2.22.tar.gz", hash = "sha256:491c8be9c040f5390f5bf44a5b07752bd07f56edf992381b05c701439eec10f6"}, @@ -1180,6 +1328,7 @@ version = "3.13.0" description = "Cryptographic library for Python" optional = false python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*" +groups = ["main"] files = [ {file = "pycryptodome-3.13.0-cp27-cp27m-macosx_10_9_x86_64.whl", hash = "sha256:e468724173df02f9d83f3fea830bf0d04aa291b5add22b4a78e01c97aab04873"}, {file = "pycryptodome-3.13.0-cp27-cp27m-manylinux1_i686.whl", hash = "sha256:1fb7a6f222072412f320b9e48d3ce981920efbfce37b06d028ec9bd94093b37f"}, @@ -1219,6 +1368,7 @@ version = "1.9.1" description = "Data validation and settings management using python type hints" optional = false python-versions = ">=3.6.1" +groups = ["main"] files = [ {file = "pydantic-1.9.1-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:c8098a724c2784bf03e8070993f6d46aa2eeca031f8d8a048dff277703e6e193"}, {file = "pydantic-1.9.1-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:c320c64dd876e45254bdd350f0179da737463eea41c43bacbee9d8c9d1021f11"}, @@ -1270,6 +1420,7 @@ version = "2.3.1" description = "passive checker of Python programs" optional = false python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*" +groups = ["dev"] files = [ {file = "pyflakes-2.3.1-py2.py3-none-any.whl", hash = "sha256:7893783d01b8a89811dd72d7dfd4d84ff098e5eed95cfa8905b22bbffe52efc3"}, {file = "pyflakes-2.3.1.tar.gz", hash = "sha256:f5bc8ecabc05bb9d291eb5203d6810b49040f6ff446a756326104746cc00c1db"}, @@ -1281,6 +1432,7 @@ version = "2.3.0" description = "JSON Web Token implementation in Python" optional = false python-versions = ">=3.6" +groups = ["main"] files = [ {file = "PyJWT-2.3.0-py3-none-any.whl", hash = "sha256:e0c4bb8d9f0af0c7f5b1ec4c5036309617d03d56932877f2f7a0beeb5318322f"}, {file = "PyJWT-2.3.0.tar.gz", hash = "sha256:b888b4d56f06f6dcd777210c334e69c737be74755d3e5e9ee3fe67dc18a0ee41"}, @@ -1298,6 +1450,7 @@ version = "2.6.0" description = "Python One Time Password Library" optional = false python-versions = "*" +groups = ["main"] files = [ {file = "pyotp-2.6.0-py2.py3-none-any.whl", hash = "sha256:9d144de0f8a601d6869abe1409f4a3f75f097c37b50a36a3bf165810a6e23f28"}, {file = "pyotp-2.6.0.tar.gz", hash = "sha256:d28ddfd40e0c1b6a6b9da961c7d47a10261fb58f378cb00f05ce88b26df9c432"}, @@ -1309,6 +1462,7 @@ version = "6.2.5" description = "pytest: simple powerful testing with Python" optional = false python-versions = ">=3.6" +groups = ["main", "dev"] files = [ {file = "pytest-6.2.5-py3-none-any.whl", hash = "sha256:7310f8d27bc79ced999e760ca304d69f6ba6c6649c0b60fb0e04a4a77cacc134"}, {file = "pytest-6.2.5.tar.gz", hash = "sha256:131b36680866a76e6781d13f101efb86cf674ebb9762eb70d3082b6f29889e89"}, @@ -1333,6 +1487,7 @@ version = "0.14.0" description = "Pytest support for asyncio." optional = false python-versions = ">= 3.5" +groups = ["dev"] files = [ {file = "pytest-asyncio-0.14.0.tar.gz", hash = "sha256:9882c0c6b24429449f5f969a5158b528f39bde47dc32e85b9f0403965017e700"}, {file = "pytest_asyncio-0.14.0-py3-none-any.whl", hash = "sha256:2eae1e34f6c68fc0a9dc12d4bea190483843ff4708d24277c41568d6b6044f1d"}, @@ -1350,6 +1505,7 @@ version = "2.0.8" description = "Pytest plugin accessing NHSDigital's APIM proxies" optional = false python-versions = ">=3.8" +groups = ["main"] files = [ {file = "pytest-nhsd-apim-2.0.8.tar.gz", hash = "sha256:202164b113ca1773e5c5391d1cca62d2d01f11ae8fa7566e4c44dc928e8964eb"}, {file = "pytest_nhsd_apim-2.0.8-py3-none-any.whl", hash = "sha256:2d94fcf60d43b0bec816e06b42a7275d1bc26e1acbeacf10fff301db1202acb9"}, @@ -1371,40 +1527,65 @@ wheel = "0.37.1" [[package]] name = "pyyaml" -version = "5.4.1" +version = "6.0.2" description = "YAML parser and emitter for Python" optional = false -python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*, !=3.5.*" +python-versions = ">=3.8" +groups = ["dev"] files = [ - {file = "PyYAML-5.4.1-cp27-cp27m-macosx_10_9_x86_64.whl", hash = "sha256:3b2b1824fe7112845700f815ff6a489360226a5609b96ec2190a45e62a9fc922"}, - {file = "PyYAML-5.4.1-cp27-cp27m-win32.whl", hash = "sha256:129def1b7c1bf22faffd67b8f3724645203b79d8f4cc81f674654d9902cb4393"}, - {file = "PyYAML-5.4.1-cp27-cp27m-win_amd64.whl", hash = "sha256:4465124ef1b18d9ace298060f4eccc64b0850899ac4ac53294547536533800c8"}, - {file = "PyYAML-5.4.1-cp27-cp27mu-manylinux1_x86_64.whl", hash = "sha256:bb4191dfc9306777bc594117aee052446b3fa88737cd13b7188d0e7aa8162185"}, - {file = "PyYAML-5.4.1-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:6c78645d400265a062508ae399b60b8c167bf003db364ecb26dcab2bda048253"}, - {file = "PyYAML-5.4.1-cp36-cp36m-manylinux1_x86_64.whl", hash = "sha256:4e0583d24c881e14342eaf4ec5fbc97f934b999a6828693a99157fde912540cc"}, - {file = "PyYAML-5.4.1-cp36-cp36m-manylinux2014_aarch64.whl", hash = "sha256:72a01f726a9c7851ca9bfad6fd09ca4e090a023c00945ea05ba1638c09dc3347"}, - {file = "PyYAML-5.4.1-cp36-cp36m-manylinux2014_s390x.whl", hash = "sha256:895f61ef02e8fed38159bb70f7e100e00f471eae2bc838cd0f4ebb21e28f8541"}, - {file = "PyYAML-5.4.1-cp36-cp36m-win32.whl", hash = "sha256:3bd0e463264cf257d1ffd2e40223b197271046d09dadf73a0fe82b9c1fc385a5"}, - {file = "PyYAML-5.4.1-cp36-cp36m-win_amd64.whl", hash = "sha256:e4fac90784481d221a8e4b1162afa7c47ed953be40d31ab4629ae917510051df"}, - {file = "PyYAML-5.4.1-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:5accb17103e43963b80e6f837831f38d314a0495500067cb25afab2e8d7a4018"}, - {file = "PyYAML-5.4.1-cp37-cp37m-manylinux1_x86_64.whl", hash = "sha256:e1d4970ea66be07ae37a3c2e48b5ec63f7ba6804bdddfdbd3cfd954d25a82e63"}, - {file = "PyYAML-5.4.1-cp37-cp37m-manylinux2014_aarch64.whl", hash = "sha256:cb333c16912324fd5f769fff6bc5de372e9e7a202247b48870bc251ed40239aa"}, - {file = "PyYAML-5.4.1-cp37-cp37m-manylinux2014_s390x.whl", hash = "sha256:fe69978f3f768926cfa37b867e3843918e012cf83f680806599ddce33c2c68b0"}, - {file = "PyYAML-5.4.1-cp37-cp37m-win32.whl", hash = "sha256:dd5de0646207f053eb0d6c74ae45ba98c3395a571a2891858e87df7c9b9bd51b"}, - {file = "PyYAML-5.4.1-cp37-cp37m-win_amd64.whl", hash = "sha256:08682f6b72c722394747bddaf0aa62277e02557c0fd1c42cb853016a38f8dedf"}, - {file = "PyYAML-5.4.1-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:d2d9808ea7b4af864f35ea216be506ecec180628aced0704e34aca0b040ffe46"}, - {file = "PyYAML-5.4.1-cp38-cp38-manylinux1_x86_64.whl", hash = "sha256:8c1be557ee92a20f184922c7b6424e8ab6691788e6d86137c5d93c1a6ec1b8fb"}, - {file = "PyYAML-5.4.1-cp38-cp38-manylinux2014_aarch64.whl", hash = "sha256:fd7f6999a8070df521b6384004ef42833b9bd62cfee11a09bda1079b4b704247"}, - {file = "PyYAML-5.4.1-cp38-cp38-manylinux2014_s390x.whl", hash = "sha256:bfb51918d4ff3d77c1c856a9699f8492c612cde32fd3bcd344af9be34999bfdc"}, - {file = "PyYAML-5.4.1-cp38-cp38-win32.whl", hash = "sha256:fa5ae20527d8e831e8230cbffd9f8fe952815b2b7dae6ffec25318803a7528fc"}, - {file = "PyYAML-5.4.1-cp38-cp38-win_amd64.whl", hash = "sha256:0f5f5786c0e09baddcd8b4b45f20a7b5d61a7e7e99846e3c799b05c7c53fa696"}, - {file = "PyYAML-5.4.1-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:294db365efa064d00b8d1ef65d8ea2c3426ac366c0c4368d930bf1c5fb497f77"}, - {file = "PyYAML-5.4.1-cp39-cp39-manylinux1_x86_64.whl", hash = "sha256:74c1485f7707cf707a7aef42ef6322b8f97921bd89be2ab6317fd782c2d53183"}, - {file = "PyYAML-5.4.1-cp39-cp39-manylinux2014_aarch64.whl", hash = "sha256:d483ad4e639292c90170eb6f7783ad19490e7a8defb3e46f97dfe4bacae89122"}, - {file = "PyYAML-5.4.1-cp39-cp39-manylinux2014_s390x.whl", hash = "sha256:fdc842473cd33f45ff6bce46aea678a54e3d21f1b61a7750ce3c498eedfe25d6"}, - {file = "PyYAML-5.4.1-cp39-cp39-win32.whl", hash = "sha256:49d4cdd9065b9b6e206d0595fee27a96b5dd22618e7520c33204a4a3239d5b10"}, - {file = "PyYAML-5.4.1-cp39-cp39-win_amd64.whl", hash = "sha256:c20cfa2d49991c8b4147af39859b167664f2ad4561704ee74c1de03318e898db"}, - {file = "PyYAML-5.4.1.tar.gz", hash = "sha256:607774cbba28732bfa802b54baa7484215f530991055bb562efbed5b2f20a45e"}, + {file = "PyYAML-6.0.2-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:0a9a2848a5b7feac301353437eb7d5957887edbf81d56e903999a75a3d743086"}, + {file = "PyYAML-6.0.2-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:29717114e51c84ddfba879543fb232a6ed60086602313ca38cce623c1d62cfbf"}, + {file = "PyYAML-6.0.2-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:8824b5a04a04a047e72eea5cec3bc266db09e35de6bdfe34c9436ac5ee27d237"}, + {file = "PyYAML-6.0.2-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:7c36280e6fb8385e520936c3cb3b8042851904eba0e58d277dca80a5cfed590b"}, + {file = "PyYAML-6.0.2-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:ec031d5d2feb36d1d1a24380e4db6d43695f3748343d99434e6f5f9156aaa2ed"}, + {file = "PyYAML-6.0.2-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:936d68689298c36b53b29f23c6dbb74de12b4ac12ca6cfe0e047bedceea56180"}, + {file = "PyYAML-6.0.2-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:23502f431948090f597378482b4812b0caae32c22213aecf3b55325e049a6c68"}, + {file = "PyYAML-6.0.2-cp310-cp310-win32.whl", hash = "sha256:2e99c6826ffa974fe6e27cdb5ed0021786b03fc98e5ee3c5bfe1fd5015f42b99"}, + {file = "PyYAML-6.0.2-cp310-cp310-win_amd64.whl", hash = "sha256:a4d3091415f010369ae4ed1fc6b79def9416358877534caf6a0fdd2146c87a3e"}, + {file = "PyYAML-6.0.2-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:cc1c1159b3d456576af7a3e4d1ba7e6924cb39de8f67111c735f6fc832082774"}, + {file = "PyYAML-6.0.2-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:1e2120ef853f59c7419231f3bf4e7021f1b936f6ebd222406c3b60212205d2ee"}, + {file = "PyYAML-6.0.2-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:5d225db5a45f21e78dd9358e58a98702a0302f2659a3c6cd320564b75b86f47c"}, + {file = "PyYAML-6.0.2-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:5ac9328ec4831237bec75defaf839f7d4564be1e6b25ac710bd1a96321cc8317"}, + {file = "PyYAML-6.0.2-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:3ad2a3decf9aaba3d29c8f537ac4b243e36bef957511b4766cb0057d32b0be85"}, + {file = "PyYAML-6.0.2-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:ff3824dc5261f50c9b0dfb3be22b4567a6f938ccce4587b38952d85fd9e9afe4"}, + {file = "PyYAML-6.0.2-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:797b4f722ffa07cc8d62053e4cff1486fa6dc094105d13fea7b1de7d8bf71c9e"}, + {file = "PyYAML-6.0.2-cp311-cp311-win32.whl", hash = "sha256:11d8f3dd2b9c1207dcaf2ee0bbbfd5991f571186ec9cc78427ba5bd32afae4b5"}, + {file = "PyYAML-6.0.2-cp311-cp311-win_amd64.whl", hash = "sha256:e10ce637b18caea04431ce14fabcf5c64a1c61ec9c56b071a4b7ca131ca52d44"}, + {file = "PyYAML-6.0.2-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:c70c95198c015b85feafc136515252a261a84561b7b1d51e3384e0655ddf25ab"}, + {file = "PyYAML-6.0.2-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:ce826d6ef20b1bc864f0a68340c8b3287705cae2f8b4b1d932177dcc76721725"}, + {file = "PyYAML-6.0.2-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:1f71ea527786de97d1a0cc0eacd1defc0985dcf6b3f17bb77dcfc8c34bec4dc5"}, + {file = "PyYAML-6.0.2-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:9b22676e8097e9e22e36d6b7bda33190d0d400f345f23d4065d48f4ca7ae0425"}, + {file = "PyYAML-6.0.2-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:80bab7bfc629882493af4aa31a4cfa43a4c57c83813253626916b8c7ada83476"}, + {file = "PyYAML-6.0.2-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:0833f8694549e586547b576dcfaba4a6b55b9e96098b36cdc7ebefe667dfed48"}, + {file = "PyYAML-6.0.2-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:8b9c7197f7cb2738065c481a0461e50ad02f18c78cd75775628afb4d7137fb3b"}, + {file = "PyYAML-6.0.2-cp312-cp312-win32.whl", hash = "sha256:ef6107725bd54b262d6dedcc2af448a266975032bc85ef0172c5f059da6325b4"}, + {file = "PyYAML-6.0.2-cp312-cp312-win_amd64.whl", hash = "sha256:7e7401d0de89a9a855c839bc697c079a4af81cf878373abd7dc625847d25cbd8"}, + {file = "PyYAML-6.0.2-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:efdca5630322a10774e8e98e1af481aad470dd62c3170801852d752aa7a783ba"}, + {file = "PyYAML-6.0.2-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:50187695423ffe49e2deacb8cd10510bc361faac997de9efef88badc3bb9e2d1"}, + {file = "PyYAML-6.0.2-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:0ffe8360bab4910ef1b9e87fb812d8bc0a308b0d0eef8c8f44e0254ab3b07133"}, + {file = "PyYAML-6.0.2-cp313-cp313-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:17e311b6c678207928d649faa7cb0d7b4c26a0ba73d41e99c4fff6b6c3276484"}, + {file = "PyYAML-6.0.2-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:70b189594dbe54f75ab3a1acec5f1e3faa7e8cf2f1e08d9b561cb41b845f69d5"}, + {file = "PyYAML-6.0.2-cp313-cp313-musllinux_1_1_aarch64.whl", hash = "sha256:41e4e3953a79407c794916fa277a82531dd93aad34e29c2a514c2c0c5fe971cc"}, + {file = "PyYAML-6.0.2-cp313-cp313-musllinux_1_1_x86_64.whl", hash = "sha256:68ccc6023a3400877818152ad9a1033e3db8625d899c72eacb5a668902e4d652"}, + {file = "PyYAML-6.0.2-cp313-cp313-win32.whl", hash = "sha256:bc2fa7c6b47d6bc618dd7fb02ef6fdedb1090ec036abab80d4681424b84c1183"}, + {file = "PyYAML-6.0.2-cp313-cp313-win_amd64.whl", hash = "sha256:8388ee1976c416731879ac16da0aff3f63b286ffdd57cdeb95f3f2e085687563"}, + {file = "PyYAML-6.0.2-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:24471b829b3bf607e04e88d79542a9d48bb037c2267d7927a874e6c205ca7e9a"}, + {file = "PyYAML-6.0.2-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d7fded462629cfa4b685c5416b949ebad6cec74af5e2d42905d41e257e0869f5"}, + {file = "PyYAML-6.0.2-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:d84a1718ee396f54f3a086ea0a66d8e552b2ab2017ef8b420e92edbc841c352d"}, + {file = "PyYAML-6.0.2-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:9056c1ecd25795207ad294bcf39f2db3d845767be0ea6e6a34d856f006006083"}, + {file = "PyYAML-6.0.2-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:82d09873e40955485746739bcb8b4586983670466c23382c19cffecbf1fd8706"}, + {file = "PyYAML-6.0.2-cp38-cp38-win32.whl", hash = "sha256:43fa96a3ca0d6b1812e01ced1044a003533c47f6ee8aca31724f78e93ccc089a"}, + {file = "PyYAML-6.0.2-cp38-cp38-win_amd64.whl", hash = "sha256:01179a4a8559ab5de078078f37e5c1a30d76bb88519906844fd7bdea1b7729ff"}, + {file = "PyYAML-6.0.2-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:688ba32a1cffef67fd2e9398a2efebaea461578b0923624778664cc1c914db5d"}, + {file = "PyYAML-6.0.2-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:a8786accb172bd8afb8be14490a16625cbc387036876ab6ba70912730faf8e1f"}, + {file = "PyYAML-6.0.2-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d8e03406cac8513435335dbab54c0d385e4a49e4945d2909a581c83647ca0290"}, + {file = "PyYAML-6.0.2-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:f753120cb8181e736c57ef7636e83f31b9c0d1722c516f7e86cf15b7aa57ff12"}, + {file = "PyYAML-6.0.2-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:3b1fdb9dc17f5a7677423d508ab4f243a726dea51fa5e70992e59a7411c89d19"}, + {file = "PyYAML-6.0.2-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:0b69e4ce7a131fe56b7e4d770c67429700908fc0752af059838b1cfb41960e4e"}, + {file = "PyYAML-6.0.2-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:a9f8c2e67970f13b16084e04f134610fd1d374bf477b17ec1599185cf611d725"}, + {file = "PyYAML-6.0.2-cp39-cp39-win32.whl", hash = "sha256:6395c297d42274772abc367baaa79683958044e5d3835486c16da75d2a694631"}, + {file = "PyYAML-6.0.2-cp39-cp39-win_amd64.whl", hash = "sha256:39693e1f8320ae4f43943590b49779ffb98acb81f788220ea932a6b6c51004d8"}, + {file = "pyyaml-6.0.2.tar.gz", hash = "sha256:d584d9ec91ad65861cc08d42e834324ef890a082e591037abe114850ff7bbc3e"}, ] [[package]] @@ -1413,6 +1594,7 @@ version = "2024.11.6" description = "Alternative regular expression module, to replace re." optional = false python-versions = ">=3.8" +groups = ["dev"] files = [ {file = "regex-2024.11.6-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:ff590880083d60acc0433f9c3f713c51f7ac6ebb9adf889c79a261ecf541aa91"}, {file = "regex-2024.11.6-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:658f90550f38270639e83ce492f27d2c8d2cd63805c65a13a14d36ca126753f0"}, @@ -1516,6 +1698,7 @@ version = "2.27.1" description = "Python HTTP for Humans." optional = false python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*, !=3.5.*" +groups = ["main"] files = [ {file = "requests-2.27.1-py2.py3-none-any.whl", hash = "sha256:f22fa1e554c9ddfd16e6e41ac79759e17be9e492b3587efa038054674760e72d"}, {file = "requests-2.27.1.tar.gz", hash = "sha256:68d7c56fd5a8999887728ef304a6d12edc7be74f1cfa47714fc8b414525c9a61"}, @@ -1528,7 +1711,7 @@ idna = {version = ">=2.5,<4", markers = "python_version >= \"3\""} urllib3 = ">=1.21.1,<1.27" [package.extras] -socks = ["PySocks (>=1.5.6,!=1.5.7)", "win-inet-pton"] +socks = ["PySocks (>=1.5.6,!=1.5.7)", "win-inet-pton ; sys_platform == \"win32\" and python_version == \"2.7\""] use-chardet-on-py3 = ["chardet (>=3.0.2,<5)"] [[package]] @@ -1537,6 +1720,7 @@ version = "2.13.0" description = "Python helper for Semantic Versioning (http://semver.org/)" optional = false python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*" +groups = ["dev"] files = [ {file = "semver-2.13.0-py2.py3-none-any.whl", hash = "sha256:ced8b23dceb22134307c1b8abfa523da14198793d9787ac838e70e29e77458d4"}, {file = "semver-2.13.0.tar.gz", hash = "sha256:fa0fe2722ee1c3f57eac478820c3a5ae2f624af8264cbdf9000c980ff7f75e3f"}, @@ -1548,6 +1732,7 @@ version = "1.17.0" description = "Python 2 and 3 compatibility utilities" optional = false python-versions = "!=3.0.*,!=3.1.*,!=3.2.*,>=2.7" +groups = ["dev"] files = [ {file = "six-1.17.0-py2.py3-none-any.whl", hash = "sha256:4721f391ed90541fddacab5acf947aa0d3dc7d27b2e1e8eda2be8970586c3274"}, {file = "six-1.17.0.tar.gz", hash = "sha256:ff70335d468e7eb6ec65b95b99d3a2836546063f63acc5171de367e834932a81"}, @@ -1559,6 +1744,7 @@ version = "5.0.2" description = "A pure Python implementation of a sliding window memory map manager" optional = false python-versions = ">=3.7" +groups = ["dev"] files = [ {file = "smmap-5.0.2-py3-none-any.whl", hash = "sha256:b30115f0def7d7531d22a0fb6502488d879e75b260a9db4d0819cfb25403af5e"}, {file = "smmap-5.0.2.tar.gz", hash = "sha256:26ea65a03958fa0c8a1c7e8c7a58fdc77221b8910f6be2131affade476898ad5"}, @@ -1570,6 +1756,7 @@ version = "0.10.2" description = "Python Library for Tom's Obvious, Minimal Language" optional = false python-versions = ">=2.6, !=3.0.*, !=3.1.*, !=3.2.*" +groups = ["main", "dev"] files = [ {file = "toml-0.10.2-py2.py3-none-any.whl", hash = "sha256:806143ae5bfb6a3c6e736a764057db0e6a0e05e338b5630894a5f779cabb4f9b"}, {file = "toml-0.10.2.tar.gz", hash = "sha256:b3bda1d108d5dd99f4a20d24d9c348e91c4db7ab1b749200bded2f839ccbe68f"}, @@ -1581,6 +1768,7 @@ version = "1.5.5" description = "a fork of Python 2 and 3 ast modules with type comment support" optional = false python-versions = ">=3.6" +groups = ["dev"] files = [ {file = "typed_ast-1.5.5-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:4bc1efe0ce3ffb74784e06460f01a223ac1f6ab31c6bc0376a21184bf5aabe3b"}, {file = "typed_ast-1.5.5-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:5f7a8c46a8b333f71abd61d7ab9255440d4a588f34a21f126bbfc95f6049e686"}, @@ -1631,6 +1819,7 @@ version = "4.3.0" description = "Backported and Experimental Type Hints for Python 3.7+" optional = false python-versions = ">=3.7" +groups = ["main", "dev"] files = [ {file = "typing_extensions-4.3.0-py3-none-any.whl", hash = "sha256:25642c956049920a5aa49edcdd6ab1e06d7e5d467fc00e0506c44ac86fbfca02"}, {file = "typing_extensions-4.3.0.tar.gz", hash = "sha256:e6d2677a32f47fc7eb2795db1dd15c1f34eff616bcaf2cfb5e997f854fa1c4a6"}, @@ -1642,22 +1831,45 @@ version = "1.26.20" description = "HTTP library with thread-safe connection pooling, file post, and more." optional = false python-versions = "!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*,!=3.4.*,!=3.5.*,>=2.7" +groups = ["main"] files = [ {file = "urllib3-1.26.20-py2.py3-none-any.whl", hash = "sha256:0ed14ccfbf1c30a9072c7ca157e4319b70d65f623e91e7b32fadb2853431016e"}, {file = "urllib3-1.26.20.tar.gz", hash = "sha256:40c2dc0c681e47eb8f90e7e27bf6ff7df2e677421fd46756da1161c39ca70d32"}, ] [package.extras] -brotli = ["brotli (==1.0.9)", "brotli (>=1.0.9)", "brotlicffi (>=0.8.0)", "brotlipy (>=0.6.0)"] -secure = ["certifi", "cryptography (>=1.3.4)", "idna (>=2.0.0)", "ipaddress", "pyOpenSSL (>=0.14)", "urllib3-secure-extra"] +brotli = ["brotli (==1.0.9) ; os_name != \"nt\" and python_version < \"3\" and platform_python_implementation == \"CPython\"", "brotli (>=1.0.9) ; python_version >= \"3\" and platform_python_implementation == \"CPython\"", "brotlicffi (>=0.8.0) ; (os_name != \"nt\" or python_version >= \"3\") and platform_python_implementation != \"CPython\"", "brotlipy (>=0.6.0) ; os_name == \"nt\" and python_version < \"3\""] +secure = ["certifi", "cryptography (>=1.3.4)", "idna (>=2.0.0)", "ipaddress ; python_version == \"2.7\"", "pyOpenSSL (>=0.14)", "urllib3-secure-extra"] socks = ["PySocks (>=1.5.6,!=1.5.7,<2.0)"] +[[package]] +name = "virtualenv" +version = "20.29.3" +description = "Virtual Python Environment builder" +optional = false +python-versions = ">=3.8" +groups = ["dev"] +files = [ + {file = "virtualenv-20.29.3-py3-none-any.whl", hash = "sha256:3e3d00f5807e83b234dfb6122bf37cfadf4be216c53a49ac059d02414f819170"}, + {file = "virtualenv-20.29.3.tar.gz", hash = "sha256:95e39403fcf3940ac45bc717597dba16110b74506131845d9b687d5e73d947ac"}, +] + +[package.dependencies] +distlib = ">=0.3.7,<1" +filelock = ">=3.12.2,<4" +platformdirs = ">=3.9.1,<5" + +[package.extras] +docs = ["furo (>=2023.7.26)", "proselint (>=0.13)", "sphinx (>=7.1.2,!=7.3)", "sphinx-argparse (>=0.4)", "sphinxcontrib-towncrier (>=0.2.1a0)", "towncrier (>=23.6)"] +test = ["covdefaults (>=2.3)", "coverage (>=7.2.7)", "coverage-enable-subprocess (>=1)", "flaky (>=3.7)", "packaging (>=23.1)", "pytest (>=7.4)", "pytest-env (>=0.8.2)", "pytest-freezer (>=0.4.8) ; platform_python_implementation == \"PyPy\" or platform_python_implementation == \"CPython\" and sys_platform == \"win32\" and python_version >= \"3.13\"", "pytest-mock (>=3.11.1)", "pytest-randomly (>=3.12)", "pytest-timeout (>=2.1)", "setuptools (>=68)", "time-machine (>=2.10) ; platform_python_implementation == \"CPython\""] + [[package]] name = "wheel" version = "0.37.1" description = "A built-package format for Python" optional = false python-versions = "!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*,!=3.4.*,>=2.7" +groups = ["main"] files = [ {file = "wheel-0.37.1-py2.py3-none-any.whl", hash = "sha256:4bdcd7d840138086126cd09254dc6195fb4fc6f01c050a1d7236f2630db1d22a"}, {file = "wheel-0.37.1.tar.gz", hash = "sha256:e9a504e793efbca1b8e0e9cb979a249cf4a0a7b5b8c9e8b65a5e39d49529c1c4"}, @@ -1672,6 +1884,7 @@ version = "1.15.2" description = "Yet another URL library" optional = false python-versions = ">=3.8" +groups = ["dev"] files = [ {file = "yarl-1.15.2-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:e4ee8b8639070ff246ad3649294336b06db37a94bdea0d09ea491603e0be73b8"}, {file = "yarl-1.15.2-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:a7cf963a357c5f00cb55b1955df8bbe68d2f2f65de065160a1c26b85a1e44172"}, @@ -1779,6 +1992,6 @@ multidict = ">=4.0" propcache = ">=0.2.0" [metadata] -lock-version = "2.0" -python-versions = "^3.8" -content-hash = "94942bed70560e8ba24aa3cf10cd2764307031441bddb67321ab77f165483fad" +lock-version = "2.1" +python-versions = ">=3.9,<4.0" +content-hash = "9d3d1b8c6a45c5c3cb1a02786ad93aca16ab02616fe34d724b0a27d56326f079" diff --git a/pyproject.toml b/pyproject.toml index beed592..0e4938e 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -1,30 +1,25 @@ -[project] -python = "^3.8" - [tool.poetry] name = "nhs-website-content-api" -version = "0.0.1-alpha" +version = "2.2.0" description = "TODO" -authors = [ - #TODO add authors -] -readme = 'README.md' +authors = ["TODO "] +readme = "README.md" license = "MIT" repository = "https://github.com/NHSDigital/nhs-website-content-api" homepage = "https://digital.nhs.uk/developer/api-catalogue/nhs-website-content/v2" -keywords = ["healthcare", "uk", "nhs"] #TODO add additional keywords - +keywords = ["healthcare", "uk", "nhs"] +package-mode = false [tool.poetry.dependencies] -python = "^3.8" +python = ">=3.9,<4.0" pytest-nhsd-apim = "^2.0.2" -[tool.poetry.dev-dependencies] +[tool.poetry.group.dev.dependencies] flake8 = "^3.7.9" black = "^20.8b1" pip-licenses = "^2.0.1" jinja2 = "^2.11.1" -pyyaml = "^5.2" +pyyaml = "^6.0" docopt = "^0.6.2" jsonpath-rw = "^1.4.0" semver = "^2.9.0" @@ -33,5 +28,6 @@ pytest = "^6.1.2" coverage = "^5.5" aiohttp = "^3.8.6" pytest-asyncio = "^0.14.0" +pre-commit = "^4.2.0" [tool.poetry.scripts] diff --git a/specification/components/examples/ConditionsHealthAToZ.json b/specification/components/examples/ConditionsHealthAToZ.json index 88f6b91..06cbc06 100644 --- a/specification/components/examples/ConditionsHealthAToZ.json +++ b/specification/components/examples/ConditionsHealthAToZ.json @@ -16,12 +16,14 @@ }, "about": { "@type": "WebPage", - "name": "Health A to Z" + "name": "Health A to Z", + "alternateName": "" }, - "description": "", - "url": "https://api.service.nhs.uk/nhs-website-content/conditions/", + "description": "Find out about conditions, symptoms and treatments, including what to do and when to get help.", + "url": "https://www.nhs.uk/conditions/", "genre": [], "keywords": "", + "dateModified": "2025-01-14T11:49:05+00:00", "breadcrumb": { "@context": "http://schema.org", "@type": "BreadcrumbList", @@ -46,14 +48,16 @@ "articleStatus": "published", "mainEntityOfPage": { "@type": "MedicalWebPage", - "genre": ["Condition"], + "genre": [ + "Condition" + ], "datePublished": "2017-10-24T08:48:21+00:00", - "dateModified": "2021-11-30T15:42:29+00:00", + "dateModified": "2025-02-20T13:24:49+00:00", "lastReviewed": [ - "2021-06-20T00:00:00+00:00", - "2024-06-20T00:00:00+00:00" + "2024-07-04T00:00:00+00:00", + "2027-07-04T00:00:00+00:00" ], - "reviewDue": "2024-06-20T00:00:00+00:00", + "reviewDue": "2027-07-04T00:00:00+00:00", "keywords": "", "code": [ { @@ -63,7 +67,7 @@ } ] }, - "url": "https://api.service.nhs.uk/nhs-website-content/conditions/acanthosis-nigricans/", + "url": "https://www.nhs.uk/conditions/acanthosis-nigricans/", "name": "Acanthosis nigricans" }, { @@ -73,14 +77,16 @@ "articleStatus": "published", "mainEntityOfPage": { "@type": "MedicalWebPage", - "genre": ["Condition"], + "genre": [ + "Condition" + ], "datePublished": "2017-10-17T15:19:45+00:00", - "dateModified": "2021-12-23T11:26:22+00:00", + "dateModified": "2023-12-12T10:14:58+00:00", "lastReviewed": [ - "2020-12-24T14:50:00+00:00", - "2023-12-24T15:00:00+00:00" + "2023-12-05T14:50:00+00:00", + "2026-12-05T15:00:00+00:00" ], - "reviewDue": "2023-12-24T15:00:00+00:00", + "reviewDue": "2026-12-05T15:00:00+00:00", "keywords": "", "code": [ { @@ -90,24 +96,26 @@ } ] }, - "url": "https://api.service.nhs.uk/nhs-website-content/conditions/achalasia/", + "url": "https://www.nhs.uk/conditions/achalasia/", "name": "Achalasia" }, { - "description": "Find out about first aid and treatment for acid and chemical burns, including burns from acid attacks.", + "description": "Find out about acid and chemical burns including what causes them, where to get help, how to do first aid, and how they're treated.", "linkRelationship": "Result", "@type": "LinkRole", "articleStatus": "published", "mainEntityOfPage": { "@type": "MedicalWebPage", - "genre": ["Accident or injury"], + "genre": [ + "Accident or injury" + ], "datePublished": "2018-10-03T19:55:47+00:00", - "dateModified": "2021-11-18T15:26:08+00:00", + "dateModified": "2024-06-10T08:44:38+00:00", "lastReviewed": [ - "2020-09-18T00:00:00+00:00", - "2023-09-18T17:00:00+00:00" + "2024-06-05T00:00:00+00:00", + "2027-06-05T17:00:00+00:00" ], - "reviewDue": "2023-09-18T17:00:00+00:00", + "reviewDue": "2027-06-05T17:00:00+00:00", "keywords": "", "code": [ { @@ -117,7 +125,7 @@ } ] }, - "url": "https://api.service.nhs.uk/nhs-website-content/conditions/acid-and-chemical-burns/", + "url": "https://www.nhs.uk/conditions/acid-and-chemical-burns/", "name": "Acid and chemical burns" }, { @@ -127,16 +135,20 @@ "articleStatus": "published", "mainEntityOfPage": { "@type": "MedicalWebPage", - "genre": ["Condition"], + "genre": [ + "Condition" + ], "datePublished": "2017-10-17T15:44:39+00:00", - "dateModified": "2022-12-02T16:38:26+00:00", + "dateModified": "2024-03-07T16:55:34+00:00", "lastReviewed": [ "2022-11-29T00:00:00+00:00", "2025-11-29T00:00:00+00:00" ], "reviewDue": "2025-11-29T00:00:00+00:00", "keywords": "", - "alternateName": ["Vestibular schwannoma"], + "alternateName": [ + "Vestibular schwannoma" + ], "code": [ { "@type": "MedicalCode", @@ -145,26 +157,30 @@ } ] }, - "url": "https://api.service.nhs.uk/nhs-website-content/conditions/acoustic-neuroma/", + "url": "https://www.nhs.uk/conditions/acoustic-neuroma/", "name": "Acoustic neuroma (vestibular schwannoma)" }, { - "description": "Find out about acromegaly, a rare condition where the body produces too much growth hormone causing tissue and bone to grow more quickly. Read about symptoms, causes, diagnosis and treatment.", + "description": "Find out about acromegaly, the abnormal growth of hands, feet and other body parts. This includes the symptoms, when to get medical help and how it's treated.", "linkRelationship": "Result", "@type": "LinkRole", "articleStatus": "published", "mainEntityOfPage": { "@type": "MedicalWebPage", - "genre": ["Condition"], + "genre": [ + "Condition" + ], "datePublished": "2017-10-17T15:17:11+00:00", - "dateModified": "2022-10-10T10:39:06+00:00", + "dateModified": "2025-02-20T13:26:16+00:00", "lastReviewed": [ - "2020-10-12T00:00:00+00:00", - "2023-10-12T00:00:00+00:00" + "2024-12-19T01:00:00+00:00", + "2027-12-19T01:00:00+00:00" ], - "reviewDue": "2023-10-12T00:00:00+00:00", + "reviewDue": "2027-12-19T01:00:00+00:00", "keywords": "", - "alternateName": ["Gigantism"], + "alternateName": [ + "Gigantism" + ], "code": [ { "@type": "MedicalCode", @@ -173,7 +189,7 @@ } ] }, - "url": "https://api.service.nhs.uk/nhs-website-content/conditions/acromegaly/", + "url": "https://www.nhs.uk/conditions/acromegaly/", "name": "Acromegaly" }, { @@ -183,9 +199,11 @@ "articleStatus": "published", "mainEntityOfPage": { "@type": "MedicalWebPage", - "genre": ["Test"], + "genre": [ + "Test" + ], "datePublished": "2018-08-28T16:15:09+00:00", - "dateModified": "2022-05-30T12:17:41+00:00", + "dateModified": "2025-02-20T13:29:47+00:00", "lastReviewed": [ "2022-05-24T00:00:00+00:00", "2025-05-24T00:00:00+00:00" @@ -200,7 +218,7 @@ } ] }, - "url": "https://api.service.nhs.uk/nhs-website-content/conditions/acr-test/", + "url": "https://www.nhs.uk/conditions/acr-test/", "name": "Urine albumin to creatinine ratio (ACR)" }, { @@ -210,16 +228,20 @@ "articleStatus": "published", "mainEntityOfPage": { "@type": "MedicalWebPage", - "genre": ["Condition"], + "genre": [ + "Condition" + ], "datePublished": "2017-10-17T15:23:05+00:00", - "dateModified": "2021-11-18T15:26:11+00:00", + "dateModified": "2023-07-04T10:02:21+00:00", "lastReviewed": [ - "2020-06-08T00:00:00+00:00", - "2023-06-08T00:00:00+00:00" + "2023-06-14T00:00:00+00:00", + "2026-06-14T00:00:00+00:00" ], - "reviewDue": "2023-06-08T00:00:00+00:00", + "reviewDue": "2026-06-14T00:00:00+00:00", "keywords": "", - "alternateName": ["Solar keratoses"], + "alternateName": [ + "Solar keratoses" + ], "code": [ { "@type": "MedicalCode", @@ -228,7 +250,7 @@ } ] }, - "url": "https://api.service.nhs.uk/nhs-website-content/conditions/actinic-keratoses/", + "url": "https://www.nhs.uk/conditions/actinic-keratoses/", "name": "Actinic keratoses (solar keratoses)" }, { @@ -238,14 +260,16 @@ "articleStatus": "published", "mainEntityOfPage": { "@type": "MedicalWebPage", - "genre": ["Treatment"], + "genre": [ + "Treatment" + ], "datePublished": "2017-10-17T15:41:00+00:00", - "dateModified": "2021-11-18T15:26:12+00:00", + "dateModified": "2024-05-08T11:35:23+00:00", "lastReviewed": [ - "2019-08-13T00:00:00+00:00", - "2022-08-13T00:00:00+00:00" + "2023-02-28T02:00:00+00:00", + "2026-02-28T03:00:00+00:00" ], - "reviewDue": "2022-08-13T00:00:00+00:00", + "reviewDue": "2026-02-28T03:00:00+00:00", "keywords": "", "code": [ { @@ -255,7 +279,7 @@ } ] }, - "url": "https://api.service.nhs.uk/nhs-website-content/conditions/acupuncture/", + "url": "https://www.nhs.uk/conditions/acupuncture/", "name": "Acupuncture" }, { @@ -265,16 +289,21 @@ "articleStatus": "published", "mainEntityOfPage": { "@type": "MedicalWebPage", - "genre": ["Condition"], + "genre": [ + "Condition" + ], "datePublished": "2017-10-17T15:30:37+00:00", - "dateModified": "2022-05-30T14:33:13+00:00", + "dateModified": "2023-12-18T14:58:04+00:00", "lastReviewed": [ - "2019-08-07T00:00:00+00:00", - "2022-08-07T00:00:00+00:00" + "2023-02-21T01:00:00+00:00", + "2026-02-21T01:00:00+00:00" ], - "reviewDue": "2022-08-07T00:00:00+00:00", + "reviewDue": "2026-02-21T01:00:00+00:00", "keywords": "", - "alternateName": ["Gallbladder pain", "Cholecystitis (acute)"], + "alternateName": [ + "Gallbladder pain", + "Cholecystitis (acute)" + ], "code": [ { "@type": "MedicalCode", @@ -283,7 +312,7 @@ } ] }, - "url": "https://api.service.nhs.uk/nhs-website-content/conditions/acute-cholecystitis/", + "url": "https://www.nhs.uk/conditions/acute-cholecystitis/", "name": "Acute cholecystitis" }, { @@ -293,7 +322,9 @@ "articleStatus": "published", "mainEntityOfPage": { "@type": "MedicalWebPage", - "genre": ["Condition"], + "genre": [ + "Condition" + ], "datePublished": "2018-10-03T19:55:51+00:00", "dateModified": "2022-09-13T14:52:40+00:00", "lastReviewed": [ @@ -310,24 +341,26 @@ } ] }, - "url": "https://api.service.nhs.uk/nhs-website-content/conditions/acute-kidney-injury/", + "url": "https://www.nhs.uk/conditions/acute-kidney-injury/", "name": "Acute kidney injury" }, { - "description": "Read about acute respiratory distress syndrome (ARDS), which is a life-threatening condition where the lungs cannot provide the body's vital organs with enough oxygen.", + "description": "Find out about acute respiratory distress syndrome, including who’s at risk of getting it, the symptoms, how it’s treated and what causes it.", "linkRelationship": "Result", "@type": "LinkRole", "articleStatus": "published", "mainEntityOfPage": { "@type": "MedicalWebPage", - "genre": ["Condition"], + "genre": [ + "Condition" + ], "datePublished": "2017-10-17T15:27:22+00:00", - "dateModified": "2023-01-16T09:10:43+00:00", + "dateModified": "2024-06-18T15:33:56+00:00", "lastReviewed": [ - "2020-03-12T00:00:00+00:00", - "2023-03-12T00:00:00+00:00" + "2023-07-11T23:00:00+00:00", + "2026-07-11T23:00:00+00:00" ], - "reviewDue": "2023-03-12T00:00:00+00:00", + "reviewDue": "2026-07-11T23:00:00+00:00", "keywords": "", "code": [ { @@ -337,24 +370,27 @@ } ] }, - "url": "https://api.service.nhs.uk/nhs-website-content/conditions/acute-respiratory-distress-syndrome/", - "name": "Acute respiratory distress syndrome" + "url": "https://www.nhs.uk/conditions/acute-respiratory-distress-syndrome/", + "name": "Acute respiratory distress syndrome (ARDS)" }, { - "description": "Read about an adenoidectomy, a surgical procedure to remove the adenoids. Find out what the adenoids do, when they need to be removed and how the procedure is done.", + "description": "Find out what an adenoidectomy is, why it's done, what happens during the operation and the possible complications.", "linkRelationship": "Result", "@type": "LinkRole", "articleStatus": "published", "mainEntityOfPage": { "@type": "MedicalWebPage", - "genre": [], + "genre": [ + "Treatment", + "Procedure" + ], "datePublished": "2017-10-17T15:31:58+00:00", - "dateModified": "2023-01-12T11:20:41+00:00", + "dateModified": "2024-06-18T15:29:14+00:00", "lastReviewed": [ - "2020-02-10T15:37:00+00:00", - "2023-02-10T15:37:00+00:00" + "2023-03-10T15:37:00+00:00", + "2026-03-10T15:37:00+00:00" ], - "reviewDue": "2023-02-10T15:37:00+00:00", + "reviewDue": "2026-03-10T15:37:00+00:00", "keywords": "", "code": [ { @@ -364,37 +400,9 @@ } ] }, - "url": "https://api.service.nhs.uk/nhs-website-content/conditions/adenoids-and-adenoidectomy/", + "url": "https://www.nhs.uk/conditions/adenoidectomy/", "name": "Adenoidectomy" }, - { - "description": "An air or gas embolism is a serious problem that can happen to scuba divers and during some medical procedures. Read about the causes, symptoms and treatments.", - "linkRelationship": "Result", - "@type": "LinkRole", - "articleStatus": "published", - "mainEntityOfPage": { - "@type": "MedicalWebPage", - "genre": ["Condition"], - "datePublished": "2017-12-01T09:45:51+00:00", - "dateModified": "2021-11-18T15:26:18+00:00", - "lastReviewed": [ - "2020-12-16T00:00:00+00:00", - "2023-12-16T00:00:00+00:00" - ], - "reviewDue": "2023-12-16T00:00:00+00:00", - "keywords": "", - "alternateName": ["Decompression sickness"], - "code": [ - { - "@type": "MedicalCode", - "codeValue": "", - "codingSystem": "SNOMED-CT" - } - ] - }, - "url": "https://api.service.nhs.uk/nhs-website-content/conditions/air-embolism/", - "name": "Air or gas embolism" - }, { "description": "Find out about alcohol poisoning, what the symptoms are, what to do if you think you or someone else has it, what the treatments are and what causes it.", "linkRelationship": "Result", @@ -402,9 +410,11 @@ "articleStatus": "published", "mainEntityOfPage": { "@type": "MedicalWebPage", - "genre": ["Condition"], + "genre": [ + "Condition" + ], "datePublished": "2017-10-17T15:40:36+00:00", - "dateModified": "2023-01-12T12:26:14+00:00", + "dateModified": "2024-06-19T13:14:22+00:00", "lastReviewed": [ "2023-01-11T01:00:00+00:00", "2026-01-11T01:00:00+00:00" @@ -419,7 +429,7 @@ } ] }, - "url": "https://api.service.nhs.uk/nhs-website-content/conditions/alcohol-poisoning/", + "url": "https://www.nhs.uk/conditions/alcohol-poisoning/", "name": "Alcohol poisoning" }, { @@ -429,14 +439,16 @@ "articleStatus": "published", "mainEntityOfPage": { "@type": "MedicalWebPage", - "genre": ["Treatment"], + "genre": [ + "Treatment" + ], "datePublished": "2017-10-17T16:16:34+00:00", - "dateModified": "2021-11-18T15:26:20+00:00", + "dateModified": "2024-10-30T14:29:26+00:00", "lastReviewed": [ - "2021-09-06T00:00:00+00:00", - "2024-09-06T00:00:00+00:00" + "2024-10-23T00:00:00+00:00", + "2027-10-23T00:00:00+00:00" ], - "reviewDue": "2024-09-06T00:00:00+00:00", + "reviewDue": "2027-10-23T00:00:00+00:00", "keywords": "", "code": [ { @@ -446,7 +458,7 @@ } ] }, - "url": "https://api.service.nhs.uk/nhs-website-content/conditions/alexander-technique/", + "url": "https://www.nhs.uk/conditions/alexander-technique/", "name": "Alexander technique" }, { @@ -456,9 +468,11 @@ "articleStatus": "published", "mainEntityOfPage": { "@type": "MedicalWebPage", - "genre": ["Condition"], + "genre": [ + "Condition" + ], "datePublished": "2017-10-24T10:34:28+00:00", - "dateModified": "2022-05-30T14:54:22+00:00", + "dateModified": "2024-10-15T08:00:59+00:00", "lastReviewed": [ "2022-03-10T00:00:00+00:00", "2025-03-10T00:00:00+00:00" @@ -473,7 +487,7 @@ } ] }, - "url": "https://api.service.nhs.uk/nhs-website-content/conditions/alkaptonuria/", + "url": "https://www.nhs.uk/conditions/alkaptonuria/", "name": "Alkaptonuria" }, { @@ -483,14 +497,17 @@ "articleStatus": "published", "mainEntityOfPage": { "@type": "MedicalWebPage", - "genre": ["Procedure", "Treatment"], + "genre": [ + "Treatment", + "Procedure" + ], "datePublished": "2017-10-17T15:47:57+00:00", - "dateModified": "2022-12-15T08:28:26+00:00", + "dateModified": "2025-03-05T15:03:51+00:00", "lastReviewed": [ - "2019-08-12T00:00:00+00:00", - "2022-08-09T00:00:00+00:00" + "2023-02-17T01:00:00+00:00", + "2026-02-17T01:00:00+00:00" ], - "reviewDue": "2022-08-09T00:00:00+00:00", + "reviewDue": "2026-02-17T01:00:00+00:00", "keywords": "", "code": [ { @@ -500,24 +517,26 @@ } ] }, - "url": "https://api.service.nhs.uk/nhs-website-content/conditions/amputation/", + "url": "https://www.nhs.uk/conditions/amputation/", "name": "Amputation" }, { - "description": "Read about amyloidosis, a group of rare but serious conditions caused by deposits of abnormal protein called amyloid found in tissues and organs throughout the body.", + "description": "Find out about amyloidosis, including what the symptoms are, when and where to get medical help, the causes and how it's treated.", "linkRelationship": "Result", "@type": "LinkRole", "articleStatus": "published", "mainEntityOfPage": { "@type": "MedicalWebPage", - "genre": ["Condition"], + "genre": [ + "Condition" + ], "datePublished": "2017-10-17T15:48:36+00:00", - "dateModified": "2021-11-18T15:26:23+00:00", + "dateModified": "2025-02-28T12:50:27+00:00", "lastReviewed": [ - "2020-09-17T00:00:00+00:00", - "2023-09-17T00:00:00+00:00" + "2023-08-23T00:00:00+00:00", + "2026-08-23T00:00:00+00:00" ], - "reviewDue": "2023-09-17T00:00:00+00:00", + "reviewDue": "2026-08-23T00:00:00+00:00", "keywords": "", "code": [ { @@ -527,7 +546,7 @@ } ] }, - "url": "https://api.service.nhs.uk/nhs-website-content/conditions/amyloidosis/", + "url": "https://www.nhs.uk/conditions/amyloidosis/", "name": "Amyloidosis" }, { @@ -537,16 +556,20 @@ "articleStatus": "published", "mainEntityOfPage": { "@type": "WebPage", - "genre": ["Advice or information"], + "genre": [ + "Advice or information" + ], "datePublished": "2017-10-17T15:50:01+00:00", - "dateModified": "2022-11-04T09:39:37+00:00", + "dateModified": "2024-11-27T11:27:43+00:00", "lastReviewed": [ "2022-04-13T09:37:00+00:00", "2025-04-13T09:37:00+00:00" ], "reviewDue": "2025-04-13T09:37:00+00:00", "keywords": "", - "alternateName": ["Steroid misuse"], + "alternateName": [ + "Steroid misuse" + ], "code": [ { "@type": "MedicalCode", @@ -555,25 +578,126 @@ } ] }, - "url": "https://api.service.nhs.uk/nhs-website-content/conditions/anabolic-steroid-misuse/", + "url": "https://www.nhs.uk/conditions/anabolic-steroid-misuse/", "name": "Anabolic steroid misuse" }, { - "description": "Find out about different types of anaesthetics, how they work, and the potential side effects. Also, read about the role of the anaesthetist.", + "description": "Find out what causes anal pain, what you can do to ease the pain and when to get medical help.", + "linkRelationship": "Result", + "@type": "LinkRole", + "articleStatus": "published", + "mainEntityOfPage": { + "@type": "MedicalWebPage", + "genre": [ + "Symptom" + ], + "datePublished": "2017-10-17T15:49:36+00:00", + "dateModified": "2024-07-30T09:40:04+00:00", + "lastReviewed": [ + "2022-03-15T01:00:00+00:00", + "2025-03-15T01:00:00+00:00" + ], + "reviewDue": "2025-03-15T01:00:00+00:00", + "keywords": "", + "alternateName": [ + "Proctalgia" + ], + "code": [ + { + "@type": "MedicalCode", + "codeValue": "", + "codingSystem": "SNOMED-CT" + } + ] + }, + "url": "https://www.nhs.uk/conditions/anal-pain/", + "name": "Anal pain" + }, + { + "description": "Read about Angelman syndrome, a genetic disorder that affects the nervous system and causes severe physical and intellectual disability", + "linkRelationship": "Result", + "@type": "LinkRole", + "articleStatus": "published", + "mainEntityOfPage": { + "@type": "MedicalWebPage", + "genre": [ + "Condition" + ], + "datePublished": "2017-10-17T16:28:17+00:00", + "dateModified": "2023-04-13T10:12:21+00:00", + "lastReviewed": [ + "2023-03-09T01:00:00+00:00", + "2026-03-09T01:00:00+00:00" + ], + "reviewDue": "2026-03-09T01:00:00+00:00", + "keywords": "", + "code": [ + { + "@type": "MedicalCode", + "codeValue": "", + "codingSystem": "SNOMED-CT" + } + ] + }, + "url": "https://www.nhs.uk/conditions/angelman-syndrome/", + "name": "Angelman syndrome" + }, + { + "description": "Find out what to do if you’ve been bitten by an animal or person, including first aid advice, when to get medical help and what treatment you may need.", + "linkRelationship": "Result", + "@type": "LinkRole", + "articleStatus": "published", + "mainEntityOfPage": { + "@type": "MedicalWebPage", + "genre": [ + "Accident or injury" + ], + "datePublished": "2017-10-17T15:53:13+00:00", + "dateModified": "2024-06-18T15:43:26+00:00", + "lastReviewed": [ + "2022-06-22T23:00:00+00:00", + "2025-06-22T23:00:00+00:00" + ], + "reviewDue": "2025-06-22T23:00:00+00:00", + "keywords": "", + "alternateName": [ + "Bite (animal or human)", + "Cat bites", + "Dog bites", + "Human bites" + ], + "code": [ + { + "@type": "MedicalCode", + "codeValue": "", + "codingSystem": "SNOMED-CT" + } + ] + }, + "url": "https://www.nhs.uk/conditions/animal-and-human-bites/", + "name": "Animal and human bites" + }, + { + "description": "Find out about the symptoms of heart rhythm problems and what causes them, and when you should see a GP.", "linkRelationship": "Result", "@type": "LinkRole", "articleStatus": "published", "mainEntityOfPage": { "@type": "MedicalWebPage", - "genre": ["Medicine"], - "datePublished": "2017-10-17T15:49:39+00:00", - "dateModified": "2021-11-18T15:26:25+00:00", + "genre": [ + "Condition" + ], + "datePublished": "2018-02-19T15:41:03+00:00", + "dateModified": "2025-04-08T14:24:30+00:00", "lastReviewed": [ - "2021-09-23T00:00:00+00:00", - "2024-09-23T00:00:00+00:00" + "2024-10-28T00:00:00+00:00", + "2027-10-27T23:00:00+00:00" ], - "reviewDue": "2024-09-23T00:00:00+00:00", + "reviewDue": "2027-10-27T23:00:00+00:00", "keywords": "", + "alternateName": [ + "Arrhythmia" + ], "code": [ { "@type": "MedicalCode", @@ -582,24 +706,26 @@ } ] }, - "url": "https://api.service.nhs.uk/nhs-website-content/conditions/anaesthesia/", - "name": "Anaesthesia" + "url": "https://www.nhs.uk/conditions/arrhythmia/", + "name": "Heart rhythm problems (arrhythmia)" }, { - "description": "Anal cancer is a rare type of cancer that affects the anus. Get information and advice about symptoms, causes and treatments.", + "description": "Find out about intrauterine (artificial) insemination, or IUI, a procedure to help you get pregnant where sperm are put directly into your womb.", "linkRelationship": "Result", "@type": "LinkRole", "articleStatus": "published", "mainEntityOfPage": { "@type": "MedicalWebPage", - "genre": ["Condition"], - "datePublished": "2017-10-17T16:08:41+00:00", - "dateModified": "2022-07-12T15:04:44+00:00", + "genre": [ + "Procedure" + ], + "datePublished": "2017-10-17T16:07:35+00:00", + "dateModified": "2024-09-03T09:01:52+00:00", "lastReviewed": [ - "2021-03-08T01:00:00+00:00", - "2024-03-08T01:00:00+00:00" + "2024-06-24T23:00:00+00:00", + "2027-06-24T23:00:00+00:00" ], - "reviewDue": "2024-03-08T01:00:00+00:00", + "reviewDue": "2027-06-24T23:00:00+00:00", "keywords": "", "code": [ { @@ -609,39 +735,96 @@ } ] }, - "url": "https://api.service.nhs.uk/nhs-website-content/conditions/anal-cancer/", - "name": "Anal cancer" + "url": "https://www.nhs.uk/conditions/intrauterine-insemination-iui/", + "name": "Intrauterine insemination (IUI)" + }, + { + "description": "Asbestosis is a serious lung condition caused by exposure to asbestos – a building material used mostly from the 1950s to the 1990s.", + "linkRelationship": "Result", + "@type": "LinkRole", + "articleStatus": "published", + "mainEntityOfPage": { + "@type": "MedicalWebPage", + "genre": [ + "Condition" + ], + "datePublished": "2017-10-17T16:02:11+00:00", + "dateModified": "2024-03-20T15:19:22+00:00", + "lastReviewed": [ + "2023-07-31T15:03:00+00:00", + "2026-07-31T00:00:00+00:00" + ], + "reviewDue": "2026-07-31T00:00:00+00:00", + "keywords": "", + "code": [ + { + "@type": "MedicalCode", + "codeValue": "", + "codingSystem": "SNOMED-CT" + } + ] + }, + "url": "https://www.nhs.uk/conditions/asbestosis/", + "name": "Asbestosis" + }, + { + "description": "Find out more about atherosclerosis, what the symptoms are, how you can help stop it getting worse, how it's treated and what causes it.", + "linkRelationship": "Result", + "@type": "LinkRole", + "articleStatus": "published", + "mainEntityOfPage": { + "@type": "MedicalWebPage", + "genre": [ + "Condition" + ], + "datePublished": "2017-10-17T15:59:05+00:00", + "dateModified": "2024-11-27T11:55:44+00:00", + "lastReviewed": [ + "2023-01-30T01:00:00+00:00", + "2026-01-30T01:00:00+00:00" + ], + "reviewDue": "2026-01-30T01:00:00+00:00", + "keywords": "", + "code": [ + { + "@type": "MedicalCode", + "codeValue": "", + "codingSystem": "SNOMED-CT" + } + ] + }, + "url": "https://www.nhs.uk/conditions/atherosclerosis/", + "name": "Atherosclerosis" } ], "relatedLink": [ { "@type": "LinkRole", - "url": "https://api.service.nhs.uk/nhs-website-content/conditions/?page=1", + "url": "https://www.nhs.uk/conditions/?page=1", "name": "First Page", "description": "Link to First Page", "linkRelationship": "Pagination" }, { "@type": "LinkRole", - "url": "https://api.service.nhs.uk/nhs-website-content/conditions/?page=191", + "url": "https://www.nhs.uk/conditions/?page=40", "name": "Last Page", "description": "Link to Last Page", "linkRelationship": "Pagination" }, { "@type": "LinkRole", - "url": "https://api.service.nhs.uk/nhs-website-content/conditions/", + "url": "https://www.nhs.uk/conditions/", "name": "Self", "description": "Link to nhs.uk Page", "linkRelationship": "Self" }, { "@type": "LinkRole", - "url": "https://api.service.nhs.uk/nhs-website-content/conditions/?page=2", + "url": "https://www.nhs.uk/conditions/?page=2", "name": "Next Page", "description": "Link to Next Page", "linkRelationship": "Pagination" } - ], - "webpage": "https://www.nhs.uk/conditions/" -} + ] +} \ No newline at end of file diff --git a/specification/components/examples/MedicinesAToZ.json b/specification/components/examples/MedicinesAToZ.json index 7fa0c38..426853e 100644 --- a/specification/components/examples/MedicinesAToZ.json +++ b/specification/components/examples/MedicinesAToZ.json @@ -69,382 +69,29 @@ "dateModified": "2023-02-03T11:54:08+00:00", "@type": "MedicalWebPage" } - }, - { - "@type": "LinkRole", - "name": "Adalimumab", - "articleStatus": "published", - "linkRelationship": "Result", - "url": "https://api.service.nhs.uk/nhs-website-content/medicines/adalimumab/", - "description": "Brand names: Humira, Amgevita, Hyrimoz, Idacio, Imraldi, Yuflyma. Find out how adalimumab treats swelling (inflammation), and how to take it.", - "mainEntityOfPage": { - "genre": ["Medicine"], - "lastReviewed": null, - "dateModified": "2023-03-15T14:52:10+00:00", - "@type": "MedicalWebPage" - } - }, - { - "@type": "LinkRole", - "name": "Alendronic acid", - "articleStatus": "published", - "linkRelationship": "Result", - "url": "https://api.service.nhs.uk/nhs-website-content/medicines/alendronic-acid/", - "description": "NHS medicines information on alendronic acid \u2013 what it's used for, side effects, dosage and who can take it.", - "mainEntityOfPage": { - "genre": ["Medicine"], - "lastReviewed": [ - "2021-09-10T14:00:00+00:00", - "2024-09-10T14:00:00+00:00" - ], - "dateModified": "2022-04-28T13:08:51+00:00", - "@type": "MedicalWebPage" - } - }, - { - "@type": "LinkRole", - "name": "Allopurinol", - "articleStatus": "published", - "linkRelationship": "Result", - "url": "https://api.service.nhs.uk/nhs-website-content/medicines/allopurinol/", - "description": "Find out how allopurinol treats gout and how to take it.", - "mainEntityOfPage": { - "genre": ["Medicine"], - "lastReviewed": null, - "dateModified": "2023-03-15T14:53:01+00:00", - "@type": "MedicalWebPage" - } - }, - { - "@type": "LinkRole", - "name": "Alogliptin", - "articleStatus": "published", - "linkRelationship": "Result", - "url": "https://api.service.nhs.uk/nhs-website-content/medicines/alogliptin/", - "description": "Brand name: Vipidia. Find out how alogliptin treats type 2 diabetes, and how to take it.", - "mainEntityOfPage": { - "genre": ["Medicine"], - "lastReviewed": null, - "dateModified": "2023-03-15T14:57:00+00:00", - "@type": "MedicalWebPage" - } - }, - { - "@type": "LinkRole", - "name": "Amitriptyline for depression", - "articleStatus": "published", - "linkRelationship": "Result", - "url": "https://api.service.nhs.uk/nhs-website-content/medicines/amitriptyline-for-depression/", - "description": "NHS medicines information on amitriptyline for depression \u2013 how it works, side effects, dosage and who can take it.", - "mainEntityOfPage": { - "genre": ["Medicine"], - "lastReviewed": [ - "2021-09-09T10:00:00+00:00", - "2024-09-09T10:00:00+00:00" - ], - "dateModified": "2022-12-08T11:00:05+00:00", - "@type": "MedicalWebPage" - } - }, - { - "@type": "LinkRole", - "name": "Amitriptyline for pain and migraine", - "articleStatus": "published", - "linkRelationship": "Result", - "url": "https://api.service.nhs.uk/nhs-website-content/medicines/amitriptyline-for-pain/", - "description": "NHS medicines information on amitriptyline for pain - how it works, side effects, dosage and who can take it.", - "mainEntityOfPage": { - "genre": ["Medicine"], - "lastReviewed": [ - "2020-09-15T23:00:00+00:00", - "2023-09-15T23:00:00+00:00" - ], - "dateModified": "2022-12-19T11:41:00+00:00", - "@type": "MedicalWebPage" - } - }, - { - "@type": "LinkRole", - "name": "Amlodipine", - "articleStatus": "published", - "linkRelationship": "Result", - "url": "https://api.service.nhs.uk/nhs-website-content/medicines/amlodipine/", - "description": "Brand name: Istin. Find out how amlodipine treats high blood pressure and helps to prevent heart disease, and how to take it.", - "mainEntityOfPage": { - "genre": ["Medicine"], - "lastReviewed": null, - "dateModified": "2023-03-15T14:58:27+00:00", - "@type": "MedicalWebPage" - } - }, - { - "@type": "LinkRole", - "name": "Amoxicillin", - "articleStatus": "published", - "linkRelationship": "Result", - "url": "https://api.service.nhs.uk/nhs-website-content/medicines/amoxicillin/", - "description": "NHS medicines information on amoxicillin \u2013 what it's used for, side effects, dosage and who can take it.", - "mainEntityOfPage": { - "genre": ["Medicine"], - "lastReviewed": [ - "2021-11-12T15:00:00+00:00", - "2024-11-12T15:00:00+00:00" - ], - "dateModified": "2023-03-17T11:19:20+00:00", - "@type": "MedicalWebPage" - } - }, - { - "@type": "LinkRole", - "name": "Anastrozole", - "articleStatus": "published", - "linkRelationship": "Result", - "url": "https://api.service.nhs.uk/nhs-website-content/medicines/anastrozole/", - "description": "NHS medicines information on anastrozole \u2013 what it's used for, side effects, dosage and who can take it.", - "mainEntityOfPage": { - "genre": ["Medicine"], - "lastReviewed": [ - "2021-06-02T10:21:00+00:00", - "2024-06-02T10:21:00+00:00" - ], - "dateModified": "2022-10-21T10:30:42+00:00", - "@type": "MedicalWebPage" - } - }, - { - "@type": "LinkRole", - "name": "Apixaban", - "articleStatus": "published", - "linkRelationship": "Result", - "url": "https://api.service.nhs.uk/nhs-website-content/medicines/apixaban/", - "description": "Find out how apixaban helps to prevent blood clots and reduces risk of heart attacks and stroke, and how to take it.", - "mainEntityOfPage": { - "genre": ["Medicine"], - "lastReviewed": null, - "dateModified": "2023-03-15T14:58:54+00:00", - "@type": "MedicalWebPage" - } - }, - { - "@type": "LinkRole", - "name": "Aspirin for pain relief", - "articleStatus": "published", - "linkRelationship": "Result", - "url": "https://api.service.nhs.uk/nhs-website-content/medicines/aspirin-for-pain-relief/", - "description": "Find out more about how aspirin is used for pain relief, and how to take or use it.", - "mainEntityOfPage": { - "genre": ["Medicine"], - "lastReviewed": null, - "dateModified": "2023-03-15T14:59:26+00:00", - "@type": "MedicalWebPage" - } - }, - { - "@type": "LinkRole", - "name": "Atenolol", - "articleStatus": "published", - "linkRelationship": "Result", - "url": "https://api.service.nhs.uk/nhs-website-content/medicines/atenolol/", - "description": "Brand name: Tenormin. Find out how atenolol treats high blood pressure (hypertension), irregular heartbeats (arrhythmia) and angina, and how to take it.", - "mainEntityOfPage": { - "genre": ["Medicine"], - "lastReviewed": null, - "dateModified": "2023-03-15T15:00:59+00:00", - "@type": "MedicalWebPage" - } - }, - { - "@type": "LinkRole", - "name": "Atorvastatin", - "articleStatus": "published", - "linkRelationship": "Result", - "url": "https://api.service.nhs.uk/nhs-website-content/medicines/atorvastatin/", - "description": "Brand name: Lipitor. Find out how atorvastatin treats heart problems and how to take it.", - "mainEntityOfPage": { - "genre": ["Medicine"], - "lastReviewed": null, - "dateModified": "2023-03-15T15:01:41+00:00", - "@type": "MedicalWebPage" - } - }, - { - "@type": "LinkRole", - "name": "Azathioprine", - "articleStatus": "published", - "linkRelationship": "Result", - "url": "https://api.service.nhs.uk/nhs-website-content/medicines/azathioprine/", - "description": "Find out how azathioprine treats conditions that affect the immune system such as rheumatoid arthritis, Crohn's disease and ulcerative colitis, skin conditions such as lupus, and helps after an organ transplant, and how to take it.", - "mainEntityOfPage": { - "genre": ["Medicine"], - "lastReviewed": null, - "dateModified": "2023-03-15T15:02:11+00:00", - "@type": "MedicalWebPage" - } - }, - { - "@type": "LinkRole", - "name": "Azithromycin", - "articleStatus": "published", - "linkRelationship": "Result", - "url": "https://api.service.nhs.uk/nhs-website-content/medicines/azithromycin/", - "description": "Brand name: Zithromax. Find out how azithromycin treats infections and how to take it.", - "mainEntityOfPage": { - "genre": ["Medicine"], - "lastReviewed": null, - "dateModified": "2023-03-15T15:02:43+00:00", - "@type": "MedicalWebPage" - } - }, - { - "@type": "LinkRole", - "name": "Baclofen", - "articleStatus": "published", - "linkRelationship": "Result", - "url": "https://api.service.nhs.uk/nhs-website-content/medicines/baclofen/", - "description": "Brand names: Lioresal, Lyflex. Find out how baclofen relieves muscles spasms and helps manage conditions cerebral palsy, meningitis, motor neurone disease and multiple sclerosis.", - "mainEntityOfPage": { - "genre": ["Medicine"], - "lastReviewed": null, - "dateModified": "2023-03-15T15:03:20+00:00", - "@type": "MedicalWebPage" - } - }, - { - "@type": "LinkRole", - "name": "Beclometasone inhalers", - "articleStatus": "published", - "linkRelationship": "Result", - "url": "https://api.service.nhs.uk/nhs-website-content/medicines/beclometasone-inhalers/", - "description": "Find out how beclometasone inhalers treat asthma and chronic obstructive pulmonary disease (COPD) and how to use them.", - "mainEntityOfPage": { - "genre": ["Medicine"], - "lastReviewed": null, - "dateModified": "2023-03-24T17:14:13+00:00", - "@type": "MedicalWebPage" - } - }, - { - "@type": "LinkRole", - "name": "Beclometasone nasal spray", - "articleStatus": "published", - "linkRelationship": "Result", - "url": "https://api.service.nhs.uk/nhs-website-content/medicines/beclometasone-nasal-spray/", - "description": "Find out how beclometasone nasal spray treats allergic rhinitis including hay fever, and how to take it.", - "mainEntityOfPage": { - "genre": ["Medicine"], - "lastReviewed": null, - "dateModified": "2023-03-17T15:22:23+00:00", - "@type": "MedicalWebPage" - } - }, - { - "@type": "LinkRole", - "name": "Beclometasone skin creams", - "articleStatus": "published", - "linkRelationship": "Result", - "url": "https://api.service.nhs.uk/nhs-website-content/medicines/beclometasone-skin-creams/", - "description": "NHS medicines information on beclometasone skin creams - what they are used for, who can use them, how to apply them, side effects and dosage.", - "mainEntityOfPage": { - "genre": ["Medicine"], - "lastReviewed": [ - "2020-06-30T16:10:00+00:00", - "2023-06-30T16:10:00+00:00" - ], - "dateModified": "2023-03-17T15:40:27+00:00", - "@type": "MedicalWebPage" - } - }, - { - "@type": "LinkRole", - "name": "Beclometasone tablets", - "articleStatus": "published", - "linkRelationship": "Result", - "url": "https://api.service.nhs.uk/nhs-website-content/medicines/beclometasone-tablets/", - "description": "Find out how beclometasone tablets treat ulcerative colitis and how to take them.", - "mainEntityOfPage": { - "genre": ["Medicine"], - "lastReviewed": null, - "dateModified": "2023-03-15T15:04:59+00:00", - "@type": "MedicalWebPage" - } - }, - { - "@type": "LinkRole", - "name": "Bendroflumethiazide", - "articleStatus": "published", - "linkRelationship": "Result", - "url": "https://api.service.nhs.uk/nhs-website-content/medicines/bendroflumethiazide/", - "description": "NHS medicines information on bendroflumethiazide - what it's used for, side effects, dosage and who can take it.", - "mainEntityOfPage": { - "genre": ["Medicine"], - "lastReviewed": [ - "2021-07-27T23:00:00+00:00", - "2024-07-27T23:00:00+00:00" - ], - "dateModified": "2023-03-15T13:49:23+00:00", - "@type": "MedicalWebPage" - } - }, - { - "@type": "LinkRole", - "name": "Benzoyl peroxide", - "articleStatus": "published", - "linkRelationship": "Result", - "url": "https://api.service.nhs.uk/nhs-website-content/medicines/benzoyl-peroxide/", - "description": "Find out how benzoyl peroxide treats acne and how to use it.", - "mainEntityOfPage": { - "genre": ["Medicine"], - "lastReviewed": null, - "dateModified": "2023-03-15T15:05:25+00:00", - "@type": "MedicalWebPage" - } - }, - { - "@type": "LinkRole", - "name": "Benzydamine", - "articleStatus": "published", - "linkRelationship": "Result", - "url": "https://api.service.nhs.uk/nhs-website-content/medicines/benzydamine/", - "description": "NHS information on benzydamine - what it's used for, side effects, dosage and who can take it.", - "mainEntityOfPage": { - "genre": ["Medicine"], - "lastReviewed": [ - "2021-06-10T09:58:00+00:00", - "2024-06-10T09:58:00+00:00" - ], - "dateModified": "2022-03-08T12:23:59+00:00", - "@type": "MedicalWebPage" - } } ], "relatedLink": [ { - "@type": "LinkRole", - "url": "https://api.service.nhs.uk/nhs-website-content/medicines/?page=1", - "name": "First Page", - "description": "Link to First Page", - "linkRelationship": "Pagination" + "@type": "LinkRole", + "url": "https://www.nhs.uk/medicines/?page=1", + "name": "First Page", + "description": "Link to First Page", + "linkRelationship": "Pagination" }, { - "@type": "LinkRole", - "url": "https://api.service.nhs.uk/nhs-website-content/medicines/?page=11", - "name": "Last Page", - "description": "Link to Last Page", - "linkRelationship": "Pagination" + "@type": "LinkRole", + "url": "https://www.nhs.uk/medicines/?page=1", + "name": "Last Page", + "description": "Link to Last Page", + "linkRelationship": "Pagination" }, { - "@type": "LinkRole", - "url": "https://api.service.nhs.uk/nhs-website-content/medicines/", - "name": "Self", - "description": "Link to nhs.uk Page", - "linkRelationship": "Self" - }, - { - "@type": "LinkRole", - "url": "https://api.service.nhs.uk/nhs-website-content/medicines/?page=2", - "name": "Next Page", - "description": "Link to Next Page", - "linkRelationship": "Pagination" + "@type": "LinkRole", + "url": "https://www.nhs.uk/medicines/", + "name": "Self", + "description": "Link to nhs.uk Page", + "linkRelationship": "Self" } ], "webpage": "https://www.nhs.uk/medicines/" diff --git a/specification/components/examples/SymptomsAToZ.json b/specification/components/examples/SymptomsAToZ.json new file mode 100644 index 0000000..9f399e1 --- /dev/null +++ b/specification/components/examples/SymptomsAToZ.json @@ -0,0 +1,115 @@ +{ + "@context": "http://schema.org", + "@type": "MedicalWebPage", + "name": "Symptoms A to Z", + "copyrightHolder": { + "name": "Crown Copyright", + "@type": "Organization" + }, + "license": "https://developer.api.nhs.uk/terms", + "author": { + "url": "https://www.nhs.uk", + "logo": "https://assets.nhs.uk/nhsuk-cms/images/nhs-attribution.width-510.png", + "email": "nhswebsite.servicedesk@nhs.net", + "@type": "Organization", + "name": "NHS website" + }, + "about": { + "@type": "WebPage", + "name": "Symptoms A to Z", + "alternateName": "" + }, + "description": "", + "url": "https://www.nhs.uk/symptoms/", + "genre": [], + "keywords": "", + "dateModified": "2025-03-26T14:51:24+00:00", + "breadcrumb": { + "@context": "http://schema.org", + "@type": "BreadcrumbList", + "itemListElement": [ + { + "@type": "ListItem", + "position": 0, + "item": { + "@id": "https://www.nhs.uk/symptoms/", + "name": "Symptoms A to Z", + "genre": [] + } + } + ] + }, + "contentSubTypes": [], + "significantLink": [ + { + "description": "Find out what you can do to ease ankle pain, what could be causing the pain and when to get medical help.", + "linkRelationship": "Result", + "@type": "LinkRole", + "articleStatus": "published", + "mainEntityOfPage": { + "@type": "MedicalWebPage", + "genre": [ + "Symptom" + ], + "datePublished": "2022-03-30T12:58:40+00:00", + "dateModified": "2025-03-26T14:50:35+00:00", + "lastReviewed": [ + "2022-02-22T08:29:00+00:00", + "2025-02-22T08:29:00+00:00" + ], + "reviewDue": "2025-02-22T08:29:00+00:00", + "keywords": "" + }, + "url": "https://www.nhs.uk/conditions/foot-pain/ankle-pain/", + "name": "Ankle pain" + }, + { + "description": "Find out about high blood pressure, including how to find out if you have it, what causes it and what you can do to lower it.", + "linkRelationship": "Result", + "@type": "LinkRole", + "articleStatus": "published", + "mainEntityOfPage": { + "@type": "MedicalWebPage", + "genre": [ + "Condition" + ], + "datePublished": "2024-07-22T15:12:33+00:00", + "dateModified": "2025-03-28T11:46:40+00:00", + "lastReviewed": [ + "2024-07-19T07:27:00+00:00", + "2027-07-19T07:27:00+00:00" + ], + "reviewDue": "2027-07-19T07:27:00+00:00", + "keywords": "", + "alternateName": [ + "Hypertension" + ] + }, + "url": "https://www.nhs.uk/conditions/high-blood-pressure/", + "name": "High blood pressure" + } + ], + "relatedLink": [ + { + "@type": "LinkRole", + "url": "https://www.nhs.uk/symptoms/?page=1", + "name": "First Page", + "description": "Link to First Page", + "linkRelationship": "Pagination" + }, + { + "@type": "LinkRole", + "url": "https://www.nhs.uk/symptoms/?page=1", + "name": "Last Page", + "description": "Link to Last Page", + "linkRelationship": "Pagination" + }, + { + "@type": "LinkRole", + "url": "https://www.nhs.uk/symptoms/", + "name": "Self", + "description": "Link to nhs.uk Page", + "linkRelationship": "Self" + } + ] +} \ No newline at end of file diff --git a/specification/components/examples/TestsAndTreatmentsAToZ.json b/specification/components/examples/TestsAndTreatmentsAToZ.json new file mode 100644 index 0000000..589d663 --- /dev/null +++ b/specification/components/examples/TestsAndTreatmentsAToZ.json @@ -0,0 +1,129 @@ +{ + "@context": "http://schema.org", + "@type": "MedicalWebPage", + "name": "Tests and treatments A to Z", + "copyrightHolder": { + "name": "Crown Copyright", + "@type": "Organization" + }, + "license": "https://developer.api.nhs.uk/terms", + "author": { + "url": "https://www.nhs.uk", + "logo": "https://assets.nhs.uk/nhsuk-cms/images/nhs-attribution.width-510.png", + "email": "nhswebsite.servicedesk@nhs.net", + "@type": "Organization", + "name": "NHS website" + }, + "about": { + "@type": "WebPage", + "name": "Tests and treatments A to Z", + "alternateName": "" + }, + "description": "", + "url": "https://www.nhs.uk/tests-and-treatments/", + "genre": [], + "keywords": "", + "dateModified": "2025-03-26T14:52:02+00:00", + "breadcrumb": { + "@context": "http://schema.org", + "@type": "BreadcrumbList", + "itemListElement": [ + { + "@type": "ListItem", + "position": 0, + "item": { + "@id": "https://www.nhs.uk/tests-and-treatments/", + "name": "Tests and treatments A to Z", + "genre": [] + } + } + ] + }, + "contentSubTypes": [], + "significantLink": [ + { + "description": "Read about how X-rays work, why they're used, what happens before, during and after an X-ray, and what the risks are.", + "linkRelationship": "Result", + "@type": "LinkRole", + "articleStatus": "published", + "mainEntityOfPage": { + "@type": "MedicalWebPage", + "genre": [ + "Test" + ], + "datePublished": "2017-10-18T14:30:01+00:00", + "dateModified": "2025-03-26T15:23:06+00:00", + "lastReviewed": [ + "2022-04-20T00:00:00+00:00", + "2025-04-20T00:00:00+00:00" + ], + "reviewDue": "2025-04-20T00:00:00+00:00", + "keywords": "", + "code": [ + { + "@type": "MedicalCode", + "codeValue": "", + "codingSystem": "SNOMED-CT" + } + ] + }, + "url": "https://www.nhs.uk/conditions/x-ray/", + "name": "X-ray" + }, + { + "description": "Find out about abdominal aortic aneurysm (AAA) screening, including who it's offered to, why it's done and what happens.", + "linkRelationship": "Result", + "@type": "LinkRole", + "articleStatus": "published", + "mainEntityOfPage": { + "@type": "MedicalWebPage", + "genre": [ + "Test" + ], + "datePublished": "2017-10-20T10:36:32+00:00", + "dateModified": "2025-03-26T15:28:47+00:00", + "lastReviewed": [ + "2024-11-11T01:00:00+00:00", + "2027-11-11T01:00:00+00:00" + ], + "reviewDue": "2027-11-11T01:00:00+00:00", + "keywords": "", + "alternateName": [ + "AAA screening" + ], + "code": [ + { + "@type": "MedicalCode", + "codeValue": "", + "codingSystem": "SNOMED-CT" + } + ] + }, + "url": "https://www.nhs.uk/conditions/abdominal-aortic-aneurysm-screening/", + "name": "Abdominal aortic aneurysm (AAA) screening" + } + ], + "relatedLink": [ + { + "@type": "LinkRole", + "url": "https://www.nhs.uk/tests-and-treatments/?page=1", + "name": "First Page", + "description": "Link to First Page", + "linkRelationship": "Pagination" + }, + { + "@type": "LinkRole", + "url": "https://www.nhs.uk/tests-and-treatments/?page=1", + "name": "Last Page", + "description": "Link to Last Page", + "linkRelationship": "Pagination" + }, + { + "@type": "LinkRole", + "url": "https://www.nhs.uk/tests-and-treatments/", + "name": "Self", + "description": "Link to nhs.uk Page", + "linkRelationship": "Self" + } + ] +} \ No newline at end of file diff --git a/specification/nhs-website-content-api.yaml b/specification/nhs-website-content-api.yaml index db20edc..34c2c7c 100644 --- a/specification/nhs-website-content-api.yaml +++ b/specification/nhs-website-content-api.yaml @@ -8,9 +8,15 @@ info: ## Overview This API provides content from the [NHS website](https://www.nhs.uk) as JSON, to be consumed programmatically and used by your application. + ⚠️ Before April 2025, many pages covering symptoms, tests or treatments were inappropriately included in the Conditions A to Z. + + The April 2025 update introduces two new endpoints for 'symptoms' and 'tests-and-treatments' that reflect the reallocation of these pages to new A to Z pages on the website. + You can reuse the content from the following sections of the NHS website: - * Health A to Z / Conditions ([Website](https://www.nhs.uk/conditions/) | [API](https://digital.nhs.uk/developer/api-catalogue/nhs-website-content/v2#get-/conditions)) + * Conditions A to Z ([Website](https://www.nhs.uk/conditions/) | [API](https://digital.nhs.uk/developer/api-catalogue/nhs-website-content/v2#get-/conditions)) * Medicines A to Z ([Website](https://www.nhs.uk/medicines/) | [API](https://digital.nhs.uk/developer/api-catalogue/nhs-website-content/v2#get-/medicines)) + * Symptoms A to Z ([Website](https://www.nhs.uk/symptoms/) | [API](https://digital.nhs.uk/developer/api-catalogue/nhs-website-content/v2#get-/symptoms)) + * Tests and treatments A to Z ([Website](https://www.nhs.uk/tests-and-treatments/) | [API](https://digital.nhs.uk/developer/api-catalogue/nhs-website-content/v2#get-/tests-and-treatments)) * Mental health ([Website](https://www.nhs.uk/mental-health/) | [API](https://digital.nhs.uk/developer/api-catalogue/nhs-website-content/v2#get-/mental-health)) * Live Well ([Website](https://www.nhs.uk/live-well/) | [API](https://digital.nhs.uk/developer/api-catalogue/nhs-website-content/v2#get-/live-well)) * Pregnancy ([Website](https://www.nhs.uk/pregnancy/) | [API](https://digital.nhs.uk/developer/api-catalogue/nhs-website-content/v2#get-/pregnancy)) @@ -25,6 +31,13 @@ info: If you are migrating from our [old NHS website APIs](https://developer.api.nhs.uk/nhs-api), we have a [migration guide](https://developer.api.nhs.uk/support/migration/guide) to help walk you through the process and a [migration assistant](https://developer.api.nhs.uk/support/migration/assistant) to illustrate the differences in how your API requests will need to be updated. + ## Updates + + | Version | Date | Changes | + |------------|-----|--------------| + | 2.2.0 | April 2025 | Introduce `symptoms` and `tests-and-treatments` endpoints | + + ## Who can use this API Anyone can use this API for any purpose, so long as they have agreed to the [Online connection agreement](https://digital.nhs.uk/developer/guides-and-documentation/online-connection-agreement) during the [onboarding process](https://digital.nhs.uk/developer/guides-and-documentation/onboarding-process) and they include an [attribution](#overview--attribution) as outlined below.