Script 'mail_helper' called by obssrc
Hello community,

here is the log from the commit of package python-treq for openSUSE:Factory 
checked in at 2026-04-13 23:18:40
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Comparing /work/SRC/openSUSE:Factory/python-treq (Old)
 and      /work/SRC/openSUSE:Factory/.python-treq.new.21863 (New)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Package is "python-treq"

Mon Apr 13 23:18:40 2026 rev:14 rq:1346276 version:25.5.0

Changes:
--------
--- /work/SRC/openSUSE:Factory/python-treq/python-treq.changes  2024-10-30 
17:37:01.446761172 +0100
+++ /work/SRC/openSUSE:Factory/.python-treq.new.21863/python-treq.changes       
2026-04-13 23:19:23.285365395 +0200
@@ -1,0 +2,11 @@
+Sun Apr 12 21:19:41 UTC 2026 - Dirk Müller <[email protected]>
+
+- update to 25.5.0:
+  * treq is packaged with Hatchling, and consequently no longer
+    directly depends on setuptools.
+  * Update documentation to use async/await syntax
+  * Support for Python 3.8, which has reached end of support, is
+    deprecated. This is the last release with support for Python
+    3.8.
+
+-------------------------------------------------------------------

Old:
----
  treq-24.9.1.tar.gz

New:
----
  treq-25.5.0.tar.gz

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

Other differences:
------------------
++++++ python-treq.spec ++++++
--- /var/tmp/diff_new_pack.gePwLv/_old  2026-04-13 23:19:23.777385704 +0200
+++ /var/tmp/diff_new_pack.gePwLv/_new  2026-04-13 23:19:23.785386034 +0200
@@ -1,7 +1,7 @@
 #
 # spec file for package python-treq
 #
-# 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-treq
-Version:        24.9.1
+Version:        25.5.0
 Release:        0
 Summary:        HTTP library inspired by python-requests
 License:        MIT
@@ -28,13 +28,14 @@
 BuildRequires:  %{python_module Twisted-tls >= 22.10.0}
 BuildRequires:  %{python_module attrs}
 BuildRequires:  %{python_module base >= 3.9}
+BuildRequires:  %{python_module hatchling}
 BuildRequires:  %{python_module httpbin}
 BuildRequires:  %{python_module hyperlink >= 21.0.0}
-BuildRequires:  %{python_module incremental}
+BuildRequires:  %{python_module incremental >= 24.7.2}
+BuildRequires:  %{python_module multipart}
 BuildRequires:  %{python_module pip}
 BuildRequires:  %{python_module requests >= 2.1.0}
 BuildRequires:  %{python_module service_identity}
-BuildRequires:  %{python_module setuptools}
 BuildRequires:  %{python_module typing-extensions >= 3.10.0}
 BuildRequires:  %{python_module wheel}
 BuildRequires:  fdupes
@@ -42,7 +43,8 @@
 Requires:       python-Twisted-tls >= 22.10.0
 Requires:       python-attrs
 Requires:       python-hyperlink >= 21.0.0
-Requires:       python-incremental
+Requires:       python-incremental >= 24.7.2
+Requires:       python-multipart
 Requires:       python-requests >= 2.1.0
 Requires:       python-typing-extensions >= 3.10.0
 BuildArch:      noarch

