Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Day 55-57 results in Type Error for __init__ #53

Closed
salro opened this issue Jan 20, 2021 · 6 comments
Closed

Day 55-57 results in Type Error for __init__ #53

salro opened this issue Jan 20, 2021 · 6 comments
Assignees

Comments

@salro
Copy link

salro commented Jan 20, 2021

Hi.

When I execute program.py for the Day 55-57 example I run into the following Type Error:

File "C:\Users\salro\PycharmProjects\100daysofcode-with-python-course\venv\lib\site-packages\uplink\hooks.py", line 103, in handle_response
response = hook.handle_response(consumer, response)
File "C:\Users\salro\PycharmProjects\100daysofcode-with-python-course\venv\lib\site-packages\uplink\hooks.py", line 20, in wrapper
return hook(*args, **kwargs)
File "C:\Users\salro\PycharmProjects\100daysofcode-with-python-course\venv\lib\site-packages\uplink\returns.py", line 39, in call
return self._strategy(*args, **kwargs)
TypeError: init() takes 1 positional argument but 2 were given

I tried multiple angles I am familiar with but nothing has worked so far.

@bbelderbos
Copy link
Collaborator

@salro I cannot reproduce this error, what version of Python are you using and can you post a pip freeze here?

@mikeckennedy I do hit another issue upon writing a post:

write_post has this line:

    print("Created new post successfully: {}".format(resp.json().get('id')))
    print()

But the response json has 3 items:

(Pdb) resp.json()
[{'id': 'c7081102-e2c9-41ec-8b79-adc1f3469d91', 'published': '2017-02-14', 'view_count': 1231, 'content': "So maybe you've heard about Requests...", 'title': 'Easy Breezy Python HTTP Clients'}, {'id': '82160025-e50d-4993-aef7-dc423677ab05', 'published': '2017-02-08', 'view_count': 10, 'content': "Python's standard urllib2 module provides most of the HTTP capabilities you need, but the API is thoroughly broken. It was built for a different time - and a different web. It requires an enormous amount of work (even method overrides) to perform the simplest of tasks.\n\nThings shouldn't be this way. Not in Python.", 'title': 'Introducing Requests for Python'}, {'id': '0b52ded1-29e4-4368-a41f-5c244cb9f469', 'published': '2017-02-01', 'view_count': 100, 'content': 'Enjoy productive Python, Django, and Web development with PyCharm, an intelligent Python IDE offering unique coding experience...', 'title': 'PyCharm, the Best IDE for Python'}]
(Pdb) len(resp.json())
3

So it fails with:

    print("Created new post successfully: {}".format(resp.json().get('id')))
AttributeError: 'list' object has no attribute 'get'

I can patch it but waiting for @salro's response on the other issue ...

@bbelderbos bbelderbos self-assigned this Jan 20, 2021
@salro
Copy link
Author

salro commented Jan 20, 2021

Hi @bbelderbos .

I am working on Python 3.9 and here is the pip freeze:

certifi==2020.12.5
chardet==4.0.0
idna==3.1
requests==2.25.1
six==1.15.0
uplink==0.9.3
uritemplate==3.0.1
urllib3==1.26.2

Edit: Also tried it on Python 3.6 with the same error.

Thanks for your help.

@bbelderbos
Copy link
Collaborator

@salro yeah with uplink==0.9.3 I am hitting the same issue. Try uplink==0.4.0 which is actually the "pinned" version in the requirements.txt file, then it should work (apart from the new issue on write which I will PR ...)

@bbelderbos
Copy link
Collaborator

bbelderbos commented Jan 20, 2021

Actually I am a bit confused @mikeckennedy, is the blog_client.py complete?

resp = svc.create_new_entry(title, content, view_count) gives me a <Response [200]> which basically retrieves the 3 articles:

1. [1,231 views] Easy Breezy Python HTTP Clients
2. [10 views] Introducing Requests for Python
3. [100 views] PyCharm, the Best IDE for Python

(full JSON output from pdb pasted above)

Could you please check? Thanks

@salro
Copy link
Author

salro commented Jan 20, 2021

@bbelderbos I missed the correct version number for uplink. Thanks for pointing it out and I will use the correct one now.

prkumar added a commit to prkumar/uplink that referenced this issue Feb 7, 2021
In v0.9.3, the `StandardCoverter.create_response_body_converter` was
changed to a pass-through converter: i.e., the method would simply
return the given type as the response converter. This can cause
unintended behavior in the case when the consumer method has a return
annotation that is not handled by any registered converters. In this
case, the converter chain will invoke the standard coverter's behavior,
and try to convert the runtime response by invoking the annotated
type's constructor. This can cause failures that are difficult to debug
for end users, such as talkpython/100daysofcode-with-python-course#53.

This regression was introduced in 89c43d1 (#204).
@mikeckennedy
Copy link
Member

Hi all. I believe this was a bug in 0.9.3 of uplink. We are now at 0.9.4 and it seems to work again as you would expect. Sorry for the trouble. Incoming update in 3, 2, 1, ...

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

3 participants