All notable changes to this project will be documented in this file.
The format is based on Keep a Changelog, and this project adheres to the Semantic Versioning scheme.
0.9.7 - 2022-03-10
- Fix behavior of async
@response_handler
withAiohttpClient
. (#256)
0.9.6 - 2022-01-24
- Add a new base class,
uplink.retry.RetryBackoff
, which can be extended to implement custom backoff strategies. An instance of aRetryBackoff
subclass can be provided through thebackoff
argument of the@retry
decorator. (#238)
- Bump minimum version of
six
to1.13.0
. (#246)
- Fix
@returns.json
to cast JSON response (or field referenced by thekey
argument) using thetype
argument when the given type is callable. This restores behavior that was inadvertently changed in v0.9.3. (#215) - Remove all usages of
asyncio.coroutine
in the library code to fix warnings related to the function's deprecation in Python 3.8+. (#203)
0.9.5 - 2022-01-04
- Add Python 3.8, 3.9, and 3.10 as officially supported. (#237)
- Python 2.7 support will be removed in v0.10.0.
0.9.4 - 2021-02-15
- A type set as a consumer method's return annotation should not be used to deserialize a response object if no registered converters can handle the type. (3653a672ee)
0.9.3 - 2020-11-22
- Support for serialization using a subclass of pydantic's
BaseModel
that contains fields of a complex type, such asdatetime
. (#207 by @leiserfg) - Support for passing a subclass of pydantic's
BaseModel
as the request body. (#209 by @lust4life)
0.9.2 - 2020-10-18
- Support for (de)serializing subclasses of pydantic's
BaseModel
(#200 by @gmcrocetti)
- Using the
@get
,@post
,@patch
, etc. decorators should retain the docstring of the wrapped method (#198) - The
Body
andPart
argument annotations should support uploading binary data (#180, #183, #204)
0.9.1 - 2020-02-08
- Omit
Header
argument from request when its value isNone
. (#167, #169) - Fix
AttributeError
raised on usage ofuplink.Url
. (#164, #165 by @cognifloyd)
0.9.0 - 2019-06-05
- Create consumer method templates to reduce boilerplate in request definitions. (#151, #159)
Context
argument annotation to pass request-specific information to middleware. (#143, #155)Session.context
property to pass session-specific information to middleware. (#143, #155)- Built-in authentication support for API tokens in the querystring and header, Bearer tokens, and multi-auth. (#137)
- Schema defined using
@returns.*
decorators should override the consumer method's return annotation. (#144, #154) @returns.*
decorators should propagate to all consumer method when used as a class decorator. (#145, #154)- Decorating a
Consumer
subclass no longer affects other subclasses. (#152)
- Rename
uplink.retry.stop.DISABLE
touplink.retry.stop.NEVER
0.8.0 - 2019-02-16
- A
retry
decorator to enable reattempts of failed requests. (#132) - A
ratelimit
decorator to constrain consumers to making some maximum number of calls within a given time period. (#132) Timeout
argument annotation to be able to pass the timeout as a consumer method argument or to inject it as a transaction hook using aConsumer
instance's_inject
method. (#133 by @daa)
Consumer
subclasses now inherit class decorators from theirConsumer
parents, so those decorators are also applied to the subclasses' methods that are decorated with@get
,@post
,@patch
, etc. (#138 by @daa)
- Memory leaks in
RequestsClient
andAiohttpClient
caused by use ofatexit.register
, which was holding references to session objects and preventing the garbage collector from freeing memory reserved for those objects. (#134 by @SakornW)
0.7.0 - 2018-12-06
Consumer.exceptions
property for handling common client exceptions in a client-agnostic way. (#117)- Optional argument
requires_consumer
forresponse_handler
anderror_handler
; when set toTrue
, the registered callback should accept a reference to aConsumer
instance as its leading argument. (#118)
- For a
Query
-annotated argument, aNone
value indicates that the query parameter should be excluded from the request. Previous behavior was to encode the parameter as...?name=None
. To retain this behavior, specify the newencode_none
parameter (i.e.,Query(..., encode_none="None")
). (#126 by @nphilipp)
- Support for changes to
Schema().load
andSchema().dump
inmarshmallow
v3. (#109)
0.6.1 - 2018-9-14
- When the
type
parameter of a function argument annotation, such asQuery
orBody
, is omitted, the type of the annotated argument's value is no longer used to determine how to convert the value before it's passed to the backing client; the argument's value is converted only when itstype
is explicitly set.
0.6.0 - 2018-9-11
- The
session
property to theConsumer
base class, exposing the consumer instance's configuration and allowing for the persistence of certain properties across requests sent from that instance. - The
params
decorator, which when applied to a method of aConsumer
subclass, can add static query parameters to each API call. - The
converters.Factory
base class for defining integrations with other serialization formats and libraries. - The
uplink.install
decorator for registering extensions, such as a customconverters.Factory
implementation, to be applied broadly.
- Issue with detecting
typing.List
andtyping.Dict
for converting collections on Python 3.7. RuntimeWarning
that "ClientSession.close
was never awaited" when usingaiohttp >= 3.0
.
- When using the
marshmallow
integration, Uplink no longer suppressesSchema
validation errors on deserialization; users can now handle these exceptions directly.
0.5.5 - 2018-8-01
- Issue with sending JSON list
Body
using@json
annotation.
0.5.4 - 2018-6-26
- When using
uplink.AiohttpClient
withaiohttp>=3.0
, the underlyingaiohttp.ClientSession
would remain open on program exit.
0.5.3 - 2018-5-31
- Issue where adding two or more response handlers (i.e., functions decorated
with
uplink.response_handler
) to a method caused aTypeError
.
0.5.2 - 2018-5-30
- Applying
returns.json
decorator without arguments should produce JSON responses when the decorated method is lacking a return value annotation.
0.5.1 - 2018-4-10
- Decorator
uplink.returns.model
for specifying custom return type without indicating a specific data deserialization format.
- Have
uplink.Body
decorator accept any type, not just mappings. - Reintroduce the
uplink.returns
decorator.
0.5.0 - 2018-4-06
- Decorators for convenient registration of custom serialization.
(
uplink.dumps
) and deserialization (uplink.loads
) strategies. - Support for setting nested JSON fields with
uplink.Field
anduplink.json
. - Optional
args
parameter to HTTP method decorators (e.g.,uplink.get
) for another Python 2.7-compatible alternative to annotating consumer method arguments with function annotations. - Decorator
uplink.returns.json
for converting HTTP response bodies into JSON objects or custom Python objects. - Support for converting collections (e.g., converting a response body into a list of users).
- Leveraging built-in converters (such as
uplink.converters.MarshmallowConverter
) no longer requires providing the converter when instantiating anuplink.Consumer
subclass, as these converters are now implicitly included.
uplink.response_handler
anduplink.error_handler
properly adopts the name and docstring of the wrapped function.
0.4.1 - 2018-3-10
- Enforce method-level decorators override class-level decorators when they conflict.
0.4.0 - 2018-2-10
- Support for Basic Authentication.
- The
response_handler
decorator for defining custom response handlers. - The
error_handler
decorator for defining custom error handlers. - The
inject
decorator for injecting other kinds of middleware. - The
Consumer._inject
method for adding middleware to a consumer instance. - Support for annotating constructor arguments of a
Consumer
subclass with built-in function annotations likeQuery
andHeader
.
0.3.0 - 2018-1-09
- HTTP HEAD request decorator by @brandonio21.
- Support for returning deserialized response objects using
marshmallow
schemas. - Constructor parameter for
Query
andQueryMap
to support already encoded URL parameters. - Support for using
requests.Session
andaiohttp.ClientSession
instances with theclient
parameter of theConsumer
constructor.
aiohttp
andtwisted
are now optional dependencies/extras.
- Fix for calling a request method with
super
, by @brandonio21. - Fix issue where method decorators would incorrectly decorate inherited request methods.
0.2.2 - 2017-11-23
- Fix for error raised when an object that is not a class is passed into the
client
parameter of theConsumer
constructor, by @kadrach.
0.2.0 - 2017-11-03
- The class
uplink.Consumer
by @itstehkman. Consumer classes should inherit this base. class, and creating consumer instances happens through instantiation. - Support for
asyncio
for Python 3.4 and above. - Support for
twisted
for all supported Python versions.
- BREAKING: Invoking a consumer method now builds and executes the request,
removing the extra step of calling the
execute
method.
- Building consumer instances with
uplink.build
. Instead, Consumer classes should inherituplink.Consumer
.
- Header link for version 0.1.1 in changelog.
0.1.1 - 2017-10-21
- Contribution guide,
CONTRIBUTING.rst
. - "Contributing" Section in README.rst that links to contribution guide.
AUTHORS.rst
file for listing project contributors.- Adopt Contributor Covenant Code of Conduct.
- Replaced tentative contributing instructions in preview notice on documentation homepage with link to contribution guide.
- Python ports for almost all method and argument annotations in Retrofit.
- Adherence to the variation of the semantic versioning scheme outlined in the official Python package distribution tutorial.
- MIT License
- Documentation with introduction, instructions for installing, and quick getting started guide covering the builder and all method and argument annotations.
- README that contains GitHub API v3 example, installation instructions with
pip
, and link to online documentation.