Changelog¶
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.7.0 - 2018-12-06¶
Added¶
Changed¶
- 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)
0.6.1 - 2018-9-14¶
Changed¶
- 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¶
Added¶
- 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.
Fixed¶
- 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
.
Changed¶
- When using the
marshmallow
integration, Uplink no longer suppressesSchema
validation errors on deserialization; users can now handle these exceptions directly.
0.5.4 - 2018-6-26¶
Fixed¶
- When using
uplink.AiohttpClient
withaiohttp>=3.0
, the underlyingaiohttp.ClientSession
would remain open on program exit.
0.5.3 - 2018-5-31¶
Fixed¶
- 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¶
Fixed¶
- 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¶
Added¶
- Decorator
uplink.returns.model
for specifying custom return type without indicating a specific data deserialization format.
Fixed¶
- Have
uplink.Body
decorator accept any type, not just mappings. - Reintroduce the
uplink.returns
decorator.
0.5.0 - 2018-4-06¶
Added¶
- 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).
Changed¶
- 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.
Fixed¶
uplink.response_handler
anduplink.error_handler
properly adopts the name and docstring of the wrapped function.
0.4.1 - 2018-3-10¶
Fixed¶
- Enforce method-level decorators override class-level decorators when they conflict.
0.4.0 - 2018-2-10¶
Added¶
- 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¶
Added¶
- 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.
Changed¶
aiohttp
andtwisted
are now optional dependencies/extras.
Fixed¶
- Fix for calling a request method with
super
, by @brandonio21. - Fix issue where method decorators would incorrectly decorate inherited request methods.
0.2.0 - 2017-11-03¶
Added¶
- 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.
Changed¶
- BREAKING: Invoking a consumer method now builds and executes the request,
removing the extra step of calling the
execute
method.
Deprecated¶
- Building consumer instances with
uplink.build
. Instead, Consumer classes should inherituplink.Consumer
.
Fixed¶
- Header link for version 0.1.1 in changelog.
0.1.1 - 2017-10-21¶
Added¶
- 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.
Changed¶
- Replaced tentative contributing instructions in preview notice on documentation homepage with link to contribution guide.
0.1.0 - 2017-10-19¶
Added¶
- 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.