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-10-12 22:07:17
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Comparing /work/SRC/openSUSE:Factory/python-uritools (Old)
 and      /work/SRC/openSUSE:Factory/.python-uritools.new.3698736 (New)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Package is "python-uritools"

Mon Oct 12 22:07:17 2026 rev:9 rq:1384225 version:6.1.3

Changes:
--------
--- /work/SRC/openSUSE:Factory/python-uritools/python-uritools.changes  
2026-05-20 15:25:16.163989018 +0200
+++ 
/work/SRC/openSUSE:Factory/.python-uritools.new.3698736/python-uritools.changes 
    2026-10-12 22:07:21.287649554 +0200
@@ -1,0 +2,12 @@
+Sun Oct 11 14:15:37 UTC 2026 - Andrea Manzini <[email protected]>
+
+- Update to 6.1.3 (includes 6.1.2):
+  * No changes to the runtime code
+  * Type stubs import TypeAlias from typing, so typing_extensions
+    is no longer needed by type checkers
+  * Minor style and documentation improvements
+  * Update build environment
+- Raise setuptools BuildRequires to >= 80, as upstream requires
+- Spec cleanup: drop obsolete Group tag
+
+-------------------------------------------------------------------

Old:
----
  uritools-6.1.1.tar.gz

New:
----
  uritools-6.1.3.tar.gz

++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Other differences:
------------------
++++++ python-uritools.spec ++++++
--- /var/tmp/diff_new_pack.es9uaA/_old  2026-10-12 22:07:22.058681381 +0200
+++ /var/tmp/diff_new_pack.es9uaA/_new  2026-10-12 22:07:22.059681423 +0200
@@ -18,15 +18,14 @@
 
 %{?sle15_python_module_pythons}
 Name:           python-uritools
-Version:        6.1.1
+Version:        6.1.3
 Release:        0
 Summary:        URI parsing, classification and composition
 License:        MIT
-Group:          Development/Languages/Python
 URL:            https://github.com/tkem/uritools/
 Source:         
https://files.pythonhosted.org/packages/source/u/uritools/uritools-%{version}.tar.gz
 BuildRequires:  %{python_module pip}
-BuildRequires:  %{python_module setuptools >= 78}
+BuildRequires:  %{python_module setuptools >= 80}
 BuildRequires:  %{python_module setuptools-scm >= 8.2}
 BuildRequires:  %{python_module wheel}
 BuildRequires:  fdupes

