Log message:
py-httpx: updated to 0.20.0
0.20.0:
Changed
* The `allow_redirects` flag is now `follow_redirects` and defaults to `False`.
* The `raise_for_status()` method will now raise an exception for any responses
except those with 2xx status codes. Previously only 4xx and 5xx status codes
would result in an exception.
* The low-level transport API changes to the much simpler `response = \
transport.handle_request(request)`.
* The `client.send()` method no longer accepts a `timeout=...` argument, but the
`client.build_request()` does. This required by the signature change of the
Transport API. The request timeout configuration is now stored on the request
instance, as `request.extensions['timeout']`.
Added
* Added the `httpx` command-line client.
* Response instances now include `.is_informational`, `.is_success`, \
`.is_redirect`, `.is_client_error`, and `.is_server_error`
properties for checking 1xx, 2xx, 3xx, 4xx, and 5xx response types. Note that \
the behaviour of `.is_redirect` is slightly different in that it now returns \
True for all 3xx responses, in order to allow for a consistent set of properties \
onto the different HTTP status code types. The `response.has_redirect_location` \
location may be used to determine responses with properly formed URL redirects.
Fixed
* `response.iter_bytes()` no longer raises a ValueError when called on a \
response with no content.
* The `'wsgi.error'` configuration now defaults to `sys.stderr`, and is \
corrected to be a `TextIO` interface, not a `BytesIO` interface. Additionally, \
the WSGITransport now accepts a `wsgi_error` confguration.
* Follow the WSGI spec by properly closing the iterable returned by the application.
|
Log message:
py-httpx: updated to 0.18.1
0.18.1 (29th April, 2021)
Changed
* Update brotli support to use the `brotlicffi` package
* Ensure that `Request(..., stream=...)` does not auto-generate any headers on \
the request instance.
Fixed
* Pass through `timeout=...` in top-level httpx.stream() function.
* Map httpcore transport close exceptions to httpx exceptions.
0.18.0 (27th April, 2021)
The 0.18.x release series formalises our low-level Transport API, introducing \
the base classes `httpx.BaseTransport` and `httpx.AsyncBaseTransport`.
See the "[Writing custom \
transports](https://www.python-httpx.org/advanced/#writing-custom-transports)" \
documentation and the \
[`httpx.BaseTransport.handle_request()`](https://github.com/encode/httpx/blob/397aad98fdc8b7580a5fc3e88f1578b4302c6382/httpx/_transports/base.py#L77-L147) \
docstring for more complete details on implementing custom transports.
Pull request 1522 includes a checklist of differences from the previous \
`httpcore` transport API, for developers implementing custom transports.
The following API changes have been issuing deprecation warnings since 0.17.0 \
onwards, and are now fully deprecated...
* You should now use httpx.codes consistently instead of httpx.StatusCodes.
* Use limits=... instead of pool_limits=....
* Use proxies={"http://": ...} instead of proxies={"http": \
...} for scheme-specific mounting.
Changed
* Transport instances now inherit from `httpx.BaseTransport` or \
`httpx.AsyncBaseTransport`,
and should implement either the `handle_request` method or \
`handle_async_request` method.
* The `response.ext` property and `Response(ext=...)` argument are now named \
`extensions`.
* The recommendation to not use `data=<bytes|str|bytes (a)iterator>` in \
favour of `content=<bytes|str|bytes (a)iterator>` has now been escalated \
to a deprecation warning.
* Drop `Response(on_close=...)` from API, since it was a bit of leaking \
implementation detail.
* When using a client instance, cookies should always be set on the client, \
rather than on a per-request basis. We prefer enforcing a stricter API here \
because it provides clearer expectations around cookie persistence, particularly \
when redirects occur.
* The runtime exception `httpx.ResponseClosed` is now named `httpx.StreamClosed`.
* The `httpx.QueryParams` model now presents an immutable interface. There is a \
discussion on [the design and motivation \
here](https://github.com/encode/httpx/discussions/1599). Use `client.params = \
client.params.merge(...)` instead of `client.params.update(...)`. The basic \
query manipulation methods are `query.set(...)`, `query.add(...)`, and \
`query.remove()`.
Added
* The `Request` and `Response` classes can now be serialized using pickle.
* Handle `data={"key": [None|int|float|bool]}` cases.
* Support `httpx.URL(**kwargs)`, for example \
`httpx.URL(scheme="https", host="www.example.com", \
path="/')`, or `httpx.URL("https://www.example.com/", \
username="tom@gmail.com", password="123 456")`.
* Support `url.copy_with(params=...)`.
* Add `url.params` parameter, returning an immutable `QueryParams` instance.
* Support query manipulation methods on the URL class. These are \
`url.copy_set_param()`, `url.copy_add_param()`, `url.copy_remove_param()`, \
`url.copy_merge_params()`.
* The `httpx.URL` class now performs port normalization, so `:80` ports are \
stripped from `http` URLs and `:443` ports are stripped from `https` URLs.
* The `URL.host` property returns unicode strings for internationalized domain \
names. The `URL.raw_host` property returns byte strings with IDNA escaping \
applied.
Fixed
* Fix Content-Length for cases of `files=...` where unicode string is used as \
the file content.
* Fix some cases of merging relative URLs against `Client(base_url=...)`.
* The `request.content` attribute is now always available except for streaming \
content, which requires an explicit `.read()`.
|
Log message:
py-httpx: updated to 0.15.4
0.15.4
Added
* Support direct comparisons between `Headers` and dicts or lists of two-tuples. \
Eg. `assert response.headers == {"Content-Length": 24}`
Fixed
* Fix automatic `.read()` when `Response` instances are created with \
`content=<str>`
0.15.3
Fixed
* Fixed connection leak in async client due to improper closing of response streams.
0.15.2
Fixed
* Fixed `response.elapsed` property.
* Fixed client authentication interaction with `.stream()`.
0.15.1
Fixed
* ASGITransport now properly applies URL decoding to the `path` component, \
as-per the ASGI spec.
0.15.0
Added
* Added support for curio. (Pull https://github.com/encode/httpcore/pull/168)
* Added support for event hooks.
* Added support for authentication flows which require either sync or async I/O.
* Added support for monitoring download progress with \
`response.num_bytes_downloaded`.
* Added `Request(content=...)` for byte content, instead of overloading \
`Request(data=...)`
* Added support for all URL components as parameter names when using \
`url.copy_with(...)`.
* Neater split between automatically populated headers on `Request` instances, \
vs default `client.headers`.
* Unclosed `AsyncClient` instances will now raise warnings if garbage collected.
* Support `Response(content=..., text=..., html=..., json=...)` for creating \
usable response instances in code.
* Support instantiating requests from the low-level transport API.
* Raise errors on invalid URL types.
Changed
* Cleaned up expected behaviour for URL escaping. `url.path` is now URL escaped.
* Cleaned up expected behaviour for bytes vs str in URL components. \
`url.userinfo` and `url.query` are not URL escaped, and so return bytes.
* Drop `url.authority` property in favour of `url.netloc`, since \
"authority" was semantically incorrect.
* Drop `url.full_path` property in favour of `url.raw_path`, for better \
consistency with other parts of the API.
* No longer use the `chardet` library for auto-detecting charsets, instead \
defaulting to a simpler approach when no charset is specified.
Fixed
* Swapped ordering of redirects and authentication flow.
* `.netrc` lookups should use host, not host+port.
Removed
* The `URLLib3Transport` class no longer exists. We've published it instead as \
an example of [a custom transport \
class](https://gist.github.com/florimondmanca/d56764d78d748eb9f73165da388e546e).
* Drop `request.timer` attribute, which was being used internally to set \
`response.elapsed`.
* Drop `response.decoder` attribute, which was being used internally.
* `Request.prepare()` is now a private method.
* The `Headers.getlist()` method had previously been deprecated in favour of \
`Headers.get_list()`. It is now fully removed.
* The `QueryParams.getlist()` method had previously been deprecated in favour of \
`QueryParams.get_list()`. It is now fully removed.
* The `URL.is_ssl` property had previously been deprecated in favour of \
`URL.scheme == "https"`. It is now fully removed.
* The `httpx.PoolLimits` class had previously been deprecated in favour of \
`httpx.Limits`. It is now fully removed.
* The `max_keepalive` setting had previously been deprecated in favour of the \
more explicit `max_keepalive_connections`. It is now fully removed.
* The verbose `httpx.Timeout(5.0, connect_timeout=60.0)` style had previously \
been deprecated in favour of `httpx.Timeout(5.0, connect=60.0)`. It is now fully \
removed.
* Support for instantiating a timeout config missing some defaults, such as \
`httpx.Timeout(connect=60.0)`, had previously been deprecated in favour of \
enforcing a more explicit style, such as `httpx.Timeout(5.0, connect=60.0)`. \
This is now strictly enforced.
0.14.3
Added
* `http.Response()` may now be instantiated without a `request=...` parameter. \
Useful for some unit testing cases.
* Add `103 Early Hints` and `425 Too Early` status codes.
Fixed
* `DigestAuth` now handles responses that include multiple 'WWW-Authenticate' \
headers.
* Call into transport `__enter__`/`__exit__` or `__aenter__`/`__aexit__` when \
client is used in a context manager style.
0.14.2
Added
* Support `client.get(..., auth=None)` to bypass the default authentication on a \
clients.
* Support `client.auth = ...` property setter.
* Support `httpx.get(..., proxies=...)` on top-level request functions.
* Display instances with nicer import styles. (Eg. <httpx.ReadTimeout ...>)
* Support `cookies=[(key, value)]` list-of-two-tuples style usage.
Fixed
* Ensure that automatically included headers on a request may be modified.
* Allow explicit `Content-Length` header on streaming requests.
* Handle URL quoted usernames and passwords properly.
* Use more consistent default for `HEAD` requests, setting `allow_redirects=True`.
* If a transport error occurs while streaming the response, raise an `httpx` \
exception, not the underlying `httpcore` exception.
* Include the underlying `httpcore` traceback, when transport exceptions occur.
0.14.1
Added
* The `httpx.URL(...)` class now raises `httpx.InvalidURL` on invalid URLs, \
rather than exposing the underlying `rfc3986` exception. If a redirect response \
includes an invalid 'Location' header, then a `RemoteProtocolError` exception is \
raised, which will be associated with the request that caused it.
Fixed
* Handling multiple `Set-Cookie` headers became broken in the 0.14.0 release, \
and is now resolved.
0.14.0
The 0.14 release includes a range of improvements to the public API, intended on \
preparing for our upcoming 1.0 release.
* Our HTTP/2 support is now fully optional. **You now need to use `pip install \
httpx[http2]` if you want to include the HTTP/2 dependancies.**
* Our HSTS support has now been removed. Rewriting URLs from `http` to `https` \
if the host is on the HSTS list can be beneficial in avoiding roundtrips to \
incorrectly formed URLs, but on balance we've decided to remove this feature, on \
the principle of least surprise. Most programmatic clients do not include HSTS \
support, and for now we're opting to remove our support for it.
* Our exception hierarchy has been overhauled. Most users will want to stick \
with their existing `httpx.HTTPError` usage, but we've got a clearer overall \
structure now. See https://www.python-httpx.org/exceptions/ for more details.
When upgrading you should be aware of the following public API changes. Note \
that deprecated usages will currently continue to function, but will issue \
warnings.
* You should now use `httpx.codes` consistently instead of `httpx.StatusCodes`.
* Usage of `httpx.Timeout()` should now always include an explicit default. Eg. \
`httpx.Timeout(None, pool=5.0)`.
* When using `httpx.Timeout()`, we now have more concisely named keyword \
arguments. Eg. `read=5.0`, instead of `read_timeout=5.0`.
* Use `httpx.Limits()` instead of `httpx.PoolLimits()`, and `limits=...` instead \
of `pool_limits=...`.
* The `httpx.Limits(max_keepalive=...)` argument is now deprecated in favour of \
a more explicit `httpx.Limits(max_keepalive_connections=...)`.
* Keys used with `Client(proxies={...})` should now be in the style of \
`{"http://": ...}`, rather than `{"http": ...}`.
* The multidict methods `Headers.getlist()` and `QueryParams.getlist()` are \
deprecated in favour of more consistent `.get_list()` variants.
* The `URL.is_ssl` property is deprecated in favour of `URL.scheme == \
"https"`.
* The `URL.join(relative_url=...)` method is now `URL.join(url=...)`. This \
change does not support warnings for the deprecated usage style.
One notable aspect of the 0.14.0 release is that it tightens up the public API \
for `httpx`, by ensuring that several internal attributes and methods have now \
become strictly private.
The following previously had nominally public names on the client, but were all \
undocumented and intended solely for internal usage. They are all now replaced \
with underscored names, and should not be relied on or accessed.
These changes should not affect users who have been working from the `httpx` \
documentation.
* `.merge_url()`, `.merge_headers()`, `.merge_cookies()`, `.merge_queryparams()`
* `.build_auth()`, `.build_redirect_request()`
* `.redirect_method()`, `.redirect_url()`, `.redirect_headers()`, \
`.redirect_stream()`
* `.send_handling_redirects()`, `.send_handling_auth()`, `.send_single_request()`
* `.init_transport()`, `.init_proxy_transport()`
* `.proxies`, `.transport`, `.netrc`, `.get_proxy_map()`
Some areas of API which were already on the deprecation path, and were raising \
warnings or errors in 0.13.x have now been escalated to being fully removed.
* Drop `ASGIDispatch`, `WSGIDispatch`, which have been replaced by \
`ASGITransport`, `WSGITransport`.
* Drop `dispatch=...`` on client, which has been replaced by `transport=...``
* Drop `soft_limit`, `hard_limit`, which have been replaced by `max_keepalive` \
and `max_connections`.
* Drop `Response.stream` and` `Response.raw`, which have been replaced by \
``.aiter_bytes` and `.aiter_raw`.
* Drop `proxies=<transport instance>` in favor of `proxies=httpx.Proxy(...)`.
Added
* Added dedicated exception class `httpx.HTTPStatusError` for \
`.raise_for_status()` exceptions.
* Added `httpx.create_ssl_context()` helper function.
* Support for proxy exlcusions like \
`proxies={"https://www.example.com": None}`.
* Support `QueryParams(None)` and `client.params = None`.
Changed
* Use `httpx.codes` consistently in favour of `httpx.StatusCodes` which is \
placed into deprecation.
* Usage of `httpx.Timeout()` should now always include an explicit default. Eg. \
`httpx.Timeout(None, pool=5.0)`.
* Switch to more concise `httpx.Timeout()` keyword arguments. Eg. `read=5.0`, \
instead of `read_timeout=5.0`.
* Use `httpx.Limits()` instead of `httpx.PoolLimits()`, and `limits=...` instead \
of `pool_limits=...`.
* Keys used with `Client(proxies={...})` should now be in the style of \
`{"http://": ...}`, rather than `{"http": ...}`.
* The multidict methods `Headers.getlist` and `QueryParams.getlist` are \
deprecated in favour of more consistent `.get_list()` variants.
* `URL.port` becomes `Optional[int]`. Now only returns a port if one is \
explicitly included in the URL string.
* The `URL(..., allow_relative=[bool])` parameter no longer exists. All URL \
instances may be relative.
* Drop unnecessary `url.full_path = ...` property setter.
* The `URL.join(relative_url=...)` method is now `URL.join(url=...)`.
* The `URL.is_ssl` property is deprecated in favour of `URL.scheme == \
"https"`.
Fixed
* Add missing `Response.next()` method.
* Ensure all exception classes are exposed as public API.
* Support multiple items with an identical field name in multipart encodings.
* Skip HSTS preloading on single-label domains.
* Fixes for `Response.iter_lines()`.
* Ignore permission errors when accessing `.netrc` files.
* Allow bare hostnames in `HTTP_PROXY` etc... environment variables.
* Settings `app=...` or `transport=...` bypasses any environment based proxy \
defaults.
* Fix handling of `.base_url` when a path component is included in the base URL.
|