-
Notifications
You must be signed in to change notification settings - Fork 66
Closed
Description
Describe the bug
When decorating a consumer method with @returns and also including a return annotation, it seems that the return annotation is considered the converter type instead of the type given in the @returns decorator.
To Reproduce
Here's an example that reproduces the issue:
from collections import namedtuple
from marshmallow import Schema, fields, post_load
from typing import List
from uplink import get, post, json, retry, returns, Consumer, Path, Query, Body
Repo = namedtuple("Repo", field_names=["owner", "name"])
class RepoResource(Schema):
"""Schema for GitHub's repository resource."""
full_name = fields.Str()
@post_load
def make_repo(self, data):
"""Decodes the repository resource into a Python object."""
return Repo(*data["full_name"].split("/"))
class GitHub(Consumer):
"""A Python Client for the GitHub API"""
@retry(max_attempts=3)
@returns.json(List[RepoResource])
@get("/users/{user}/repos", args={"user": Path, "sort_by": Query("sort")})
def get_repos(self, user: str, sort_by: str = "created") -> List[Repo]:
"""Get user's public repositories"""
@json
@returns.json(RepoResource)
@post("/user/repos", args={"repo": Body(RepoResource), "access_token": Query})
def create_repo(self, repo: Repo, access_token: str) -> Repo:
"""Create a repository for the authenticated user."""
if __name__ == "__main__":
github = GitHub(base_url="https://api.github.com/")
print(github.get_repos("prkumar"))Expected behavior
The expected behavior here is to
Additional context
It seems that annotating the consumer class with @returns.* also is effected, as expected. We need to make sure that the use case of @returns as the class decorator is also supported.