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

HTTPError fp.read returns string instead of bytes #101936

Closed
gaborbernat opened this issue Feb 15, 2023 · 8 comments
Closed

HTTPError fp.read returns string instead of bytes #101936

gaborbernat opened this issue Feb 15, 2023 · 8 comments
Assignees
Labels
type-bug An unexpected behavior, bug, or error

Comments

@gaborbernat
Copy link
Contributor

gaborbernat commented Feb 15, 2023

Due to https://github.com/python/cpython/pull/99966/files

However, this returns a bytes stream on the live run:

from http import HTTPStatus
from mailbox import Message
from urllib.error import HTTPError
from urllib.request import urlopen

try:
    urlopen("http://asadsad.sd")
except HTTPError as exception:
    content = exception.fp.read()
    print(type(content))

error = HTTPError(url="url", code=HTTPStatus.IM_A_TEAPOT, msg="msg", hdrs=Message(), fp=None)
print(type(error.fp.read()))
<class 'bytes'>
<class 'str'>

Linked PRs

@gaborbernat gaborbernat added the type-bug An unexpected behavior, bug, or error label Feb 15, 2023
@sobolevn
Copy link
Member

cc @corona10

@corona10 corona10 self-assigned this Feb 15, 2023
@corona10
Copy link
Member

corona10 commented Feb 15, 2023

@gaborbernat @sobolevn
Thanks, I will take a look and use this issue through the internal OSS sprint as the good first bug.
I am mentoring them this year Thank you for your understanding!

@longvhdeveloper
Copy link
Contributor

I'll take it

@longvhdeveloper
Copy link
Contributor

longvhdeveloper commented Feb 21, 2023

@corona10 I ran code in live run the code

from mailbox import Message
from urllib.error import HTTPError
from urllib.request import urlopen

try:
    urlopen("http://asadsad.sd")
except HTTPError as exception:
    content = exception.fp.read()
    print(type(content))

error = HTTPError(url="url", code=HTTPStatus.IM_A_TEAPOT, msg="msg", hdrs=Message(), fp=None)
print(type(error.fp.read()))

I checked type of fp

print(exception.fp)

is <class 'http.client.HTTPResponse'>
it is not StringIO, that mean fp is not None. And if you call read() method it will return bytes

raise HTTPError(req.full_url, code, msg, hdrs, fp)

https://docs.python.org/3/library/http.client.html#http.client.HTTPResponse.read

Do I change StringIO to BytesIO when fp is None ?

@gaborbernat
Copy link
Contributor Author

The title is incorrect, should be read returns string instead of bytes when fp is None.

@corona10
Copy link
Member

corona10 commented Feb 21, 2023

@longvhdeveloper

This script might explain better.

from urllib.request import urlopen
from urllib.error import HTTPError

try:
    urlopen("https://httpstat.us/500")
except HTTPError as exception:
    content = exception.fp.read()
    print(type(exception.fp))
    print(type(content))

Do I change StringIO to BytesIO when fp is None ?

Yes please go ahead with nice test code.

@corona10 corona10 changed the title HTTPError fp.read returns bytes instead of string HTTPError fp.read returns string instead of bytes Feb 21, 2023
@corona10
Copy link
Member

The title is incorrect, should be read returns string instead of bytes when fp is None.

Thanks, I modified the title.

corona10 pushed a commit that referenced this issue Feb 21, 2023
…sIO (gh-102100)

Co-authored-by: Long Vo <long.vo@linecorp.com>
miss-islington pushed a commit to miss-islington/cpython that referenced this issue Feb 21, 2023
…o.BytesIO (pythongh-102100)

(cherry picked from commit 0d4c7fc)

Co-authored-by: Vo Hoang Long <vohoanglong07@gmail.com>
Co-authored-by: Long Vo <long.vo@linecorp.com>
miss-islington pushed a commit to miss-islington/cpython that referenced this issue Feb 21, 2023
…o.BytesIO (pythongh-102100)