++++++ treq-24.9.1.tar.gz -> treq-25.5.0.tar.gz ++++++
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/treq-24.9.1/.github/dependabot.yml 
new/treq-25.5.0/.github/dependabot.yml
--- old/treq-24.9.1/.github/dependabot.yml      1970-01-01 01:00:00.000000000 
+0100
+++ new/treq-25.5.0/.github/dependabot.yml      2020-02-02 01:00:00.000000000 
+0100
@@ -0,0 +1,7 @@
+version: 2
+updates:
+
+  - package-ecosystem: "github-actions"
+    directory: "/"
+    schedule:
+      interval: "monthly"
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/treq-24.9.1/.github/workflows/ci.yaml 
new/treq-25.5.0/.github/workflows/ci.yaml
--- old/treq-24.9.1/.github/workflows/ci.yaml   1970-01-01 01:00:00.000000000 
+0100
+++ new/treq-25.5.0/.github/workflows/ci.yaml   2020-02-02 01:00:00.000000000 
+0100
@@ -0,0 +1,165 @@
+name: CI
+
+on:
+  push:
+    branches: [ trunk ]
+  pull_request:
+    branches: [ trunk ]
+
+jobs:
+  lint:
+    runs-on: ubuntu-24.04
+    timeout-minutes: 5
+
+    steps:
+    - uses: actions/checkout@v4
+
+    - uses: actions/setup-python@v5
+      with:
+        python-version: "3.12"
+
+    - uses: actions/cache@v4
+      with:
+        path: ~/.cache/pip
+        key:
+          ${{ runner.os }}-pip-lint-${{ hashFiles('pyproject.toml', 'tox.ini') 
}}
+        restore-keys: |
+          ${{ runner.os }}-pip-lint-
+          ${{ runner.os }}-pip-
+
+    - run: python -m pip install 'tox<4'
+
+    - run: tox -q -p all -e flake8,towncrier,twine,check-manifest,mypy
+      env:
+        TOX_PARALLEL_NO_SPINNER: 1
+
+  docs:
+    runs-on: ubuntu-24.04
+    timeout-minutes: 5
+
+    steps:
+    - uses: actions/checkout@v4
+
+    - uses: actions/setup-python@v5
+      with:
+        python-version: "3.12"
+
+    - uses: actions/cache@v4
+      with:
+        path: ~/.cache/pip
+        key:
+          ${{ runner.os }}-pip-docs-${{ hashFiles('pyproject.toml', 'tox.ini') 
}}
+        restore-keys: |
+          ${{ runner.os }}-pip-docs-
+          ${{ runner.os }}-pip-
+
+    - run: python -m pip install 'tox<4'
+
+    - run: tox -q -e docs
+
+
+  test:
+    name: "Test ${{ matrix.python-version }} with ${{ matrix.twisted-version 
}} Twisted"
+    runs-on: ubuntu-22.04
+    timeout-minutes: 10
+    continue-on-error: ${{ matrix.experimental }}
+    strategy:
+      matrix:
+          # Python versions common to lowest and latest
+          python-version: ["3.8", "3.9", "3.10", "pypy-3.9"]
+          twisted-version: ["lowest", "latest"]
+          experimental: [false]
+
+          include:
+
+          # Pythons too new for lowest
+          - python-version: "3.11"
+            twisted-version: "latest"
+            experimental: false
+
+          - python-version: "3.12"
+            twisted-version: "latest"
+            experimental: false
+
+          - python-version: "3.13"
+            twisted-version: "latest"
+            experimental: true
+
+          - python-version: "pypy-3.10"
+            twisted-version: "latest"
+            experimental: false
+
+          # Experimental trunk build
+          - python-version: "3.9"
+            twisted-version: "trunk"
+            experimental: true
+
+    steps:
+    - uses: actions/checkout@v4
+
+    - uses: actions/setup-python@v5
+      with:
+        python-version: ${{ matrix.python-version }}
+
+    - uses: actions/cache@v4
+      with:
+        path: ~/.cache/pip
+        key:
+          ${{ runner.os }}-pip-${{ matrix.python-version }}-${{ 
hashFiles('pyproject.toml', 'tox.ini') }}
+        restore-keys: |
+          ${{ runner.os }}-pip-${{ matrix.python-version }}-
+          ${{ runner.os }}-pip-
+
+    - name: Translate Python version to Tox factor
+      id: pyfactor
+      shell: python
+      run: |
+        table = {
+          "3.8": "py38",
+          "3.9": "py39",
+          "3.10": "py310",
+          "3.11": "py311",
+          "3.12": "py312",
+          "3.13": "py313",
+          "pypy-3.8": "pypy3",
+          "pypy-3.9": "pypy3",
+          "pypy-3.10": "pypy3",
+        }
+        factor = table["${{ matrix.python-version }}"]
+        print("::set-output name=value::" + factor)
+
+    - run: python -m pip install tox coveralls
+
+    - run: tox -e ${{ steps.pyfactor.outputs.value }}-twisted_${{ 
matrix.twisted-version }}
+
+    - run: coveralls
+      env:
+        GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
+        COVERALLS_REPO_TOKEN: 4nctuKHTnVtbdmty2FgdO3iiWm1nb7xc4
+        COVERALLS_FLAG_NAME: python_${{ matrix.python-version }}-twisted_${{ 
matrix.twisted-version }}
+        COVERALLS_PARALLEL: true
+
+  # Helper so that on GitHub repo settings we can configure to single job.
+  # Then required jobs can be updated directly form the code,
+  # without having to go the GitHub repo setting -> Protected branch
+  # and all the clicking.
+  treq-required:
+    runs-on: ubuntu-latest
+    timeout-minutes: 10
+    if: ${{ !cancelled() }}
+    # Add here the jobs that should block the merge of a PR.
+    needs:
+      - lint
+      - docs
+      - test
+    steps:
+      - name: Require all successes
+        shell: python3 {0}
+        env:
+          RESULTS: ${{ toJSON(needs.*.result) }}
+        run: |
+          import json
+          import os
+          import sys
+          results = json.loads(os.environ["RESULTS"])
+          sys.exit(0 if all(result == "success" for result in results) else 1)
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/treq-24.9.1/.github/workflows/release.yaml 
new/treq-25.5.0/.github/workflows/release.yaml
--- old/treq-24.9.1/.github/workflows/release.yaml      1970-01-01 
01:00:00.000000000 +0100
+++ new/treq-25.5.0/.github/workflows/release.yaml      2020-02-02 
01:00:00.000000000 +0100
@@ -0,0 +1,54 @@
+name: Release
+
+on:
+  push:
+    tags: [ "treq-*" ]
+  pull_request:
+    branches: [ trunk ]
+
+permissions:
+  contents: read
+
+jobs:
+  build:
+    runs-on: ubuntu-24.04
+
+    steps:
+    - uses: actions/checkout@v4
+
+    - uses: actions/setup-python@v5
+      with:
+        python-version: '3.12'
+
+    - run: pip install build twine
+
+    - run: python3 -m build
+
+    - run: twine check dist/*.*
+
+    - uses: actions/upload-artifact@v4
+      with:
+        name: dist
+        path: dist/*.*
+        if-no-files-found: error
+
+  pypi-publish:
+    runs-on: ubuntu-24.04
+    if: startsWith(github.ref, 'refs/tags/treq-')
+    needs: [build]
+
+    environment:
+      name: PyPI.org
+      url: https://pypi.org/project/treq
+
+    permissions:
+      id-token: write
+
+    steps:
+
+    - uses: actions/download-artifact@v4
+      with:
+        name: dist
+        path: dist/
+
+    - uses: pypa/gh-action-pypi-publish@release/v1
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/treq-24.9.1/.gitignore new/treq-25.5.0/.gitignore
--- old/treq-24.9.1/.gitignore  1970-01-01 01:00:00.000000000 +0100
+++ new/treq-25.5.0/.gitignore  2020-02-02 01:00:00.000000000 +0100
@@ -0,0 +1,16 @@
+.DS_Store
+*.pyc
+*.pyo
+*.egg-info
+_build
+build
+dist
+/docs/html
+/.eggs
+MANIFEST
+/.coverage
+/.coverage.*
+coverage
+htmlcov
+_trial_temp*
+/.tox
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/treq-24.9.1/.readthedocs.yml 
new/treq-25.5.0/.readthedocs.yml
--- old/treq-24.9.1/.readthedocs.yml    1970-01-01 01:00:00.000000000 +0100
+++ new/treq-25.5.0/.readthedocs.yml    2020-02-02 01:00:00.000000000 +0100
@@ -0,0 +1,22 @@
+# https://docs.readthedocs.io/en/stable/config-file/v2.html
+version: 2
+
+sphinx:
+  fail_on_warning: false
+  configuration: docs/conf.py
+
+formats:
+  - pdf
+  - epub
+
+build:
+  os: ubuntu-22.04
+  tools:
+    python: "3.12"
+
+python:
+  install:
+    - method: pip
+      path: .
+      extra_requirements:
+        - docs
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/treq-24.9.1/CHANGELOG.rst 
new/treq-25.5.0/CHANGELOG.rst
--- old/treq-24.9.1/CHANGELOG.rst       2024-09-20 01:02:08.000000000 +0200
+++ new/treq-25.5.0/CHANGELOG.rst       2020-02-02 01:00:00.000000000 +0100
@@ -8,6 +8,27 @@
 
 .. towncrier release notes start
 
+25.5.0 (2025-05-31)
+===================
+
+Features
+--------
+
+- treq is packaged with Hatchling, and consequently no longer directly depends 
on setuptools. (`#388 <https://github.com/twisted/treq/issues/388>`__)
+
+
+Improved Documentation
+----------------------
+
+- Update documentation to use `async`/`await` syntax (`#409 
<https://github.com/twisted/treq/issues/409>`__)
+
+
+Deprecations and Removals
+-------------------------
+
+- Support for Python 3.8, which has reached end of support, is deprecated. 
This is the last release with support for Python 3.8. (`#407 
<https://github.com/twisted/treq/issues/407>`__)
+
+
 24.9.1 (2024-09-19)
 ===================
 
@@ -26,7 +47,7 @@
 --------
 
 - treq now ships type annotations. (`#366 
<https://github.com/twisted/treq/issues/366>`__)
-- The new :mod:`treq.cookies` module provides helper functions for working 
with `http.cookiejar.Cookie` and `CookieJar` objects. (`#384 
<https://github.com/twisted/treq/issues/384>`__)
+- The new :mod:`treq.cookies` module provides helper functions for working 
with `http.cookiejar.Cookie` and :class:`~http.cookiejar.CookieJar` objects. 
(`#384 <https://github.com/twisted/treq/issues/384>`__)
 - Python 3.13 is now supported. (`#391 
<https://github.com/twisted/treq/issues/391>`__)
 
 
@@ -40,7 +61,7 @@
 -------------------------
 
 - Mixing the *json* argument with *files* or *data* now raises `TypeError`. 
(`#297 <https://github.com/twisted/treq/issues/297>`__)
-- Passing non-string (`str` or `bytes`) values as part of a dict to the 
*headers* argument now results in a `TypeError`, as does passing any collection 
other than a `dict` or `Headers` instance. (`#302 
<https://github.com/twisted/treq/issues/302>`__)
+- Passing non-string (`str` or `bytes`) values as part of a dict to the 
*headers* argument now results in a `TypeError`, as does passing any collection 
other than a `dict` or :class:`~twisted.web.http.http_headers.Headers` 
instance. (`#302 <https://github.com/twisted/treq/issues/302>`__)
 - Support for Python 3.7 and PyPy 3.8, which have reached end of support, has 
been dropped. (`#378 <https://github.com/twisted/treq/issues/378>`__)
 
 
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/treq-24.9.1/MANIFEST.in new/treq-25.5.0/MANIFEST.in
--- old/treq-24.9.1/MANIFEST.in 2024-09-20 01:02:08.000000000 +0200
+++ new/treq-25.5.0/MANIFEST.in 1970-01-01 01:00:00.000000000 +0100
@@ -1,18 +0,0 @@
-include pyproject.toml
-include *.rst
-include *.md
-include LICENSE
-include .coveragerc
-include src/treq/py.typed
-recursive-include docs *
-prune docs/_build
-prune docs/html
-
-exclude tox.ini
-exclude .github
-exclude .readthedocs.yml
-
-# This directory will be empty at release time.
-prune changelog.d
-
-global-exclude .DS_Store *.pyc *.pyo __pycache__
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/treq-24.9.1/PKG-INFO new/treq-25.5.0/PKG-INFO
--- old/treq-24.9.1/PKG-INFO    2024-09-20 01:02:16.323188800 +0200
+++ new/treq-25.5.0/PKG-INFO    2020-02-02 01:00:00.000000000 +0100
@@ -1,18 +1,22 @@
-Metadata-Version: 2.1
+Metadata-Version: 2.4
 Name: treq
-Version: 24.9.1
+Version: 25.5.0
 Summary: High-level Twisted HTTP Client API
-Home-page: https://github.com/twisted/treq
-Author: David Reid
-Author-email: [email protected]
-Maintainer: Tom Most
-Maintainer-email: [email protected]
-License: MIT/X
+Project-URL: Changelog, https://github.com/twisted/treq/blob/HEAD/CHANGELOG.rst
+Project-URL: Documentation, https://treq.readthedocs.io/
+Project-URL: Issues, https://github.com/twisted/treq/issues
+Project-URL: Source, https://github.com/twisted/treq
+Project-URL: Funding-PSF, 
https://psfmember.org/civicrm/contribute/transact/?reset=1&id=44
+Project-URL: Funding-GitHub, https://github.com/sponsors/twisted
+Author-email: David Reid <[email protected]>
+Maintainer-email: Tom Most <[email protected]>
+License-Expression: MIT
+License-File: LICENSE
 Classifier: Development Status :: 5 - Production/Stable
+Classifier: Framework :: Twisted
 Classifier: Intended Audience :: Developers
 Classifier: License :: OSI Approved :: MIT License
 Classifier: Operating System :: OS Independent
-Classifier: Framework :: Twisted
 Classifier: Programming Language :: Python
 Classifier: Programming Language :: Python :: 3.8
 Classifier: Programming Language :: Python :: 3.9
@@ -22,22 +26,23 @@
 Classifier: Programming Language :: Python :: 3.13
 Classifier: Programming Language :: Python :: Implementation :: CPython
 Classifier: Programming Language :: Python :: Implementation :: PyPy
-Requires-Python: >=3.7
-Description-Content-Type: text/x-rst
-License-File: LICENSE
-Requires-Dist: incremental
-Requires-Dist: requests>=2.1.0
-Requires-Dist: hyperlink>=21.0.0
-Requires-Dist: Twisted[tls]>=22.10.0
+Requires-Python: >=3.8.0
 Requires-Dist: attrs
-Requires-Dist: typing_extensions>=3.10.0
+Requires-Dist: hyperlink>=21.0.0
+Requires-Dist: incremental>=24.7.2
+Requires-Dist: multipart
+Requires-Dist: requests>=2.1.0
+Requires-Dist: twisted[tls]>=22.10.0
+Requires-Dist: typing-extensions>=3.10.0
 Provides-Extra: dev
-Requires-Dist: pep8; extra == "dev"
-Requires-Dist: pyflakes; extra == "dev"
-Requires-Dist: httpbin==0.7.0; extra == "dev"
-Requires-Dist: werkzeug==2.0.3; extra == "dev"
+Requires-Dist: httpbin==0.7.0; extra == 'dev'
+Requires-Dist: pep8; extra == 'dev'
+Requires-Dist: pyflakes; extra == 'dev'
+Requires-Dist: werkzeug==2.0.3; extra == 'dev'
 Provides-Extra: docs
-Requires-Dist: sphinx<7.0.0; extra == "docs"
+Requires-Dist: sphinx; extra == 'docs'
+Requires-Dist: sphinx-rtd-theme; extra == 'docs'
+Description-Content-Type: text/x-rst
 
 treq: High-level Twisted HTTP Client API
 ========================================
@@ -65,8 +70,8 @@
 
 ``treq`` is an HTTP library inspired by
 `requests <https://requests.readthedocs.io/>`_ but written on top of
-`Twisted <https://www.twistedmatrix.com>`_'s
-`Agents 
<https://twistedmatrix.com/documents/current/api/twisted.web.client.Agent.html>`_.
+`Twisted <https://twisted.org/>`_'s
+`Agents 
<https://docs.twisted.org/en/stable/api/twisted.web.client.Agent.html>`_.
 
 It provides a simple, higher level API for making HTTP requests when
 using Twisted.
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/treq-24.9.1/README.rst new/treq-25.5.0/README.rst
--- old/treq-24.9.1/README.rst  2024-09-20 01:02:08.000000000 +0200
+++ new/treq-25.5.0/README.rst  2020-02-02 01:00:00.000000000 +0100
@@ -24,8 +24,8 @@
 
 ``treq`` is an HTTP library inspired by
 `requests <https://requests.readthedocs.io/>`_ but written on top of
-`Twisted <https://www.twistedmatrix.com>`_'s
-`Agents 
<https://twistedmatrix.com/documents/current/api/twisted.web.client.Agent.html>`_.
+`Twisted <https://twisted.org/>`_'s
+`Agents 
<https://docs.twisted.org/en/stable/api/twisted.web.client.Agent.html>`_.
 
 It provides a simple, higher level API for making HTTP requests when
 using Twisted.
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/treq-24.9.1/changelog.d/README.rst 
new/treq-25.5.0/changelog.d/README.rst
--- old/treq-24.9.1/changelog.d/README.rst      1970-01-01 01:00:00.000000000 
+0100
+++ new/treq-25.5.0/changelog.d/README.rst      2020-02-02 01:00:00.000000000 
+0100
@@ -0,0 +1,27 @@
+This directory collects "newsfragments": short files that each contain
+a snippet of ReST-formatted text that will be added to the next
+release notes. This should be a description of aspects of the change
+(if any) that are relevant to users. (This contrasts with your commit
+message and PR description, which are a description of the change as
+relevant to people working on the code itself.)
+
+Each file should be named like ``<ISSUE>.<TYPE>.rst``, where
+``<ISSUE>`` is an issue numbers, and ``<TYPE>`` is one of:
+
+* ``feature``
+* ``bugfix``
+* ``doc``
+* ``removal``
+* ``misc``
+
+So for example: ``123.feature.rst``, ``456.bugfix.rst``
+
+If your PR fixes an issue, use that number here. If there is no issue,
+then after you submit the PR and get the PR number you can add a
+newsfragment using that instead.
+
+Note that the ``towncrier`` tool will automatically
+reflow your text, so don't try to do any fancy formatting. You can
+install ``towncrier`` and then run ``towncrier --draft`` if you want
+to get a preview of how your change will look in the final release
+notes.
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/treq-24.9.1/docs/conf.py new/treq-25.5.0/docs/conf.py
--- old/treq-24.9.1/docs/conf.py        2024-09-20 01:02:08.000000000 +0200
+++ new/treq-25.5.0/docs/conf.py        2020-02-02 01:00:00.000000000 +0100
@@ -26,13 +26,18 @@
 
 # Add any Sphinx extension module names here, as strings. They can be 
extensions
 # coming with Sphinx (named 'sphinx.ext.*') or your custom ones.
-extensions = ["sphinx.ext.viewcode", "sphinx.ext.autodoc", 
"sphinx.ext.intersphinx"]
+extensions = [
+    "sphinx.ext.viewcode",
+    "sphinx.ext.autodoc",
+    "sphinx.ext.intersphinx",
+    "sphinx_rtd_theme",
+]
 
 # Add any paths that contain templates here, relative to this directory.
 templates_path = ["_templates"]
 
 # The suffix of source filenames.
-source_suffix = ".rst"
+source_suffix = {".rst": "restructuredtext"}
 
 # The encoding of source files.
 # source_encoding = 'utf-8-sig'
@@ -92,12 +97,15 @@
 
 # The theme to use for HTML and HTML Help pages.  See the documentation for
 # a list of builtin themes.
-html_theme = "default"
+html_theme = "sphinx_rtd_theme"
+
+# 
https://docs.readthedocs.com/platform/stable/intro/sphinx.html#set-the-canonical-url
+html_baseurl = os.environ.get("READTHEDOCS_CANONICAL_URL", "/")
 
 # Theme options are theme-specific and customize the look and feel of a theme
 # further.  For a list of options available for each theme, see the
 # documentation.
-# html_theme_options = {}
+html_theme_options = {"flyout_display": "attached"}
 
 # Add any paths that contain custom themes here, relative to this directory.
 # html_theme_path = []
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/treq-24.9.1/docs/examples/_utils.py 
new/treq-25.5.0/docs/examples/_utils.py
--- old/treq-24.9.1/docs/examples/_utils.py     2024-09-20 01:02:08.000000000 
+0200
+++ new/treq-25.5.0/docs/examples/_utils.py     2020-02-02 01:00:00.000000000 
+0100
@@ -1,10 +1,7 @@
-from __future__ import print_function
-
 import treq
 
 
-def print_response(response):
+async def print_response(response):
     print(response.code, response.phrase)
     print(response.headers)
-
-    return treq.text_content(response).addCallback(print)
+    print(await treq.text_content(response))
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/treq-24.9.1/docs/examples/basic_auth.py 
new/treq-25.5.0/docs/examples/basic_auth.py
--- old/treq-24.9.1/docs/examples/basic_auth.py 2024-09-20 01:02:08.000000000 
+0200
+++ new/treq-25.5.0/docs/examples/basic_auth.py 2020-02-02 01:00:00.000000000 
+0100
@@ -1,15 +1,15 @@
-from twisted.internet.task import react
 from _utils import print_response
+from twisted.internet.task import react
 
 import treq
 
 
-def main(reactor, *args):
-    d = treq.get(
-        'https://httpbin.org/basic-auth/treq/treq',
-        auth=('treq', 'treq')
+async def basic_auth(reactor):
+    resp = await treq.get(
+        "https://httpbin.org/basic-auth/treq/treq";,
+        auth=("treq", "treq"),
     )
-    d.addCallback(print_response)
-    return d
+    await print_response(resp)
+
 
-react(main, [])
+react(basic_auth)
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/treq-24.9.1/docs/examples/basic_get.py 
new/treq-25.5.0/docs/examples/basic_get.py
--- old/treq-24.9.1/docs/examples/basic_get.py  2024-09-20 01:02:08.000000000 
+0200
+++ new/treq-25.5.0/docs/examples/basic_get.py  2020-02-02 01:00:00.000000000 
+0100
@@ -1,12 +1,13 @@
 from twisted.internet.task import react
-from _utils import print_response
 
 import treq
 
 
-def main(reactor, *args):
-    d = treq.get('https://httpbin.org/get')
-    d.addCallback(print_response)
-    return d
+async def basic_get(reactor):
+    resp = await treq.get("https://httpbin.org/get";)
+    print(resp.code, resp.phrase)
+    print(resp.headers)
+    print(await resp.text())
 
-react(main, [])
+
+react(basic_get)
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/treq-24.9.1/docs/examples/basic_post.py 
new/treq-25.5.0/docs/examples/basic_post.py
--- old/treq-24.9.1/docs/examples/basic_post.py 2024-09-20 01:02:08.000000000 
+0200
+++ new/treq-25.5.0/docs/examples/basic_post.py 2020-02-02 01:00:00.000000000 
+0100
@@ -1,13 +1,15 @@
-from twisted.internet.task import react
 from _utils import print_response
+from twisted.internet.task import react
 
 import treq
 
 
-def main(reactor):
-    d = treq.post("https://httpbin.org/post";,
-                  data={"form": "data"})
-    d.addCallback(print_response)
-    return d
+def basic_post(reactor):
+    resp = await treq.post(
+        "https://httpbin.org/post";,
+        data={"form": "data"},
+    )
+    await print_response(resp)
+
 
-react(main, [])
+react(basic_post)
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/treq-24.9.1/docs/examples/basic_url.py 
new/treq-25.5.0/docs/examples/basic_url.py
--- old/treq-24.9.1/docs/examples/basic_url.py  2024-09-20 01:02:08.000000000 
+0200
+++ new/treq-25.5.0/docs/examples/basic_url.py  2020-02-02 01:00:00.000000000 
+0100
@@ -1,17 +1,18 @@
-# -*- encoding: utf-8 -*-
+from _utils import print_response
 from hyperlink import DecodedURL
 from twisted.internet.task import react
-from _utils import print_response
 
 import treq
 
-def main(reactor):
+
+async def basic_url(reactor):
     url = (
-        DecodedURL.from_text(u"https://httpbin.org";)
-        .child(u"get")      # add path /get
-        .add(u"foo", u"&")  # add query ?foo=%26
+        DecodedURL.from_text("https://httpbin.org";)
+        .child("get")  # add path /get
+        .add("foo", "&")  # add query ?foo=%26
     )
     print(url.to_text())
-    return treq.get(url).addCallback(print_response)
+    await print_response(await treq.get(url))
+
 
-react(main, [])
+react(basic_url)
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/treq-24.9.1/docs/examples/custom_agent.py 
new/treq-25.5.0/docs/examples/custom_agent.py
--- old/treq-24.9.1/docs/examples/custom_agent.py       2024-09-20 
01:02:08.000000000 +0200
+++ new/treq-25.5.0/docs/examples/custom_agent.py       2020-02-02 
01:00:00.000000000 +0100
@@ -1,19 +1,18 @@
-from treq.client import HTTPClient
 from _utils import print_response
 from twisted.internet.task import react
 from twisted.web.client import Agent
 
-def make_custom_agent(reactor):
-    return Agent(reactor, connectTimeout=42)
+from treq.client import HTTPClient
+
 
-def main(reactor, *args):
-    agent = make_custom_agent(reactor)
-    http_client = HTTPClient(agent)
-    d = http_client.get(
-        'https://secure.example.net/area51',
-        auth=('admin', "you'll never guess!"))
-    d.addCallback(print_response)
-    return d
+async def custom_agent(reactor):
+    my_agent = Agent(reactor, connectTimeout=42)
+    http_client = HTTPClient(my_agent)
+    resp = await http_client.get(
+        "https://secure.example.net/area51";,
+        auth=("admin", "you'll never guess!"),
+    )
+    await print_response(resp)
 
-react(main, [])
 
+react(custom_agent)
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/treq-24.9.1/docs/examples/disable_redirects.py 
new/treq-25.5.0/docs/examples/disable_redirects.py
--- old/treq-24.9.1/docs/examples/disable_redirects.py  2024-09-20 
01:02:08.000000000 +0200
+++ new/treq-25.5.0/docs/examples/disable_redirects.py  2020-02-02 
01:00:00.000000000 +0100
@@ -1,12 +1,15 @@
-from twisted.internet.task import react
 from _utils import print_response
+from twisted.internet.task import react
 
 import treq
 
 
-def main(reactor, *args):
-    d = treq.get('https://httpbin.org/redirect/1', allow_redirects=False)
-    d.addCallback(print_response)
-    return d
+async def disable_redirects(reactor):
+    resp = await treq.get(
+        "https://httpbin.org/redirect/1";,
+        allow_redirects=False,
+    )
+    await print_response(resp)
+
 
-react(main, [])
+react(disable_redirects)
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/treq-24.9.1/docs/examples/download_file.py 
new/treq-25.5.0/docs/examples/download_file.py
--- old/treq-24.9.1/docs/examples/download_file.py      2024-09-20 
01:02:08.000000000 +0200
+++ new/treq-25.5.0/docs/examples/download_file.py      2020-02-02 
01:00:00.000000000 +0100
@@ -3,11 +3,10 @@
 import treq
 
 
-def download_file(reactor, url, destination_filename):
-    destination = open(destination_filename, 'wb')
-    d = treq.get(url, unbuffered=True)
-    d.addCallback(treq.collect, destination.write)
-    d.addBoth(lambda _: destination.close())
-    return d
+async def download_file(reactor, url, destination_filename):
+    with open(destination_filename, "wb") as destination:
+        response = await treq.get(url, unbuffered=True)
+        await treq.collect(response, destination.write)
 
-react(download_file, ['https://httpbin.org/get', 'download.txt'])
+
+react(download_file, ["https://httpbin.org/get";, "download.txt"])
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/treq-24.9.1/docs/examples/json_post.py 
new/treq-25.5.0/docs/examples/json_post.py
--- old/treq-24.9.1/docs/examples/json_post.py  2024-09-20 01:02:08.000000000 
+0200
+++ new/treq-25.5.0/docs/examples/json_post.py  2020-02-02 01:00:00.000000000 
+0100
@@ -1,18 +1,17 @@
 from pprint import pprint
 
-from twisted.internet import defer
 from twisted.internet.task import react
 
 import treq
 
 
[email protected]
-def main(reactor):
-    response = yield treq.post(
-        'https://httpbin.org/post',
+async def json_post(reactor):
+    response = await treq.post(
+        "https://httpbin.org/post";,
         json={"msg": "Hello!"},
     )
-    data = yield response.json()
+    data = await response.json()
     pprint(data)
 
-react(main, [])
+
+react(json_post)
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/treq-24.9.1/docs/examples/query_params.py 
new/treq-25.5.0/docs/examples/query_params.py
--- old/treq-24.9.1/docs/examples/query_params.py       2024-09-20 
01:02:08.000000000 +0200
+++ new/treq-25.5.0/docs/examples/query_params.py       2020-02-02 
01:00:00.000000000 +0100
@@ -1,39 +1,37 @@
 from twisted.internet.task import react
-from twisted.internet.defer import inlineCallbacks
 
 import treq
 
 
-@inlineCallbacks
-def main(reactor):
-    print('List of tuples')
-    resp = yield treq.get('https://httpbin.org/get',
-                          params=[('foo', 'bar'), ('baz', 'bax')])
-    content = yield resp.text()
-    print(content)
-
-    print('Single value dictionary')
-    resp = yield treq.get('https://httpbin.org/get',
-                          params={'foo': 'bar', 'baz': 'bax'})
-    content = yield resp.text()
-    print(content)
-
-    print('Multi value dictionary')
-    resp = yield treq.get('https://httpbin.org/get',
-                          params={b'foo': [b'bar', b'baz', b'bax']})
-    content = yield resp.text()
-    print(content)
-
-    print('Mixed value dictionary')
-    resp = yield treq.get('https://httpbin.org/get',
-                          params={'foo': [1, 2, 3], 'bax': b'quux', b'bar': 
'foo'})
-    content = yield resp.text()
-    print(content)
-
-    print('Preserved query parameters')
-    resp = yield treq.get('https://httpbin.org/get?foo=bar',
-                          params={'baz': 'bax'})
-    content = yield resp.text()
-    print(content)
+async def query_params(reactor):
+    print("List of tuples")
+    resp = await treq.get(
+        "https://httpbin.org/get";, params=[("foo", "bar"), ("baz", "bax")]
+    )
+    print(await resp.text())
+
+    print("Single value dictionary")
+    resp = await treq.get(
+        "https://httpbin.org/get";, params={"foo": "bar", "baz": "bax"}
+    )
+    print(await resp.text())
+
+    print("Multi value dictionary")
+    resp = await treq.get(
+        "https://httpbin.org/get";, params={b"foo": [b"bar", b"baz", b"bax"]}
+    )
+    print(await resp.text())
+
+    print("Mixed value dictionary")
+    resp = await treq.get(
+        "https://httpbin.org/get";,
+        params={"foo": [1, 2, 3], "bax": b"quux", b"bar": "foo"},
+    )
+    print(await resp.text())
+
+    print("Preserved query parameters")
+    resp = await treq.get("https://httpbin.org/get?foo=bar";, params={"baz": 
"bax"})
+    print(await resp.text())
 
-react(main, [])
+
+react(query_params)
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/treq-24.9.1/docs/examples/redirects.py 
new/treq-25.5.0/docs/examples/redirects.py
--- old/treq-24.9.1/docs/examples/redirects.py  2024-09-20 01:02:08.000000000 
+0200
+++ new/treq-25.5.0/docs/examples/redirects.py  2020-02-02 01:00:00.000000000 
+0100
@@ -1,12 +1,12 @@
-from twisted.internet.task import react
 from _utils import print_response
+from twisted.internet.task import react
 
 import treq
 
 
-def main(reactor, *args):
-    d = treq.get('https://httpbin.org/redirect/1')
-    d.addCallback(print_response)
-    return d
+async def redirects(reactor):
+    resp = await treq.get("https://httpbin.org/redirect/1";)
+    await print_response(resp)
+
 
-react(main, [])
+react(redirects)
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/treq-24.9.1/docs/examples/response_history.py 
new/treq-25.5.0/docs/examples/response_history.py
--- old/treq-24.9.1/docs/examples/response_history.py   2024-09-20 
01:02:08.000000000 +0200
+++ new/treq-25.5.0/docs/examples/response_history.py   2020-02-02 
01:00:00.000000000 +0100
@@ -1,18 +1,14 @@
-from twisted.internet.task import react
 from _utils import print_response
+from twisted.internet.task import react
 
 import treq
 
 
-def main(reactor, *args):
-    d = treq.get('https://httpbin.org/redirect/1')
-
-    def cb(response):
-        print('Response history:')
-        print(response.history())
-        return print_response(response)
+async def response_history(reactor):
+    resp = await treq.get("https://httpbin.org/redirect/1";)
+    print("Response history:")
+    print(resp.history())
+    await print_response(resp)
 
-    d.addCallback(cb)
-    return d
 
-react(main, [])
+react(response_history)
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/treq-24.9.1/docs/examples/testing_seq.py 
new/treq-25.5.0/docs/examples/testing_seq.py
--- old/treq-24.9.1/docs/examples/testing_seq.py        2024-09-20 
01:02:08.000000000 +0200
+++ new/treq-25.5.0/docs/examples/testing_seq.py        2020-02-02 
01:00:00.000000000 +0100
@@ -18,7 +18,7 @@
     else:
         message = yield response.text()
         raise Exception("Got an error from the server: {}".format(message))
-    defer.returnValue(result)
+    return result
 
 
 class MakeARequestTests(SynchronousTestCase):
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/treq-24.9.1/docs/examples/using_cookies.py 
new/treq-25.5.0/docs/examples/using_cookies.py
--- old/treq-24.9.1/docs/examples/using_cookies.py      2024-09-20 
01:02:08.000000000 +0200
+++ new/treq-25.5.0/docs/examples/using_cookies.py      2020-02-02 
01:00:00.000000000 +0100
@@ -1,10 +1,10 @@
-from twisted.internet.task import react
 from _utils import print_response
+from twisted.internet.task import react
 
 import treq
 
 
-async def main(reactor):
+async def using_cookies(reactor):
     resp = await treq.get("https://httpbin.org/cookies/set?hello=world";)
 
     jar = resp.cookies()
@@ -16,4 +16,4 @@
     )
 
 
-react(main)
+react(using_cookies)
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/treq-24.9.1/docs/howto.rst 
new/treq-25.5.0/docs/howto.rst
--- old/treq-24.9.1/docs/howto.rst      2024-09-20 01:02:08.000000000 +0200
+++ new/treq-25.5.0/docs/howto.rst      2020-02-02 01:00:00.000000000 +0100
@@ -12,12 +12,14 @@
 :py:func:`treq.collect` knows nothing about the framing of your data and will
 simply call your collector function with any data that is currently available.
 
+By default, treq buffers the full response in memory.
+Pass ``unbufferred=True`` to disable this behavior.
+
 Here is an example which simply a file object's write method to
 :py:func:`treq.collect` to save the response body to a file.
 
 .. literalinclude:: examples/download_file.py
-    :linenos:
-    :lines: 6-11
+   :pyobject: download_file
 
 Full example: :download:`download_file.py <examples/download_file.py>`
 
@@ -34,8 +36,7 @@
 Here is an example that builds a URL that contains a ``&`` character, which is 
automatically escaped properly.
 
 .. literalinclude:: examples/basic_url.py
-    :linenos:
-    :pyobject: main
+    :pyobject: basic_url
 
 Full example: :download:`basic_url.py <examples/basic_url.py>`
 
@@ -50,17 +51,16 @@
 ``(key, value)`` tuples.
 
 If it is a ``dict`` then the values in the dict may either be scalar values or 
a ``list`` or ``tuple`` thereof.
-Scalar values means ``str``, ``bytes``, or anything else — even ``None`` — 
which will be coerced to ``str``.
+Scalar values means `str`, `bytes`, or anything else — even ``None`` — which 
will be coerced to `str`.
 Strings are UTF-8 encoded.
 
 .. literalinclude:: examples/query_params.py
-    :linenos:
-    :lines: 7-37
+    :pyobject: query_params
 
 Full example: :download:`query_params.py <examples/query_params.py>`
 
 If you prefer a strictly-typed API, try :class:`hyperlink.DecodedURL`.
-Use its :meth:`~hyperlink.URL.add` and :meth:`~hyperlink.URL.set` methods to 
add query parameters without risk of accidental type coercion.
+Its :meth:`~hyperlink.URL.add` and :meth:`~hyperlink.URL.set` methods 
manipulate query parameters without risk of accidental type coercion.
 
 JSON
 ----
@@ -73,8 +73,8 @@
 It buffers the whole response and decodes it with :func:`json.loads()`.
 
 .. literalinclude:: examples/json_post.py
-    :linenos:
-    :pyobject: main
+    :pyobject: json_post
+    :emphasize-lines: 4,6
 
 Full example: :download:`json_post.py <examples/json_post.py>`
 
@@ -87,8 +87,8 @@
 The ``auth`` argument should be a tuple of the form ``('username', 
'password')``.
 
 .. literalinclude:: examples/basic_auth.py
-    :linenos:
-    :lines: 7-15
+    :pyobject: basic_auth
+    :emphasize-lines: 4
 
 Full example: :download:`basic_auth.py <examples/basic_auth.py>`
 
@@ -100,8 +100,7 @@
 The following will print a 200 OK response.
 
 .. literalinclude:: examples/redirects.py
-    :linenos:
-    :lines: 7-12
+    :pyobject: redirects
 
 Full example: :download:`redirects.py <examples/redirects.py>`
 
@@ -109,8 +108,8 @@
 any of the request methods.
 
 .. literalinclude:: examples/disable_redirects.py
-    :linenos:
-    :lines: 7-12
+    :pyobject: disable_redirects
+    :emphasize-lines: 4
 
 Full example: :download:`disable_redirects.py <examples/disable_redirects.py>`
 
@@ -118,8 +117,8 @@
 the :meth:`~treq.response._Response.history()` method on the response.
 
 .. literalinclude:: examples/response_history.py
-    :linenos:
-    :lines: 7-15
+    :pyobject: response_history
+    :emphasize-lines: 4
 
 Full example: :download:`response_history.py <examples/response_history.py>`
 
@@ -127,16 +126,14 @@
 Cookies
 -------
 
-Cookies can be set by passing a ``dict`` or ``cookielib.CookieJar`` instance
-via the ``cookies`` keyword argument.  Later cookies set by the server can be
-retrieved using the :py:meth:`~treq.response._Response.cookies()` method of 
the response.
+Cookies can be set by passing a `dict` or :py:class:`http.cookiejar.CookieJar` 
instance via the *cookies* keyword argument.
+Any cookies set by the server can be retrieved using the 
:py:meth:`~treq.response._Response.cookies()` response method, which returns a 
:py:class:`~http.cookiejar.CookieJar`.
 
-The object returned by :py:meth:`~treq.response._Response.cookies()` supports 
the same key/value
-access as `requests cookies 
<https://requests.readthedocs.io/en/latest/user/quickstart/#cookies>`_.
+Use :py:func:`treq.cookies.search()` to extract cookies from the jar:
 
 .. literalinclude:: examples/using_cookies.py
-    :linenos:
-    :lines: 7-20
+    :pyobject: using_cookies
+    :emphasize-lines: 4-5
 
 Full example: :download:`using_cookies.py <examples/using_cookies.py>`
 
@@ -154,7 +151,7 @@
 behavior.
 
 .. literalinclude:: examples/custom_agent.py
-    :linenos:
-    :lines: 6-19
+    :pyobject: custom_agent
+    :emphasize-lines: 2-3
 
 Full example: :download:`custom_agent.py <examples/custom_agent.py>`
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/treq-24.9.1/docs/index.rst 
new/treq-25.5.0/docs/index.rst
--- old/treq-24.9.1/docs/index.rst      2024-09-20 01:02:08.000000000 +0200
+++ new/treq-25.5.0/docs/index.rst      2020-02-02 01:00:00.000000000 +0100
@@ -3,7 +3,7 @@
 
 Release v\ |release| (:doc:`What's new? <changelog>`).
 
-`treq <https://pypi.org/project/treq>`_ depends on a recent Twisted and 
functions on Python 2.7 and Python 3.3+ (including PyPy).
+`treq <https://pypi.org/project/treq>`_ depends on a recent Twisted and a 
`supported version of CPython 
<https://devguide.python.org/versions/#versions>`_ or `PyPy 
<https://pypy.org/download.html>`_.
 
 Why?
 ----
@@ -13,8 +13,8 @@
 treq is not of course a perfect clone of `requests`_.
 I have tried to stay true to the do-what-I-mean spirit of the `requests`_ API 
and also kept the API familiar to users of `Twisted`_ and 
:class:`twisted.web.client.Agent` on which treq is based.
 
-.. _requests: https://requests.readthedocs.io/en/master/
-.. _Twisted: https://twistedmatrix.com/
+.. _requests: https://requests.readthedocs.io/en/latest/
+.. _Twisted: https://www.twistedmatrix.com
 
 Quick Start
 -----------
@@ -29,7 +29,7 @@
 +++
 
 .. literalinclude:: examples/basic_get.py
-    :pyobject: main
+    :pyobject: basic_get
 
 Full example: :download:`basic_get.py <examples/basic_get.py>`
 
@@ -37,7 +37,7 @@
 ++++
 
 .. literalinclude:: examples/basic_post.py
-    :pyobject: main
+    :pyobject: basic_post
 
 Full example: :download:`basic_post.py <examples/basic_post.py>`
 
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/treq-24.9.1/pyproject.toml 
new/treq-25.5.0/pyproject.toml
--- old/treq-24.9.1/pyproject.toml      2024-09-20 01:02:08.000000000 +0200
+++ new/treq-25.5.0/pyproject.toml      2020-02-02 01:00:00.000000000 +0100
@@ -1,10 +1,72 @@
 [build-system]
 requires = [
-    "setuptools >= 35.0.2",
-    "wheel >= 0.29.0",
-    "incremental >= 21.3.0",
+    "hatchling",
+    "incremental >= 24.7.2",
 ]
-build-backend = "setuptools.build_meta"
+build-backend = "hatchling.build"
+
+[project]
+name = "treq"
+dynamic = ["version"]
+description = "High-level Twisted HTTP Client API"
+readme = "README.rst"
+license = "MIT"
+# When updating this value, make sure our CI matrix includes a matching 
minimum version.
+requires-python = ">=3.8.0"
+authors = [
+    { name = "David Reid", email = "[email protected]" },
+]
+maintainers = [
+    { name = "Tom Most", email = "[email protected]" },
+]
+classifiers = [
+    "Development Status :: 5 - Production/Stable",
+    "Intended Audience :: Developers",
+    "License :: OSI Approved :: MIT License",
+    "Operating System :: OS Independent",
+    "Framework :: Twisted",
+    "Programming Language :: Python",
+    "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",
+    "Programming Language :: Python :: 3.13",
+    "Programming Language :: Python :: Implementation :: CPython",
+    "Programming Language :: Python :: Implementation :: PyPy",
+]
+dependencies = [
+    "incremental >= 24.7.2",
+    "requests >= 2.1.0",
+    "hyperlink >= 21.0.0",
+    "Twisted[tls] >= 22.10.0",  # For #11635
+    "attrs",
+    "typing_extensions >= 3.10.0",
+    "multipart",
+]
+
+[project.optional-dependencies]
+dev = [
+    "pep8",
+    "pyflakes",
+    "httpbin==0.7.0",
+    "werkzeug==2.0.3",
+]
+docs = [
+    "sphinx",
+    "sphinx_rtd_theme",
+]
+
+[project.urls]
+Changelog = "https://github.com/twisted/treq/blob/HEAD/CHANGELOG.rst";
+Documentation = "https://treq.readthedocs.io/";
+Issues = "https://github.com/twisted/treq/issues";
+Source = "https://github.com/twisted/treq";
+Funding-PSF = 
"https://psfmember.org/civicrm/contribute/transact/?reset=1&id=44";
+Funding-GitHub = "https://github.com/sponsors/twisted";
+
+[tool.hatch.version]
+source = "incremental"
 
 [tool.towncrier]
 package = "treq"
@@ -85,7 +147,7 @@
 ignore_missing_imports = true
 
 [[tool.mypy.overrides]]
-  module = [
+module = [
     "treq._multipart",
-  ]
-  disallow_untyped_defs = false
+]
+disallow_untyped_defs = false
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/treq-24.9.1/setup.cfg new/treq-25.5.0/setup.cfg
--- old/treq-24.9.1/setup.cfg   2024-09-20 01:02:16.323188800 +0200
+++ new/treq-25.5.0/setup.cfg   1970-01-01 01:00:00.000000000 +0100
@@ -1,4 +0,0 @@
-[egg_info]
-tag_build = 
-tag_date = 0
-
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/treq-24.9.1/setup.py new/treq-25.5.0/setup.py
--- old/treq-24.9.1/setup.py    2024-09-20 01:02:08.000000000 +0200
+++ new/treq-25.5.0/setup.py    1970-01-01 01:00:00.000000000 +0100
@@ -1,62 +0,0 @@
-from setuptools import find_packages, setup
-
-classifiers = [
-    "Development Status :: 5 - Production/Stable",
-    "Intended Audience :: Developers",
-    "License :: OSI Approved :: MIT License",
-    "Operating System :: OS Independent",
-    "Framework :: Twisted",
-    "Programming Language :: Python",
-    "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",
-    "Programming Language :: Python :: 3.13",
-    "Programming Language :: Python :: Implementation :: CPython",
-    "Programming Language :: Python :: Implementation :: PyPy",
-]
-
-if __name__ == "__main__":
-
-    with open("README.rst") as f:
-        readme = f.read()
-
-    setup(
-        name="treq",
-        packages=find_packages("src"),
-        package_dir={"": "src"},
-        setup_requires=["incremental"],
-        use_incremental=True,
-        python_requires=">=3.7",
-        install_requires=[
-            "incremental",
-            "requests >= 2.1.0",
-            "hyperlink >= 21.0.0",
-            "Twisted[tls] >= 22.10.0",  # For #11635
-            "attrs",
-            "typing_extensions >= 3.10.0",
-        ],
-        extras_require={
-            "dev": [
-                "pep8",
-                "pyflakes",
-                "httpbin==0.7.0",
-                "werkzeug==2.0.3",
-            ],
-            "docs": [
-                "sphinx<7.0.0",  # Removal of 'style' key breaks RTD.
-            ],
-        },
-        package_data={"treq": ["py.typed"]},
-        author="David Reid",
-        author_email="[email protected]",
-        maintainer="Tom Most",
-        maintainer_email="[email protected]",
-        classifiers=classifiers,
-        description="High-level Twisted HTTP Client API",
-        license="MIT/X",
-        url="https://github.com/twisted/treq";,
-        long_description=readme,
-        long_description_content_type="text/x-rst",
-    )
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/treq-24.9.1/src/treq/_version.py 
new/treq-25.5.0/src/treq/_version.py
--- old/treq-24.9.1/src/treq/_version.py        2024-09-20 01:02:08.000000000 
+0200
+++ new/treq-25.5.0/src/treq/_version.py        2020-02-02 01:00:00.000000000 
+0100
@@ -7,5 +7,5 @@
 
 from incremental import Version
 
-__version__ = Version("treq", 24, 9, 1)
+__version__ = Version("treq", 25, 5, 0)
 __all__ = ["__version__"]
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/treq-24.9.1/src/treq/testing.py 
new/treq-25.5.0/src/treq/testing.py
--- old/treq-24.9.1/src/treq/testing.py 2024-09-20 01:02:08.000000000 +0200
+++ new/treq-25.5.0/src/treq/testing.py 2020-02-02 01:00:00.000000000 +0100
@@ -429,16 +429,6 @@
     :class:`~twisted.trial.unittest.SynchronousTestCase`) will translate into
     a test failure.
 
-    .. note::
-
-        Some versions of
-        :class:`twisted.trial.unittest.SynchronousTestCase` report
-        logged errors on the wrong test: see `Twisted #9267
-        <https://twistedmatrix.com/trac/ticket/9267>`_.
-
-    ..  TODO Update the above note to say what version of
-        SynchronousTestCase is fixed once Twisted >17.5.0 is released.
-
     When not subclassing Trial's classes you must pass `async_failure_reporter`
     and implement equivalent behavior or errors will pass silently. For
     example::
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/treq-24.9.1/src/treq.egg-info/PKG-INFO 
new/treq-25.5.0/src/treq.egg-info/PKG-INFO
--- old/treq-24.9.1/src/treq.egg-info/PKG-INFO  2024-09-20 01:02:16.000000000 
+0200
+++ new/treq-25.5.0/src/treq.egg-info/PKG-INFO  1970-01-01 01:00:00.000000000 
+0100
@@ -1,110 +0,0 @@
-Metadata-Version: 2.1
-Name: treq
-Version: 24.9.1
-Summary: High-level Twisted HTTP Client API
-Home-page: https://github.com/twisted/treq
-Author: David Reid
-Author-email: [email protected]
-Maintainer: Tom Most
-Maintainer-email: [email protected]
-License: MIT/X
-Classifier: Development Status :: 5 - Production/Stable
-Classifier: Intended Audience :: Developers
-Classifier: License :: OSI Approved :: MIT License
-Classifier: Operating System :: OS Independent
-Classifier: Framework :: Twisted
-Classifier: Programming Language :: Python
-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 :: Implementation :: CPython
-Classifier: Programming Language :: Python :: Implementation :: PyPy
-Requires-Python: >=3.7
-Description-Content-Type: text/x-rst
-License-File: LICENSE
-Requires-Dist: incremental
-Requires-Dist: requests>=2.1.0
-Requires-Dist: hyperlink>=21.0.0
-Requires-Dist: Twisted[tls]>=22.10.0
-Requires-Dist: attrs
-Requires-Dist: typing_extensions>=3.10.0
-Provides-Extra: dev
-Requires-Dist: pep8; extra == "dev"
-Requires-Dist: pyflakes; extra == "dev"
-Requires-Dist: httpbin==0.7.0; extra == "dev"
-Requires-Dist: werkzeug==2.0.3; extra == "dev"
-Provides-Extra: docs
-Requires-Dist: sphinx<7.0.0; extra == "docs"
-
-treq: High-level Twisted HTTP Client API
-========================================
-
-.. |pypi| image:: https://img.shields.io/pypi/v/treq.svg
-    :alt: PyPI
-    :target: https://pypi.org/project/treq/
-
-.. |calver| image:: https://img.shields.io/badge/calver-YY.MM.MICRO-22bfda.svg
-    :alt: calver: YY.MM.MICRO
-    :target: https://calver.org/
-
-.. |coverage| image:: https://coveralls.io/repos/github/twisted/treq/badge.svg
-    :alt: Coverage
-    :target: https://coveralls.io/github/twisted/treq
-
-.. |documentation| image:: https://readthedocs.org/projects/treq/badge/
-    :alt: Documentation
-    :target: https://treq.readthedocs.org
-
-|pypi|
-|calver|
-|coverage|
-|documentation|
-
-``treq`` is an HTTP library inspired by
-`requests <https://requests.readthedocs.io/>`_ but written on top of
-`Twisted <https://www.twistedmatrix.com>`_'s
-`Agents 
<https://twistedmatrix.com/documents/current/api/twisted.web.client.Agent.html>`_.
-
-It provides a simple, higher level API for making HTTP requests when
-using Twisted.
-
-.. code-block:: python
-
-    >>> import treq
-
-    >>> async def main(reactor):
-    ...     response = await treq.get("https://github.com";)
-    ...     print(response.code)
-    ...     body = await response.text()
-    ...     print("<!DOCTYPE html>" in body)
-
-    >>> from twisted.internet.task import react
-    >>> react(main)
-    200
-    True
-
-For more info `read the docs <https://treq.readthedocs.org>`_.
-
-Contributing
-------------
-
-``treq`` development is hosted on `GitHub <https://github.com/twisted/treq>`_.
-
-We welcome contributions: feel free to fork and send contributions over.
-See `CONTRIBUTING.rst 
<https://github.com/twisted/treq/blob/master/CONTRIBUTING.rst>`_ for more info.
-
-Code of Conduct
----------------
-
-Refer to the `Twisted code of conduct 
<https://github.com/twisted/twisted/blob/trunk/code_of_conduct.md>`_.
-
-Copyright and License
----------------------
-
-``treq`` is made available under the MIT license.
-See `LICENSE <./LICENSE>`_ for legal details and copyright notices.
-
-
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/treq-24.9.1/src/treq.egg-info/SOURCES.txt 
new/treq-25.5.0/src/treq.egg-info/SOURCES.txt
--- old/treq-24.9.1/src/treq.egg-info/SOURCES.txt       2024-09-20 
01:02:16.000000000 +0200
+++ new/treq-25.5.0/src/treq.egg-info/SOURCES.txt       1970-01-01 
01:00:00.000000000 +0100
@@ -1,72 +0,0 @@
-.coveragerc
-CHANGELOG.rst
-CONTRIBUTING.rst
-LICENSE
-MANIFEST.in
-README.rst
-SECURITY.md
-pyproject.toml
-setup.py
-docs/Makefile
-docs/api.rst
-docs/changelog.rst
-docs/conf.py
-docs/howto.rst
-docs/index.rst
-docs/make.bat
-docs/testing.rst
-docs/_static/.keepme
-docs/examples/_utils.py
-docs/examples/basic_auth.py
-docs/examples/basic_get.py
-docs/examples/basic_post.py
-docs/examples/basic_url.py
-docs/examples/custom_agent.py
-docs/examples/disable_redirects.py
-docs/examples/download_file.py
-docs/examples/iresource.py
-docs/examples/json_post.py
-docs/examples/query_params.py
-docs/examples/redirects.py
-docs/examples/response_history.py
-docs/examples/testing_seq.py
-docs/examples/using_cookies.py
-src/treq/__init__.py
-src/treq/_agentspy.py
-src/treq/_multipart.py
-src/treq/_types.py
-src/treq/_version.py
-src/treq/api.py
-src/treq/auth.py
-src/treq/client.py
-src/treq/content.py
-src/treq/cookies.py
-src/treq/multipart.py
-src/treq/py.typed
-src/treq/response.py
-src/treq/testing.py
-src/treq.egg-info/PKG-INFO
-src/treq.egg-info/SOURCES.txt
-src/treq.egg-info/dependency_links.txt
-src/treq.egg-info/requires.txt
-src/treq.egg-info/top_level.txt
-src/treq/test/__init__.py
-src/treq/test/test_agentspy.py
-src/treq/test/test_api.py
-src/treq/test/test_auth.py
-src/treq/test/test_client.py
-src/treq/test/test_content.py
-src/treq/test/test_cookies.py
-src/treq/test/test_multipart.py
-src/treq/test/test_response.py
-src/treq/test/test_testing.py
-src/treq/test/test_treq_integration.py
-src/treq/test/util.py
-src/treq/test/local_httpbin/__init__.py
-src/treq/test/local_httpbin/child.py
-src/treq/test/local_httpbin/parent.py
-src/treq/test/local_httpbin/shared.py
-src/treq/test/local_httpbin/test/__init__.py
-src/treq/test/local_httpbin/test/test_child.py
-src/treq/test/local_httpbin/test/test_parent.py
-src/treq/test/local_httpbin/test/test_shared.py
\ No newline at end of file
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/treq-24.9.1/src/treq.egg-info/dependency_links.txt 
new/treq-25.5.0/src/treq.egg-info/dependency_links.txt
--- old/treq-24.9.1/src/treq.egg-info/dependency_links.txt      2024-09-20 
01:02:16.000000000 +0200
+++ new/treq-25.5.0/src/treq.egg-info/dependency_links.txt      1970-01-01 
01:00:00.000000000 +0100
@@ -1 +0,0 @@
-
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/treq-24.9.1/src/treq.egg-info/requires.txt 
new/treq-25.5.0/src/treq.egg-info/requires.txt
--- old/treq-24.9.1/src/treq.egg-info/requires.txt      2024-09-20 
01:02:16.000000000 +0200
+++ new/treq-25.5.0/src/treq.egg-info/requires.txt      1970-01-01 
01:00:00.000000000 +0100
@@ -1,15 +0,0 @@
-incremental
-requests>=2.1.0
-hyperlink>=21.0.0
-Twisted[tls]>=22.10.0
-attrs
-typing_extensions>=3.10.0
-
-[dev]
-pep8
-pyflakes
-httpbin==0.7.0
-werkzeug==2.0.3
-
-[docs]
-sphinx<7.0.0
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/treq-24.9.1/src/treq.egg-info/top_level.txt 
new/treq-25.5.0/src/treq.egg-info/top_level.txt
--- old/treq-24.9.1/src/treq.egg-info/top_level.txt     2024-09-20 
01:02:16.000000000 +0200
+++ new/treq-25.5.0/src/treq.egg-info/top_level.txt     1970-01-01 
01:00:00.000000000 +0100
@@ -1 +0,0 @@
-treq
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/treq-24.9.1/tox.ini new/treq-25.5.0/tox.ini
--- old/treq-24.9.1/tox.ini     1970-01-01 01:00:00.000000000 +0100
+++ new/treq-25.5.0/tox.ini     2020-02-02 01:00:00.000000000 +0100
@@ -0,0 +1,84 @@
+[tox]
+envlist =
+    py38-twisted_lowest,
+    {pypy3,py38,py39,py310,py311,py312,py313}-twisted_latest,
+    {pypy3,py38,py39,py310,py311,py312,py313}-twisted_trunk,
+    twine, check-manifest, flake8, docs, coverage-report
+isolated_build = true
+
+[testenv]
+extras = dev
+deps =
+    coverage
+
+    twisted_lowest: Twisted==22.10.0
+    twisted_latest: Twisted
+    twisted_trunk: https://github.com/twisted/twisted/archive/trunk.zip
+setenv =
+    # Avoid unnecessary network access when creating virtualenvs for speed.
+    VIRTUALENV_NO_DOWNLOAD=1
+    PIP_DISABLE_PIP_VERSION_CHECK=1
+passenv = TERM  # ensure colors
+commands =
+    pip list
+    python -Wall \
+    {envbindir}/coverage run -p \
+    {envbindir}/trial --temp-directory={envtmpdir}/_trial_temp {posargs:treq}
+
+[testenv:mypy]
+basepython = python3.12
+deps =
+    mypy==1.0.1
+    mypy-zope==0.9.1
+    types-requests
+commands =
+    mypy \
+        --cache-dir="{toxworkdir}/mypy_cache" \
+        {tty:--pretty:} \
+        {posargs:src}
+
+[testenv:flake8]
+python = python3.12
+skip_install = True
+deps = flake8
+commands = flake8 src/treq/ docs/examples/
+
+[testenv:towncrier]
+python = python3.12
+deps =
+    towncrier
+commands =
+    towncrier {posargs:--draft}
+
+[testenv:twine]
+python = python3.12
+deps =
+    twine
+commands =
+    twine check {distdir}/*.*
+
+[testenv:check-manifest]
+python = python3.12
+deps =
+    check-manifest
+commands =
+    check-manifest
+
+[testenv:docs]
+extras = docs
+changedir = docs
+basepython = python3.12
+commands =
+    sphinx-build -b html . html
+
+[testenv:coverage-report]
+depends = pypy3,py38,py39,py310,py311,py312
+commands =
+    coverage combine
+    coverage report
+
+[flake8]
+# This is a minimal Black-compatible config.
+# See https://black.readthedocs.io/en/stable/compatible_configs.html#flake8
+max-line-length = 88
+extend-ignore = E203, W503, E266

Reply via email to