From 770825c8d435fcf685a717371e22eb15273e1ad1 Mon Sep 17 00:00:00 2001 From: Iain MacKay Date: Wed, 26 Mar 2025 17:05:04 +0000 Subject: [PATCH 01/10] Add devcontainer --- .devcontainer/devcontainer.json | 31 +++++++++++++++++++++++++++++++ .github/dependabot.yml | 12 ++++++++++++ 2 files changed, 43 insertions(+) create mode 100644 .devcontainer/devcontainer.json create mode 100644 .github/dependabot.yml diff --git a/.devcontainer/devcontainer.json b/.devcontainer/devcontainer.json new file mode 100644 index 0000000..20fce6e --- /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.12-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": [], + + // Use 'postCreateCommand' to run commands after the container is created. + // "postCreateCommand": "pip3 install --user -r requirements.txt", + + // 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/.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 From e9397b6bc01540d8837837ba6a2ddc2c5c4976bc Mon Sep 17 00:00:00 2001 From: Iain MacKay Date: Thu, 27 Mar 2025 13:00:04 +0000 Subject: [PATCH 02/10] cmsnav-747 Update dependencies --- .devcontainer/devcontainer.json | 8 +- .devcontainer/postCreateCommand.sh | 15 ++ Makefile | 1 + package-lock.json | 4 +- poetry.lock | 303 ++++++++++++++++++++++++----- pyproject.toml | 22 +-- 6 files changed, 289 insertions(+), 64 deletions(-) create mode 100755 .devcontainer/postCreateCommand.sh diff --git a/.devcontainer/devcontainer.json b/.devcontainer/devcontainer.json index 20fce6e..627ffe4 100644 --- a/.devcontainer/devcontainer.json +++ b/.devcontainer/devcontainer.json @@ -3,7 +3,7 @@ { "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.12-bullseye", + "image": "mcr.microsoft.com/devcontainers/python:1-3.10-bullseye", "features": { "ghcr.io/devcontainers/features/node:1": { "nodeGypDependencies": true, @@ -12,16 +12,16 @@ "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": [], + "forwardPorts": [5000, 32201], // Use 'postCreateCommand' to run commands after the container is created. - // "postCreateCommand": "pip3 install --user -r requirements.txt", + "postCreateCommand": "./.devcontainer/postCreateCommand.sh" // Configure tool-specific properties. // "customizations": {}, 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/Makefile b/Makefile index 674e754..5ebb41e 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 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] From 6110da47a8e722d90db5596b3e33bebd1e4820e6 Mon Sep 17 00:00:00 2001 From: Iain MacKay Date: Thu, 27 Mar 2025 17:48:05 +0000 Subject: [PATCH 03/10] cmsnav-747 Propose wording changes, correct omission from Makefile and document changes. --- Makefile | 4 ++++ README.md | 21 +++++++++++++++++---- specification/nhs-website-content-api.yaml | 16 +++++++++++++++- 3 files changed, 36 insertions(+), 5 deletions(-) diff --git a/Makefile b/Makefile index 5ebb41e..bbb3c80 100644 --- a/Makefile +++ b/Makefile @@ -32,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/specification/nhs-website-content-api.yaml b/specification/nhs-website-content-api.yaml index db20edc..9baa4db 100644 --- a/specification/nhs-website-content-api.yaml +++ b/specification/nhs-website-content-api.yaml @@ -8,9 +8,16 @@ 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. + ⚠️ Historically, many pages describing conditions or tests were inappropriately allocated to the Conditions A to Z. + + The April 2025 update introduces two new endpoints for 'symptoms' and 'testandtreatments' that reflect the reallocation of these + pages to new hub pages in 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 / Conditions ([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/testsandtreatments/) | [API](https://digital.nhs.uk/developer/api-catalogue/nhs-website-content/v2#get-/testsandtreatments)) * 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 +32,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 `testsandtreatments` 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. From b95186e506690b99a9fe25a9974bf4e0d0c52bbd Mon Sep 17 00:00:00 2001 From: Tom Hosker Date: Fri, 28 Mar 2025 10:59:39 +0000 Subject: [PATCH 04/10] cmsnav-747 Implement Alice's changes --- specification/nhs-website-content-api.yaml | 7 +++---- 1 file changed, 3 insertions(+), 4 deletions(-) diff --git a/specification/nhs-website-content-api.yaml b/specification/nhs-website-content-api.yaml index 9baa4db..844956f 100644 --- a/specification/nhs-website-content-api.yaml +++ b/specification/nhs-website-content-api.yaml @@ -8,13 +8,12 @@ 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. - ⚠️ Historically, many pages describing conditions or tests were inappropriately allocated to the Conditions A to Z. + ⚠️ 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 'testandtreatments' that reflect the reallocation of these - pages to new hub pages in the website. + The April 2025 update introduces two new endpoints for 'symptoms' and 'testsandtreatments' 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: - * Conditions 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/testsandtreatments/) | [API](https://digital.nhs.uk/developer/api-catalogue/nhs-website-content/v2#get-/testsandtreatments)) From 039b9b1209d21624a81925317cead0b466e2b631 Mon Sep 17 00:00:00 2001 From: Tom Hosker Date: Fri, 28 Mar 2025 16:19:31 +0000 Subject: [PATCH 05/10] cmsnav-747 Add examples for symptoms and tests and treatments --- .../components/examples/SymptomsAToZ.json | 115 ++++++++++++++++ .../examples/TestsAndTreatmentsAToZ.json | 129 ++++++++++++++++++ specification/nhs-website-content-api.yaml | 6 +- 3 files changed, 247 insertions(+), 3 deletions(-) create mode 100644 specification/components/examples/SymptomsAToZ.json create mode 100644 specification/components/examples/TestsAndTreatmentsAToZ.json 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 844956f..34c2c7c 100644 --- a/specification/nhs-website-content-api.yaml +++ b/specification/nhs-website-content-api.yaml @@ -10,13 +10,13 @@ info: ⚠️ 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 'testsandtreatments' that reflect the reallocation of these pages to new A to Z pages on the website. + 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: * 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/testsandtreatments/) | [API](https://digital.nhs.uk/developer/api-catalogue/nhs-website-content/v2#get-/testsandtreatments)) + * 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)) @@ -35,7 +35,7 @@ info: | Version | Date | Changes | |------------|-----|--------------| - | 2.2.0 | April 2025 | Introduce `symptoms` and `testsandtreatments` endpoints | + | 2.2.0 | April 2025 | Introduce `symptoms` and `tests-and-treatments` endpoints | ## Who can use this API From ec756f4c1a1d2f3956169f9290f564bfb382d999 Mon Sep 17 00:00:00 2001 From: Tom Hosker Date: Fri, 28 Mar 2025 16:57:26 +0000 Subject: [PATCH 06/10] cmsnav-747 Trim existing examples --- .../examples/ConditionsHealthAToZ.json | 522 +----------------- .../components/examples/MedicinesAToZ.json | 383 +------------ 2 files changed, 31 insertions(+), 874 deletions(-) diff --git a/specification/components/examples/ConditionsHealthAToZ.json b/specification/components/examples/ConditionsHealthAToZ.json index 88f6b91..22993a7 100644 --- a/specification/components/examples/ConditionsHealthAToZ.json +++ b/specification/components/examples/ConditionsHealthAToZ.json @@ -46,7 +46,9 @@ "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", "lastReviewed": [ @@ -73,7 +75,9 @@ "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", "lastReviewed": [ @@ -93,33 +97,6 @@ "url": "https://api.service.nhs.uk/nhs-website-content/conditions/achalasia/", "name": "Achalasia" }, - { - "description": "Find out about first aid and treatment for acid and chemical burns, including burns from acid attacks.", - "linkRelationship": "Result", - "@type": "LinkRole", - "articleStatus": "published", - "mainEntityOfPage": { - "@type": "MedicalWebPage", - "genre": ["Accident or injury"], - "datePublished": "2018-10-03T19:55:47+00:00", - "dateModified": "2021-11-18T15:26:08+00:00", - "lastReviewed": [ - "2020-09-18T00:00:00+00:00", - "2023-09-18T17:00:00+00:00" - ], - "reviewDue": "2023-09-18T17:00:00+00:00", - "keywords": "", - "code": [ - { - "@type": "MedicalCode", - "codeValue": "", - "codingSystem": "SNOMED-CT" - } - ] - }, - "url": "https://api.service.nhs.uk/nhs-website-content/conditions/acid-and-chemical-burns/", - "name": "Acid and chemical burns" - }, { "description": "An acoustic neuroma is a type of non-cancerous (benign) brain tumour. Find out about the symptoms, treatments and outlook for this condition.", "linkRelationship": "Result", @@ -127,7 +104,9 @@ "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", "lastReviewed": [ @@ -136,7 +115,9 @@ ], "reviewDue": "2025-11-29T00:00:00+00:00", "keywords": "", - "alternateName": ["Vestibular schwannoma"], + "alternateName": [ + "Vestibular schwannoma" + ], "code": [ { "@type": "MedicalCode", @@ -147,501 +128,30 @@ }, "url": "https://api.service.nhs.uk/nhs-website-content/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.", - "linkRelationship": "Result", - "@type": "LinkRole", - "articleStatus": "published", - "mainEntityOfPage": { - "@type": "MedicalWebPage", - "genre": ["Condition"], - "datePublished": "2017-10-17T15:17:11+00:00", - "dateModified": "2022-10-10T10:39:06+00:00", - "lastReviewed": [ - "2020-10-12T00:00:00+00:00", - "2023-10-12T00:00:00+00:00" - ], - "reviewDue": "2023-10-12T00:00:00+00:00", - "keywords": "", - "alternateName": ["Gigantism"], - "code": [ - { - "@type": "MedicalCode", - "codeValue": "", - "codingSystem": "SNOMED-CT" - } - ] - }, - "url": "https://api.service.nhs.uk/nhs-website-content/conditions/acromegaly/", - "name": "Acromegaly" - }, - { - "description": "Find out when your urine albumin to creatinine ratio (ACR) should\r\nbe measured. ACR values can help identify kidney disease that occurs as a complication of diabetes.", - "linkRelationship": "Result", - "@type": "LinkRole", - "articleStatus": "published", - "mainEntityOfPage": { - "@type": "MedicalWebPage", - "genre": ["Test"], - "datePublished": "2018-08-28T16:15:09+00:00", - "dateModified": "2022-05-30T12:17:41+00:00", - "lastReviewed": [ - "2022-05-24T00:00:00+00:00", - "2025-05-24T00:00:00+00:00" - ], - "reviewDue": "2025-05-24T00:00:00+00:00", - "keywords": "", - "code": [ - { - "@type": "MedicalCode", - "codeValue": "", - "codingSystem": "SNOMED-CT" - } - ] - }, - "url": "https://api.service.nhs.uk/nhs-website-content/conditions/acr-test/", - "name": "Urine albumin to creatinine ratio (ACR)" - }, - { - "description": "Find out more about actinic keratoses, which are patches of skin that have been damaged by the sun.", - "linkRelationship": "Result", - "@type": "LinkRole", - "articleStatus": "published", - "mainEntityOfPage": { - "@type": "MedicalWebPage", - "genre": ["Condition"], - "datePublished": "2017-10-17T15:23:05+00:00", - "dateModified": "2021-11-18T15:26:11+00:00", - "lastReviewed": [ - "2020-06-08T00:00:00+00:00", - "2023-06-08T00:00:00+00:00" - ], - "reviewDue": "2023-06-08T00:00:00+00:00", - "keywords": "", - "alternateName": ["Solar keratoses"], - "code": [ - { - "@type": "MedicalCode", - "codeValue": "", - "codingSystem": "SNOMED-CT" - } - ] - }, - "url": "https://api.service.nhs.uk/nhs-website-content/conditions/actinic-keratoses/", - "name": "Actinic keratoses (solar keratoses)" - }, - { - "description": "Read about acupuncture, a treatment derived from ancient Chinese medicine in which fine needles are inserted at certain sites in the body to relieve or prevent health problems", - "linkRelationship": "Result", - "@type": "LinkRole", - "articleStatus": "published", - "mainEntityOfPage": { - "@type": "MedicalWebPage", - "genre": ["Treatment"], - "datePublished": "2017-10-17T15:41:00+00:00", - "dateModified": "2021-11-18T15:26:12+00:00", - "lastReviewed": [ - "2019-08-13T00:00:00+00:00", - "2022-08-13T00:00:00+00:00" - ], - "reviewDue": "2022-08-13T00:00:00+00:00", - "keywords": "", - "code": [ - { - "@type": "MedicalCode", - "codeValue": "", - "codingSystem": "SNOMED-CT" - } - ] - }, - "url": "https://api.service.nhs.uk/nhs-website-content/conditions/acupuncture/", - "name": "Acupuncture" - }, - { - "description": "Read about acute cholecystitis, which is inflammation of the gallbladder. It usually occurs when a gallstone blocks the cystic duct.", - "linkRelationship": "Result", - "@type": "LinkRole", - "articleStatus": "published", - "mainEntityOfPage": { - "@type": "MedicalWebPage", - "genre": ["Condition"], - "datePublished": "2017-10-17T15:30:37+00:00", - "dateModified": "2022-05-30T14:33:13+00:00", - "lastReviewed": [ - "2019-08-07T00:00:00+00:00", - "2022-08-07T00:00:00+00:00" - ], - "reviewDue": "2022-08-07T00:00:00+00:00", - "keywords": "", - "alternateName": ["Gallbladder pain", "Cholecystitis (acute)"], - "code": [ - { - "@type": "MedicalCode", - "codeValue": "", - "codingSystem": "SNOMED-CT" - } - ] - }, - "url": "https://api.service.nhs.uk/nhs-website-content/conditions/acute-cholecystitis/", - "name": "Acute cholecystitis" - }, - { - "description": "Acute kidney injury (AKI) is sudden damage to the kidneys that causes them to not work properly. It can range from minor loss of kidney function to complete kidney failure.", - "linkRelationship": "Result", - "@type": "LinkRole", - "articleStatus": "published", - "mainEntityOfPage": { - "@type": "MedicalWebPage", - "genre": ["Condition"], - "datePublished": "2018-10-03T19:55:51+00:00", - "dateModified": "2022-09-13T14:52:40+00:00", - "lastReviewed": [ - "2022-09-07T23:00:00+00:00", - "2025-09-07T23:00:00+00:00" - ], - "reviewDue": "2025-09-07T23:00:00+00:00", - "keywords": "", - "code": [ - { - "@type": "MedicalCode", - "codeValue": "", - "codingSystem": "SNOMED-CT" - } - ] - }, - "url": "https://api.service.nhs.uk/nhs-website-content/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.", - "linkRelationship": "Result", - "@type": "LinkRole", - "articleStatus": "published", - "mainEntityOfPage": { - "@type": "MedicalWebPage", - "genre": ["Condition"], - "datePublished": "2017-10-17T15:27:22+00:00", - "dateModified": "2023-01-16T09:10:43+00:00", - "lastReviewed": [ - "2020-03-12T00:00:00+00:00", - "2023-03-12T00:00:00+00:00" - ], - "reviewDue": "2023-03-12T00:00:00+00:00", - "keywords": "", - "code": [ - { - "@type": "MedicalCode", - "codeValue": "", - "codingSystem": "SNOMED-CT" - } - ] - }, - "url": "https://api.service.nhs.uk/nhs-website-content/conditions/acute-respiratory-distress-syndrome/", - "name": "Acute respiratory distress syndrome" - }, - { - "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.", - "linkRelationship": "Result", - "@type": "LinkRole", - "articleStatus": "published", - "mainEntityOfPage": { - "@type": "MedicalWebPage", - "genre": [], - "datePublished": "2017-10-17T15:31:58+00:00", - "dateModified": "2023-01-12T11:20:41+00:00", - "lastReviewed": [ - "2020-02-10T15:37:00+00:00", - "2023-02-10T15:37:00+00:00" - ], - "reviewDue": "2023-02-10T15:37:00+00:00", - "keywords": "", - "code": [ - { - "@type": "MedicalCode", - "codeValue": "", - "codingSystem": "SNOMED-CT" - } - ] - }, - "url": "https://api.service.nhs.uk/nhs-website-content/conditions/adenoids-and-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", - "@type": "LinkRole", - "articleStatus": "published", - "mainEntityOfPage": { - "@type": "MedicalWebPage", - "genre": ["Condition"], - "datePublished": "2017-10-17T15:40:36+00:00", - "dateModified": "2023-01-12T12:26:14+00:00", - "lastReviewed": [ - "2023-01-11T01:00:00+00:00", - "2026-01-11T01:00:00+00:00" - ], - "reviewDue": "2026-01-11T01:00:00+00:00", - "keywords": "", - "code": [ - { - "@type": "MedicalCode", - "codeValue": "", - "codingSystem": "SNOMED-CT" - } - ] - }, - "url": "https://api.service.nhs.uk/nhs-website-content/conditions/alcohol-poisoning/", - "name": "Alcohol poisoning" - }, - { - "description": "The Alexander technique teaches improved posture and movement, which is believed to help reduce and prevent problems caused by unhelpful habits.", - "linkRelationship": "Result", - "@type": "LinkRole", - "articleStatus": "published", - "mainEntityOfPage": { - "@type": "MedicalWebPage", - "genre": ["Treatment"], - "datePublished": "2017-10-17T16:16:34+00:00", - "dateModified": "2021-11-18T15:26:20+00:00", - "lastReviewed": [ - "2021-09-06T00:00:00+00:00", - "2024-09-06T00:00:00+00:00" - ], - "reviewDue": "2024-09-06T00:00:00+00:00", - "keywords": "", - "code": [ - { - "@type": "MedicalCode", - "codeValue": "", - "codingSystem": "SNOMED-CT" - } - ] - }, - "url": "https://api.service.nhs.uk/nhs-website-content/conditions/alexander-technique/", - "name": "Alexander technique" - }, - { - "description": "Read about alkaptonuria, or \"black urine disease\", a rare inherited disorder that can turn urine and parts of the body a dark colour and lead to other problems.", - "linkRelationship": "Result", - "@type": "LinkRole", - "articleStatus": "published", - "mainEntityOfPage": { - "@type": "MedicalWebPage", - "genre": ["Condition"], - "datePublished": "2017-10-24T10:34:28+00:00", - "dateModified": "2022-05-30T14:54:22+00:00", - "lastReviewed": [ - "2022-03-10T00:00:00+00:00", - "2025-03-10T00:00:00+00:00" - ], - "reviewDue": "2025-03-10T00:00:00+00:00", - "keywords": "", - "code": [ - { - "@type": "MedicalCode", - "codeValue": "", - "codingSystem": "SNOMED-CT" - } - ] - }, - "url": "https://api.service.nhs.uk/nhs-website-content/conditions/alkaptonuria/", - "name": "Alkaptonuria" - }, - { - "description": "Information about amputation, including why and how it's carried out, recovery and rehabilitation, prosthetics, stump care and possible complications.", - "linkRelationship": "Result", - "@type": "LinkRole", - "articleStatus": "published", - "mainEntityOfPage": { - "@type": "MedicalWebPage", - "genre": ["Procedure", "Treatment"], - "datePublished": "2017-10-17T15:47:57+00:00", - "dateModified": "2022-12-15T08:28:26+00:00", - "lastReviewed": [ - "2019-08-12T00:00:00+00:00", - "2022-08-09T00:00:00+00:00" - ], - "reviewDue": "2022-08-09T00:00:00+00:00", - "keywords": "", - "code": [ - { - "@type": "MedicalCode", - "codeValue": "", - "codingSystem": "SNOMED-CT" - } - ] - }, - "url": "https://api.service.nhs.uk/nhs-website-content/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.", - "linkRelationship": "Result", - "@type": "LinkRole", - "articleStatus": "published", - "mainEntityOfPage": { - "@type": "MedicalWebPage", - "genre": ["Condition"], - "datePublished": "2017-10-17T15:48:36+00:00", - "dateModified": "2021-11-18T15:26:23+00:00", - "lastReviewed": [ - "2020-09-17T00:00:00+00:00", - "2023-09-17T00:00:00+00:00" - ], - "reviewDue": "2023-09-17T00:00:00+00:00", - "keywords": "", - "code": [ - { - "@type": "MedicalCode", - "codeValue": "", - "codingSystem": "SNOMED-CT" - } - ] - }, - "url": "https://api.service.nhs.uk/nhs-website-content/conditions/amyloidosis/", - "name": "Amyloidosis" - }, - { - "description": "Read about anabolic steroids, which are prescription-only medicines that are sometimes taken without medical advice to increase muscle mass and improve athletic performance.", - "linkRelationship": "Result", - "@type": "LinkRole", - "articleStatus": "published", - "mainEntityOfPage": { - "@type": "WebPage", - "genre": ["Advice or information"], - "datePublished": "2017-10-17T15:50:01+00:00", - "dateModified": "2022-11-04T09:39:37+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"], - "code": [ - { - "@type": "MedicalCode", - "codeValue": "", - "codingSystem": "SNOMED-CT" - } - ] - }, - "url": "https://api.service.nhs.uk/nhs-website-content/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.", - "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", - "lastReviewed": [ - "2021-09-23T00:00:00+00:00", - "2024-09-23T00:00:00+00:00" - ], - "reviewDue": "2024-09-23T00:00:00+00:00", - "keywords": "", - "code": [ - { - "@type": "MedicalCode", - "codeValue": "", - "codingSystem": "SNOMED-CT" - } - ] - }, - "url": "https://api.service.nhs.uk/nhs-website-content/conditions/anaesthesia/", - "name": "Anaesthesia" - }, - { - "description": "Anal cancer is a rare type of cancer that affects the anus. Get information and advice about symptoms, causes and treatments.", - "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", - "lastReviewed": [ - "2021-03-08T01:00:00+00:00", - "2024-03-08T01:00:00+00:00" - ], - "reviewDue": "2024-03-08T01:00:00+00:00", - "keywords": "", - "code": [ - { - "@type": "MedicalCode", - "codeValue": "", - "codingSystem": "SNOMED-CT" - } - ] - }, - "url": "https://api.service.nhs.uk/nhs-website-content/conditions/anal-cancer/", - "name": "Anal cancer" } ], "relatedLink": [ { "@type": "LinkRole", - "url": "https://api.service.nhs.uk/nhs-website-content/conditions/?page=1", + "url": "https://www.nhs.uk/tests-and-treatments/?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/tests-and-treatments/?page=1", "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/tests-and-treatments/", "name": "Self", "description": "Link to nhs.uk Page", "linkRelationship": "Self" - }, - { - "@type": "LinkRole", - "url": "https://api.service.nhs.uk/nhs-website-content/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..31842f6 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/symptoms/?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/symptoms/?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/symptoms/", + "name": "Self", + "description": "Link to nhs.uk Page", + "linkRelationship": "Self" } ], "webpage": "https://www.nhs.uk/medicines/" From 689c3337b49134430e673c15b889733e2aa56676 Mon Sep 17 00:00:00 2001 From: Tom Hosker Date: Mon, 31 Mar 2025 10:17:20 +0000 Subject: [PATCH 07/10] cmsnav-747 Fix pagination URLs --- specification/components/examples/ConditionsHealthAToZ.json | 6 +++--- specification/components/examples/MedicinesAToZ.json | 6 +++--- 2 files changed, 6 insertions(+), 6 deletions(-) diff --git a/specification/components/examples/ConditionsHealthAToZ.json b/specification/components/examples/ConditionsHealthAToZ.json index 22993a7..1f1ff59 100644 --- a/specification/components/examples/ConditionsHealthAToZ.json +++ b/specification/components/examples/ConditionsHealthAToZ.json @@ -133,21 +133,21 @@ "relatedLink": [ { "@type": "LinkRole", - "url": "https://www.nhs.uk/tests-and-treatments/?page=1", + "url": "https://www.nhs.uk/conditions/?page=1", "name": "First Page", "description": "Link to First Page", "linkRelationship": "Pagination" }, { "@type": "LinkRole", - "url": "https://www.nhs.uk/tests-and-treatments/?page=1", + "url": "https://www.nhs.uk/conditions/?page=1", "name": "Last Page", "description": "Link to Last Page", "linkRelationship": "Pagination" }, { "@type": "LinkRole", - "url": "https://www.nhs.uk/tests-and-treatments/", + "url": "https://www.nhs.uk/conditions/", "name": "Self", "description": "Link to nhs.uk Page", "linkRelationship": "Self" diff --git a/specification/components/examples/MedicinesAToZ.json b/specification/components/examples/MedicinesAToZ.json index 31842f6..426853e 100644 --- a/specification/components/examples/MedicinesAToZ.json +++ b/specification/components/examples/MedicinesAToZ.json @@ -74,21 +74,21 @@ "relatedLink": [ { "@type": "LinkRole", - "url": "https://www.nhs.uk/symptoms/?page=1", + "url": "https://www.nhs.uk/medicines/?page=1", "name": "First Page", "description": "Link to First Page", "linkRelationship": "Pagination" }, { "@type": "LinkRole", - "url": "https://www.nhs.uk/symptoms/?page=1", + "url": "https://www.nhs.uk/medicines/?page=1", "name": "Last Page", "description": "Link to Last Page", "linkRelationship": "Pagination" }, { "@type": "LinkRole", - "url": "https://www.nhs.uk/symptoms/", + "url": "https://www.nhs.uk/medicines/", "name": "Self", "description": "Link to nhs.uk Page", "linkRelationship": "Self" From 03d9be9e5b79d949ab6f8306005f3be57e0df821 Mon Sep 17 00:00:00 2001 From: Iain MacKay Date: Mon, 31 Mar 2025 13:51:46 +0000 Subject: [PATCH 08/10] cmsnav-747 Added api_development.md to summarise the process --- azure/api_development.md | 75 ++++++++++++++++++++++++++++++++++++++++ 1 file changed, 75 insertions(+) create mode 100644 azure/api_development.md diff --git a/azure/api_development.md b/azure/api_development.md new file mode 100644 index 0000000..d1eb814 --- /dev/null +++ b/azure/api_development.md @@ -0,0 +1,75 @@ +# NHS Website Content API Update and Release Process + +This document outlines the steps involved in updating the NHS Website Content API, from making code changes to deploying them to production. + +## 1. Prerequisites and Setup + +* **Development Environment:** + * Use the provided VSCode Dev Container for an automated setup. + * Alternatively, manually install `make`, NodeJS (`npm`), Python (`poetry`), and Java 8+. +* **Install Dependencies:** Run `make install` in the project root directory. This installs both Node and Python dependencies. +* **Install Git Hooks:** Run `make install-hooks` to set up pre-commit hooks that help prevent committing invalid changes. +* **Environment Variables:** Configure necessary environment variables (e.g., for API keys, tokens). Using `direnv` with a local `.envrc` file is recommended. + +## 2. Making Changes + +* **Create a Branch:** Create a new feature branch from the `master` branch. Follow the naming convention: `apm-nnn-short-issue-description` (where `apm-nnn` is the relevant Jira ticket number). +* **Implement Changes:** Modify the necessary files: + * **API Specification:** Edit files within the `specification/` directory (primarily `nhs-website-content-api.yaml` and files in `specification/components/`). + * **Sandbox Implementation:** Update the NodeJS sandbox application in the `sandbox/` directory if required. + * **Apigee Proxies:** Modify proxy definitions in `proxies/live/` or `proxies/sandbox/`. + * **Tests:** Add or update tests in the `tests/` directory. + * **Scripts/Tooling:** Update files in `scripts/` or the `Makefile` if necessary. +* **Commit Changes:** Commit your work frequently with clear messages following the format: + ``` + APM-NNN Summary of changes + + Longer description of changes if explaining rationale is necessary... + ``` + +## 3. Local Validation + +* **Linting:** Run `make lint` to check code style and specification validity. The pre-commit hooks should also run linters automatically. +* **Build Specification:** Run `make publish` to bundle the OpenAPI specification into a single file in the `build/` directory. This helps catch resolution errors. +* **Preview Specification:** Run `make serve` to view a human-readable version of the specification locally at `http://127.0.0.1:5000`. +* **Local Testing (Conceptual):** While the `Makefile` includes targets like `make test`, running these directly in the VSCode terminal might not work as the full execution context (like dependent services) exists within deployed containers. These tests are primarily designed to be run within the CI/CD pipeline. If manual testing against a locally running sandbox (via Docker) is needed, you would typically use `docker compose exec` to run commands like `pytest` within the appropriate container. + +## 4. Pull Request and Code Review + +* **Push Branch:** Push your feature branch to the GitHub repository. +* **Create Pull Request (PR):** Open a PR from your feature branch targeting the `master` branch. + * Ensure the PR title and description are clear and link to the relevant Jira ticket (APM-NNN). +* **Automated Checks:** The PR will trigger automated workflows (defined in `.github/workflows/` and `azure/azure-pr-pipeline.yml`): + * Linting checks. + * Deployment of an ephemeral version of the API (including specification, proxy, and sandbox container) to a development environment (e.g., `internal-dev`) for testing. +* **Code Review:** Team members review the code changes, specification updates, and test results from the ephemeral deployment. +* **Approval:** Once the PR is approved and all checks pass, it's ready for merging. + +## 5. Merging + +* **Merge:** The *reviewer* who approved the PR is responsible for merging it into the `master` branch. + +## 6. CI/CD Pipeline (Azure DevOps) + +* **Trigger:** Merging to `master` automatically triggers the main Azure DevOps pipelines (`azure-build-pipeline.yml`, `azure-release-pipeline.yml`). +* **Build (`azure-build-pipeline.yml`):** + * Builds the consolidated OpenAPI specification (`make publish`). + * Builds the Apigee proxy bundles (`make build-proxy`). + * Builds any necessary Docker images (e.g., the sandbox defined in `sandbox/Dockerfile` and configured in `ecs-proxies-containers.yml`). + * Pushes Docker images to the container registry. + * Packages build artifacts (spec, proxies, test files, config like `manifest_template.yml`, `ecs-proxies-deploy.yml`) for deployment. +* **Release (`azure-release-pipeline.yml`):** + * Deploys the artifacts and containers sequentially to configured environments (e.g., Internal Dev -> Internal QA -> Production). + * Deployment includes: + * Apigee Proxies (Live and Sandbox). + * Updated API Specification to the Apigee Developer Portal. + * Deployment/Update of backend containers (like the Sandbox) on ECS, configured via `ecs-proxies-deploy.yml`. + * Runs automated tests (smoke tests, integration tests defined in `tests/` and executed via `Makefile` targets like `smoketest` or `test`) against each environment after deployment (`azure/templates/run-tests.yml`). + +## 7. Production Release + +* **Promotion:** After successful deployment and testing in pre-production environments (e.g., Internal QA), the release pipeline promotes the changes to the Production environment. +* **Post-Release Checks:** Smoke tests (`make smoketest-prod`) are typically run against the production environment to verify the deployment. +* **GitHub Release:** A GitHub release is automatically created/updated upon merging to `master` (driven by `.github/workflows/continuous-integration.yml`). + +This process ensures that changes are validated, tested, and deployed systematically across environments. \ No newline at end of file From 2d276f437016998c8730fa916c046ea091c4262b Mon Sep 17 00:00:00 2001 From: Tom Hosker Date: Thu, 10 Apr 2025 16:38:51 +0000 Subject: [PATCH 09/10] cmsnav-747 Remove WIP markdown file --- azure/api_development.md | 75 ---------------------------------------- 1 file changed, 75 deletions(-) delete mode 100644 azure/api_development.md diff --git a/azure/api_development.md b/azure/api_development.md deleted file mode 100644 index d1eb814..0000000 --- a/azure/api_development.md +++ /dev/null @@ -1,75 +0,0 @@ -# NHS Website Content API Update and Release Process - -This document outlines the steps involved in updating the NHS Website Content API, from making code changes to deploying them to production. - -## 1. Prerequisites and Setup - -* **Development Environment:** - * Use the provided VSCode Dev Container for an automated setup. - * Alternatively, manually install `make`, NodeJS (`npm`), Python (`poetry`), and Java 8+. -* **Install Dependencies:** Run `make install` in the project root directory. This installs both Node and Python dependencies. -* **Install Git Hooks:** Run `make install-hooks` to set up pre-commit hooks that help prevent committing invalid changes. -* **Environment Variables:** Configure necessary environment variables (e.g., for API keys, tokens). Using `direnv` with a local `.envrc` file is recommended. - -## 2. Making Changes - -* **Create a Branch:** Create a new feature branch from the `master` branch. Follow the naming convention: `apm-nnn-short-issue-description` (where `apm-nnn` is the relevant Jira ticket number). -* **Implement Changes:** Modify the necessary files: - * **API Specification:** Edit files within the `specification/` directory (primarily `nhs-website-content-api.yaml` and files in `specification/components/`). - * **Sandbox Implementation:** Update the NodeJS sandbox application in the `sandbox/` directory if required. - * **Apigee Proxies:** Modify proxy definitions in `proxies/live/` or `proxies/sandbox/`. - * **Tests:** Add or update tests in the `tests/` directory. - * **Scripts/Tooling:** Update files in `scripts/` or the `Makefile` if necessary. -* **Commit Changes:** Commit your work frequently with clear messages following the format: - ``` - APM-NNN Summary of changes - - Longer description of changes if explaining rationale is necessary... - ``` - -## 3. Local Validation - -* **Linting:** Run `make lint` to check code style and specification validity. The pre-commit hooks should also run linters automatically. -* **Build Specification:** Run `make publish` to bundle the OpenAPI specification into a single file in the `build/` directory. This helps catch resolution errors. -* **Preview Specification:** Run `make serve` to view a human-readable version of the specification locally at `http://127.0.0.1:5000`. -* **Local Testing (Conceptual):** While the `Makefile` includes targets like `make test`, running these directly in the VSCode terminal might not work as the full execution context (like dependent services) exists within deployed containers. These tests are primarily designed to be run within the CI/CD pipeline. If manual testing against a locally running sandbox (via Docker) is needed, you would typically use `docker compose exec` to run commands like `pytest` within the appropriate container. - -## 4. Pull Request and Code Review - -* **Push Branch:** Push your feature branch to the GitHub repository. -* **Create Pull Request (PR):** Open a PR from your feature branch targeting the `master` branch. - * Ensure the PR title and description are clear and link to the relevant Jira ticket (APM-NNN). -* **Automated Checks:** The PR will trigger automated workflows (defined in `.github/workflows/` and `azure/azure-pr-pipeline.yml`): - * Linting checks. - * Deployment of an ephemeral version of the API (including specification, proxy, and sandbox container) to a development environment (e.g., `internal-dev`) for testing. -* **Code Review:** Team members review the code changes, specification updates, and test results from the ephemeral deployment. -* **Approval:** Once the PR is approved and all checks pass, it's ready for merging. - -## 5. Merging - -* **Merge:** The *reviewer* who approved the PR is responsible for merging it into the `master` branch. - -## 6. CI/CD Pipeline (Azure DevOps) - -* **Trigger:** Merging to `master` automatically triggers the main Azure DevOps pipelines (`azure-build-pipeline.yml`, `azure-release-pipeline.yml`). -* **Build (`azure-build-pipeline.yml`):** - * Builds the consolidated OpenAPI specification (`make publish`). - * Builds the Apigee proxy bundles (`make build-proxy`). - * Builds any necessary Docker images (e.g., the sandbox defined in `sandbox/Dockerfile` and configured in `ecs-proxies-containers.yml`). - * Pushes Docker images to the container registry. - * Packages build artifacts (spec, proxies, test files, config like `manifest_template.yml`, `ecs-proxies-deploy.yml`) for deployment. -* **Release (`azure-release-pipeline.yml`):** - * Deploys the artifacts and containers sequentially to configured environments (e.g., Internal Dev -> Internal QA -> Production). - * Deployment includes: - * Apigee Proxies (Live and Sandbox). - * Updated API Specification to the Apigee Developer Portal. - * Deployment/Update of backend containers (like the Sandbox) on ECS, configured via `ecs-proxies-deploy.yml`. - * Runs automated tests (smoke tests, integration tests defined in `tests/` and executed via `Makefile` targets like `smoketest` or `test`) against each environment after deployment (`azure/templates/run-tests.yml`). - -## 7. Production Release - -* **Promotion:** After successful deployment and testing in pre-production environments (e.g., Internal QA), the release pipeline promotes the changes to the Production environment. -* **Post-Release Checks:** Smoke tests (`make smoketest-prod`) are typically run against the production environment to verify the deployment. -* **GitHub Release:** A GitHub release is automatically created/updated upon merging to `master` (driven by `.github/workflows/continuous-integration.yml`). - -This process ensures that changes are validated, tested, and deployed systematically across environments. \ No newline at end of file From ae4071e8cc79823d388a709c6c9f3a56b7fc8af9 Mon Sep 17 00:00:00 2001 From: Tom Hosker Date: Fri, 11 Apr 2025 17:31:56 +0000 Subject: [PATCH 10/10] cmsnav-747 Replace existing ConditionsHealthAToZ.json with JSON returned from https://www.nhs.uk/content-api/conditions/. --- .../examples/ConditionsHealthAToZ.json | 709 +++++++++++++++++- 1 file changed, 691 insertions(+), 18 deletions(-) diff --git a/specification/components/examples/ConditionsHealthAToZ.json b/specification/components/examples/ConditionsHealthAToZ.json index 1f1ff59..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", @@ -50,12 +52,12 @@ "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": [ { @@ -65,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" }, { @@ -79,12 +81,12 @@ "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": [ { @@ -94,9 +96,38 @@ } ] }, - "url": "https://api.service.nhs.uk/nhs-website-content/conditions/achalasia/", + "url": "https://www.nhs.uk/conditions/achalasia/", "name": "Achalasia" }, + { + "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" + ], + "datePublished": "2018-10-03T19:55:47+00:00", + "dateModified": "2024-06-10T08:44:38+00:00", + "lastReviewed": [ + "2024-06-05T00:00:00+00:00", + "2027-06-05T17:00:00+00:00" + ], + "reviewDue": "2027-06-05T17:00:00+00:00", + "keywords": "", + "code": [ + { + "@type": "MedicalCode", + "codeValue": "", + "codingSystem": "SNOMED-CT" + } + ] + }, + "url": "https://www.nhs.uk/conditions/acid-and-chemical-burns/", + "name": "Acid and chemical burns" + }, { "description": "An acoustic neuroma is a type of non-cancerous (benign) brain tumour. Find out about the symptoms, treatments and outlook for this condition.", "linkRelationship": "Result", @@ -108,7 +139,7 @@ "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" @@ -126,8 +157,644 @@ } ] }, - "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, 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" + ], + "datePublished": "2017-10-17T15:17:11+00:00", + "dateModified": "2025-02-20T13:26:16+00:00", + "lastReviewed": [ + "2024-12-19T01:00:00+00:00", + "2027-12-19T01:00:00+00:00" + ], + "reviewDue": "2027-12-19T01:00:00+00:00", + "keywords": "", + "alternateName": [ + "Gigantism" + ], + "code": [ + { + "@type": "MedicalCode", + "codeValue": "", + "codingSystem": "SNOMED-CT" + } + ] + }, + "url": "https://www.nhs.uk/conditions/acromegaly/", + "name": "Acromegaly" + }, + { + "description": "Find out when your urine albumin to creatinine ratio (ACR) should\r\nbe measured. ACR values can help identify kidney disease that occurs as a complication of diabetes.", + "linkRelationship": "Result", + "@type": "LinkRole", + "articleStatus": "published", + "mainEntityOfPage": { + "@type": "MedicalWebPage", + "genre": [ + "Test" + ], + "datePublished": "2018-08-28T16:15:09+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" + ], + "reviewDue": "2025-05-24T00:00:00+00:00", + "keywords": "", + "code": [ + { + "@type": "MedicalCode", + "codeValue": "", + "codingSystem": "SNOMED-CT" + } + ] + }, + "url": "https://www.nhs.uk/conditions/acr-test/", + "name": "Urine albumin to creatinine ratio (ACR)" + }, + { + "description": "Find out more about actinic keratoses, which are patches of skin that have been damaged by the sun.", + "linkRelationship": "Result", + "@type": "LinkRole", + "articleStatus": "published", + "mainEntityOfPage": { + "@type": "MedicalWebPage", + "genre": [ + "Condition" + ], + "datePublished": "2017-10-17T15:23:05+00:00", + "dateModified": "2023-07-04T10:02:21+00:00", + "lastReviewed": [ + "2023-06-14T00:00:00+00:00", + "2026-06-14T00:00:00+00:00" + ], + "reviewDue": "2026-06-14T00:00:00+00:00", + "keywords": "", + "alternateName": [ + "Solar keratoses" + ], + "code": [ + { + "@type": "MedicalCode", + "codeValue": "", + "codingSystem": "SNOMED-CT" + } + ] + }, + "url": "https://www.nhs.uk/conditions/actinic-keratoses/", + "name": "Actinic keratoses (solar keratoses)" + }, + { + "description": "Read about acupuncture, a treatment derived from ancient Chinese medicine in which fine needles are inserted at certain sites in the body to relieve or prevent health problems", + "linkRelationship": "Result", + "@type": "LinkRole", + "articleStatus": "published", + "mainEntityOfPage": { + "@type": "MedicalWebPage", + "genre": [ + "Treatment" + ], + "datePublished": "2017-10-17T15:41:00+00:00", + "dateModified": "2024-05-08T11:35:23+00:00", + "lastReviewed": [ + "2023-02-28T02:00:00+00:00", + "2026-02-28T03:00:00+00:00" + ], + "reviewDue": "2026-02-28T03:00:00+00:00", + "keywords": "", + "code": [ + { + "@type": "MedicalCode", + "codeValue": "", + "codingSystem": "SNOMED-CT" + } + ] + }, + "url": "https://www.nhs.uk/conditions/acupuncture/", + "name": "Acupuncture" + }, + { + "description": "Read about acute cholecystitis, which is inflammation of the gallbladder. It usually occurs when a gallstone blocks the cystic duct.", + "linkRelationship": "Result", + "@type": "LinkRole", + "articleStatus": "published", + "mainEntityOfPage": { + "@type": "MedicalWebPage", + "genre": [ + "Condition" + ], + "datePublished": "2017-10-17T15:30:37+00:00", + "dateModified": "2023-12-18T14:58:04+00:00", + "lastReviewed": [ + "2023-02-21T01:00:00+00:00", + "2026-02-21T01:00:00+00:00" + ], + "reviewDue": "2026-02-21T01:00:00+00:00", + "keywords": "", + "alternateName": [ + "Gallbladder pain", + "Cholecystitis (acute)" + ], + "code": [ + { + "@type": "MedicalCode", + "codeValue": "", + "codingSystem": "SNOMED-CT" + } + ] + }, + "url": "https://www.nhs.uk/conditions/acute-cholecystitis/", + "name": "Acute cholecystitis" + }, + { + "description": "Acute kidney injury (AKI) is sudden damage to the kidneys that causes them to not work properly. It can range from minor loss of kidney function to complete kidney failure.", + "linkRelationship": "Result", + "@type": "LinkRole", + "articleStatus": "published", + "mainEntityOfPage": { + "@type": "MedicalWebPage", + "genre": [ + "Condition" + ], + "datePublished": "2018-10-03T19:55:51+00:00", + "dateModified": "2022-09-13T14:52:40+00:00", + "lastReviewed": [ + "2022-09-07T23:00:00+00:00", + "2025-09-07T23:00:00+00:00" + ], + "reviewDue": "2025-09-07T23:00:00+00:00", + "keywords": "", + "code": [ + { + "@type": "MedicalCode", + "codeValue": "", + "codingSystem": "SNOMED-CT" + } + ] + }, + "url": "https://www.nhs.uk/conditions/acute-kidney-injury/", + "name": "Acute kidney injury" + }, + { + "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" + ], + "datePublished": "2017-10-17T15:27:22+00:00", + "dateModified": "2024-06-18T15:33:56+00:00", + "lastReviewed": [ + "2023-07-11T23:00:00+00:00", + "2026-07-11T23:00:00+00:00" + ], + "reviewDue": "2026-07-11T23:00:00+00:00", + "keywords": "", + "code": [ + { + "@type": "MedicalCode", + "codeValue": "", + "codingSystem": "SNOMED-CT" + } + ] + }, + "url": "https://www.nhs.uk/conditions/acute-respiratory-distress-syndrome/", + "name": "Acute respiratory distress syndrome (ARDS)" + }, + { + "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": [ + "Treatment", + "Procedure" + ], + "datePublished": "2017-10-17T15:31:58+00:00", + "dateModified": "2024-06-18T15:29:14+00:00", + "lastReviewed": [ + "2023-03-10T15:37:00+00:00", + "2026-03-10T15:37:00+00:00" + ], + "reviewDue": "2026-03-10T15:37:00+00:00", + "keywords": "", + "code": [ + { + "@type": "MedicalCode", + "codeValue": "", + "codingSystem": "SNOMED-CT" + } + ] + }, + "url": "https://www.nhs.uk/conditions/adenoidectomy/", + "name": "Adenoidectomy" + }, + { + "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", + "@type": "LinkRole", + "articleStatus": "published", + "mainEntityOfPage": { + "@type": "MedicalWebPage", + "genre": [ + "Condition" + ], + "datePublished": "2017-10-17T15:40:36+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" + ], + "reviewDue": "2026-01-11T01:00:00+00:00", + "keywords": "", + "code": [ + { + "@type": "MedicalCode", + "codeValue": "", + "codingSystem": "SNOMED-CT" + } + ] + }, + "url": "https://www.nhs.uk/conditions/alcohol-poisoning/", + "name": "Alcohol poisoning" + }, + { + "description": "The Alexander technique teaches improved posture and movement, which is believed to help reduce and prevent problems caused by unhelpful habits.", + "linkRelationship": "Result", + "@type": "LinkRole", + "articleStatus": "published", + "mainEntityOfPage": { + "@type": "MedicalWebPage", + "genre": [ + "Treatment" + ], + "datePublished": "2017-10-17T16:16:34+00:00", + "dateModified": "2024-10-30T14:29:26+00:00", + "lastReviewed": [ + "2024-10-23T00:00:00+00:00", + "2027-10-23T00:00:00+00:00" + ], + "reviewDue": "2027-10-23T00:00:00+00:00", + "keywords": "", + "code": [ + { + "@type": "MedicalCode", + "codeValue": "", + "codingSystem": "SNOMED-CT" + } + ] + }, + "url": "https://www.nhs.uk/conditions/alexander-technique/", + "name": "Alexander technique" + }, + { + "description": "Read about alkaptonuria, or \"black urine disease\", a rare inherited disorder that can turn urine and parts of the body a dark colour and lead to other problems.", + "linkRelationship": "Result", + "@type": "LinkRole", + "articleStatus": "published", + "mainEntityOfPage": { + "@type": "MedicalWebPage", + "genre": [ + "Condition" + ], + "datePublished": "2017-10-24T10:34:28+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" + ], + "reviewDue": "2025-03-10T00:00:00+00:00", + "keywords": "", + "code": [ + { + "@type": "MedicalCode", + "codeValue": "", + "codingSystem": "SNOMED-CT" + } + ] + }, + "url": "https://www.nhs.uk/conditions/alkaptonuria/", + "name": "Alkaptonuria" + }, + { + "description": "Information about amputation, including why and how it's carried out, recovery and rehabilitation, prosthetics, stump care and possible complications.", + "linkRelationship": "Result", + "@type": "LinkRole", + "articleStatus": "published", + "mainEntityOfPage": { + "@type": "MedicalWebPage", + "genre": [ + "Treatment", + "Procedure" + ], + "datePublished": "2017-10-17T15:47:57+00:00", + "dateModified": "2025-03-05T15:03:51+00:00", + "lastReviewed": [ + "2023-02-17T01:00:00+00:00", + "2026-02-17T01:00:00+00:00" + ], + "reviewDue": "2026-02-17T01:00:00+00:00", + "keywords": "", + "code": [ + { + "@type": "MedicalCode", + "codeValue": "", + "codingSystem": "SNOMED-CT" + } + ] + }, + "url": "https://www.nhs.uk/conditions/amputation/", + "name": "Amputation" + }, + { + "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" + ], + "datePublished": "2017-10-17T15:48:36+00:00", + "dateModified": "2025-02-28T12:50:27+00:00", + "lastReviewed": [ + "2023-08-23T00:00:00+00:00", + "2026-08-23T00:00:00+00:00" + ], + "reviewDue": "2026-08-23T00:00:00+00:00", + "keywords": "", + "code": [ + { + "@type": "MedicalCode", + "codeValue": "", + "codingSystem": "SNOMED-CT" + } + ] + }, + "url": "https://www.nhs.uk/conditions/amyloidosis/", + "name": "Amyloidosis" + }, + { + "description": "Read about anabolic steroids, which are prescription-only medicines that are sometimes taken without medical advice to increase muscle mass and improve athletic performance.", + "linkRelationship": "Result", + "@type": "LinkRole", + "articleStatus": "published", + "mainEntityOfPage": { + "@type": "WebPage", + "genre": [ + "Advice or information" + ], + "datePublished": "2017-10-17T15:50:01+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" + ], + "code": [ + { + "@type": "MedicalCode", + "codeValue": "", + "codingSystem": "SNOMED-CT" + } + ] + }, + "url": "https://www.nhs.uk/conditions/anabolic-steroid-misuse/", + "name": "Anabolic steroid misuse" + }, + { + "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": [ + "Condition" + ], + "datePublished": "2018-02-19T15:41:03+00:00", + "dateModified": "2025-04-08T14:24:30+00:00", + "lastReviewed": [ + "2024-10-28T00:00:00+00:00", + "2027-10-27T23:00:00+00:00" + ], + "reviewDue": "2027-10-27T23:00:00+00:00", + "keywords": "", + "alternateName": [ + "Arrhythmia" + ], + "code": [ + { + "@type": "MedicalCode", + "codeValue": "", + "codingSystem": "SNOMED-CT" + } + ] + }, + "url": "https://www.nhs.uk/conditions/arrhythmia/", + "name": "Heart rhythm problems (arrhythmia)" + }, + { + "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": [ + "Procedure" + ], + "datePublished": "2017-10-17T16:07:35+00:00", + "dateModified": "2024-09-03T09:01:52+00:00", + "lastReviewed": [ + "2024-06-24T23:00:00+00:00", + "2027-06-24T23:00:00+00:00" + ], + "reviewDue": "2027-06-24T23:00:00+00:00", + "keywords": "", + "code": [ + { + "@type": "MedicalCode", + "codeValue": "", + "codingSystem": "SNOMED-CT" + } + ] + }, + "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": [ @@ -140,7 +807,7 @@ }, { "@type": "LinkRole", - "url": "https://www.nhs.uk/conditions/?page=1", + "url": "https://www.nhs.uk/conditions/?page=40", "name": "Last Page", "description": "Link to Last Page", "linkRelationship": "Pagination" @@ -151,7 +818,13 @@ "name": "Self", "description": "Link to nhs.uk Page", "linkRelationship": "Self" + }, + { + "@type": "LinkRole", + "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