Skip to content

Commit

Permalink
Release 3.7.1 (#135)
Browse files Browse the repository at this point in the history
3.7.1 (2024-07-07)
------------------

**Added**
- Official support for Python 3.13
- Support for asynchronous auth callables.
- Support for asynchronous bodies through `AsyncIterable` that yield
either bytes or str.
- Support for purposely excluding a domain/port from connecting to
QUIC/HTTP3 via the `quic_cache_layer` property of `Session`.
  In order to exclude `cloudflare.com` from HTTP3 auto-upgrade:
  ```python
  from niquests import Session

  s = Session()
  s.quic_cache_layer.exclude_domain("cloudflare.com")
  ```

**Fixed**
- auth argument not accepting a function according to static type
checkers. (#133)
- RequestsCookieJar having a lock in `AsyncSession`. Its effect has been
nullified to improve performances.

**Changed**
- urllib3-future lower bound version is raised to 2.8.902

---------

Co-authored-by: MtkN1 <51289448+MtkN1@users.noreply.github.com>
  • Loading branch information
Ousret and MtkN1 authored Jul 7, 2024
1 parent 7cd3bcf commit 2a4397d
Show file tree
Hide file tree
Showing 14 changed files with 223 additions and 91 deletions.
1 change: 1 addition & 0 deletions .github/workflows/run-tests.yml
Original file line number Diff line number Diff line change
Expand Up @@ -37,6 +37,7 @@ jobs:
uses: actions/setup-python@82c7e631bb3cdc910f68e0081d67478d79c6982d # v5.1.0
with:
python-version: ${{ matrix.python-version }}
allow-prereleases: true
cache: 'pip'
- name: Install dependencies
run: |
Expand Down
20 changes: 19 additions & 1 deletion HISTORY.md
Original file line number Diff line number Diff line change
@@ -1,11 +1,29 @@
Release History
===============

3.7.1 (2024-06-??)
3.7.1 (2024-07-07)
------------------

**Added**
- Official support for Python 3.13
This has been tested outside GitHub CI due to httpbin unready state for 3.13[...]
- Support for asynchronous auth callables.
- Support for asynchronous bodies through `AsyncIterable` that yield either bytes or str.
- Support for purposely excluding a domain/port from connecting to QUIC/HTTP3 via the `quic_cache_layer` property of `Session`.
In order to exclude `cloudflare.com` from HTTP3 auto-upgrade:
```python
from niquests import Session

s = Session()
s.quic_cache_layer.exclude_domain("cloudflare.com")
```

**Fixed**
- auth argument not accepting a function according to static type checkers. (#133)
- RequestsCookieJar having a lock in `AsyncSession`. Its effect has been nullified to improve performances.

**Changed**
- urllib3-future lower bound version is raised to 2.8.902

3.7.0 (2024-06-24)
------------------
Expand Down
56 changes: 28 additions & 28 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -12,34 +12,34 @@ Niquests, is the “**Safest**, **Fastest[^10]**, **Easiest**, and **Most advanc
<details>
<summary>👆 <b>Look at the feature table comparison</b> against <i>requests, httpx and aiohttp</i>!</summary>

| Feature | niquests | requests | httpx | aiohttp |
|-------------------------------------|:--------:|:---------:|:-------------:|---------------|
| `HTTP/1.1` |||||
| `HTTP/2` |||[^7] ||
| `HTTP/3 over QUIC` |||||
| `Synchronous` |||||
| `Asynchronous` |||||
| `Thread Safe` |||[^5] | _N/A_[^1] |
| `Task Safe` || _N/A_[^2] |||
| `OS Trust Store` |||||
| `Multiplexing` ||| _Limited_[^3] ||
| `DNSSEC` |[^11] ||||
| `Customizable DNS Resolution` |||||
| `DNS over HTTPS` |||||
| `DNS over QUIC` |||||
| `DNS over TLS` |||||
| `Multiple DNS Resolver` |||||
| `Network Fine Tuning & Inspect` ||| _Limited_[^6] | _Limited_[^6] |
| `Certificate Revocation Protection` |||||
| `Session Persistence` |||||
| `In-memory Certificate CA & mTLS` ||| _Limited_[^4] | _Limited_[^4] |
| `SOCKS 4/5 Proxies` |||||
| `HTTP/HTTPS Proxies` |||||
| `TLS-in-TLS Support` |||||
| `Direct HTTP/3 Negotiation` |[^9] | N/A[^8] | N/A[^8] | N/A[^8] |
| `Happy Eyeballs` |||||
| `Package / SLSA Signed` |||||
| `HTTP/2 with prior knowledge (h2c)` |||||
| Feature | niquests | requests | httpx | aiohttp |
|--------------------------------------------------------------------------|:-------------------------:|:----------------------------------:|:-----------------------------:|----------------------|
| `HTTP/1.1` | | | | |
| `HTTP/2` | | | [^7] | |
| `HTTP/3 over QUIC` | | | | |
| `Synchronous` | | | | |
| `Asynchronous` | | | | |
| `Thread Safe` | | | [^5] | _N/A_[^1] |
| `Task Safe` | | _N/A_[^2] | | |
| `OS Trust Store` | | | | |
| `Multiplexing` | | | _Limited_[^3] | |
| `DNSSEC` | [^11] | | | |
| `Customizable DNS Resolution` | | | | |
| `DNS over HTTPS` | | | | |
| `DNS over QUIC` | | | | |
| `DNS over TLS` | | | | |
| `Multiple DNS Resolver` | | | | |
| `Network Fine Tuning & Inspect` | | | _Limited_[^6] | _Limited_[^6] |
| `Certificate Revocation Protection` | | | | |
| `Session Persistence` | | | | |
| `In-memory Certificate CA & mTLS` | | | _Limited_[^4] | _Limited_[^4] |
| `SOCKS 4/5 Proxies` | | | | |
| `HTTP/HTTPS Proxies` | | | | |
| `TLS-in-TLS Support` | | | | |
| `Direct HTTP/3 Negotiation` | [^9] | N/A[^8] | N/A[^8] | N/A[^8] |
| `Happy Eyeballs` | | | | |
| `Package / SLSA Signed` | | | | |
| `HTTP/2 with prior knowledge (h2c)` | | | | |
</details>

<details>
Expand Down
15 changes: 15 additions & 0 deletions docs/user/advanced.rst
Original file line number Diff line number Diff line change
Expand Up @@ -411,6 +411,7 @@ case you can iterate chunk-by-chunk by calling ``iter_content`` with a ``chunk_s
parameter of ``None``. If you want to set a maximum size of the chunk,
you can set a ``chunk_size`` parameter to any integer.

.. note:: Since Niquests v3.7.1+ we support having async iterable passed down to ``data=...`` via your ``AsyncSession``.

.. _multipart:

Expand Down Expand Up @@ -1280,6 +1281,20 @@ over QUIC.

.. note:: Using a custom DNS resolver can solve the problem as we can probe the HTTPS record for the given hostname and connect directly using HTTP/3 over QUIC.

Prevent a domain from auto-upgrading to HTTP/3
----------------------------------------------

In immediate opposition to the previous section::

from niquests import Session

s = Session()
s.quic_cache_layer.exclude_domain("cloudflare.com")

This will prevent the auto-upgrade to HTTP/3 via the Alt-Svc headers.

.. note:: This is most useful for people that encounter a server that yield its support for HTTP/3 while not able to. This permit to isolate the bad server instead of disabling HTTP/3 session-wide.

Increase the default Alt-Svc cache size
---------------------------------------

Expand Down
2 changes: 1 addition & 1 deletion noxfile.py
Original file line number Diff line number Diff line change
Expand Up @@ -47,7 +47,7 @@ def tests_impl(
)


@nox.session(python=["3.7", "3.8", "3.9", "3.10", "3.11", "3.12", "pypy"])
@nox.session(python=["3.7", "3.8", "3.9", "3.10", "3.11", "3.12", "3.13", "pypy"])
def test(session: nox.Session) -> None:
tests_impl(session)

Expand Down
3 changes: 2 additions & 1 deletion pyproject.toml
Original file line number Diff line number Diff line change
Expand Up @@ -13,7 +13,7 @@ authors = [
{name = "Kenneth Reitz", email = "me@kennethreitz.org"}
]
maintainers = [
{name = "Ahmed R. TAHRI", email="ahmed.tahri@cloudnursery.dev"},
{name = "Ahmed R. TAHRI", email="tahri.ahmed@proton.me"},
]
classifiers = [
"Development Status :: 5 - Production/Stable",
Expand All @@ -30,6 +30,7 @@ classifiers = [
"Programming Language :: Python :: 3.10",
"Programming Language :: Python :: 3.11",
"Programming Language :: Python :: 3.12",
"Programming Language :: Python :: 3.13",
"Programming Language :: Python :: 3 :: Only",
"Programming Language :: Python :: Implementation :: CPython",
"Programming Language :: Python :: Implementation :: PyPy",
Expand Down
4 changes: 2 additions & 2 deletions src/niquests/__version__.py
Original file line number Diff line number Diff line change
Expand Up @@ -9,9 +9,9 @@
__url__: str = "https://niquests.readthedocs.io"

__version__: str
__version__ = "3.7.0"
__version__ = "3.7.1"

__build__: int = 0x030700
__build__: int = 0x030701
__author__: str = "Kenneth Reitz"
__author_email__: str = "me@kennethreitz.org"
__license__: str = "Apache-2.0"
Expand Down
Loading

0 comments on commit 2a4397d

Please sign in to comment.