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.9.7 - 2022-03-10
Fixed
- Fix behavior of async
@response_handlerwithAiohttpClient. (#256)
0.9.6 - 2022-01-24
Added
- Add a new base class,
uplink.retry.RetryBackoff, which can be extended to implement custom backoff strategies. An instance of aRetryBackoffsubclass can be provided through thebackoffargument of the@retrydecorator. (#238)
Changed
- Bump minimum version of
sixto1.13.0. (#246)
Fixed
- Fix
@returns.jsonto cast JSON response (or field referenced by thekeyargument) using thetypeargument when the given type is callable. This restores behavior that was inadvertently changed in v0.9.3. (#215) - Remove all usages of
asyncio.coroutinein the library code to fix warnings related to the function's deprecation in Python 3.8+. (#203)
0.9.5 - 2022-01-04
Added
- Add Python 3.8, 3.9, and 3.10 as officially supported. (#237)
Fixed
Deprecated
- Python 2.7 support will be removed in v0.10.0.
0.9.4 - 2021-02-15
Fixed
- 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
Added
- Support for serialization using a subclass of pydantic's
BaseModelthat contains fields of a complex type, such asdatetime. (#207 by @leiserfg) - Support for passing a subclass of pydantic's
BaseModelas the request body. (#209 by @lust4life)
0.9.2 - 2020-10-18
Added
- Support for (de)serializing subclasses of pydantic's
BaseModel(#200 by @gmcrocetti)
Fixed
- Using the
@get,@post,@patch, etc. decorators should retain the docstring of the wrapped method (#198) - The
BodyandPartargument annotations should support uploading binary data (#180, #183, #204)
0.9.1 - 2020-02-08
Fixed
- Omit
Headerargument from request when its value isNone. (#167, #169) - Fix
AttributeErrorraised on usage ofuplink.Url. (#164, #165 by @cognifloyd)
Changed
0.9.0 - 2019-06-05
Added
- Create consumer method templates to reduce boilerplate in request definitions. (#151, #159)
Contextargument annotation to pass request-specific information to middleware. (#143, #155)Session.contextproperty 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)
Fixed
- 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
Consumersubclass no longer affects other subclasses. (#152)
Changed
- Rename
uplink.retry.stop.DISABLEtouplink.retry.stop.NEVER
0.8.0 - 2019-02-16
Added
- A
retrydecorator to enable reattempts of failed requests. (#132) - A
ratelimitdecorator to constrain consumers to making some maximum number of calls within a given time period. (#132) Timeoutargument annotation to be able to pass the timeout as a consumer method argument or to inject it as a transaction hook using aConsumerinstance's_injectmethod. (#133 by @daa)
Changed
Consumersubclasses now inherit class decorators from theirConsumerparents, so those decorators are also applied to the subclasses' methods that are decorated with@get,@post,@patch, etc. (#138 by @daa)
Fixed
- Memory leaks in
RequestsClientandAiohttpClientcaused 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
Added
Consumer.exceptionsproperty for handling common client exceptions in a client-agnostic way. (#117)- Optional argument
requires_consumerforresponse_handleranderror_handler; when set toTrue, the registered callback should accept a reference to aConsumerinstance as its leading argument. (#118)
Changed
- For a
Query-annotated argument, aNonevalue 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_noneparameter (i.e.,Query(..., encode_none="None")). (#126 by @nphilipp)
Fixed
- Support for changes to
Schema().loadandSchema().dumpinmarshmallowv3. (#109)
0.6.1 - 2018-9-14
Changed
- When the
typeparameter of a function argument annotation, such asQueryorBody, 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 itstypeis explicitly set.
0.6.0 - 2018-9-11
Added
- The
sessionproperty to theConsumerbase class, exposing the consumer instance's configuration and allowing for the persistence of certain properties across requests sent from that instance. - The
paramsdecorator, which when applied to a method of aConsumersubclass, can add static query parameters to each API call. - The
converters.Factorybase class for defining integrations with other serialization formats and libraries. - The
uplink.installdecorator for registering extensions, such as a customconverters.Factoryimplementation, to be applied broadly.
Fixed
- Issue with detecting
typing.Listandtyping.Dictfor converting collections on Python 3.7. RuntimeWarningthat "ClientSession.closewas never awaited" when usingaiohttp >= 3.0.
Changed
- When using the
marshmallowintegration, Uplink no longer suppressesSchemavalidation errors on deserialization; users can now handle these exceptions directly.
0.5.5 - 2018-8-01
Fixed
- Issue with sending JSON list
Bodyusing@jsonannotation.
0.5.4 - 2018-6-26
Fixed
- When using
uplink.AiohttpClientwithaiohttp>=3.0, the underlyingaiohttp.ClientSessionwould 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.jsondecorator 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.modelfor specifying custom return type without indicating a specific data deserialization format.
Fixed
- Have
uplink.Bodydecorator accept any type, not just mappings. - Reintroduce the
uplink.returnsdecorator.
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.Fieldanduplink.json. - Optional
argsparameter 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.jsonfor 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.Consumersubclass, as these converters are now implicitly included.
Fixed
uplink.response_handleranduplink.error_handlerproperly 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_handlerdecorator for defining custom response handlers. - The
error_handlerdecorator for defining custom error handlers. - The
injectdecorator for injecting other kinds of middleware. - The
Consumer._injectmethod for adding middleware to a consumer instance. - Support for annotating constructor arguments of a
Consumersubclass with built-in function annotations likeQueryandHeader.
0.3.0 - 2018-1-09
Added
- HTTP HEAD request decorator by @brandonio21.
- Support for returning deserialized response objects using
marshmallowschemas. - Constructor parameter for
QueryandQueryMapto support already encoded URL parameters. - Support for using
requests.Sessionandaiohttp.ClientSessioninstances with theclientparameter of theConsumerconstructor.
Changed
aiohttpandtwistedare 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.2 - 2017-11-23
Fixed
- Fix for error raised when an object that is not a class is passed into the
clientparameter of theConsumerconstructor, by @kadrach.
0.2.0 - 2017-11-03
Added
- The class
uplink.Consumerby @itstehkman. Consumer classes should inherit this base class, and creating consumer instances happens through instantiation. - Support for
asynciofor Python 3.4 and above. - Support for
twistedfor all supported Python versions.
Changed
- BREAKING: Invoking a consumer method now builds and executes the request,
removing the extra step of calling the
executemethod.
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.md that links to contribution guide.
AUTHORS.rstfile 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.