++++++ uritools-6.1.1.tar.gz -> uritools-6.1.3.tar.gz ++++++
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/uritools-6.1.1/.github/FUNDING.yml 
new/uritools-6.1.3/.github/FUNDING.yml
--- old/uritools-6.1.1/.github/FUNDING.yml      2026-05-09 21:51:08.000000000 
+0200
+++ new/uritools-6.1.3/.github/FUNDING.yml      1970-01-01 01:00:00.000000000 
+0100
@@ -1,2 +0,0 @@
-github: [tkem]
-custom: ["https://www.paypal.me/tkem";]
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/uritools-6.1.1/.github/ISSUE_TEMPLATE/bug_report.md 
new/uritools-6.1.3/.github/ISSUE_TEMPLATE/bug_report.md
--- old/uritools-6.1.1/.github/ISSUE_TEMPLATE/bug_report.md     2026-05-09 
21:51:08.000000000 +0200
+++ new/uritools-6.1.3/.github/ISSUE_TEMPLATE/bug_report.md     1970-01-01 
01:00:00.000000000 +0100
@@ -1,29 +0,0 @@
----
-name: Bug report
-about: Create a report to help us improve
-title: ''
-labels: bug
-assignees: tkem
-
----
-
-Before reporting a bug, please make sure you have the latest `uritools` 
version installed:
-```
-pip install --upgrade uritools
-```
-
-**Describe the bug**
-A clear and concise description of what the bug is.
-
-**Expected result**
-A clear and concise description of what you expected to happen.
-
-**Actual result**
-A clear and concise description of what happened instead.
-
-**Reproduction steps**
-
-```python
-import uritools
-
-```
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/uritools-6.1.1/.github/ISSUE_TEMPLATE/config.yml 
new/uritools-6.1.3/.github/ISSUE_TEMPLATE/config.yml
--- old/uritools-6.1.1/.github/ISSUE_TEMPLATE/config.yml        2026-05-09 
21:51:08.000000000 +0200
+++ new/uritools-6.1.3/.github/ISSUE_TEMPLATE/config.yml        1970-01-01 
01:00:00.000000000 +0100
@@ -1 +0,0 @@
-blank_issues_enabled: false
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/uritools-6.1.1/.github/ISSUE_TEMPLATE/feature_request.md 
new/uritools-6.1.3/.github/ISSUE_TEMPLATE/feature_request.md
--- old/uritools-6.1.1/.github/ISSUE_TEMPLATE/feature_request.md        
2026-05-09 21:51:08.000000000 +0200
+++ new/uritools-6.1.3/.github/ISSUE_TEMPLATE/feature_request.md        
1970-01-01 01:00:00.000000000 +0100
@@ -1,10 +0,0 @@
----
-name: Feature request
-about: Suggest an idea for this project
-title: ''
-labels: enhancement
-assignees: tkem
-
----
-
-Sorry, but `uritools` is not accepting feature requests at this time.
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/uritools-6.1.1/.github/SECURITY.md 
new/uritools-6.1.3/.github/SECURITY.md
--- old/uritools-6.1.1/.github/SECURITY.md      2026-05-09 21:51:08.000000000 
+0200
+++ new/uritools-6.1.3/.github/SECURITY.md      1970-01-01 01:00:00.000000000 
+0100
@@ -1,13 +0,0 @@
-# Security Policy
-
-## Supported Versions
-
-Security updates are applied only to the latest release.
-
-## Reporting a Vulnerability
-
-If you have discovered a security vulnerability in this project, please report 
it privately. **Do not disclose it as a public issue.** This gives us time to 
work with you to fix the issue before public exposure, reducing the chance that 
the exploit will be used before a patch is released.
-
-Please disclose it at [security 
advisory](https://github.com/tkem/uritools/security/advisories/new).
-
-This project is maintained by a single person on a best effort basis. As such, 
vulnerability reports will be investigated and fixed or disclosed as soon as 
possible, but there may be delays in response time due to the maintainer's 
other commitments.
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/uritools-6.1.1/.github/copilot-instructions.md 
new/uritools-6.1.3/.github/copilot-instructions.md
--- old/uritools-6.1.1/.github/copilot-instructions.md  2026-05-18 
20:08:33.000000000 +0200
+++ new/uritools-6.1.3/.github/copilot-instructions.md  1970-01-01 
01:00:00.000000000 +0100
@@ -1,76 +0,0 @@
-# uritools Project Guidelines
-
-## Overview
-
-RFC 3986 compliant URI parsing library replacing Python's `urllib.parse`. 
Requires Python >= 3.10, zero runtime dependencies.
-
-- **Single-file design**: Everything in `src/uritools/__init__.py` — do not 
create submodules
-- **Dual type support**: All public functions handle both `str` and `bytes` 
via `SplitResultString` / `SplitResultBytes`
-- **Public API**: Defined in `__all__` — changes are breaking
-- **Type stubs**: `src/uritools/__init__.pyi` — keep in sync with runtime API
-
-## Architecture
-
-Functions return `namedtuple` subclasses (`SplitResult`, `DefragResult`) with 
both tuple access and getter methods (`.gethost()`, `.getport()`, 
`.getquerydict()`). Preserve both interfaces when modifying.
-
-Encoding uses cached lookup tables (`_encoded` dict) with uppercase hex digits 
per RFC 3986. Safe characters vary by component (`_SAFE_PATH`, `_SAFE_QUERY`, 
etc.).
-
-Type dispatch pattern used throughout:
-```python
-if isinstance(uristring, bytes):
-    result = SplitResultBytes
-else:
-    result = SplitResultString
-```
-
-### Composition rules (`uricompose()`)
-- Scheme: `[A-Za-z][A-Za-z0-9+.-]*`, lowercased
-- Path with authority must start with `/` or be empty
-- Path without authority cannot start with `//`
-- Relative paths with `:` in first segment get `./` prefix
-- Query accepts `str`, `bytes`, `dict`, or list of tuples
-- Invalid host types must raise `TypeError`, not leak `AttributeError`
-
-### IP address handling
-- Use `ipaddress` module; reject IPvFuture (addresses starting with `v`)
-- IPv6 bracketed in output: `[2001:db8::1]`, always compressed form
-
-### Design decisions (intentional — do not "fix")
-- `getscheme()` always returns `str` (decodes bytes schemes)
-- `getfragment()` and other `get*()` methods decode to `str` by default, even 
for bytes input
-- `gethost()` returns `""` for empty host when `default=None`, but returns 
`default` when it's not None
-- `SplitResultBytes` / `SplitResultString` are semi-private (not in `__all__`)
-
-## Development
-
-### Running checks
-```bash
-tox              # all environments (recommended)
-tox -e py        # tests with coverage
-tox -e ruff-format  # formatting (ruff format)
-tox -e ruff      # linting (ruff check)
-tox -e pyright   # type checking
-tox -e docs      # Sphinx HTML build
-tox -e doctest   # Sphinx doctest
-```
-
-Use `tox` or `PYTHONPATH=src python3 -m pytest tests/` to test against the 
workspace source (not the system-installed package).
-
-### Testing conventions
-- `unittest.TestCase` with `check()` helpers — not pytest-style
-- Test both `str` and `bytes` variants of every case
-- Test RFC 3986 examples explicitly in `test_rfc3986()` methods
-- Edge cases in separate `test_abnormal()` methods
-- Maintain 100% line coverage
-- Avoid shadowing built-ins (`dict`, `input`) in loop variables
-
-### Documentation
-- Sphinx docs in `docs/`, built with `tox -e docs`
-- `README.rst` examples must work as doctests
-- Docstrings describe types in prose (no type annotations in signatures)
-- Directive body content uses 3-space indentation in `docs/index.rst`
-
-### Changelog
-- `CHANGELOG.rst` uses `vX.Y.Z (YYYY-MM-DD)` headers with `===` underlines
-- Unreleased changes go under `vX.Y.Z (UNRELEASED)`
-- Each entry is a `- ` bullet (imperative mood, no trailing period)
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/uritools-6.1.1/.github/copilot-review.md 
new/uritools-6.1.3/.github/copilot-review.md
--- old/uritools-6.1.1/.github/copilot-review.md        2026-05-18 
20:08:33.000000000 +0200
+++ new/uritools-6.1.3/.github/copilot-review.md        1970-01-01 
01:00:00.000000000 +0100
@@ -1,158 +0,0 @@
-# Code, Tests & Docs Review
-
-**Date:** 2026-05-18
-**Version:** 6.1.1
-**Python:** 3.13.7
-**Scope:** `src/uritools/__init__.py`, `src/uritools/__init__.pyi`, `tests/`, 
`docs/`, `README.rst`
-
-## Checks Summary
-
-| Check      | Result |
-|------------|--------|
-| Tests      | 45 passed |
-| Coverage   | 100% (394 statements) |
-| Lint       | Clean (ruff check) |
-| Format     | Clean (ruff format) |
-| Type check | 0 errors (pyright) |
-| Docs build | OK (sphinx html) |
-| Doctests   | 10 passed |
-
----
-
-## Code Findings
-
-### C1. Unbounded cache growth in `uriencode()` (low risk)
-
-`_encoded` dict grows without limit when callers pass arbitrary `safe` values. 
The existing FIXME (line 79) acknowledges this. Consider `@functools.lru_cache` 
or capping the dict size. In practice, the library only uses a handful of fixed 
`safe` values internally, so risk is low unless users call `uriencode()` 
directly with dynamic `safe` arguments.
-
-### C2. `DefragResult.getfragment()` always returns `str` (design note)
-
-The FIXME at line 129 notes that `getfragment()` decodes to `str` by default 
even when `geturi()` returns `bytes`. This is consistent with 
`SplitResult.getfragment()` and all other `get*()` methods, so changing it 
would be a breaking API change. The FIXME can be considered resolved or 
intentional.
-
-### C3. `getscheme()` always returns `str` (design note)
-
-Similar FIXME at line 203: `getscheme()` decodes bytes schemes to `str`. The 
stub file already types this as `-> str | None`, confirming this is intentional 
behavior.
-
-### C4. `SplitResultBytes` / `SplitResultString` visibility (minor)
-
-Both classes have a `# TODO: make private?` comment. They are not in `__all__` 
so they are already semi-private. Making them fully private (prefixing with 
`_`) would be a minor cleanup but could break users who import them directly.
-
-### C5. `gethost()` returns empty string for empty host
-
-`gethost(default=X)` returns `default` when host is empty *and* default is not 
None, but returns `""` when default is None. This edge case (`"file:///"` -> 
`gethost()` returns `""`) is tested and documented, but the asymmetry between 
`default=None` and `default="x"` may be unexpected.
-
-### C6. `_AUTHORITY_RE_*` port group matches empty string
-
-The regex `(?::([0-9]*))?$` captures an empty port string for URIs like 
`http://host:`. This is handled correctly downstream (`_port()` returns `b""` 
for empty port, `getport()` returns default), but the empty-string-vs-None 
distinction for port is a subtle edge.
-
-### C8. `getauthority()` TODO about efficiency (trivial)
-
-Line 224: `# TODO: this could be much more efficient by using a dedicated 
regex` — `getauthority()` calls three separate getters. Could be 
micro-optimized with a single regex, but unlikely to matter in practice.
-
----
-
-## Test Findings
-
-### Good practices observed
-- All public functions tested with both `str` and `bytes` input
-- RFC 3986 examples tested exhaustively (Sections 3, 5.4.1, 5.4.2)
-- Edge cases and abnormal inputs covered thoroughly
-- `check()` helpers enforce round-trip consistency (parse → recompose)
-- IPv4, IPv6, IPv4-mapped IPv6, and IPvFuture rejection all tested
-- Error cases test `TypeError` vs `ValueError` distinction
-- Cross-type `urijoin` (bytes base + str ref, etc.) tested
-- 100% line coverage maintained
-- Python 3.13 IPv4-mapped address representation change handled in 
`test_ipv4_mapped_literal` with dual expected values
-
-### T1. `uricompose` with `fragment` parameter
-
-Only tested implicitly via the RFC 3986 example in `test_rfc3986`. No 
dedicated test for fragment encoding (e.g., `fragment="foo bar"` producing 
`#foo%20bar`).
-
-### T2. `uricompose` with non-default `encoding`
-
-No test passes a non-default `encoding` to `uricompose()`. For example, 
composing with `encoding="latin-1"` and non-ASCII path characters.
-
-### T3. `uricompose` authority override with bytes
-
-`test_authority_override` only uses `str` values. No test overrides authority 
subcomponents with `bytes` kwargs.
-
-### T4. `uriunsplit` with mixed types
-
-The type dispatch in `uriunsplit()` uses `path` type to select the result 
class. Mixed types (e.g., str scheme + bytes path) could produce unexpected 
results but are not tested. Consider documenting this as unsupported or adding 
a guard.
-
-### T5. `DefragResult.getfragment()` default parameter
-
-No test passes a non-None `default` to `DefragResult.getfragment()` (e.g., 
`uridefrag("").getfragment(default="fallback")`).
-
-### T6. `getauthority` with bytes default tuple
-
-`test_encoding_none` tests str and bytes URI input, but `getauthority()` with 
a bytes default tuple is not tested.
-
----
-
-## Documentation Findings
-
-### D3. `docs/index.rst`: no documentation for `uriencode`/`uridecode` 
parameters
-
-The `uriencode` and `uridecode` docs describe input/output types but do not 
document the `encoding`, `errors`, or `safe` parameters individually. Users 
must read the function signature and docstring. Consider adding parameter 
descriptions.
-
-### D4. `docs/index.rst`: `SplitResult` attribute table missing `Index` for 
properties
-
-The `urisplit` attribute table has empty `Index` cells for `userinfo`, `host`, 
and `port`. This is intentional (they are properties, not tuple fields), but it 
could be clearer with a note like "n/a" or "(property)".
-
-### D6. `docs/conf.py`: `master_doc` deprecated
-
-`master_doc` is deprecated in Sphinx 4.0+ in favor of `root_doc`. Works fine 
currently but will eventually produce a warning.
-
-### D7. `docs/index.rst`: `DefragResult` and `SplitResult` documented twice
-
-These classes are first described in the "URI Decomposition" section (inline 
attribute tables) and then again in "Structured Parse Results" via `.. 
autoclass::` with `:members:`. This provides the best of both worlds (table 
overview + detailed API), but the duplication could confuse readers scanning 
for the complete API of these classes.
-
-### D8. Changelog entry format guidance
-
-The `CHANGELOG.rst` format is documented in `copilot-instructions.md` 
(imperative mood bullets under `vX.Y.Z (YYYY-MM-DD)` headers with `===` 
underlines). No separate `CONTRIBUTING.md` exists, but the conventions are 
clear from the instructions file.
-
----
-
-## Type Stub Findings
-
-### S1. `DefragResult` and `SplitResult` stub inheritance
-
-The stubs declare `DefragResult(NamedTuple, Generic[AnyStr])` and 
`SplitResult(NamedTuple, Generic[AnyStr])`, but the runtime classes inherit 
from `collections.namedtuple(...)` (not `typing.NamedTuple`). This is 
acceptable for type checking purposes since pyright accepts it (0 errors), but 
it's a divergence from the runtime class hierarchy.
-
-### S2. `gethost()` default parameter type
-
-The stub types `default` as `str | ipaddress.IPv4Address | 
ipaddress.IPv6Address | None`, but at runtime any value could be passed as 
default (it's just returned as-is when host is absent). This is appropriate — 
the stub reflects intended usage, not arbitrary usage.
-
-### S3. `uriencode` overload for str input missing `encoding=None`
-
-The str overload of `uriencode` types `encoding` as `str`, not `str | None`. 
The bytes overload allows `str | None`. At runtime, passing `encoding=None` to 
`uriencode` with a str input would fail (can't call `str.encode(None)`), so the 
stub is correct — but this asymmetry is not obvious.
-
----
-
-## Security
-
-No security issues found. The library:
-- Does not perform network I/O
-- Does not execute or evaluate URI content
-- Properly validates IP literals and rejects IPvFuture
-- Uses percent-encoding with uppercase hex digits per RFC 3986
-- Handles path traversal (`../`) correctly per RFC 3986 Section 5.2.4
-- `test_path_traversal_limits` confirms `../` * 100 cannot escape root
-
----
-
-## Summary
-
-The codebase is clean, well-tested (100% coverage), and fully passing all 
checks. Key findings by priority:
-
-**Consider addressing:**
-1. **C1**: Consider capping `_encoded` cache or switching to `lru_cache`
-
-**Nice to have:**
-2. **T1-T3**: Add test cases for `uricompose` fragment, encoding, and bytes 
authority override
-3. **C2-C3**: Resolve or remove FIXME comments about bytes return types 
(behavior is intentional)
-4. **D6**: Rename `master_doc` to `root_doc` in `docs/conf.py`
-
-**No action needed:**
-- C4, C5, C6, C8, D3, D4, D7, D8, S1-S3, T4-T6 — documented here for awareness
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/uritools-6.1.1/.github/dependabot.yml 
new/uritools-6.1.3/.github/dependabot.yml
--- old/uritools-6.1.1/.github/dependabot.yml   2026-05-09 21:51:08.000000000 
+0200
+++ new/uritools-6.1.3/.github/dependabot.yml   1970-01-01 01:00:00.000000000 
+0100
@@ -1,6 +0,0 @@
-version: 2
-updates:
-  - package-ecosystem: "github-actions"
-    directory: "/"
-    schedule:
-      interval: "monthly"
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/uritools-6.1.1/.github/workflows/ci.yml 
new/uritools-6.1.3/.github/workflows/ci.yml
--- old/uritools-6.1.1/.github/workflows/ci.yml 2026-05-09 21:51:08.000000000 
+0200
+++ new/uritools-6.1.3/.github/workflows/ci.yml 1970-01-01 01:00:00.000000000 
+0100
@@ -1,27 +0,0 @@
-name: CI
-
-on: [push, pull_request, workflow_dispatch]
-
-permissions:
-  contents: read
-
-jobs:
-  main:
-    name: Python ${{ matrix.python }}
-    runs-on: ubuntu-latest
-    strategy:
-      fail-fast: false
-      matrix:
-        python: ["3.10", "3.11", "3.12", "3.13", "3.13t", "3.14", "3.14t", 
"pypy3.10", "pypy3.11"]
-    steps:
-      - uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # 
v6.0.2
-      - uses: actions/setup-python@a309ff8b426b58ec0e2a45f0f869d46889d02405 # 
v6.2.0
-        with:
-          python-version: ${{ matrix.python }}
-          allow-prereleases: true
-      - run: pip install coverage tox
-      - run: tox
-      - uses: codecov/codecov-action@57e3a136b779b570ffcdbf80b3bdc90e7fab3de2 
# v6.0.0
-        with:
-          name: ${{ matrix.python }}
-          token: ${{ secrets.CODECOV_TOKEN }}
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/uritools-6.1.1/.gitignore 
new/uritools-6.1.3/.gitignore
--- old/uritools-6.1.1/.gitignore       2026-05-09 21:51:08.000000000 +0200
+++ new/uritools-6.1.3/.gitignore       1970-01-01 01:00:00.000000000 +0100
@@ -1,11 +0,0 @@
-*.egg-info
-*.pyc
-*.swp
-.cache/
-.coverage
-.pytest_cache/
-.tox/
-MANIFEST
-build/
-dist/
-docs/_build/
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/uritools-6.1.1/.readthedocs.yaml 
new/uritools-6.1.3/.readthedocs.yaml
--- old/uritools-6.1.1/.readthedocs.yaml        2026-05-09 21:51:08.000000000 
+0200
+++ new/uritools-6.1.3/.readthedocs.yaml        1970-01-01 01:00:00.000000000 
+0100
@@ -1,11 +0,0 @@
-# Configure ReadTheDocs.
-
-version: 2
-
-build:
-  os: "ubuntu-22.04"
-  tools:
-    python: "3.11"
-
-sphinx:
-  configuration: "docs/conf.py"
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/uritools-6.1.1/CHANGELOG.rst 
new/uritools-6.1.3/CHANGELOG.rst
--- old/uritools-6.1.1/CHANGELOG.rst    2026-05-18 20:08:33.000000000 +0200
+++ new/uritools-6.1.3/CHANGELOG.rst    2026-07-24 01:10:41.000000000 +0200
@@ -1,3 +1,19 @@
+v6.1.3 (2026-07-24)
+===================
+
+- Minor style improvements to keep ``ruff`` happy.
+
+- Update build environment.
+
+
+v6.1.2 (2026-05-22)
+===================
+
+- Minor documentation improvements.
+
+- Update build environment.
+
+
 v6.1.1 (2026-05-18)
 ===================
 
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/uritools-6.1.1/MANIFEST.in 
new/uritools-6.1.3/MANIFEST.in
--- old/uritools-6.1.1/MANIFEST.in      1970-01-01 01:00:00.000000000 +0100
+++ new/uritools-6.1.3/MANIFEST.in      2026-05-22 00:44:05.000000000 +0200
@@ -0,0 +1,3 @@
+prune .github/
+exclude .gitignore
+exclude .readthedocs.yaml
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/uritools-6.1.1/PKG-INFO new/uritools-6.1.3/PKG-INFO
--- old/uritools-6.1.1/PKG-INFO 2026-05-18 20:22:32.359385700 +0200
+++ new/uritools-6.1.3/PKG-INFO 2026-07-24 01:10:49.468283700 +0200
@@ -1,6 +1,6 @@
 Metadata-Version: 2.4
 Name: uritools
-Version: 6.1.1
+Version: 6.1.3
 Summary: URI parsing, classification and composition
 Author-email: Thomas Kemmer <[email protected]>
 Maintainer-email: Thomas Kemmer <[email protected]>
@@ -82,10 +82,10 @@
 <https://github.com/python/cpython/blob/3.14/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
-    currently not entirely compliant with this RFC due to defacto
-    scenarios for parsing, and for backward compatibility purposes,
-    some parsing quirks from older RFCs are retained.
+    to urllib.parse module should conform with it.  The urllib.parse
+    module is currently not entirely compliant with this RFC due to
+    defacto scenarios for parsing, and for backward compatibility
+    purposes, some parsing quirks from older RFCs are retained.
 
 This module aims to provide fully RFC 3986 compliant replacements for
 the most commonly used functions found in ``urllib.parse``.  It also
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/uritools-6.1.1/README.rst 
new/uritools-6.1.3/README.rst
--- old/uritools-6.1.1/README.rst       2026-05-18 20:08:33.000000000 +0200
+++ new/uritools-6.1.3/README.rst       2026-05-22 00:44:05.000000000 +0200
@@ -53,10 +53,10 @@
 <https://github.com/python/cpython/blob/3.14/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
-    currently not entirely compliant with this RFC due to defacto
-    scenarios for parsing, and for backward compatibility purposes,
-    some parsing quirks from older RFCs are retained.
+    to urllib.parse module should conform with it.  The urllib.parse
+    module is currently not entirely compliant with this RFC due to
+    defacto scenarios for parsing, and for backward compatibility
+    purposes, some parsing quirks from older RFCs are retained.
 
 This module aims to provide fully RFC 3986 compliant replacements for
 the most commonly used functions found in ``urllib.parse``.  It also
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/uritools-6.1.1/docs/conf.py 
new/uritools-6.1.3/docs/conf.py
--- old/uritools-6.1.1/docs/conf.py     2026-05-09 21:51:08.000000000 +0200
+++ new/uritools-6.1.3/docs/conf.py     2026-07-24 01:10:41.000000000 +0200
@@ -1,27 +1,9 @@
-import pathlib
-import sys
-
-src_directory = (pathlib.Path(__file__).parent.parent / "src").resolve()
-sys.path.insert(0, str(src_directory))
-
-
-# Extract the current version from the source.
-def get_version():
-    """Get the version and release from the source code."""
-
-    text = (src_directory / "uritools/__init__.py").read_text()
-    for line in text.splitlines():
-        if not line.strip().startswith("__version__"):
-            continue
-        full_version = line.partition("=")[2].strip().strip("\"'")
-        partial_version = ".".join(full_version.split(".")[:2])
-        return full_version, partial_version
-    return (None, None)
-
+import importlib.metadata
 
 project = "uritools"
 copyright = "2014-2026 Thomas Kemmer"
-release, version = get_version()
+release = importlib.metadata.version(project)
+version = ".".join(release.split(".")[:2])
 
 extensions = [
     "sphinx.ext.autodoc",
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/uritools-6.1.1/docs/index.rst 
new/uritools-6.1.3/docs/index.rst
--- old/uritools-6.1.1/docs/index.rst   2026-05-18 20:08:33.000000000 +0200
+++ new/uritools-6.1.3/docs/index.rst   2026-05-22 00:44:05.000000000 +0200
@@ -36,10 +36,11 @@
 <https://github.com/python/cpython/blob/3.14/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
-    currently not entirely compliant with this RFC due to defacto
-    scenarios for parsing, and for backward compatibility purposes,
-    some parsing quirks from older RFCs are retained.
+    to :mod:`urllib.parse` module should conform with it.  The
+    :mod:`urllib.parse` module is currently not entirely compliant
+    with this RFC due to defacto scenarios for parsing, and for
+    backward compatibility purposes, some parsing quirks from older
+    RFCs are retained.
 
 This module aims to provide fully RFC 3986 compliant replacements for
 the most commonly used functions found in :mod:`urllib.parse`.  It
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/uritools-6.1.1/pyproject.toml 
new/uritools-6.1.3/pyproject.toml
--- old/uritools-6.1.1/pyproject.toml   2026-05-18 20:08:33.000000000 +0200
+++ new/uritools-6.1.3/pyproject.toml   2026-07-24 01:10:41.000000000 +0200
@@ -1,5 +1,5 @@
 [build-system]
-requires = ["setuptools >= 78", "setuptools-scm >= 8.2"]
+requires = ["setuptools >= 80", "setuptools-scm >= 8.2"]
 build-backend = "setuptools.build_meta"
 
 [project]
@@ -49,5 +49,8 @@
 
 [tool.pyright]
 typeCheckingMode = "standard"
-reportOptionalMemberAccess = false
-reportAttributeAccessIssue = false
+reportAttributeAccessIssue = "information"
+reportOptionalMemberAccess = "warning"
+
+[tool.ruff.lint]
+ignore = ["DTZ005", "SIM102", "UP031"]
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/uritools-6.1.1/src/uritools/__init__.py 
new/uritools-6.1.3/src/uritools/__init__.py
--- old/uritools-6.1.1/src/uritools/__init__.py 2026-05-18 20:08:33.000000000 
+0200
+++ new/uritools-6.1.3/src/uritools/__init__.py 2026-07-24 01:10:41.000000000 
+0200
@@ -33,7 +33,7 @@
     "uriunsplit",
 )
 
-__version__ = "6.1.1"
+__version__ = "6.1.3"
 
 
 # RFC 3986 2.2.  Reserved Characters
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/uritools-6.1.1/src/uritools/__init__.pyi 
new/uritools-6.1.3/src/uritools/__init__.pyi
--- old/uritools-6.1.1/src/uritools/__init__.pyi        2026-05-09 
21:51:08.000000000 +0200
+++ new/uritools-6.1.3/src/uritools/__init__.pyi        2026-07-24 
01:10:41.000000000 +0200
@@ -1,7 +1,6 @@
 import ipaddress
 from collections.abc import Iterable, Mapping, Sequence
-from typing import Any, AnyStr, Generic, NamedTuple, overload
-from typing_extensions import TypeAlias
+from typing import Any, AnyStr, Generic, NamedTuple, TypeAlias, overload
 
 __all__ = [
     "GEN_DELIMS",
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/uritools-6.1.1/src/uritools.egg-info/PKG-INFO 
new/uritools-6.1.3/src/uritools.egg-info/PKG-INFO
--- old/uritools-6.1.1/src/uritools.egg-info/PKG-INFO   2026-05-18 
20:22:32.000000000 +0200
+++ new/uritools-6.1.3/src/uritools.egg-info/PKG-INFO   2026-07-24 
01:10:49.000000000 +0200
@@ -1,6 +1,6 @@
 Metadata-Version: 2.4
 Name: uritools
-Version: 6.1.1
+Version: 6.1.3
 Summary: URI parsing, classification and composition
 Author-email: Thomas Kemmer <[email protected]>
 Maintainer-email: Thomas Kemmer <[email protected]>
@@ -82,10 +82,10 @@
 <https://github.com/python/cpython/blob/3.14/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
-    currently not entirely compliant with this RFC due to defacto
-    scenarios for parsing, and for backward compatibility purposes,
-    some parsing quirks from older RFCs are retained.
+    to urllib.parse module should conform with it.  The urllib.parse
+    module is currently not entirely compliant with this RFC due to
+    defacto scenarios for parsing, and for backward compatibility
+    purposes, some parsing quirks from older RFCs are retained.
 
 This module aims to provide fully RFC 3986 compliant replacements for
 the most commonly used functions found in ``urllib.parse``.  It also
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/uritools-6.1.1/src/uritools.egg-info/SOURCES.txt 
new/uritools-6.1.3/src/uritools.egg-info/SOURCES.txt
--- old/uritools-6.1.1/src/uritools.egg-info/SOURCES.txt        2026-05-18 
20:22:32.000000000 +0200
+++ new/uritools-6.1.3/src/uritools.egg-info/SOURCES.txt        2026-07-24 
01:10:49.000000000 +0200
@@ -1,19 +1,9 @@
-.gitignore
-.readthedocs.yaml
 CHANGELOG.rst
 LICENSE
+MANIFEST.in
 README.rst
 pyproject.toml
 tox.ini
-.github/FUNDING.yml
-.github/SECURITY.md
-.github/copilot-instructions.md
-.github/copilot-review.md
-.github/dependabot.yml
-.github/ISSUE_TEMPLATE/bug_report.md
-.github/ISSUE_TEMPLATE/config.yml
-.github/ISSUE_TEMPLATE/feature_request.md
-.github/workflows/ci.yml
 docs/conf.py
 docs/index.rst
 src/uritools/__init__.py
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/uritools-6.1.1/tests/test_compose.py 
new/uritools-6.1.3/tests/test_compose.py
--- old/uritools-6.1.1/tests/test_compose.py    2026-05-09 21:51:08.000000000 
+0200
+++ new/uritools-6.1.3/tests/test_compose.py    2026-07-24 01:10:41.000000000 
+0200
@@ -212,13 +212,13 @@
             ("?name=foo&type=bar", od([("name", "foo"), ("type", "bar")])),
             ("?name=foo&name=bar", [("name", "foo"), ("name", "bar")]),
             ("?name=foo&name=bar", {"name": ["foo", "bar"]}),
-            ("?name=a/b/c", dict(name="a/b/c")),
-            ("?name=a:b:c", dict(name="a:b:c")),
-            ("?name=a?b?c", dict(name="a?b?c")),
-            ("?name=a@b@c", dict(name="a@b@c")),
-            ("?name=a;b;c", dict(name="a;b;c")),
-            ("?name=a%23b%23c", dict(name="a#b#c")),
-            ("?name=a%26b%26c", dict(name="a&b&c")),
+            ("?name=a/b/c", {"name": "a/b/c"}),
+            ("?name=a:b:c", {"name": "a:b:c"}),
+            ("?name=a?b?c", {"name": "a?b?c"}),
+            ("?name=a@b@c", {"name": "a@b@c"}),
+            ("?name=a;b;c", {"name": "a;b;c"}),
+            ("?name=a%23b%23c", {"name": "a#b#c"}),
+            ("?name=a%26b%26c", {"name": "a&b&c"}),
         ]
         for uri, query in cases:
             self.check(uri, query=query)
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/uritools-6.1.1/tests/test_defrag.py 
new/uritools-6.1.3/tests/test_defrag.py
--- old/uritools-6.1.1/tests/test_defrag.py     2026-05-09 21:51:08.000000000 
+0200
+++ new/uritools-6.1.3/tests/test_defrag.py     2026-07-24 01:10:41.000000000 
+0200
@@ -23,7 +23,7 @@
         def encode(s):
             return s.encode() if s is not None else None
 
-        cases += list(map(encode, case) for case in cases)
+        cases += [map(encode, case) for case in cases]
 
         for uri, base, fragment in cases:
             defrag = uridefrag(uri)
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/uritools-6.1.1/tests/test_encoding.py 
new/uritools-6.1.3/tests/test_encoding.py
--- old/uritools-6.1.1/tests/test_encoding.py   2026-05-18 20:08:33.000000000 
+0200
+++ new/uritools-6.1.3/tests/test_encoding.py   2026-07-24 01:10:41.000000000 
+0200
@@ -8,7 +8,7 @@
         self.assertEqual(uriencode(decoded, safe, encoding), encoded)
         self.assertEqual(uridecode(encoded, encoding), decoded)
         # swap bytes/string types
-        self.assertEqual(uriencode(decoded.encode(encoding), safe, encoding), 
encoded)  # noqa
+        self.assertEqual(uriencode(decoded.encode(encoding), safe, encoding), 
encoded)
         self.assertEqual(uridecode(encoded.decode("ascii"), encoding), decoded)
 
     def test_encoding(self):
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/uritools-6.1.1/tox.ini new/uritools-6.1.3/tox.ini
--- old/uritools-6.1.1/tox.ini  2026-05-18 20:08:33.000000000 +0200
+++ new/uritools-6.1.3/tox.ini  2026-07-24 01:10:41.000000000 +0200
@@ -1,5 +1,5 @@
 [tox]
-envlist = py,docs,doctest,ruff,ruff-format,pyright
+envlist = py,docs,doctest,pyright,ruff,ruff-format
 
 [testenv]
 deps =
@@ -20,23 +20,20 @@
 commands =
      sphinx-build -W -b doctest -d {envtmpdir}/doctrees docs 
{envtmpdir}/doctest
 
+[testenv:pyright]
+deps =
+    pyright
+commands =
+    pyright {posargs}
+
 [testenv:ruff]
 deps =
     ruff
 commands =
     ruff check {posargs}
-skip_install = true
 
 [testenv:ruff-format]
 deps =
     ruff
 commands =
     ruff format --diff -q {posargs}
-skip_install = true
-
-[testenv:pyright]
-deps =
-    pyright
-commands =
-    pyright {posargs}
-skip_install = true

Reply via email to