You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
{{ message }}
Repository navigation
streamhandler cannot represent streams with an integer as name #80196
Note: these values reflect the state of the issue at the time it was migrated and might not reflect the current state.
Show more details
GitHub fields:
assignee=Noneclosed_at=<Date2019-05-15.18:41:32.541>created_at=<Date2019-02-17.19:20:24.118>labels= ['3.7', '3.8', 'type-bug', 'library']
title='streamhandler cannot represent streams with an integer as name'updated_at=<Date2019-05-15.18:41:32.541>user='https://github.com/xrmx'
When debugging uwsgi logging issues with python3.7 i got this on python 3.7.2:
Traceback (most recent call last):
File "/usr/lib/python3.7/logging/__init__.py", line 269, in _after_at_fork_weak_calls
_at_fork_weak_calls('release')
File "/usr/lib/python3.7/logging/__init__.py", line 261, in _at_fork_weak_calls
method_name, "method:", err, file=sys.stderr)
File "/usr/lib/python3.7/logging/__init__.py", line 1066, in __repr__
name = name +''TypeError: unsupported operand type(s) for +: 'int' and 'str'
AFAICS uwsgi creates sys.stderr as an unbuffered file with PyFile_FromFd() and sets it to sys dict.
So, the failure occurs because the stream has a name attribute which is not a string. Even if sys.stderr itself is an unbuffered file, why is its 'name' attribute not a string? I don't imagine the name would be actually used for I/O, and having it set to an integer is a surprise.
I propose to close this (and the associated PR) unless a good reason is given why we have to support non-string names here.
Yeah, I'm not sure the pr is just papering over the real issue :) Need to check what io.open sets on name. IF it setting the fd as name instead of creating a string that would be still be a bug in Python to me. Could you please wait a bit for me to check that before closing?
That is, when opening a file descriptor the name is set to the value of that file descriptor as an integer.
I see. But I wonder if there is anything that relies on the name being an integer? It seems pretty counter-intuitive for a 'name' attribute to be set to something other than a string.
changed the title [-]streamhandler canont represent streams with an integer as name[/-][+]streamhandler cannot represent streams with an integer as name[/+]on Feb 18, 2019
xrmx commented on Feb 18, 2019
xrmxmannequin
MannequinAuthor
More actions
Looking at Modules/_io/fileio.c::_io_FileIO___init___impl it seems an int for nameobj is just fine. Not sure I am looking at the right code though :)
New changeset ca87eeb by Vinay Sajip (Riccardo Magliocchetti) in branch 'master': bpo-36015: Handle StreamHandler representaton of stream with an integer name (GH-11908) ca87eeb
New changeset 78dd781 by Vinay Sajip (Miss Islington (bot)) in branch '3.7': bpo-36015: Handle StreamHandler representaton of stream with an integer name (GH-11908) (GH-13183) 78dd781
Activity
xrmx commentedon Feb 17, 2019
AFAICS uwsgi creates sys.stderr as an unbuffered file with PyFile_FromFd() and sets it to sys dict.
vsajip commentedon Feb 18, 2019
I'm not sure this is a problem with logging. The code immediately preceding the failure is:
So, the failure occurs because the stream has a name attribute which is not a string. Even if sys.stderr itself is an unbuffered file, why is its 'name' attribute not a string? I don't imagine the name would be actually used for I/O, and having it set to an integer is a surprise.
I propose to close this (and the associated PR) unless a good reason is given why we have to support non-string names here.
xrmx commentedon Feb 18, 2019
Yeah, I'm not sure the pr is just papering over the real issue :) Need to check what io.open sets on name. IF it setting the fd as name instead of creating a string that would be still be a bug in Python to me. Could you please wait a bit for me to check that before closing?
ronaldoussoren commentedon Feb 18, 2019
In Python 3.7.2:
That is, when opening a file descriptor the name is set to the value of that file descriptor as an integer.
BTW. The implementation of PyFile_FromFd is a thin wrapper around the open function.
vsajip commentedon Feb 18, 2019
I see. But I wonder if there is anything that relies on the name being an integer? It seems pretty counter-intuitive for a 'name' attribute to be set to something other than a string.
[-]streamhandler canont represent streams with an integer as name[/-][+]streamhandler cannot represent streams with an integer as name[/+]xrmx commentedon Feb 18, 2019
Looking at Modules/_io/fileio.c::_io_FileIO___init___impl it seems an int for nameobj is just fine. Not sure I am looking at the right code though :)
xrmx commentedon Mar 5, 2019
@vinay Do you have any update on this? thanks
vsajip commentedon Mar 7, 2019
Sorry, Riccardo, been very busy lately and not had time to look at it :-( Soon, I hope.
xrmx commentedon May 7, 2019
Friendly ping, would be helpful to get this resolved for 3.8.0. Thanks!
vsajip commentedon May 7, 2019
New changeset ca87eeb by Vinay Sajip (Riccardo Magliocchetti) in branch 'master':
bpo-36015: Handle StreamHandler representaton of stream with an integer name (GH-11908)
ca87eeb
vsajip commentedon May 15, 2019
New changeset 78dd781 by Vinay Sajip (Miss Islington (bot)) in branch '3.7':
bpo-36015: Handle StreamHandler representaton of stream with an integer name (GH-11908) (GH-13183)
78dd781