(cherry picked from commit 0d4c7fc)

Co-authored-by: Vo Hoang Long <vohoanglong07@gmail.com>
Co-authored-by: Long Vo <long.vo@linecorp.com>
corona10 pushed a commit that referenced this issue Feb 22, 2023
…io.BytesIO (gh-102100) (gh-102117)

gh-101936: Update the default value of fp from io.StringIO to io.BytesIO (gh-102100)
(cherry picked from commit 0d4c7fc)

Co-authored-by: Long Vo <long.vo@linecorp.com>
corona10 pushed a commit that referenced this issue Feb 22, 2023
…io.BytesIO (gh-102100) (#102118)

gh-101936: Update the default value of fp from io.StringIO to io.BytesIO (gh-102100)
(cherry picked from commit 0d4c7fc)

Co-authored-by: Long Vo <long.vo@linecorp.com>
@corona10
Copy link
Member

@longvhdeveloper Thank you for your hard work!

carljm added a commit to carljm/cpython that referenced this issue Feb 23, 2023
* main: (76 commits)
  Fix syntax error in struct doc example (python#102160)
  pythongh-99108: Import MD5 and SHA1 from HACL* (python#102089)
  pythonGH-101777: `queue.rst`: use 2 spaces after a period to be consistent. (python#102143)
  Few coverage nitpicks for the cmath module (python#102067)
  pythonGH-100982: Restrict `FOR_ITER_RANGE` to a single instruction to allow instrumentation. (pythonGH-101985)
  pythongh-102135: Update turtle docs to rename wikipedia demo to rosette (python#102137)
  pythongh-99942: python.pc on android/cygwin should link to libpython per configure.ac (pythonGH-100356)
  pythongh-95672 fix typo SkitTest to SkipTest (pythongh-102119)
  pythongh-101936: Update the default value of fp from io.StringIO to io.BytesIO (pythongh-102100)
  pythongh-102008: simplify test_except_star by using sys.exception() instead of sys.exc_info() (python#102009)
  pythongh-101903: Remove obsolete undefs for previously removed macros Py_EnterRecursiveCall and Py_LeaveRecursiveCall (python#101923)
  pythongh-100556: Improve clarity of `or` docs (python#100589)
  pythongh-101777: Make `PriorityQueue` docs slightly clearer (python#102026)
  pythongh-101965: Fix usage of Py_EnterRecursiveCall return value in _bisectmodule.c (pythonGH-101966)
  pythongh-101578: Amend exception docs (python#102057)
  pythongh-101961 fileinput.hookcompressed should not set the encoding value for the binary mode (pythongh-102068)
  pythongh-102056: Fix a few bugs in error handling of exception printing code (python#102078)
  pythongh-102011: use sys.exception() instead of sys.exc_info() in docs where possible (python#102012)
  pythongh-101566: Sync with zipp 3.14. (pythonGH-102018)
  pythonGH-99818: improve the documentation for zipfile.Path and Traversable (pythonGH-101589)
  ...
python-sidebar pushed a commit to python-sidebar/Python-Documentation-Fork-With-TOC that referenced this issue Sep 1, 2024
…o.BytesIO (pythongh-102100)

Co-authored-by: Long Vo <long.vo@linecorp.com>
python-sidebar pushed a commit to python-sidebar/Python-Documentation-Fork-With-TOC that referenced this issue Sep 1, 2024
…o.BytesIO (pythongh-102100)

Co-authored-by: Long Vo <long.vo@linecorp.com>
JelleZijlstra pushed a commit to JelleZijlstra/cpython that referenced this issue Sep 10, 2024
…o.BytesIO (pythongh-102100)

Co-authored-by: Long Vo <long.vo@linecorp.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
type-bug An unexpected behavior, bug, or error
Projects
None yet
Development

No branches or pull requests

4 participants