toolbelt
toolbelt copied to clipboard
Multipart encoder produces type errors when using pylance language server
To reproduce
- Setup visual studio code and install the python extension
- Enable type hinting by adding
"python.analysis.typeCheckingMode": "basic",
To settings.json - Copy and paste the example from the docstring into a file
import requests
from requests_toolbelt.multipart.encoder import MultipartEncoder
encoder = MultipartEncoder({'field': 'value',
'other_field': 'other_value'})
r = requests.post('https://httpbin.org/post', data=encoder,
headers={'Content-Type': encoder.content_type})
- A typing error that is thrown
Argument of type "MultipartEncoder" cannot be assigned to parameter "data" of type "_Data" in function "post"
Type "MultipartEncoder" cannot be assigned to type "_Data"
Type cannot be assigned to type "None"
"MultipartEncoder" is incompatible with "Text"
"MultipartEncoder" is incompatible with "bytes"
"MultipartEncoder" is incompatible with "Mapping[str, Any]"
"__iter__" is not present
"MultipartEncoder" is incompatible with "IO[Any]"PylancereportGeneralTypeIssues
- The current workaround is to add a
# Type: ignore
comment
r = requests.post('https://httpbin.org/post', data=encoder, #type:ignore
headers={'Content-Type': encoder.content_type})
This library has existed long before PEP 485 and those errors are not a priority for us to fix as they do not break and things work as they should. Further the annotations for requests are notoriously wrong
Low priority is no problem, I understand that this isn't a run time issue and if you ignore the warning everything works.
I'm Just reporting a user experience that initially very confusing and making a workaround publically available for anyone who is in a similar situation.
To be clear, images are:
- not searchable
- not readable for visually impaired users
- not a solution
You'd do better for others (assuming a type error in this scenario is actually confusing for them) by pasting actual text that a search on Google or GitHub could find
Fair point, the report has been updated.