Script 'mail_helper' called by obssrc
Hello community,
here is the log from the commit of package python-uritools for openSUSE:Factory
checked in at 2026-03-10 17:56:47
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Comparing /work/SRC/openSUSE:Factory/python-uritools (Old)
and /work/SRC/openSUSE:Factory/.python-uritools.new.8177 (New)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Package is "python-uritools"
Tue Mar 10 17:56:47 2026 rev:6 rq:1337898 version:6.0.1
Changes:
--------
--- /work/SRC/openSUSE:Factory/python-uritools/python-uritools.changes
2024-06-10 17:37:58.471710485 +0200
+++
/work/SRC/openSUSE:Factory/.python-uritools.new.8177/python-uritools.changes
2026-03-10 18:01:07.810894813 +0100
@@ -1,0 +2,12 @@
+Tue Mar 10 08:16:55 UTC 2026 - Dirk Müller <[email protected]>
+
+- update to 6.0.1:
+ * Require Python >= 3.10 (fixup).
+ * Drop Python 3.9 support (breaking change).
+ * Add support for Python 3.14.
+ * Minor improvements from GitHub Copilot code review.
+ * Modernize build environment.
+ * Update CI environment.
+ * Require Python 3.9 or later (breaking change).
+
+-------------------------------------------------------------------
Old:
----
uritools-4.0.3.tar.gz
New:
----
uritools-6.0.1.tar.gz
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Other differences:
------------------
++++++ python-uritools.spec ++++++
--- /var/tmp/diff_new_pack.3sWOPY/_old 2026-03-10 18:01:09.862979183 +0100
+++ /var/tmp/diff_new_pack.3sWOPY/_new 2026-03-10 18:01:09.866979347 +0100
@@ -1,7 +1,7 @@
#
# spec file for package python-uritools
#
-# Copyright (c) 2024 SUSE LLC
+# Copyright (c) 2026 SUSE LLC and contributors
#
# All modifications and additions to the file contributed by third parties
# remain the property of their copyright owners, unless otherwise agreed
@@ -18,7 +18,7 @@
%{?sle15_python_module_pythons}
Name: python-uritools
-Version: 4.0.3
+Version: 6.0.1
Release: 0
Summary: URI parsing, classification and composition
License: MIT
++++++ uritools-4.0.3.tar.gz -> uritools-6.0.1.tar.gz ++++++
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/uritools-4.0.3/CHANGELOG.rst
new/uritools-6.0.1/CHANGELOG.rst
--- old/uritools-4.0.3/CHANGELOG.rst 2024-05-28 20:03:50.000000000 +0200
+++ new/uritools-6.0.1/CHANGELOG.rst 2025-12-21 19:57:35.000000000 +0100
@@ -1,3 +1,31 @@
+v6.0.1 (2025-12-21)
+===================
+
+- Require Python >= 3.10 (fixup).
+
+
+v6.0.0 (2025-12-21)
+===================
+
+- Drop Python 3.9 support (breaking change).
+
+- Add support for Python 3.14.
+
+- Minor improvements from GitHub Copilot code review.
+
+- Modernize build environment.
+
+- Update CI environment.
+
+
+v5.0.0 (2025-05-02)
+===================
+
+- Require Python 3.9 or later (breaking change).
+
+- Update CI environment.
+
+
v4.0.3 (2024-05-28)
===================
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/uritools-4.0.3/LICENSE new/uritools-6.0.1/LICENSE
--- old/uritools-4.0.3/LICENSE 2024-05-28 20:03:31.000000000 +0200
+++ new/uritools-6.0.1/LICENSE 2025-05-02 15:05:47.000000000 +0200
@@ -1,6 +1,6 @@
The MIT License (MIT)
-Copyright (c) 2014-2024 Thomas Kemmer
+Copyright (c) 2014-2025 Thomas Kemmer
Permission is hereby granted, free of charge, to any person obtaining a copy of
this software and associated documentation files (the "Software"), to deal in
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/uritools-4.0.3/PKG-INFO new/uritools-6.0.1/PKG-INFO
--- old/uritools-4.0.3/PKG-INFO 2024-05-28 20:05:22.811203200 +0200
+++ new/uritools-6.0.1/PKG-INFO 2025-12-21 19:58:40.898700000 +0100
@@ -1,27 +1,26 @@
-Metadata-Version: 2.1
+Metadata-Version: 2.4
Name: uritools
-Version: 4.0.3
+Version: 6.0.1
Summary: URI parsing, classification and composition
-Home-page: https://github.com/tkem/uritools/
-Author: Thomas Kemmer
-Author-email: [email protected]
-License: MIT
+Author-email: Thomas Kemmer <[email protected]>
+Maintainer-email: Thomas Kemmer <[email protected]>
+License-Expression: MIT
+Project-URL: Homepage, https://github.com/tkem/uritools/
Classifier: Development Status :: 5 - Production/Stable
-Classifier: Environment :: Other Environment
Classifier: Intended Audience :: Developers
-Classifier: License :: OSI Approved :: MIT License
Classifier: Operating System :: OS Independent
Classifier: Programming Language :: Python
Classifier: Programming Language :: Python :: 3
-Classifier: Programming Language :: Python :: 3.7
-Classifier: Programming Language :: Python :: 3.8
-Classifier: Programming Language :: Python :: 3.9
Classifier: Programming Language :: Python :: 3.10
Classifier: Programming Language :: Python :: 3.11
Classifier: Programming Language :: Python :: 3.12
+Classifier: Programming Language :: Python :: 3.13
+Classifier: Programming Language :: Python :: 3.14
Classifier: Topic :: Software Development :: Libraries :: Python Modules
-Requires-Python: >=3.7
+Requires-Python: >=3.10
+Description-Content-Type: text/x-rst
License-File: LICENSE
+Dynamic: license-file
uritools
========================================================================
@@ -54,6 +53,7 @@
:target: https://github.com/psf/black
:alt: Code style: black
+
This module provides RFC 3986 compliant functions for parsing,
classifying and composing URIs and URI references, largely replacing
the Python Standard Library's ``urllib.parse`` module.
@@ -84,7 +84,7 @@
For various reasons, ``urllib.parse`` and its Python 2 predecessor
``urlparse`` are not compliant with current Internet standards. As
stated in `Lib/urllib/parse.py
-<https://github.com/python/cpython/blob/3.8/Lib/urllib/parse.py>`_:
+<https://github.com/python/cpython/blob/main/Lib/urllib/parse.py#L22>`_:
RFC 3986 is considered the current standard and any future changes
to urlparse module should conform with it. The urlparse module is
@@ -116,10 +116,19 @@
- `Change log`_
+Related Projects
+------------------------------------------------------------------------
+
+- rfc3986_: A Python implementation of RFC 3986 including validation
+ and authority parsing.
+- rfc3987_: Parsing and validation of URIs (RFC 3896) and IRIs (RFC
+ 3987).
+
+
License
------------------------------------------------------------------------
-Copyright (c) 2014-2023 Thomas Kemmer.
+Copyright (c) 2014-2025 Thomas Kemmer.
Licensed under the `MIT License`_.
@@ -130,3 +139,6 @@
.. _Source code: https://github.com/tkem/uritools/
.. _Change log: https://github.com/tkem/uritools/blob/master/CHANGELOG.rst
.. _MIT License: https://raw.github.com/tkem/uritools/master/LICENSE
+
+.. _rfc3986: https://pypi.org/project/rfc3986/
+.. _rfc3987: https://pypi.org/project/rfc3987/
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/uritools-4.0.3/README.rst
new/uritools-6.0.1/README.rst
--- old/uritools-4.0.3/README.rst 2023-01-08 21:41:16.000000000 +0100
+++ new/uritools-6.0.1/README.rst 2025-05-02 15:51:45.000000000 +0200
@@ -29,6 +29,7 @@
:target: https://github.com/psf/black
:alt: Code style: black
+
This module provides RFC 3986 compliant functions for parsing,
classifying and composing URIs and URI references, largely replacing
the Python Standard Library's ``urllib.parse`` module.
@@ -59,7 +60,7 @@
For various reasons, ``urllib.parse`` and its Python 2 predecessor
``urlparse`` are not compliant with current Internet standards. As
stated in `Lib/urllib/parse.py
-<https://github.com/python/cpython/blob/3.8/Lib/urllib/parse.py>`_:
+<https://github.com/python/cpython/blob/main/Lib/urllib/parse.py#L22>`_:
RFC 3986 is considered the current standard and any future changes
to urlparse module should conform with it. The urlparse module is
@@ -91,10 +92,19 @@
- `Change log`_
+Related Projects
+------------------------------------------------------------------------
+
+- rfc3986_: A Python implementation of RFC 3986 including validation
+ and authority parsing.
+- rfc3987_: Parsing and validation of URIs (RFC 3896) and IRIs (RFC
+ 3987).
+
+
License
------------------------------------------------------------------------
-Copyright (c) 2014-2023 Thomas Kemmer.
+Copyright (c) 2014-2025 Thomas Kemmer.
Licensed under the `MIT License`_.
@@ -105,3 +115,6 @@
.. _Source code: https://github.com/tkem/uritools/
.. _Change log: https://github.com/tkem/uritools/blob/master/CHANGELOG.rst
.. _MIT License: https://raw.github.com/tkem/uritools/master/LICENSE
+
+.. _rfc3986: https://pypi.org/project/rfc3986/
+.. _rfc3987: https://pypi.org/project/rfc3987/
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/uritools-4.0.3/docs/Makefile
new/uritools-6.0.1/docs/Makefile
--- old/uritools-4.0.3/docs/Makefile 2020-08-10 19:35:07.000000000 +0200
+++ new/uritools-6.0.1/docs/Makefile 1970-01-01 01:00:00.000000000 +0100
@@ -1,153 +0,0 @@
-# Makefile for Sphinx documentation
-#
-
-# You can set these variables from the command line.
-SPHINXOPTS =
-SPHINXBUILD = sphinx-build
-PAPER =
-BUILDDIR = _build
-
-# Internal variables.
-PAPEROPT_a4 = -D latex_paper_size=a4
-PAPEROPT_letter = -D latex_paper_size=letter
-ALLSPHINXOPTS = -d $(BUILDDIR)/doctrees $(PAPEROPT_$(PAPER)) $(SPHINXOPTS) .
-# the i18n builder cannot share the environment and doctrees with the others
-I18NSPHINXOPTS = $(PAPEROPT_$(PAPER)) $(SPHINXOPTS) .
-
-.PHONY: help clean html dirhtml singlehtml pickle json htmlhelp qthelp devhelp
epub latex latexpdf text man changes linkcheck doctest gettext
-
-help:
- @echo "Please use \`make <target>' where <target> is one of"
- @echo " html to make standalone HTML files"
- @echo " dirhtml to make HTML files named index.html in directories"
- @echo " singlehtml to make a single large HTML file"
- @echo " pickle to make pickle files"
- @echo " json to make JSON files"
- @echo " htmlhelp to make HTML files and a HTML help project"
- @echo " qthelp to make HTML files and a qthelp project"
- @echo " devhelp to make HTML files and a Devhelp project"
- @echo " epub to make an epub"
- @echo " latex to make LaTeX files, you can set PAPER=a4 or
PAPER=letter"
- @echo " latexpdf to make LaTeX files and run them through pdflatex"
- @echo " text to make text files"
- @echo " man to make manual pages"
- @echo " texinfo to make Texinfo files"
- @echo " info to make Texinfo files and run them through makeinfo"
- @echo " gettext to make PO message catalogs"
- @echo " changes to make an overview of all changed/added/deprecated
items"
- @echo " linkcheck to check all external links for integrity"
- @echo " doctest to run all doctests embedded in the documentation
(if enabled)"
-
-clean:
- -rm -rf $(BUILDDIR)/*
-
-html:
- $(SPHINXBUILD) -b html $(ALLSPHINXOPTS) $(BUILDDIR)/html
- @echo
- @echo "Build finished. The HTML pages are in $(BUILDDIR)/html."
-
-dirhtml:
- $(SPHINXBUILD) -b dirhtml $(ALLSPHINXOPTS) $(BUILDDIR)/dirhtml
- @echo
- @echo "Build finished. The HTML pages are in $(BUILDDIR)/dirhtml."
-
-singlehtml:
- $(SPHINXBUILD) -b singlehtml $(ALLSPHINXOPTS) $(BUILDDIR)/singlehtml
- @echo
- @echo "Build finished. The HTML page is in $(BUILDDIR)/singlehtml."
-
-pickle:
- $(SPHINXBUILD) -b pickle $(ALLSPHINXOPTS) $(BUILDDIR)/pickle
- @echo
- @echo "Build finished; now you can process the pickle files."
-
-json:
- $(SPHINXBUILD) -b json $(ALLSPHINXOPTS) $(BUILDDIR)/json
- @echo
- @echo "Build finished; now you can process the JSON files."
-
-htmlhelp:
- $(SPHINXBUILD) -b htmlhelp $(ALLSPHINXOPTS) $(BUILDDIR)/htmlhelp
- @echo
- @echo "Build finished; now you can run HTML Help Workshop with the" \
- ".hhp project file in $(BUILDDIR)/htmlhelp."
-
-qthelp:
- $(SPHINXBUILD) -b qthelp $(ALLSPHINXOPTS) $(BUILDDIR)/qthelp
- @echo
- @echo "Build finished; now you can run "qcollectiongenerator" with the"
\
- ".qhcp project file in $(BUILDDIR)/qthelp, like this:"
- @echo "# qcollectiongenerator $(BUILDDIR)/qthelp/uritools.qhcp"
- @echo "To view the help file:"
- @echo "# assistant -collectionFile $(BUILDDIR)/qthelp/uritools.qhc"
-
-devhelp:
- $(SPHINXBUILD) -b devhelp $(ALLSPHINXOPTS) $(BUILDDIR)/devhelp
- @echo
- @echo "Build finished."
- @echo "To view the help file:"
- @echo "# mkdir -p $$HOME/.local/share/devhelp/uritools"
- @echo "# ln -s $(BUILDDIR)/devhelp $$HOME/.local/share/devhelp/uritools"
- @echo "# devhelp"
-
-epub:
- $(SPHINXBUILD) -b epub $(ALLSPHINXOPTS) $(BUILDDIR)/epub
- @echo
- @echo "Build finished. The epub file is in $(BUILDDIR)/epub."
-
-latex:
- $(SPHINXBUILD) -b latex $(ALLSPHINXOPTS) $(BUILDDIR)/latex
- @echo
- @echo "Build finished; the LaTeX files are in $(BUILDDIR)/latex."
- @echo "Run \`make' in that directory to run these through (pdf)latex" \
- "(use \`make latexpdf' here to do that automatically)."
-
-latexpdf:
- $(SPHINXBUILD) -b latex $(ALLSPHINXOPTS) $(BUILDDIR)/latex
- @echo "Running LaTeX files through pdflatex..."
- $(MAKE) -C $(BUILDDIR)/latex all-pdf
- @echo "pdflatex finished; the PDF files are in $(BUILDDIR)/latex."
-
-text:
- $(SPHINXBUILD) -b text $(ALLSPHINXOPTS) $(BUILDDIR)/text
- @echo
- @echo "Build finished. The text files are in $(BUILDDIR)/text."
-
-man:
- $(SPHINXBUILD) -b man $(ALLSPHINXOPTS) $(BUILDDIR)/man
- @echo
- @echo "Build finished. The manual pages are in $(BUILDDIR)/man."
-
-texinfo:
- $(SPHINXBUILD) -b texinfo $(ALLSPHINXOPTS) $(BUILDDIR)/texinfo
- @echo
- @echo "Build finished. The Texinfo files are in $(BUILDDIR)/texinfo."
- @echo "Run \`make' in that directory to run these through makeinfo" \
- "(use \`make info' here to do that automatically)."
-
-info:
- $(SPHINXBUILD) -b texinfo $(ALLSPHINXOPTS) $(BUILDDIR)/texinfo
- @echo "Running Texinfo files through makeinfo..."
- make -C $(BUILDDIR)/texinfo info
- @echo "makeinfo finished; the Info files are in $(BUILDDIR)/texinfo."
-
-gettext:
- $(SPHINXBUILD) -b gettext $(I18NSPHINXOPTS) $(BUILDDIR)/locale
- @echo
- @echo "Build finished. The message catalogs are in $(BUILDDIR)/locale."
-
-changes:
- $(SPHINXBUILD) -b changes $(ALLSPHINXOPTS) $(BUILDDIR)/changes
- @echo
- @echo "The overview file is in $(BUILDDIR)/changes."
-
-linkcheck:
- $(SPHINXBUILD) -b linkcheck $(ALLSPHINXOPTS) $(BUILDDIR)/linkcheck
- @echo
- @echo "Link check complete; look for any errors in the above output " \
- "or in $(BUILDDIR)/linkcheck/output.txt."
-
-doctest:
- $(SPHINXBUILD) -b doctest $(ALLSPHINXOPTS) $(BUILDDIR)/doctest
- @echo "Testing of doctests in the sources finished, look at the " \
- "results in $(BUILDDIR)/doctest/output.txt."
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/uritools-4.0.3/docs/conf.py
new/uritools-6.0.1/docs/conf.py
--- old/uritools-4.0.3/docs/conf.py 2024-05-28 20:03:31.000000000 +0200
+++ new/uritools-6.0.1/docs/conf.py 2025-05-02 15:05:47.000000000 +0200
@@ -19,15 +19,17 @@
project = "uritools"
-copyright = "2014-2024 Thomas Kemmer"
+copyright = "2014-2025 Thomas Kemmer"
release, version = get_version()
extensions = [
"sphinx.ext.autodoc",
"sphinx.ext.coverage",
"sphinx.ext.doctest",
+ "sphinx.ext.intersphinx",
"sphinx.ext.todo",
]
exclude_patterns = ["_build"]
master_doc = "index"
html_theme = "classic"
+intersphinx_mapping = {"python": ("https://docs.python.org/3", None)}
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/uritools-4.0.3/docs/index.rst
new/uritools-6.0.1/docs/index.rst
--- old/uritools-4.0.3/docs/index.rst 2020-08-10 19:35:07.000000000 +0200
+++ new/uritools-6.0.1/docs/index.rst 2025-05-02 15:51:45.000000000 +0200
@@ -34,7 +34,7 @@
For various reasons, :mod:`urllib.parse` and its Python 2 predecessor
:mod:`urlparse` are not compliant with current Internet standards. As
stated in `Lib/urllib/parse.py
-<https://github.com/python/cpython/blob/3.8/Lib/urllib/parse.py>`_:
+<https://github.com/python/cpython/blob/main/Lib/urllib/parse.py#L22>`_:
RFC 3986 is considered the current standard and any future changes
to urlparse module should conform with it. The urlparse module is
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/uritools-4.0.3/pyproject.toml
new/uritools-6.0.1/pyproject.toml
--- old/uritools-4.0.3/pyproject.toml 2021-10-11 20:18:34.000000000 +0200
+++ new/uritools-6.0.1/pyproject.toml 2025-12-21 19:53:22.000000000 +0100
@@ -1,3 +1,51 @@
[build-system]
-requires = ["setuptools >= 46.4.0", "wheel"]
+requires = ["setuptools >= 61.0.0", "wheel"]
build-backend = "setuptools.build_meta"
+
+[project]
+name = "uritools"
+dynamic = ["version"]
+description = "URI parsing, classification and composition"
+authors = [
+ {name = "Thomas Kemmer", email = "[email protected]"}
+]
+maintainers = [
+ {name = "Thomas Kemmer", email = "[email protected]"}
+]
+readme = "README.rst"
+license = "MIT"
+license-files = ["LICENSE"]
+requires-python = ">= 3.10"
+classifiers = [
+ "Development Status :: 5 - Production/Stable",
+ "Intended Audience :: Developers",
+ "Operating System :: OS Independent",
+ "Programming Language :: Python",
+ "Programming Language :: Python :: 3",
+ "Programming Language :: Python :: 3.10",
+ "Programming Language :: Python :: 3.11",
+ "Programming Language :: Python :: 3.12",
+ "Programming Language :: Python :: 3.13",
+ "Programming Language :: Python :: 3.14",
+ "Topic :: Software Development :: Libraries :: Python Modules",
+]
+
+[project.urls]
+Homepage = "https://github.com/tkem/uritools/"
+
+[tool.setuptools]
+package-dir = {"" = "src"}
+
+[tool.setuptools.packages.find]
+where = ["src"]
+
+[tool.setuptools.dynamic]
+version = {attr = "uritools.__version__"}
+
+[tool.flake8]
+max-line-length = 80
+exclude = [".git", ".tox", "build"]
+select = ["C", "E", "F", "W", "B", "B950", "I", "N"]
+# E501: line too long (black)
+# W503 line break before binary operator (black)
+ignore = ["E501", "W503"]
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/uritools-4.0.3/setup.cfg new/uritools-6.0.1/setup.cfg
--- old/uritools-4.0.3/setup.cfg 2024-05-28 20:05:22.811203200 +0200
+++ new/uritools-6.0.1/setup.cfg 2025-12-21 19:58:40.898700000 +0100
@@ -1,49 +1,3 @@
-[metadata]
-name = uritools
-version = attr: uritools.__version__
-url = https://github.com/tkem/uritools/
-author = Thomas Kemmer
-author_email = [email protected]
-license = MIT
-license_files = LICENSE
-description = URI parsing, classification and composition
-long_description = file: README.rst
-classifiers =
- Development Status :: 5 - Production/Stable
- Environment :: Other Environment
- Intended Audience :: Developers
- License :: OSI Approved :: MIT License
- Operating System :: OS Independent
- Programming Language :: Python
- Programming Language :: Python :: 3
- Programming Language :: Python :: 3.7
- Programming Language :: Python :: 3.8
- Programming Language :: Python :: 3.9
- Programming Language :: Python :: 3.10
- Programming Language :: Python :: 3.11
- Programming Language :: Python :: 3.12
- Topic :: Software Development :: Libraries :: Python Modules
-
-[options]
-package_dir =
- = src
-packages = find:
-python_requires = >= 3.7
-
-[options.packages.find]
-where = src
-
-[flake8]
-max-line-length = 80
-exclude = .git, .tox, build
-select = C, E, F, W, B, B950, I, N
-ignore = E501, W503
-
-[build_sphinx]
-source-dir = docs/
-build-dir = docs/_build
-all_files = 1
-
[egg_info]
tag_build =
tag_date = 0
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/uritools-4.0.3/setup.py new/uritools-6.0.1/setup.py
--- old/uritools-4.0.3/setup.py 2020-08-10 19:35:07.000000000 +0200
+++ new/uritools-6.0.1/setup.py 1970-01-01 01:00:00.000000000 +0100
@@ -1,3 +0,0 @@
-from setuptools import setup
-
-setup()
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/uritools-4.0.3/src/uritools/__init__.py
new/uritools-6.0.1/src/uritools/__init__.py
--- old/uritools-4.0.3/src/uritools/__init__.py 2024-05-28 20:03:31.000000000
+0200
+++ new/uritools-6.0.1/src/uritools/__init__.py 2025-12-21 19:57:35.000000000
+0100
@@ -34,7 +34,7 @@
"uriunsplit",
)
-__version__ = "4.0.3"
+__version__ = "6.0.1"
# RFC 3986 2.2. Reserved Characters
@@ -54,9 +54,7 @@
#
# unreserved = ALPHA / DIGIT / "-" / "." / "_" / "~"
#
-UNRESERVED = (
- "ABCDEFGHIJKLMNOPQRSTUVWXYZ" "abcdefghijklmnopqrstuvwxyz" "0123456789"
"-._~"
-)
+UNRESERVED =
"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789-._~"
_unreserved = frozenset(UNRESERVED.encode())
@@ -250,7 +248,7 @@
elif host.startswith(self.LBRACKET) and host.endswith(self.RBRACKET):
return self.__parse_ip_literal(host[1:-1])
elif host.startswith(self.LBRACKET) or host.endswith(self.RBRACKET):
- raise ValueError("Invalid host %r" % host)
+ raise ValueError("Invalid host %r: mismatched brackets" % host)
# TODO: faster check for IPv4 address?
try:
if isinstance(host, bytes):
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/uritools-4.0.3/src/uritools.egg-info/PKG-INFO
new/uritools-6.0.1/src/uritools.egg-info/PKG-INFO
--- old/uritools-4.0.3/src/uritools.egg-info/PKG-INFO 2024-05-28
20:05:22.000000000 +0200
+++ new/uritools-6.0.1/src/uritools.egg-info/PKG-INFO 2025-12-21
19:58:40.000000000 +0100
@@ -1,27 +1,26 @@
-Metadata-Version: 2.1
+Metadata-Version: 2.4
Name: uritools
-Version: 4.0.3
+Version: 6.0.1
Summary: URI parsing, classification and composition
-Home-page: https://github.com/tkem/uritools/
-Author: Thomas Kemmer
-Author-email: [email protected]
-License: MIT
+Author-email: Thomas Kemmer <[email protected]>
+Maintainer-email: Thomas Kemmer <[email protected]>
+License-Expression: MIT
+Project-URL: Homepage, https://github.com/tkem/uritools/
Classifier: Development Status :: 5 - Production/Stable
-Classifier: Environment :: Other Environment
Classifier: Intended Audience :: Developers
-Classifier: License :: OSI Approved :: MIT License
Classifier: Operating System :: OS Independent
Classifier: Programming Language :: Python
Classifier: Programming Language :: Python :: 3
-Classifier: Programming Language :: Python :: 3.7
-Classifier: Programming Language :: Python :: 3.8
-Classifier: Programming Language :: Python :: 3.9
Classifier: Programming Language :: Python :: 3.10
Classifier: Programming Language :: Python :: 3.11
Classifier: Programming Language :: Python :: 3.12
+Classifier: Programming Language :: Python :: 3.13
+Classifier: Programming Language :: Python :: 3.14
Classifier: Topic :: Software Development :: Libraries :: Python Modules
-Requires-Python: >=3.7
+Requires-Python: >=3.10
+Description-Content-Type: text/x-rst
License-File: LICENSE
+Dynamic: license-file
uritools
========================================================================
@@ -54,6 +53,7 @@
:target: https://github.com/psf/black
:alt: Code style: black
+
This module provides RFC 3986 compliant functions for parsing,
classifying and composing URIs and URI references, largely replacing
the Python Standard Library's ``urllib.parse`` module.
@@ -84,7 +84,7 @@
For various reasons, ``urllib.parse`` and its Python 2 predecessor
``urlparse`` are not compliant with current Internet standards. As
stated in `Lib/urllib/parse.py
-<https://github.com/python/cpython/blob/3.8/Lib/urllib/parse.py>`_:
+<https://github.com/python/cpython/blob/main/Lib/urllib/parse.py#L22>`_:
RFC 3986 is considered the current standard and any future changes
to urlparse module should conform with it. The urlparse module is
@@ -116,10 +116,19 @@
- `Change log`_
+Related Projects
+------------------------------------------------------------------------
+
+- rfc3986_: A Python implementation of RFC 3986 including validation
+ and authority parsing.
+- rfc3987_: Parsing and validation of URIs (RFC 3896) and IRIs (RFC
+ 3987).
+
+
License
------------------------------------------------------------------------
-Copyright (c) 2014-2023 Thomas Kemmer.
+Copyright (c) 2014-2025 Thomas Kemmer.
Licensed under the `MIT License`_.
@@ -130,3 +139,6 @@
.. _Source code: https://github.com/tkem/uritools/
.. _Change log: https://github.com/tkem/uritools/blob/master/CHANGELOG.rst
.. _MIT License: https://raw.github.com/tkem/uritools/master/LICENSE
+
+.. _rfc3986: https://pypi.org/project/rfc3986/
+.. _rfc3987: https://pypi.org/project/rfc3987/
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/uritools-4.0.3/src/uritools.egg-info/SOURCES.txt
new/uritools-6.0.1/src/uritools.egg-info/SOURCES.txt
--- old/uritools-4.0.3/src/uritools.egg-info/SOURCES.txt 2024-05-28
20:05:22.000000000 +0200
+++ new/uritools-6.0.1/src/uritools.egg-info/SOURCES.txt 2025-12-21
19:58:40.000000000 +0100
@@ -3,11 +3,8 @@
MANIFEST.in
README.rst
pyproject.toml
-setup.cfg
-setup.py
tox.ini
docs/.gitignore
-docs/Makefile
docs/conf.py
docs/index.rst
src/uritools/__init__.py
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/uritools-4.0.3/tests/test_join.py
new/uritools-6.0.1/tests/test_join.py
--- old/uritools-4.0.3/tests/test_join.py 2023-08-30 21:31:51.000000000
+0200
+++ new/uritools-6.0.1/tests/test_join.py 2025-12-21 19:41:35.000000000
+0100
@@ -94,3 +94,6 @@
self.check("../", "../bar", "../../bar")
self.check("../foo", "../bar", "../../bar")
self.check("../foo/", "../bar", "../bar")
+
+ def test_path_traversal_limits(self):
+ self.assertEqual(urijoin("http://a/", "../" * 100), "http://a/")
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/uritools-4.0.3/tests/test_split.py
new/uritools-6.0.1/tests/test_split.py
--- old/uritools-4.0.3/tests/test_split.py 2024-05-28 20:03:31.000000000
+0200
+++ new/uritools-6.0.1/tests/test_split.py 2025-12-21 19:41:35.000000000
+0100
@@ -245,6 +245,16 @@
("userinfo", IPv6Address("::1"), 5432),
),
(
+ "http://@host/",
+ None,
+ ("", "host", None),
+ ),
+ (
+ "http://user@domain@host:80/",
+ None,
+ ("user@domain", "host", 80),
+ ),
+ (
"urn:example:animal:ferret:nose",
("nobody", "localhost", 42),
("nobody", "localhost", 42),
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/uritools-4.0.3/tox.ini new/uritools-6.0.1/tox.ini
--- old/uritools-4.0.3/tox.ini 2024-05-28 20:03:31.000000000 +0200
+++ new/uritools-6.0.1/tox.ini 2025-12-21 19:41:35.000000000 +0100
@@ -6,12 +6,11 @@
pytest
pytest-cov
commands =
- py.test --basetemp={envtmpdir} --cov=uritools {posargs}
+ py.test --basetemp={envtmpdir} --cov=uritools --cov-report term-missing
{posargs}
[testenv:check-manifest]
deps =
- check-manifest==0.44; python_version < "3.8"
- check-manifest; python_version >= "3.8"
+ check-manifest
commands =
check-manifest
skip_install = true
@@ -31,9 +30,10 @@
[testenv:flake8]
deps =
flake8
- flake8-black; implementation_name == "cpython"
+ flake8-black
flake8-bugbear
flake8-import-order
+ flake8-pyproject
commands =
flake8
skip_install = true