From b015fc093c83907bd6aeb3f4d8fc9870c61f80c0 Mon Sep 17 00:00:00 2001 From: Martin Nonnenmacher Date: Thu, 2 Oct 2025 10:00:14 +0200 Subject: [PATCH 1/4] Update expected test results Signed-off-by: Martin Nonnenmacher --- tests/data/azure-devops.req-310-expected.json | 38 ++++++------- tests/data/azure-devops.req-312-expected.json | 38 ++++++------- tests/data/azure-devops.req-313-expected.json | 38 ++++++------- .../resolved_deps/flask-310-expected.json | 14 ++--- .../resolved_deps/flask-310-win-expected.json | 14 ++--- .../data/resolved_deps/flask-39-expected.json | 8 +-- tests/data/test-api-expected.json | 53 +++++++++---------- tests/data/test-api-pdt-expected.json | 49 ++++++++--------- tests/data/test-api-with-prefer-source.json | 53 +++++++++---------- tests/data/test-api-with-python-311.json | 53 +++++++++---------- 10 files changed, 169 insertions(+), 189 deletions(-) diff --git a/tests/data/azure-devops.req-310-expected.json b/tests/data/azure-devops.req-310-expected.json index 5611f91c..b2f109ce 100644 --- a/tests/data/azure-devops.req-310-expected.json +++ b/tests/data/azure-devops.req-310-expected.json @@ -522,12 +522,12 @@ "type": "pypi", "namespace": null, "name": "click", - "version": "8.2.2", + "version": "8.3.0", "qualifiers": {}, "subpath": null, "primary_language": "Python", "description": "Composable command line interface toolkit\n
\"\"
\n\n# Click\n\nClick is a Python package for creating beautiful command line interfaces\nin a composable way with as little code as necessary. It's the \"Command\nLine Interface Creation Kit\". It's highly configurable but comes with\nsensible defaults out of the box.\n\nIt aims to make the process of writing command line tools quick and fun\nwhile also preventing any frustration caused by the inability to\nimplement an intended CLI API.\n\nClick in three points:\n\n- Arbitrary nesting of commands\n- Automatic help page generation\n- Supports lazy loading of subcommands at runtime\n\n\n## A Simple Example\n\n```python\nimport click\n\n@click.command()\n@click.option(\"--count\", default=1, help=\"Number of greetings.\")\n@click.option(\"--name\", prompt=\"Your name\", help=\"The person to greet.\")\ndef hello(count, name):\n \"\"\"Simple program that greets NAME for a total of COUNT times.\"\"\"\n for _ in range(count):\n click.echo(f\"Hello, {name}!\")\n\nif __name__ == '__main__':\n hello()\n```\n\n```\n$ python hello.py --count=3\nYour name: Click\nHello, Click!\nHello, Click!\nHello, Click!\n```\n\n\n## Donate\n\nThe Pallets organization develops and supports Click and other popular\npackages. In order to grow the community of contributors and users, and\nallow the maintainers to devote more time to the projects, [please\ndonate today][].\n\n[please donate today]: https://palletsprojects.com/donate\n\n## Contributing\n\nSee our [detailed contributing documentation][contrib] for many ways to\ncontribute, including reporting issues, requesting features, asking or answering\nquestions, and making PRs.\n\n[contrib]: https://palletsprojects.com/contributing/", - "release_date": "2025-08-02T02:23:39", + "release_date": "2025-09-18T17:32:22", "parties": [ { "type": "person", @@ -545,11 +545,11 @@ "Typing :: Typed" ], "homepage_url": null, - "download_url": "https://files.pythonhosted.org/packages/ec/85/e7297e34133ae1cfde3bffd30c24e1ef055248251baa877834e048687a28/click-8.2.2-py3-none-any.whl", - "size": 103900, + "download_url": "https://files.pythonhosted.org/packages/db/d3/9dcc0f5797f070ec8edf30fbadfb200e71d9db6b84d211e3b2085a7589a0/click-8.3.0-py3-none-any.whl", + "size": 107295, "sha1": null, - "md5": "7d180e1baded1a50d5ad31b43a965888", - "sha256": "52e1e9f5d3db8c85aa76968c7c67ed41ddbacb167f43201511c8fd61eb5ba2ca", + "md5": "dd99757a403a5728bb37a5cab4d46c83", + "sha256": "9b9f285302c6e3064f4330c05f05b81945b2a39544279343e6e7c5f27a9baddc", "sha512": null, "bug_tracking_url": null, "code_view_url": "https://github.com/pallets/click/", @@ -564,20 +564,20 @@ "dependencies": [], "repository_homepage_url": null, "repository_download_url": null, - "api_data_url": "https://pypi.org/pypi/click/8.2.2/json", + "api_data_url": "https://pypi.org/pypi/click/8.3.0/json", "datasource_id": null, - "purl": "pkg:pypi/click@8.2.2" + "purl": "pkg:pypi/click@8.3.0" }, { "type": "pypi", "namespace": null, "name": "cryptography", - "version": "46.0.1", + "version": "46.0.2", "qualifiers": {}, "subpath": null, "primary_language": "Python", "description": "cryptography is a package which provides cryptographic recipes and primitives to Python developers.\npyca/cryptography\n=================\n\n.. image:: https://img.shields.io/pypi/v/cryptography.svg\n :target: https://pypi.org/project/cryptography/\n :alt: Latest Version\n\n.. image:: https://readthedocs.org/projects/cryptography/badge/?version=latest\n :target: https://cryptography.io\n :alt: Latest Docs\n\n.. image:: https://github.com/pyca/cryptography/actions/workflows/ci.yml/badge.svg\n :target: https://github.com/pyca/cryptography/actions/workflows/ci.yml?query=branch%3Amain\n\n``cryptography`` is a package which provides cryptographic recipes and\nprimitives to Python developers. Our goal is for it to be your \"cryptographic\nstandard library\". It supports Python 3.8+ and PyPy3 7.3.11+.\n\n``cryptography`` includes both high level recipes and low level interfaces to\ncommon cryptographic algorithms such as symmetric ciphers, message digests, and\nkey derivation functions. For example, to encrypt something with\n``cryptography``'s high level symmetric encryption recipe:\n\n.. code-block:: pycon\n\n >>> from cryptography.fernet import Fernet\n >>> # Put this somewhere safe!\n >>> key = Fernet.generate_key()\n >>> f = Fernet(key)\n >>> token = f.encrypt(b\"A really secret message. Not for prying eyes.\")\n >>> token\n b'...'\n >>> f.decrypt(token)\n b'A really secret message. Not for prying eyes.'\n\nYou can find more information in the `documentation`_.\n\nYou can install ``cryptography`` with:\n\n.. code-block:: console\n\n $ pip install cryptography\n\nFor full details see `the installation documentation`_.\n\nDiscussion\n~~~~~~~~~~\n\nIf you run into bugs, you can file them in our `issue tracker`_.\n\nWe maintain a `cryptography-dev`_ mailing list for development discussion.\n\nYou can also join ``#pyca`` on ``irc.libera.chat`` to ask questions or get\ninvolved.\n\nSecurity\n~~~~~~~~\n\nNeed to report a security issue? Please consult our `security reporting`_\ndocumentation.\n\n\n.. _`documentation`: https://cryptography.io/\n.. _`the installation documentation`: https://cryptography.io/en/latest/installation/\n.. _`issue tracker`: https://github.com/pyca/cryptography/issues\n.. _`cryptography-dev`: https://mail.python.org/mailman/listinfo/cryptography-dev\n.. _`security reporting`: https://cryptography.io/en/latest/security/", - "release_date": "2025-09-17T00:09:47", + "release_date": "2025-10-01T00:28:26", "parties": [ { "type": "person", @@ -612,11 +612,11 @@ "Topic :: Security :: Cryptography" ], "homepage_url": null, - "download_url": "https://files.pythonhosted.org/packages/a2/67/65dc233c1ddd688073cf7b136b06ff4b84bf517ba5529607c9d79720fc67/cryptography-46.0.1-cp38-abi3-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", - "size": 4562369, + "download_url": "https://files.pythonhosted.org/packages/a8/5d/1fdbd2e5c1ba822828d250e5a966622ef00185e476d1cd2726b6dd135e53/cryptography-46.0.2-cp38-abi3-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", + "size": 4439524, "sha1": null, - "md5": "329af3462aa6c5e199ab4681bf0be5ba", - "sha256": "341fb7a26bc9d6093c1b124b9f13acc283d2d51da440b98b55ab3f79f2522ead", + "md5": "f3d262ca380c380953e41d9b95ca67e6", + "sha256": "bca3f0ce67e5a2a2cf524e86f44697c4323a86e0fd7ba857de1c30d52c11ede1", "sha512": null, "bug_tracking_url": null, "code_view_url": null, @@ -631,9 +631,9 @@ "dependencies": [], "repository_homepage_url": null, "repository_download_url": null, - "api_data_url": "https://pypi.org/pypi/cryptography/46.0.1/json", + "api_data_url": "https://pypi.org/pypi/cryptography/46.0.2/json", "datasource_id": null, - "purl": "pkg:pypi/cryptography@46.0.1" + "purl": "pkg:pypi/cryptography@46.0.2" }, { "type": "pypi", @@ -1323,7 +1323,7 @@ "package": "pkg:pypi/azure-storage-blob@12.26.0", "dependencies": [ "pkg:pypi/azure-core@1.35.1", - "pkg:pypi/cryptography@46.0.1", + "pkg:pypi/cryptography@46.0.2", "pkg:pypi/isodate@0.7.2", "pkg:pypi/typing-extensions@4.15.0" ] @@ -1343,11 +1343,11 @@ "dependencies": [] }, { - "package": "pkg:pypi/click@8.2.2", + "package": "pkg:pypi/click@8.3.0", "dependencies": [] }, { - "package": "pkg:pypi/cryptography@46.0.1", + "package": "pkg:pypi/cryptography@46.0.2", "dependencies": [ "pkg:pypi/cffi@2.0.0", "pkg:pypi/typing-extensions@4.15.0" diff --git a/tests/data/azure-devops.req-312-expected.json b/tests/data/azure-devops.req-312-expected.json index 8952603a..a9654daf 100644 --- a/tests/data/azure-devops.req-312-expected.json +++ b/tests/data/azure-devops.req-312-expected.json @@ -522,12 +522,12 @@ "type": "pypi", "namespace": null, "name": "click", - "version": "8.2.2", + "version": "8.3.0", "qualifiers": {}, "subpath": null, "primary_language": "Python", "description": "Composable command line interface toolkit\n
\"\"
\n\n# Click\n\nClick is a Python package for creating beautiful command line interfaces\nin a composable way with as little code as necessary. It's the \"Command\nLine Interface Creation Kit\". It's highly configurable but comes with\nsensible defaults out of the box.\n\nIt aims to make the process of writing command line tools quick and fun\nwhile also preventing any frustration caused by the inability to\nimplement an intended CLI API.\n\nClick in three points:\n\n- Arbitrary nesting of commands\n- Automatic help page generation\n- Supports lazy loading of subcommands at runtime\n\n\n## A Simple Example\n\n```python\nimport click\n\n@click.command()\n@click.option(\"--count\", default=1, help=\"Number of greetings.\")\n@click.option(\"--name\", prompt=\"Your name\", help=\"The person to greet.\")\ndef hello(count, name):\n \"\"\"Simple program that greets NAME for a total of COUNT times.\"\"\"\n for _ in range(count):\n click.echo(f\"Hello, {name}!\")\n\nif __name__ == '__main__':\n hello()\n```\n\n```\n$ python hello.py --count=3\nYour name: Click\nHello, Click!\nHello, Click!\nHello, Click!\n```\n\n\n## Donate\n\nThe Pallets organization develops and supports Click and other popular\npackages. In order to grow the community of contributors and users, and\nallow the maintainers to devote more time to the projects, [please\ndonate today][].\n\n[please donate today]: https://palletsprojects.com/donate\n\n## Contributing\n\nSee our [detailed contributing documentation][contrib] for many ways to\ncontribute, including reporting issues, requesting features, asking or answering\nquestions, and making PRs.\n\n[contrib]: https://palletsprojects.com/contributing/", - "release_date": "2025-08-02T02:23:39", + "release_date": "2025-09-18T17:32:22", "parties": [ { "type": "person", @@ -545,11 +545,11 @@ "Typing :: Typed" ], "homepage_url": null, - "download_url": "https://files.pythonhosted.org/packages/ec/85/e7297e34133ae1cfde3bffd30c24e1ef055248251baa877834e048687a28/click-8.2.2-py3-none-any.whl", - "size": 103900, + "download_url": "https://files.pythonhosted.org/packages/db/d3/9dcc0f5797f070ec8edf30fbadfb200e71d9db6b84d211e3b2085a7589a0/click-8.3.0-py3-none-any.whl", + "size": 107295, "sha1": null, - "md5": "7d180e1baded1a50d5ad31b43a965888", - "sha256": "52e1e9f5d3db8c85aa76968c7c67ed41ddbacb167f43201511c8fd61eb5ba2ca", + "md5": "dd99757a403a5728bb37a5cab4d46c83", + "sha256": "9b9f285302c6e3064f4330c05f05b81945b2a39544279343e6e7c5f27a9baddc", "sha512": null, "bug_tracking_url": null, "code_view_url": "https://github.com/pallets/click/", @@ -564,20 +564,20 @@ "dependencies": [], "repository_homepage_url": null, "repository_download_url": null, - "api_data_url": "https://pypi.org/pypi/click/8.2.2/json", + "api_data_url": "https://pypi.org/pypi/click/8.3.0/json", "datasource_id": null, - "purl": "pkg:pypi/click@8.2.2" + "purl": "pkg:pypi/click@8.3.0" }, { "type": "pypi", "namespace": null, "name": "cryptography", - "version": "46.0.1", + "version": "46.0.2", "qualifiers": {}, "subpath": null, "primary_language": "Python", "description": "cryptography is a package which provides cryptographic recipes and primitives to Python developers.\npyca/cryptography\n=================\n\n.. image:: https://img.shields.io/pypi/v/cryptography.svg\n :target: https://pypi.org/project/cryptography/\n :alt: Latest Version\n\n.. image:: https://readthedocs.org/projects/cryptography/badge/?version=latest\n :target: https://cryptography.io\n :alt: Latest Docs\n\n.. image:: https://github.com/pyca/cryptography/actions/workflows/ci.yml/badge.svg\n :target: https://github.com/pyca/cryptography/actions/workflows/ci.yml?query=branch%3Amain\n\n``cryptography`` is a package which provides cryptographic recipes and\nprimitives to Python developers. Our goal is for it to be your \"cryptographic\nstandard library\". It supports Python 3.8+ and PyPy3 7.3.11+.\n\n``cryptography`` includes both high level recipes and low level interfaces to\ncommon cryptographic algorithms such as symmetric ciphers, message digests, and\nkey derivation functions. For example, to encrypt something with\n``cryptography``'s high level symmetric encryption recipe:\n\n.. code-block:: pycon\n\n >>> from cryptography.fernet import Fernet\n >>> # Put this somewhere safe!\n >>> key = Fernet.generate_key()\n >>> f = Fernet(key)\n >>> token = f.encrypt(b\"A really secret message. Not for prying eyes.\")\n >>> token\n b'...'\n >>> f.decrypt(token)\n b'A really secret message. Not for prying eyes.'\n\nYou can find more information in the `documentation`_.\n\nYou can install ``cryptography`` with:\n\n.. code-block:: console\n\n $ pip install cryptography\n\nFor full details see `the installation documentation`_.\n\nDiscussion\n~~~~~~~~~~\n\nIf you run into bugs, you can file them in our `issue tracker`_.\n\nWe maintain a `cryptography-dev`_ mailing list for development discussion.\n\nYou can also join ``#pyca`` on ``irc.libera.chat`` to ask questions or get\ninvolved.\n\nSecurity\n~~~~~~~~\n\nNeed to report a security issue? Please consult our `security reporting`_\ndocumentation.\n\n\n.. _`documentation`: https://cryptography.io/\n.. _`the installation documentation`: https://cryptography.io/en/latest/installation/\n.. _`issue tracker`: https://github.com/pyca/cryptography/issues\n.. _`cryptography-dev`: https://mail.python.org/mailman/listinfo/cryptography-dev\n.. _`security reporting`: https://cryptography.io/en/latest/security/", - "release_date": "2025-09-17T00:08:49", + "release_date": "2025-10-01T00:27:27", "parties": [ { "type": "person", @@ -612,11 +612,11 @@ "Topic :: Security :: Cryptography" ], "homepage_url": null, - "download_url": "https://files.pythonhosted.org/packages/e5/d3/de61ad5b52433b389afca0bc70f02a7a1f074651221f599ce368da0fe437/cryptography-46.0.1-cp311-abi3-manylinux_2_28_x86_64.whl", - "size": 4604234, + "download_url": "https://files.pythonhosted.org/packages/e4/27/0f190ada240003119488ae66c897b5e97149292988f556aef4a6a2a57595/cryptography-46.0.2-cp311-abi3-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", + "size": 4450899, "sha1": null, - "md5": "b3c22ab264b0f5a2ffc43bd9978e19e5", - "sha256": "f7a24ea78de345cfa7f6a8d3bde8b242c7fac27f2bd78fa23474ca38dfaeeab9", + "md5": "e8433775be9e1568bc3c70c4c84b1b47", + "sha256": "bb7fb9cd44c2582aa5990cf61a4183e6f54eea3172e54963787ba47287edd135", "sha512": null, "bug_tracking_url": null, "code_view_url": null, @@ -631,9 +631,9 @@ "dependencies": [], "repository_homepage_url": null, "repository_download_url": null, - "api_data_url": "https://pypi.org/pypi/cryptography/46.0.1/json", + "api_data_url": "https://pypi.org/pypi/cryptography/46.0.2/json", "datasource_id": null, - "purl": "pkg:pypi/cryptography@46.0.1" + "purl": "pkg:pypi/cryptography@46.0.2" }, { "type": "pypi", @@ -1323,7 +1323,7 @@ "package": "pkg:pypi/azure-storage-blob@12.26.0", "dependencies": [ "pkg:pypi/azure-core@1.35.1", - "pkg:pypi/cryptography@46.0.1", + "pkg:pypi/cryptography@46.0.2", "pkg:pypi/isodate@0.7.2", "pkg:pypi/typing-extensions@4.15.0" ] @@ -1343,11 +1343,11 @@ "dependencies": [] }, { - "package": "pkg:pypi/click@8.2.2", + "package": "pkg:pypi/click@8.3.0", "dependencies": [] }, { - "package": "pkg:pypi/cryptography@46.0.1", + "package": "pkg:pypi/cryptography@46.0.2", "dependencies": [ "pkg:pypi/cffi@2.0.0", "pkg:pypi/typing-extensions@4.15.0" diff --git a/tests/data/azure-devops.req-313-expected.json b/tests/data/azure-devops.req-313-expected.json index d4d8d74f..80610d9c 100644 --- a/tests/data/azure-devops.req-313-expected.json +++ b/tests/data/azure-devops.req-313-expected.json @@ -522,12 +522,12 @@ "type": "pypi", "namespace": null, "name": "click", - "version": "8.2.2", + "version": "8.3.0", "qualifiers": {}, "subpath": null, "primary_language": "Python", "description": "Composable command line interface toolkit\n
\"\"
\n\n# Click\n\nClick is a Python package for creating beautiful command line interfaces\nin a composable way with as little code as necessary. It's the \"Command\nLine Interface Creation Kit\". It's highly configurable but comes with\nsensible defaults out of the box.\n\nIt aims to make the process of writing command line tools quick and fun\nwhile also preventing any frustration caused by the inability to\nimplement an intended CLI API.\n\nClick in three points:\n\n- Arbitrary nesting of commands\n- Automatic help page generation\n- Supports lazy loading of subcommands at runtime\n\n\n## A Simple Example\n\n```python\nimport click\n\n@click.command()\n@click.option(\"--count\", default=1, help=\"Number of greetings.\")\n@click.option(\"--name\", prompt=\"Your name\", help=\"The person to greet.\")\ndef hello(count, name):\n \"\"\"Simple program that greets NAME for a total of COUNT times.\"\"\"\n for _ in range(count):\n click.echo(f\"Hello, {name}!\")\n\nif __name__ == '__main__':\n hello()\n```\n\n```\n$ python hello.py --count=3\nYour name: Click\nHello, Click!\nHello, Click!\nHello, Click!\n```\n\n\n## Donate\n\nThe Pallets organization develops and supports Click and other popular\npackages. In order to grow the community of contributors and users, and\nallow the maintainers to devote more time to the projects, [please\ndonate today][].\n\n[please donate today]: https://palletsprojects.com/donate\n\n## Contributing\n\nSee our [detailed contributing documentation][contrib] for many ways to\ncontribute, including reporting issues, requesting features, asking or answering\nquestions, and making PRs.\n\n[contrib]: https://palletsprojects.com/contributing/", - "release_date": "2025-08-02T02:23:39", + "release_date": "2025-09-18T17:32:22", "parties": [ { "type": "person", @@ -545,11 +545,11 @@ "Typing :: Typed" ], "homepage_url": null, - "download_url": "https://files.pythonhosted.org/packages/ec/85/e7297e34133ae1cfde3bffd30c24e1ef055248251baa877834e048687a28/click-8.2.2-py3-none-any.whl", - "size": 103900, + "download_url": "https://files.pythonhosted.org/packages/db/d3/9dcc0f5797f070ec8edf30fbadfb200e71d9db6b84d211e3b2085a7589a0/click-8.3.0-py3-none-any.whl", + "size": 107295, "sha1": null, - "md5": "7d180e1baded1a50d5ad31b43a965888", - "sha256": "52e1e9f5d3db8c85aa76968c7c67ed41ddbacb167f43201511c8fd61eb5ba2ca", + "md5": "dd99757a403a5728bb37a5cab4d46c83", + "sha256": "9b9f285302c6e3064f4330c05f05b81945b2a39544279343e6e7c5f27a9baddc", "sha512": null, "bug_tracking_url": null, "code_view_url": "https://github.com/pallets/click/", @@ -564,20 +564,20 @@ "dependencies": [], "repository_homepage_url": null, "repository_download_url": null, - "api_data_url": "https://pypi.org/pypi/click/8.2.2/json", + "api_data_url": "https://pypi.org/pypi/click/8.3.0/json", "datasource_id": null, - "purl": "pkg:pypi/click@8.2.2" + "purl": "pkg:pypi/click@8.3.0" }, { "type": "pypi", "namespace": null, "name": "cryptography", - "version": "46.0.1", + "version": "46.0.2", "qualifiers": {}, "subpath": null, "primary_language": "Python", "description": "cryptography is a package which provides cryptographic recipes and primitives to Python developers.\npyca/cryptography\n=================\n\n.. image:: https://img.shields.io/pypi/v/cryptography.svg\n :target: https://pypi.org/project/cryptography/\n :alt: Latest Version\n\n.. image:: https://readthedocs.org/projects/cryptography/badge/?version=latest\n :target: https://cryptography.io\n :alt: Latest Docs\n\n.. image:: https://github.com/pyca/cryptography/actions/workflows/ci.yml/badge.svg\n :target: https://github.com/pyca/cryptography/actions/workflows/ci.yml?query=branch%3Amain\n\n``cryptography`` is a package which provides cryptographic recipes and\nprimitives to Python developers. Our goal is for it to be your \"cryptographic\nstandard library\". It supports Python 3.8+ and PyPy3 7.3.11+.\n\n``cryptography`` includes both high level recipes and low level interfaces to\ncommon cryptographic algorithms such as symmetric ciphers, message digests, and\nkey derivation functions. For example, to encrypt something with\n``cryptography``'s high level symmetric encryption recipe:\n\n.. code-block:: pycon\n\n >>> from cryptography.fernet import Fernet\n >>> # Put this somewhere safe!\n >>> key = Fernet.generate_key()\n >>> f = Fernet(key)\n >>> token = f.encrypt(b\"A really secret message. Not for prying eyes.\")\n >>> token\n b'...'\n >>> f.decrypt(token)\n b'A really secret message. Not for prying eyes.'\n\nYou can find more information in the `documentation`_.\n\nYou can install ``cryptography`` with:\n\n.. code-block:: console\n\n $ pip install cryptography\n\nFor full details see `the installation documentation`_.\n\nDiscussion\n~~~~~~~~~~\n\nIf you run into bugs, you can file them in our `issue tracker`_.\n\nWe maintain a `cryptography-dev`_ mailing list for development discussion.\n\nYou can also join ``#pyca`` on ``irc.libera.chat`` to ask questions or get\ninvolved.\n\nSecurity\n~~~~~~~~\n\nNeed to report a security issue? Please consult our `security reporting`_\ndocumentation.\n\n\n.. _`documentation`: https://cryptography.io/\n.. _`the installation documentation`: https://cryptography.io/en/latest/installation/\n.. _`issue tracker`: https://github.com/pyca/cryptography/issues\n.. _`cryptography-dev`: https://mail.python.org/mailman/listinfo/cryptography-dev\n.. _`security reporting`: https://cryptography.io/en/latest/security/", - "release_date": "2025-09-17T00:08:49", + "release_date": "2025-10-01T00:27:27", "parties": [ { "type": "person", @@ -612,11 +612,11 @@ "Topic :: Security :: Cryptography" ], "homepage_url": null, - "download_url": "https://files.pythonhosted.org/packages/e5/d3/de61ad5b52433b389afca0bc70f02a7a1f074651221f599ce368da0fe437/cryptography-46.0.1-cp311-abi3-manylinux_2_28_x86_64.whl", - "size": 4604234, + "download_url": "https://files.pythonhosted.org/packages/e4/27/0f190ada240003119488ae66c897b5e97149292988f556aef4a6a2a57595/cryptography-46.0.2-cp311-abi3-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", + "size": 4450899, "sha1": null, - "md5": "b3c22ab264b0f5a2ffc43bd9978e19e5", - "sha256": "f7a24ea78de345cfa7f6a8d3bde8b242c7fac27f2bd78fa23474ca38dfaeeab9", + "md5": "e8433775be9e1568bc3c70c4c84b1b47", + "sha256": "bb7fb9cd44c2582aa5990cf61a4183e6f54eea3172e54963787ba47287edd135", "sha512": null, "bug_tracking_url": null, "code_view_url": null, @@ -631,9 +631,9 @@ "dependencies": [], "repository_homepage_url": null, "repository_download_url": null, - "api_data_url": "https://pypi.org/pypi/cryptography/46.0.1/json", + "api_data_url": "https://pypi.org/pypi/cryptography/46.0.2/json", "datasource_id": null, - "purl": "pkg:pypi/cryptography@46.0.1" + "purl": "pkg:pypi/cryptography@46.0.2" }, { "type": "pypi", @@ -1323,7 +1323,7 @@ "package": "pkg:pypi/azure-storage-blob@12.26.0", "dependencies": [ "pkg:pypi/azure-core@1.35.1", - "pkg:pypi/cryptography@46.0.1", + "pkg:pypi/cryptography@46.0.2", "pkg:pypi/isodate@0.7.2", "pkg:pypi/typing-extensions@4.15.0" ] @@ -1343,11 +1343,11 @@ "dependencies": [] }, { - "package": "pkg:pypi/click@8.2.2", + "package": "pkg:pypi/click@8.3.0", "dependencies": [] }, { - "package": "pkg:pypi/cryptography@46.0.1", + "package": "pkg:pypi/cryptography@46.0.2", "dependencies": [ "pkg:pypi/cffi@2.0.0", "pkg:pypi/typing-extensions@4.15.0" diff --git a/tests/data/resolved_deps/flask-310-expected.json b/tests/data/resolved_deps/flask-310-expected.json index 25b9b00e..7397ebe6 100644 --- a/tests/data/resolved_deps/flask-310-expected.json +++ b/tests/data/resolved_deps/flask-310-expected.json @@ -1,13 +1,13 @@ [ [ { - "package": "pkg:pypi/click@8.2.2", + "package": "pkg:pypi/click@8.3.0", "dependencies": [] }, { "package": "pkg:pypi/flask@2.1.2", "dependencies": [ - "pkg:pypi/click@8.2.2", + "pkg:pypi/click@8.3.0", "pkg:pypi/itsdangerous@2.2.0", "pkg:pypi/jinja2@3.1.6", "pkg:pypi/werkzeug@3.1.3" @@ -20,26 +20,26 @@ { "package": "pkg:pypi/jinja2@3.1.6", "dependencies": [ - "pkg:pypi/markupsafe@3.0.2" + "pkg:pypi/markupsafe@3.0.3" ] }, { - "package": "pkg:pypi/markupsafe@3.0.2", + "package": "pkg:pypi/markupsafe@3.0.3", "dependencies": [] }, { "package": "pkg:pypi/werkzeug@3.1.3", "dependencies": [ - "pkg:pypi/markupsafe@3.0.2" + "pkg:pypi/markupsafe@3.0.3" ] } ], [ - "pkg:pypi/click@8.2.2", + "pkg:pypi/click@8.3.0", "pkg:pypi/flask@2.1.2", "pkg:pypi/itsdangerous@2.2.0", "pkg:pypi/jinja2@3.1.6", - "pkg:pypi/markupsafe@3.0.2", + "pkg:pypi/markupsafe@3.0.3", "pkg:pypi/werkzeug@3.1.3" ] ] \ No newline at end of file diff --git a/tests/data/resolved_deps/flask-310-win-expected.json b/tests/data/resolved_deps/flask-310-win-expected.json index e054ac42..ca427261 100644 --- a/tests/data/resolved_deps/flask-310-win-expected.json +++ b/tests/data/resolved_deps/flask-310-win-expected.json @@ -1,7 +1,7 @@ [ [ { - "package": "pkg:pypi/click@8.2.2", + "package": "pkg:pypi/click@8.3.0", "dependencies": [ "pkg:pypi/colorama@0.4.6" ] @@ -13,7 +13,7 @@ { "package": "pkg:pypi/flask@2.1.2", "dependencies": [ - "pkg:pypi/click@8.2.2", + "pkg:pypi/click@8.3.0", "pkg:pypi/itsdangerous@2.2.0", "pkg:pypi/jinja2@3.1.6", "pkg:pypi/werkzeug@3.1.3" @@ -26,27 +26,27 @@ { "package": "pkg:pypi/jinja2@3.1.6", "dependencies": [ - "pkg:pypi/markupsafe@3.0.2" + "pkg:pypi/markupsafe@3.0.3" ] }, { - "package": "pkg:pypi/markupsafe@3.0.2", + "package": "pkg:pypi/markupsafe@3.0.3", "dependencies": [] }, { "package": "pkg:pypi/werkzeug@3.1.3", "dependencies": [ - "pkg:pypi/markupsafe@3.0.2" + "pkg:pypi/markupsafe@3.0.3" ] } ], [ - "pkg:pypi/click@8.2.2", + "pkg:pypi/click@8.3.0", "pkg:pypi/colorama@0.4.6", "pkg:pypi/flask@2.1.2", "pkg:pypi/itsdangerous@2.2.0", "pkg:pypi/jinja2@3.1.6", - "pkg:pypi/markupsafe@3.0.2", + "pkg:pypi/markupsafe@3.0.3", "pkg:pypi/werkzeug@3.1.3" ] ] \ No newline at end of file diff --git a/tests/data/resolved_deps/flask-39-expected.json b/tests/data/resolved_deps/flask-39-expected.json index 9be39ab6..2b38e8d0 100644 --- a/tests/data/resolved_deps/flask-39-expected.json +++ b/tests/data/resolved_deps/flask-39-expected.json @@ -27,17 +27,17 @@ { "package": "pkg:pypi/jinja2@3.1.6", "dependencies": [ - "pkg:pypi/markupsafe@3.0.2" + "pkg:pypi/markupsafe@3.0.3" ] }, { - "package": "pkg:pypi/markupsafe@3.0.2", + "package": "pkg:pypi/markupsafe@3.0.3", "dependencies": [] }, { "package": "pkg:pypi/werkzeug@3.1.3", "dependencies": [ - "pkg:pypi/markupsafe@3.0.2" + "pkg:pypi/markupsafe@3.0.3" ] }, { @@ -51,7 +51,7 @@ "pkg:pypi/importlib-metadata@8.7.0", "pkg:pypi/itsdangerous@2.2.0", "pkg:pypi/jinja2@3.1.6", - "pkg:pypi/markupsafe@3.0.2", + "pkg:pypi/markupsafe@3.0.3", "pkg:pypi/werkzeug@3.1.3", "pkg:pypi/zipp@3.23.0" ] diff --git a/tests/data/test-api-expected.json b/tests/data/test-api-expected.json index 48e56477..824147dd 100644 --- a/tests/data/test-api-expected.json +++ b/tests/data/test-api-expected.json @@ -5,12 +5,12 @@ "type": "pypi", "namespace": null, "name": "click", - "version": "8.2.2", + "version": "8.3.0", "qualifiers": {}, "subpath": null, "primary_language": "Python", "description": "Composable command line interface toolkit\n
\"\"
\n\n# Click\n\nClick is a Python package for creating beautiful command line interfaces\nin a composable way with as little code as necessary. It's the \"Command\nLine Interface Creation Kit\". It's highly configurable but comes with\nsensible defaults out of the box.\n\nIt aims to make the process of writing command line tools quick and fun\nwhile also preventing any frustration caused by the inability to\nimplement an intended CLI API.\n\nClick in three points:\n\n- Arbitrary nesting of commands\n- Automatic help page generation\n- Supports lazy loading of subcommands at runtime\n\n\n## A Simple Example\n\n```python\nimport click\n\n@click.command()\n@click.option(\"--count\", default=1, help=\"Number of greetings.\")\n@click.option(\"--name\", prompt=\"Your name\", help=\"The person to greet.\")\ndef hello(count, name):\n \"\"\"Simple program that greets NAME for a total of COUNT times.\"\"\"\n for _ in range(count):\n click.echo(f\"Hello, {name}!\")\n\nif __name__ == '__main__':\n hello()\n```\n\n```\n$ python hello.py --count=3\nYour name: Click\nHello, Click!\nHello, Click!\nHello, Click!\n```\n\n\n## Donate\n\nThe Pallets organization develops and supports Click and other popular\npackages. In order to grow the community of contributors and users, and\nallow the maintainers to devote more time to the projects, [please\ndonate today][].\n\n[please donate today]: https://palletsprojects.com/donate\n\n## Contributing\n\nSee our [detailed contributing documentation][contrib] for many ways to\ncontribute, including reporting issues, requesting features, asking or answering\nquestions, and making PRs.\n\n[contrib]: https://palletsprojects.com/contributing/", - "release_date": "2025-08-02T02:23:39", + "release_date": "2025-09-18T17:32:22", "parties": [ { "type": "person", @@ -28,11 +28,11 @@ "Typing :: Typed" ], "homepage_url": null, - "download_url": "https://files.pythonhosted.org/packages/ec/85/e7297e34133ae1cfde3bffd30c24e1ef055248251baa877834e048687a28/click-8.2.2-py3-none-any.whl", - "size": 103900, + "download_url": "https://files.pythonhosted.org/packages/db/d3/9dcc0f5797f070ec8edf30fbadfb200e71d9db6b84d211e3b2085a7589a0/click-8.3.0-py3-none-any.whl", + "size": 107295, "sha1": null, - "md5": "7d180e1baded1a50d5ad31b43a965888", - "sha256": "52e1e9f5d3db8c85aa76968c7c67ed41ddbacb167f43201511c8fd61eb5ba2ca", + "md5": "dd99757a403a5728bb37a5cab4d46c83", + "sha256": "9b9f285302c6e3064f4330c05f05b81945b2a39544279343e6e7c5f27a9baddc", "sha512": null, "bug_tracking_url": null, "code_view_url": "https://github.com/pallets/click/", @@ -47,9 +47,9 @@ "dependencies": [], "repository_homepage_url": null, "repository_download_url": null, - "api_data_url": "https://pypi.org/pypi/click/8.2.2/json", + "api_data_url": "https://pypi.org/pypi/click/8.3.0/json", "datasource_id": null, - "purl": "pkg:pypi/click@8.2.2" + "purl": "pkg:pypi/click@8.3.0" }, { "type": "pypi", @@ -233,12 +233,12 @@ "type": "pypi", "namespace": null, "name": "markupsafe", - "version": "3.0.2", + "version": "3.0.3", "qualifiers": {}, "subpath": null, "primary_language": "Python", - "description": "Safely add untrusted strings to HTML/XML markup.\n# MarkupSafe\n\nMarkupSafe implements a text object that escapes characters so it is\nsafe to use in HTML and XML. Characters that have special meanings are\nreplaced so that they display as the actual characters. This mitigates\ninjection attacks, meaning untrusted user input can safely be displayed\non a page.\n\n\n## Examples\n\n```pycon\n>>> from markupsafe import Markup, escape\n\n>>> # escape replaces special characters and wraps in Markup\n>>> escape(\"\")\nMarkup('<script>alert(document.cookie);</script>')\n\n>>> # wrap in Markup to mark text \"safe\" and prevent escaping\n>>> Markup(\"Hello\")\nMarkup('hello')\n\n>>> escape(Markup(\"Hello\"))\nMarkup('hello')\n\n>>> # Markup is a str subclass\n>>> # methods and operators escape their arguments\n>>> template = Markup(\"Hello {name}\")\n>>> template.format(name='\"World\"')\nMarkup('Hello "World"')\n```\n\n## Donate\n\nThe Pallets organization develops and supports MarkupSafe and other\npopular packages. In order to grow the community of contributors and\nusers, and allow the maintainers to devote more time to the projects,\n[please donate today][].\n\n[please donate today]: https://palletsprojects.com/donate", - "release_date": "2024-10-18T15:20:59", + "description": "Safely add untrusted strings to HTML/XML markup.\n
\"\"
\n\n# MarkupSafe\n\nMarkupSafe implements a text object that escapes characters so it is\nsafe to use in HTML and XML. Characters that have special meanings are\nreplaced so that they display as the actual characters. This mitigates\ninjection attacks, meaning untrusted user input can safely be displayed\non a page.\n\n\n## Examples\n\n```pycon\n>>> from markupsafe import Markup, escape\n\n>>> # escape replaces special characters and wraps in Markup\n>>> escape(\"\")\nMarkup('<script>alert(document.cookie);</script>')\n\n>>> # wrap in Markup to mark text \"safe\" and prevent escaping\n>>> Markup(\"Hello\")\nMarkup('hello')\n\n>>> escape(Markup(\"Hello\"))\nMarkup('hello')\n\n>>> # Markup is a str subclass\n>>> # methods and operators escape their arguments\n>>> template = Markup(\"Hello {name}\")\n>>> template.format(name='\"World\"')\nMarkup('Hello "World"')\n```\n\n## Donate\n\nThe Pallets organization develops and supports MarkupSafe and other\npopular packages. In order to grow the community of contributors and\nusers, and allow the maintainers to devote more time to the projects,\n[please donate today][].\n\n[please donate today]: https://palletsprojects.com/donate\n\n## Contributing\n\nSee our [detailed contributing documentation][contrib] for many ways to\ncontribute, including reporting issues, requesting features, asking or answering\nquestions, and making PRs.\n\n[contrib]: https://palletsprojects.com/contributing/", + "release_date": "2025-09-27T18:36:08", "parties": [ { "type": "person", @@ -259,23 +259,18 @@ "Typing :: Typed" ], "homepage_url": null, - "download_url": "https://files.pythonhosted.org/packages/bd/6e/61ebf08d8940553afff20d1fb1ba7294b6f8d279df9fd0c0db911b4bbcfd/MarkupSafe-3.0.2-cp310-cp310-musllinux_1_2_x86_64.whl", - "size": 21091, + "download_url": "https://files.pythonhosted.org/packages/af/cd/ce6e848bbf2c32314c9b237839119c5a564a59725b53157c856e90937b7a/markupsafe-3.0.3-cp310-cp310-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", + "size": 20681, "sha1": null, - "md5": "ef4de80fb119dfe436aa346068b6cbc8", - "sha256": "b424c77b206d63d500bcb69fa55ed8d0e6a3774056bdc4839fc9298a7edca171", + "md5": "f0b62676dd5a7af5eeacdefb58a5784d", + "sha256": "f42d0984e947b8adf7dd6dde396e720934d12c506ce84eea8476409563607591", "sha512": null, "bug_tracking_url": null, "code_view_url": "https://github.com/pallets/markupsafe/", "vcs_url": null, "copyright": null, - "license_expression": null, - "declared_license": { - "license": "Copyright 2010 Pallets Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: 1. Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. 2. Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. 3. Neither the name of the copyright holder nor the names of its contributors may be used to endorse or promote products derived from this software without specific prior written permission. THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. ", - "classifiers": [ - "License :: OSI Approved :: BSD License" - ] - }, + "license_expression": "BSD-3-Clause", + "declared_license": {}, "notice_text": null, "source_packages": [], "file_references": [], @@ -283,9 +278,9 @@ "dependencies": [], "repository_homepage_url": null, "repository_download_url": null, - "api_data_url": "https://pypi.org/pypi/markupsafe/3.0.2/json", + "api_data_url": "https://pypi.org/pypi/markupsafe/3.0.3/json", "datasource_id": null, - "purl": "pkg:pypi/markupsafe@3.0.2" + "purl": "pkg:pypi/markupsafe@3.0.3" }, { "type": "pypi", @@ -350,13 +345,13 @@ ], "resolution": [ { - "package": "pkg:pypi/click@8.2.2", + "package": "pkg:pypi/click@8.3.0", "dependencies": [] }, { "package": "pkg:pypi/flask@2.1.2", "dependencies": [ - "pkg:pypi/click@8.2.2", + "pkg:pypi/click@8.3.0", "pkg:pypi/itsdangerous@2.2.0", "pkg:pypi/jinja2@3.1.6", "pkg:pypi/werkzeug@3.1.3" @@ -369,17 +364,17 @@ { "package": "pkg:pypi/jinja2@3.1.6", "dependencies": [ - "pkg:pypi/markupsafe@3.0.2" + "pkg:pypi/markupsafe@3.0.3" ] }, { - "package": "pkg:pypi/markupsafe@3.0.2", + "package": "pkg:pypi/markupsafe@3.0.3", "dependencies": [] }, { "package": "pkg:pypi/werkzeug@3.1.3", "dependencies": [ - "pkg:pypi/markupsafe@3.0.2" + "pkg:pypi/markupsafe@3.0.3" ] } ] diff --git a/tests/data/test-api-pdt-expected.json b/tests/data/test-api-pdt-expected.json index 102a4a1d..e64605da 100644 --- a/tests/data/test-api-pdt-expected.json +++ b/tests/data/test-api-pdt-expected.json @@ -5,12 +5,12 @@ "type": "pypi", "namespace": null, "name": "click", - "version": "8.2.2", + "version": "8.3.0", "qualifiers": {}, "subpath": null, "primary_language": "Python", "description": "Composable command line interface toolkit\n
\"\"
\n\n# Click\n\nClick is a Python package for creating beautiful command line interfaces\nin a composable way with as little code as necessary. It's the \"Command\nLine Interface Creation Kit\". It's highly configurable but comes with\nsensible defaults out of the box.\n\nIt aims to make the process of writing command line tools quick and fun\nwhile also preventing any frustration caused by the inability to\nimplement an intended CLI API.\n\nClick in three points:\n\n- Arbitrary nesting of commands\n- Automatic help page generation\n- Supports lazy loading of subcommands at runtime\n\n\n## A Simple Example\n\n```python\nimport click\n\n@click.command()\n@click.option(\"--count\", default=1, help=\"Number of greetings.\")\n@click.option(\"--name\", prompt=\"Your name\", help=\"The person to greet.\")\ndef hello(count, name):\n \"\"\"Simple program that greets NAME for a total of COUNT times.\"\"\"\n for _ in range(count):\n click.echo(f\"Hello, {name}!\")\n\nif __name__ == '__main__':\n hello()\n```\n\n```\n$ python hello.py --count=3\nYour name: Click\nHello, Click!\nHello, Click!\nHello, Click!\n```\n\n\n## Donate\n\nThe Pallets organization develops and supports Click and other popular\npackages. In order to grow the community of contributors and users, and\nallow the maintainers to devote more time to the projects, [please\ndonate today][].\n\n[please donate today]: https://palletsprojects.com/donate\n\n## Contributing\n\nSee our [detailed contributing documentation][contrib] for many ways to\ncontribute, including reporting issues, requesting features, asking or answering\nquestions, and making PRs.\n\n[contrib]: https://palletsprojects.com/contributing/", - "release_date": "2025-08-02T02:23:39", + "release_date": "2025-09-18T17:32:22", "parties": [ { "type": "person", @@ -28,11 +28,11 @@ "Typing :: Typed" ], "homepage_url": null, - "download_url": "https://files.pythonhosted.org/packages/ec/85/e7297e34133ae1cfde3bffd30c24e1ef055248251baa877834e048687a28/click-8.2.2-py3-none-any.whl", - "size": 103900, + "download_url": "https://files.pythonhosted.org/packages/db/d3/9dcc0f5797f070ec8edf30fbadfb200e71d9db6b84d211e3b2085a7589a0/click-8.3.0-py3-none-any.whl", + "size": 107295, "sha1": null, - "md5": "7d180e1baded1a50d5ad31b43a965888", - "sha256": "52e1e9f5d3db8c85aa76968c7c67ed41ddbacb167f43201511c8fd61eb5ba2ca", + "md5": "dd99757a403a5728bb37a5cab4d46c83", + "sha256": "9b9f285302c6e3064f4330c05f05b81945b2a39544279343e6e7c5f27a9baddc", "sha512": null, "bug_tracking_url": null, "code_view_url": "https://github.com/pallets/click/", @@ -47,9 +47,9 @@ "dependencies": [], "repository_homepage_url": null, "repository_download_url": null, - "api_data_url": "https://pypi.org/pypi/click/8.2.2/json", + "api_data_url": "https://pypi.org/pypi/click/8.3.0/json", "datasource_id": null, - "purl": "pkg:pypi/click@8.2.2" + "purl": "pkg:pypi/click@8.3.0" }, { "type": "pypi", @@ -233,12 +233,12 @@ "type": "pypi", "namespace": null, "name": "markupsafe", - "version": "3.0.2", + "version": "3.0.3", "qualifiers": {}, "subpath": null, "primary_language": "Python", - "description": "Safely add untrusted strings to HTML/XML markup.\n# MarkupSafe\n\nMarkupSafe implements a text object that escapes characters so it is\nsafe to use in HTML and XML. Characters that have special meanings are\nreplaced so that they display as the actual characters. This mitigates\ninjection attacks, meaning untrusted user input can safely be displayed\non a page.\n\n\n## Examples\n\n```pycon\n>>> from markupsafe import Markup, escape\n\n>>> # escape replaces special characters and wraps in Markup\n>>> escape(\"\")\nMarkup('<script>alert(document.cookie);</script>')\n\n>>> # wrap in Markup to mark text \"safe\" and prevent escaping\n>>> Markup(\"Hello\")\nMarkup('hello')\n\n>>> escape(Markup(\"Hello\"))\nMarkup('hello')\n\n>>> # Markup is a str subclass\n>>> # methods and operators escape their arguments\n>>> template = Markup(\"Hello {name}\")\n>>> template.format(name='\"World\"')\nMarkup('Hello "World"')\n```\n\n## Donate\n\nThe Pallets organization develops and supports MarkupSafe and other\npopular packages. In order to grow the community of contributors and\nusers, and allow the maintainers to devote more time to the projects,\n[please donate today][].\n\n[please donate today]: https://palletsprojects.com/donate", - "release_date": "2024-10-18T15:20:59", + "description": "Safely add untrusted strings to HTML/XML markup.\n
\"\"
\n\n# MarkupSafe\n\nMarkupSafe implements a text object that escapes characters so it is\nsafe to use in HTML and XML. Characters that have special meanings are\nreplaced so that they display as the actual characters. This mitigates\ninjection attacks, meaning untrusted user input can safely be displayed\non a page.\n\n\n## Examples\n\n```pycon\n>>> from markupsafe import Markup, escape\n\n>>> # escape replaces special characters and wraps in Markup\n>>> escape(\"\")\nMarkup('<script>alert(document.cookie);</script>')\n\n>>> # wrap in Markup to mark text \"safe\" and prevent escaping\n>>> Markup(\"Hello\")\nMarkup('hello')\n\n>>> escape(Markup(\"Hello\"))\nMarkup('hello')\n\n>>> # Markup is a str subclass\n>>> # methods and operators escape their arguments\n>>> template = Markup(\"Hello {name}\")\n>>> template.format(name='\"World\"')\nMarkup('Hello "World"')\n```\n\n## Donate\n\nThe Pallets organization develops and supports MarkupSafe and other\npopular packages. In order to grow the community of contributors and\nusers, and allow the maintainers to devote more time to the projects,\n[please donate today][].\n\n[please donate today]: https://palletsprojects.com/donate\n\n## Contributing\n\nSee our [detailed contributing documentation][contrib] for many ways to\ncontribute, including reporting issues, requesting features, asking or answering\nquestions, and making PRs.\n\n[contrib]: https://palletsprojects.com/contributing/", + "release_date": "2025-09-27T18:36:08", "parties": [ { "type": "person", @@ -259,23 +259,18 @@ "Typing :: Typed" ], "homepage_url": null, - "download_url": "https://files.pythonhosted.org/packages/bd/6e/61ebf08d8940553afff20d1fb1ba7294b6f8d279df9fd0c0db911b4bbcfd/MarkupSafe-3.0.2-cp310-cp310-musllinux_1_2_x86_64.whl", - "size": 21091, + "download_url": "https://files.pythonhosted.org/packages/af/cd/ce6e848bbf2c32314c9b237839119c5a564a59725b53157c856e90937b7a/markupsafe-3.0.3-cp310-cp310-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", + "size": 20681, "sha1": null, - "md5": "ef4de80fb119dfe436aa346068b6cbc8", - "sha256": "b424c77b206d63d500bcb69fa55ed8d0e6a3774056bdc4839fc9298a7edca171", + "md5": "f0b62676dd5a7af5eeacdefb58a5784d", + "sha256": "f42d0984e947b8adf7dd6dde396e720934d12c506ce84eea8476409563607591", "sha512": null, "bug_tracking_url": null, "code_view_url": "https://github.com/pallets/markupsafe/", "vcs_url": null, "copyright": null, - "license_expression": null, - "declared_license": { - "license": "Copyright 2010 Pallets Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: 1. Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. 2. Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. 3. Neither the name of the copyright holder nor the names of its contributors may be used to endorse or promote products derived from this software without specific prior written permission. THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. ", - "classifiers": [ - "License :: OSI Approved :: BSD License" - ] - }, + "license_expression": "BSD-3-Clause", + "declared_license": {}, "notice_text": null, "source_packages": [], "file_references": [], @@ -283,9 +278,9 @@ "dependencies": [], "repository_homepage_url": null, "repository_download_url": null, - "api_data_url": "https://pypi.org/pypi/markupsafe/3.0.2/json", + "api_data_url": "https://pypi.org/pypi/markupsafe/3.0.3/json", "datasource_id": null, - "purl": "pkg:pypi/markupsafe@3.0.2" + "purl": "pkg:pypi/markupsafe@3.0.3" }, { "type": "pypi", @@ -357,7 +352,7 @@ { "key": "click", "package_name": "click", - "installed_version": "8.2.2", + "installed_version": "8.3.0", "dependencies": [] }, { @@ -374,7 +369,7 @@ { "key": "markupsafe", "package_name": "markupsafe", - "installed_version": "3.0.2", + "installed_version": "3.0.3", "dependencies": [] } ] @@ -387,7 +382,7 @@ { "key": "markupsafe", "package_name": "markupsafe", - "installed_version": "3.0.2", + "installed_version": "3.0.3", "dependencies": [] } ] diff --git a/tests/data/test-api-with-prefer-source.json b/tests/data/test-api-with-prefer-source.json index 8653fa3a..d77eb908 100644 --- a/tests/data/test-api-with-prefer-source.json +++ b/tests/data/test-api-with-prefer-source.json @@ -5,12 +5,12 @@ "type": "pypi", "namespace": null, "name": "click", - "version": "8.2.2", + "version": "8.3.0", "qualifiers": {}, "subpath": null, "primary_language": "Python", "description": "Composable command line interface toolkit\n
\"\"
\n\n# Click\n\nClick is a Python package for creating beautiful command line interfaces\nin a composable way with as little code as necessary. It's the \"Command\nLine Interface Creation Kit\". It's highly configurable but comes with\nsensible defaults out of the box.\n\nIt aims to make the process of writing command line tools quick and fun\nwhile also preventing any frustration caused by the inability to\nimplement an intended CLI API.\n\nClick in three points:\n\n- Arbitrary nesting of commands\n- Automatic help page generation\n- Supports lazy loading of subcommands at runtime\n\n\n## A Simple Example\n\n```python\nimport click\n\n@click.command()\n@click.option(\"--count\", default=1, help=\"Number of greetings.\")\n@click.option(\"--name\", prompt=\"Your name\", help=\"The person to greet.\")\ndef hello(count, name):\n \"\"\"Simple program that greets NAME for a total of COUNT times.\"\"\"\n for _ in range(count):\n click.echo(f\"Hello, {name}!\")\n\nif __name__ == '__main__':\n hello()\n```\n\n```\n$ python hello.py --count=3\nYour name: Click\nHello, Click!\nHello, Click!\nHello, Click!\n```\n\n\n## Donate\n\nThe Pallets organization develops and supports Click and other popular\npackages. In order to grow the community of contributors and users, and\nallow the maintainers to devote more time to the projects, [please\ndonate today][].\n\n[please donate today]: https://palletsprojects.com/donate\n\n## Contributing\n\nSee our [detailed contributing documentation][contrib] for many ways to\ncontribute, including reporting issues, requesting features, asking or answering\nquestions, and making PRs.\n\n[contrib]: https://palletsprojects.com/contributing/", - "release_date": "2025-08-02T02:23:41", + "release_date": "2025-09-18T17:32:23", "parties": [ { "type": "person", @@ -28,11 +28,11 @@ "Typing :: Typed" ], "homepage_url": null, - "download_url": "https://files.pythonhosted.org/packages/e9/87/105111999772ec9730e3d4d910c723ea9763ece2ec441533a5cea1e87e3c/click-8.2.2.tar.gz", - "size": 263977, + "download_url": "https://files.pythonhosted.org/packages/46/61/de6cd827efad202d7057d93e0fed9294b96952e188f7384832791c7b2254/click-8.3.0.tar.gz", + "size": 276943, "sha1": null, - "md5": "2b12ffb230a22fd5aabe301ade045b4a", - "sha256": "068616e6ef9705a07b6db727cb9c248f4eb9dae437a30239f56fa94b18b852ef", + "md5": "fa228744ff03a339957e847fb7890823", + "sha256": "e7b8232224eba16f4ebe410c25ced9f7875cb5f3263ffc93cc3e8da705e229c4", "sha512": null, "bug_tracking_url": null, "code_view_url": "https://github.com/pallets/click/", @@ -47,9 +47,9 @@ "dependencies": [], "repository_homepage_url": null, "repository_download_url": null, - "api_data_url": "https://pypi.org/pypi/click/8.2.2/json", + "api_data_url": "https://pypi.org/pypi/click/8.3.0/json", "datasource_id": null, - "purl": "pkg:pypi/click@8.2.2" + "purl": "pkg:pypi/click@8.3.0" }, { "type": "pypi", @@ -233,12 +233,12 @@ "type": "pypi", "namespace": null, "name": "markupsafe", - "version": "3.0.2", + "version": "3.0.3", "qualifiers": {}, "subpath": null, "primary_language": "Python", - "description": "Safely add untrusted strings to HTML/XML markup.\n# MarkupSafe\n\nMarkupSafe implements a text object that escapes characters so it is\nsafe to use in HTML and XML. Characters that have special meanings are\nreplaced so that they display as the actual characters. This mitigates\ninjection attacks, meaning untrusted user input can safely be displayed\non a page.\n\n\n## Examples\n\n```pycon\n>>> from markupsafe import Markup, escape\n\n>>> # escape replaces special characters and wraps in Markup\n>>> escape(\"\")\nMarkup('<script>alert(document.cookie);</script>')\n\n>>> # wrap in Markup to mark text \"safe\" and prevent escaping\n>>> Markup(\"Hello\")\nMarkup('hello')\n\n>>> escape(Markup(\"Hello\"))\nMarkup('hello')\n\n>>> # Markup is a str subclass\n>>> # methods and operators escape their arguments\n>>> template = Markup(\"Hello {name}\")\n>>> template.format(name='\"World\"')\nMarkup('Hello "World"')\n```\n\n## Donate\n\nThe Pallets organization develops and supports MarkupSafe and other\npopular packages. In order to grow the community of contributors and\nusers, and allow the maintainers to devote more time to the projects,\n[please donate today][].\n\n[please donate today]: https://palletsprojects.com/donate", - "release_date": "2024-10-18T15:21:54", + "description": "Safely add untrusted strings to HTML/XML markup.\n
\"\"
\n\n# MarkupSafe\n\nMarkupSafe implements a text object that escapes characters so it is\nsafe to use in HTML and XML. Characters that have special meanings are\nreplaced so that they display as the actual characters. This mitigates\ninjection attacks, meaning untrusted user input can safely be displayed\non a page.\n\n\n## Examples\n\n```pycon\n>>> from markupsafe import Markup, escape\n\n>>> # escape replaces special characters and wraps in Markup\n>>> escape(\"\")\nMarkup('<script>alert(document.cookie);</script>')\n\n>>> # wrap in Markup to mark text \"safe\" and prevent escaping\n>>> Markup(\"Hello\")\nMarkup('hello')\n\n>>> escape(Markup(\"Hello\"))\nMarkup('hello')\n\n>>> # Markup is a str subclass\n>>> # methods and operators escape their arguments\n>>> template = Markup(\"Hello {name}\")\n>>> template.format(name='\"World\"')\nMarkup('Hello "World"')\n```\n\n## Donate\n\nThe Pallets organization develops and supports MarkupSafe and other\npopular packages. In order to grow the community of contributors and\nusers, and allow the maintainers to devote more time to the projects,\n[please donate today][].\n\n[please donate today]: https://palletsprojects.com/donate\n\n## Contributing\n\nSee our [detailed contributing documentation][contrib] for many ways to\ncontribute, including reporting issues, requesting features, asking or answering\nquestions, and making PRs.\n\n[contrib]: https://palletsprojects.com/contributing/", + "release_date": "2025-09-27T18:37:40", "parties": [ { "type": "person", @@ -259,23 +259,18 @@ "Typing :: Typed" ], "homepage_url": null, - "download_url": "https://files.pythonhosted.org/packages/b2/97/5d42485e71dfc078108a86d6de8fa46db44a1a9295e89c5d6d4a06e23a62/markupsafe-3.0.2.tar.gz", - "size": 20537, + "download_url": "https://files.pythonhosted.org/packages/7e/99/7690b6d4034fffd95959cbe0c02de8deb3098cc577c67bb6a24fe5d7caa7/markupsafe-3.0.3.tar.gz", + "size": 80313, "sha1": null, - "md5": "cb0071711b573b155cc8f86e1de72167", - "sha256": "ee55d3edf80167e48ea11a923c7386f4669df67d7994554387f84e7d8b0a2bf0", + "md5": "13a73126d25afa72a1ff0daed072f5fe", + "sha256": "722695808f4b6457b320fdc131280796bdceb04ab50fe1795cd540799ebe1698", "sha512": null, "bug_tracking_url": null, "code_view_url": "https://github.com/pallets/markupsafe/", "vcs_url": null, "copyright": null, - "license_expression": null, - "declared_license": { - "license": "Copyright 2010 Pallets Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: 1. Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. 2. Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. 3. Neither the name of the copyright holder nor the names of its contributors may be used to endorse or promote products derived from this software without specific prior written permission. THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. ", - "classifiers": [ - "License :: OSI Approved :: BSD License" - ] - }, + "license_expression": "BSD-3-Clause", + "declared_license": {}, "notice_text": null, "source_packages": [], "file_references": [], @@ -283,9 +278,9 @@ "dependencies": [], "repository_homepage_url": null, "repository_download_url": null, - "api_data_url": "https://pypi.org/pypi/markupsafe/3.0.2/json", + "api_data_url": "https://pypi.org/pypi/markupsafe/3.0.3/json", "datasource_id": null, - "purl": "pkg:pypi/markupsafe@3.0.2" + "purl": "pkg:pypi/markupsafe@3.0.3" }, { "type": "pypi", @@ -350,13 +345,13 @@ ], "resolution": [ { - "package": "pkg:pypi/click@8.2.2", + "package": "pkg:pypi/click@8.3.0", "dependencies": [] }, { "package": "pkg:pypi/flask@2.1.2", "dependencies": [ - "pkg:pypi/click@8.2.2", + "pkg:pypi/click@8.3.0", "pkg:pypi/itsdangerous@2.2.0", "pkg:pypi/jinja2@3.1.6", "pkg:pypi/werkzeug@3.1.3" @@ -369,17 +364,17 @@ { "package": "pkg:pypi/jinja2@3.1.6", "dependencies": [ - "pkg:pypi/markupsafe@3.0.2" + "pkg:pypi/markupsafe@3.0.3" ] }, { - "package": "pkg:pypi/markupsafe@3.0.2", + "package": "pkg:pypi/markupsafe@3.0.3", "dependencies": [] }, { "package": "pkg:pypi/werkzeug@3.1.3", "dependencies": [ - "pkg:pypi/markupsafe@3.0.2" + "pkg:pypi/markupsafe@3.0.3" ] } ] diff --git a/tests/data/test-api-with-python-311.json b/tests/data/test-api-with-python-311.json index 8653fa3a..d77eb908 100644 --- a/tests/data/test-api-with-python-311.json +++ b/tests/data/test-api-with-python-311.json @@ -5,12 +5,12 @@ "type": "pypi", "namespace": null, "name": "click", - "version": "8.2.2", + "version": "8.3.0", "qualifiers": {}, "subpath": null, "primary_language": "Python", "description": "Composable command line interface toolkit\n
\"\"
\n\n# Click\n\nClick is a Python package for creating beautiful command line interfaces\nin a composable way with as little code as necessary. It's the \"Command\nLine Interface Creation Kit\". It's highly configurable but comes with\nsensible defaults out of the box.\n\nIt aims to make the process of writing command line tools quick and fun\nwhile also preventing any frustration caused by the inability to\nimplement an intended CLI API.\n\nClick in three points:\n\n- Arbitrary nesting of commands\n- Automatic help page generation\n- Supports lazy loading of subcommands at runtime\n\n\n## A Simple Example\n\n```python\nimport click\n\n@click.command()\n@click.option(\"--count\", default=1, help=\"Number of greetings.\")\n@click.option(\"--name\", prompt=\"Your name\", help=\"The person to greet.\")\ndef hello(count, name):\n \"\"\"Simple program that greets NAME for a total of COUNT times.\"\"\"\n for _ in range(count):\n click.echo(f\"Hello, {name}!\")\n\nif __name__ == '__main__':\n hello()\n```\n\n```\n$ python hello.py --count=3\nYour name: Click\nHello, Click!\nHello, Click!\nHello, Click!\n```\n\n\n## Donate\n\nThe Pallets organization develops and supports Click and other popular\npackages. In order to grow the community of contributors and users, and\nallow the maintainers to devote more time to the projects, [please\ndonate today][].\n\n[please donate today]: https://palletsprojects.com/donate\n\n## Contributing\n\nSee our [detailed contributing documentation][contrib] for many ways to\ncontribute, including reporting issues, requesting features, asking or answering\nquestions, and making PRs.\n\n[contrib]: https://palletsprojects.com/contributing/", - "release_date": "2025-08-02T02:23:41", + "release_date": "2025-09-18T17:32:23", "parties": [ { "type": "person", @@ -28,11 +28,11 @@ "Typing :: Typed" ], "homepage_url": null, - "download_url": "https://files.pythonhosted.org/packages/e9/87/105111999772ec9730e3d4d910c723ea9763ece2ec441533a5cea1e87e3c/click-8.2.2.tar.gz", - "size": 263977, + "download_url": "https://files.pythonhosted.org/packages/46/61/de6cd827efad202d7057d93e0fed9294b96952e188f7384832791c7b2254/click-8.3.0.tar.gz", + "size": 276943, "sha1": null, - "md5": "2b12ffb230a22fd5aabe301ade045b4a", - "sha256": "068616e6ef9705a07b6db727cb9c248f4eb9dae437a30239f56fa94b18b852ef", + "md5": "fa228744ff03a339957e847fb7890823", + "sha256": "e7b8232224eba16f4ebe410c25ced9f7875cb5f3263ffc93cc3e8da705e229c4", "sha512": null, "bug_tracking_url": null, "code_view_url": "https://github.com/pallets/click/", @@ -47,9 +47,9 @@ "dependencies": [], "repository_homepage_url": null, "repository_download_url": null, - "api_data_url": "https://pypi.org/pypi/click/8.2.2/json", + "api_data_url": "https://pypi.org/pypi/click/8.3.0/json", "datasource_id": null, - "purl": "pkg:pypi/click@8.2.2" + "purl": "pkg:pypi/click@8.3.0" }, { "type": "pypi", @@ -233,12 +233,12 @@ "type": "pypi", "namespace": null, "name": "markupsafe", - "version": "3.0.2", + "version": "3.0.3", "qualifiers": {}, "subpath": null, "primary_language": "Python", - "description": "Safely add untrusted strings to HTML/XML markup.\n# MarkupSafe\n\nMarkupSafe implements a text object that escapes characters so it is\nsafe to use in HTML and XML. Characters that have special meanings are\nreplaced so that they display as the actual characters. This mitigates\ninjection attacks, meaning untrusted user input can safely be displayed\non a page.\n\n\n## Examples\n\n```pycon\n>>> from markupsafe import Markup, escape\n\n>>> # escape replaces special characters and wraps in Markup\n>>> escape(\"\")\nMarkup('<script>alert(document.cookie);</script>')\n\n>>> # wrap in Markup to mark text \"safe\" and prevent escaping\n>>> Markup(\"Hello\")\nMarkup('hello')\n\n>>> escape(Markup(\"Hello\"))\nMarkup('hello')\n\n>>> # Markup is a str subclass\n>>> # methods and operators escape their arguments\n>>> template = Markup(\"Hello {name}\")\n>>> template.format(name='\"World\"')\nMarkup('Hello "World"')\n```\n\n## Donate\n\nThe Pallets organization develops and supports MarkupSafe and other\npopular packages. In order to grow the community of contributors and\nusers, and allow the maintainers to devote more time to the projects,\n[please donate today][].\n\n[please donate today]: https://palletsprojects.com/donate", - "release_date": "2024-10-18T15:21:54", + "description": "Safely add untrusted strings to HTML/XML markup.\n
\"\"
\n\n# MarkupSafe\n\nMarkupSafe implements a text object that escapes characters so it is\nsafe to use in HTML and XML. Characters that have special meanings are\nreplaced so that they display as the actual characters. This mitigates\ninjection attacks, meaning untrusted user input can safely be displayed\non a page.\n\n\n## Examples\n\n```pycon\n>>> from markupsafe import Markup, escape\n\n>>> # escape replaces special characters and wraps in Markup\n>>> escape(\"\")\nMarkup('<script>alert(document.cookie);</script>')\n\n>>> # wrap in Markup to mark text \"safe\" and prevent escaping\n>>> Markup(\"Hello\")\nMarkup('hello')\n\n>>> escape(Markup(\"Hello\"))\nMarkup('hello')\n\n>>> # Markup is a str subclass\n>>> # methods and operators escape their arguments\n>>> template = Markup(\"Hello {name}\")\n>>> template.format(name='\"World\"')\nMarkup('Hello "World"')\n```\n\n## Donate\n\nThe Pallets organization develops and supports MarkupSafe and other\npopular packages. In order to grow the community of contributors and\nusers, and allow the maintainers to devote more time to the projects,\n[please donate today][].\n\n[please donate today]: https://palletsprojects.com/donate\n\n## Contributing\n\nSee our [detailed contributing documentation][contrib] for many ways to\ncontribute, including reporting issues, requesting features, asking or answering\nquestions, and making PRs.\n\n[contrib]: https://palletsprojects.com/contributing/", + "release_date": "2025-09-27T18:37:40", "parties": [ { "type": "person", @@ -259,23 +259,18 @@ "Typing :: Typed" ], "homepage_url": null, - "download_url": "https://files.pythonhosted.org/packages/b2/97/5d42485e71dfc078108a86d6de8fa46db44a1a9295e89c5d6d4a06e23a62/markupsafe-3.0.2.tar.gz", - "size": 20537, + "download_url": "https://files.pythonhosted.org/packages/7e/99/7690b6d4034fffd95959cbe0c02de8deb3098cc577c67bb6a24fe5d7caa7/markupsafe-3.0.3.tar.gz", + "size": 80313, "sha1": null, - "md5": "cb0071711b573b155cc8f86e1de72167", - "sha256": "ee55d3edf80167e48ea11a923c7386f4669df67d7994554387f84e7d8b0a2bf0", + "md5": "13a73126d25afa72a1ff0daed072f5fe", + "sha256": "722695808f4b6457b320fdc131280796bdceb04ab50fe1795cd540799ebe1698", "sha512": null, "bug_tracking_url": null, "code_view_url": "https://github.com/pallets/markupsafe/", "vcs_url": null, "copyright": null, - "license_expression": null, - "declared_license": { - "license": "Copyright 2010 Pallets Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: 1. Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. 2. Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. 3. Neither the name of the copyright holder nor the names of its contributors may be used to endorse or promote products derived from this software without specific prior written permission. THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. ", - "classifiers": [ - "License :: OSI Approved :: BSD License" - ] - }, + "license_expression": "BSD-3-Clause", + "declared_license": {}, "notice_text": null, "source_packages": [], "file_references": [], @@ -283,9 +278,9 @@ "dependencies": [], "repository_homepage_url": null, "repository_download_url": null, - "api_data_url": "https://pypi.org/pypi/markupsafe/3.0.2/json", + "api_data_url": "https://pypi.org/pypi/markupsafe/3.0.3/json", "datasource_id": null, - "purl": "pkg:pypi/markupsafe@3.0.2" + "purl": "pkg:pypi/markupsafe@3.0.3" }, { "type": "pypi", @@ -350,13 +345,13 @@ ], "resolution": [ { - "package": "pkg:pypi/click@8.2.2", + "package": "pkg:pypi/click@8.3.0", "dependencies": [] }, { "package": "pkg:pypi/flask@2.1.2", "dependencies": [ - "pkg:pypi/click@8.2.2", + "pkg:pypi/click@8.3.0", "pkg:pypi/itsdangerous@2.2.0", "pkg:pypi/jinja2@3.1.6", "pkg:pypi/werkzeug@3.1.3" @@ -369,17 +364,17 @@ { "package": "pkg:pypi/jinja2@3.1.6", "dependencies": [ - "pkg:pypi/markupsafe@3.0.2" + "pkg:pypi/markupsafe@3.0.3" ] }, { - "package": "pkg:pypi/markupsafe@3.0.2", + "package": "pkg:pypi/markupsafe@3.0.3", "dependencies": [] }, { "package": "pkg:pypi/werkzeug@3.1.3", "dependencies": [ - "pkg:pypi/markupsafe@3.0.2" + "pkg:pypi/markupsafe@3.0.3" ] } ] From 3a58d5e95d66208526e9ea0e3f6296084c415c40 Mon Sep 17 00:00:00 2001 From: Martin Nonnenmacher Date: Thu, 2 Oct 2025 11:27:42 +0200 Subject: [PATCH 2/4] Test all linux platforms defined in utils_pypi Use the list of linux platforms as defined in utils_pypi for testing, instead of redefining the list in the test. This ensures that newly added platforms are tested and fixes the problem that the list in the test was already outdated. Signed-off-by: Martin Nonnenmacher --- tests/test_utils_pypi.py | 11 +---------- 1 file changed, 1 insertion(+), 10 deletions(-) diff --git a/tests/test_utils_pypi.py b/tests/test_utils_pypi.py index 1932d9c1..0e70d646 100644 --- a/tests/test_utils_pypi.py +++ b/tests/test_utils_pypi.py @@ -140,15 +140,6 @@ def check(self, using=Distribution): ), ] -linux_platforms = [ - "linux_x86_64", - "manylinux1_x86_64", - "manylinux2010_x86_64", - "manylinux2014_x86_64", - "manylinux_2_27_x86_64", - "manylinux_2_28_x86_64", -] - @pytest.mark.parametrize("dist_test", sdist_tests + wheel_tests) def test_Distribution_from_filename(dist_test): @@ -165,7 +156,7 @@ def test_Wheel_from_filename(dist_test): dist_test.check(using=Wheel) -@pytest.mark.parametrize("linux_platform", linux_platforms) +@pytest.mark.parametrize("linux_platform", utils_pypi.PLATFORMS_BY_OS["linux"]) def test_PypiPackage_get_supported_wheels(linux_platform): whl = Wheel.from_filename(f"onnxruntime-1.19.2-cp311-cp311-{linux_platform}.whl") pkg = PypiPackage.package_from_dists(dists=[whl]) From 3e8dfbe5a4cd3ef72612dc7153ae0cce10498273 Mon Sep 17 00:00:00 2001 From: Martin Nonnenmacher Date: Wed, 1 Oct 2025 21:04:37 +0200 Subject: [PATCH 3/4] Add manylinux_2_31_x86_64 platform For example, the platform is used by open3d 19.0.0 [1]. [1]: https://pypi.org/project/open3d/0.19.0/#files Signed-off-by: Martin Nonnenmacher --- src/python_inspector/utils_pypi.py | 1 + 1 file changed, 1 insertion(+) diff --git a/src/python_inspector/utils_pypi.py b/src/python_inspector/utils_pypi.py index bead74be..56c08bda 100644 --- a/src/python_inspector/utils_pypi.py +++ b/src/python_inspector/utils_pypi.py @@ -155,6 +155,7 @@ def get_python_dot_version(version): "manylinux2014_x86_64", "manylinux_2_27_x86_64", "manylinux_2_28_x86_64", + "manylinux_2_31_x86_64", "manylinux2014_aarch6", "musllinux_1_2_x86_64", "manylinux_2_33_aarch64", From 418962d80ed59c8c341dffc767a4c25176a273db Mon Sep 17 00:00:00 2001 From: Martin Nonnenmacher Date: Thu, 2 Oct 2025 10:41:37 +0200 Subject: [PATCH 4/4] Fix `is_valid_version()` for prerelease versions By default, the check if an empty specifier contains a prerelease version returns `false`. This made the `is_valid_version()` check for prerelease versions fail, when there is also a requirement with a non-empty specifier. In this case, the previous logic detected a conflict of the prerelease version and the empty specifier. Fix this by explicitly allowing prerelease versions when checking if a specifier contains a version. Note that the function that collects candidates for a dependency still ignores prerelease versions if any release versions are available, as required by the specs [1]. [1]: https://packaging.python.org/en/latest/specifications/version-specifiers/#handling-of-pre-releases Signed-off-by: Martin Nonnenmacher --- src/python_inspector/resolution.py | 4 +++- tests/test_resolution.py | 8 ++++++++ 2 files changed, 11 insertions(+), 1 deletion(-) diff --git a/src/python_inspector/resolution.py b/src/python_inspector/resolution.py index 39202374..bee47473 100644 --- a/src/python_inspector/resolution.py +++ b/src/python_inspector/resolution.py @@ -172,7 +172,9 @@ def is_valid_version( """ if parsed_version in bad_versions: return False - if any(parsed_version not in r.specifier for r in requirements[identifier]): + if any( + not r.specifier.contains(parsed_version, prereleases=True) for r in requirements[identifier] + ): if all(not r.specifier for r in requirements[identifier]): return True return False diff --git a/tests/test_resolution.py b/tests/test_resolution.py index 219f02c1..678cbd4a 100644 --- a/tests/test_resolution.py +++ b/tests/test_resolution.py @@ -196,6 +196,14 @@ def test_is_valid_version_with_no_specifier_and_pre_release(): assert is_valid_version(parsed_version, requirements, identifier, bad_versions) +def test_is_valid_version_with_empty_and_non_empty_specifier_and_pre_release(): + parsed_version = packvers.version.parse("1.0.0.dev1+01234abcd") + requirements = {"flask": [Requirement("flask"), Requirement("flask==1.0.0.dev1+01234abcd")]} + bad_versions = [] + identifier = "flask" + assert is_valid_version(parsed_version, requirements, identifier, bad_versions) + + def test_get_requirements_from_dependencies(): dependencies = [ models.DependentPackage(