stdout might not have an 'encoding' attribute #1099
Labels
No Label
0.2.0
0.3.0
0.4.0
0.5.0
0.5.1
0.6.0
0.6.1
0.7.0
0.8.0
0.9.0
1.0.0
1.1.0
1.10.0
1.10.1
1.10.2
1.10a2
1.11.0
1.12.0
1.12.1
1.13.0
1.14.0
1.15.0
1.15.1
1.2.0
1.3.0
1.4.1
1.5.0
1.6.0
1.6.1
1.7.0
1.7.1
1.7β
1.8.0
1.8.1
1.8.2
1.8.3
1.8β
1.9.0
1.9.0-s3branch
1.9.0a1
1.9.0a2
1.9.0b1
1.9.1
1.9.2
1.9.2a1
LeastAuthority.com automation
blocker
cannot reproduce
cloud-branch
code
code-dirnodes
code-encoding
code-frontend
code-frontend-cli
code-frontend-ftp-sftp
code-frontend-magic-folder
code-frontend-web
code-mutable
code-network
code-nodeadmin
code-peerselection
code-storage
contrib
critical
defect
dev-infrastructure
documentation
duplicate
enhancement
fixed
invalid
major
minor
n/a
normal
operational
packaging
somebody else's problem
supercritical
task
trivial
unknown
was already fixed
website
wontfix
worksforme
No Milestone
No Assignees
2 Participants
Notifications
Due Date
No due date set.
Reference: tahoe-lafs/trac-2024-07-25#1099
Loading…
Reference in New Issue
No description provided.
Delete Branch "%!s(<nil>)"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
Python's
sys.stdout
normally has anencoding
attribute that specifies the name of the output encoding. We depend on this in [stringutils.py]source:src/allmydata/util/stringutils.py@4491#L44.Twisted sometimes replaces
stdout
with its own implementation,StdioOnnaStick
. This happens (optionally) whentwisted.log.startLogging
is called, apparently.As reported by Terrell Russell, this can result in the error
Failed to load application: StdioOnnaStick instance has no attribute 'encoding'.
when starting a Tahoe node.
I don't know why Twisted logging is started on Terrell's machine but not on any of our buildslaves or developer machines, but in any case, it is easy to change stringutils.py to not rely on the existence of
sys.stdout.encoding
(since we have a fallback tolocale.getpreferredencoding()
in that case, and to UTF-8 as a last resort).Twisted bug #1990 is related, but not quite the same bug. It's about
StdioOnnaStick
not supporting Unicode, although the print.patch there looks as though it might fix the problem. That patch has been languishing for 4 years without unit tests, though, and we'd need to work around it in Tahoe anyway.Attachment tolerate-no-stdout-encoding.dpatch (57007 bytes) added
stringutils.py: tolerate sys.stdout having no 'encoding' attribute.
Terrell, please check whether applying this patch solves the problem for you.
Terrell reports that the problem was fixed by applying the patch and/or by upgrading Twisted to 10.0.0 (it was the stock Mac OS X install of Twisted 2.5.0).
to be clear - each of the two solutions worked, independently - the patch, and the Twisted update.
reviewed. applied in changeset:b8df25a8d1b63da1.
This still needs a test, which would mock
sys.stdout
to an object that doesn't have anencoding
attribute.stdout might not have an 'encoding' attributeto stdout might not have an 'encoding' attribute (test needed)(http://tahoe-lafs.org/trac/tahoe-lafs/attachment/ticket/1072/rename-stringutils-drop-open_unicode.dpatch) adds a test of this named
test_get_output_encoding_not_from_stdout
.We're not applying the #1072 patch for 1.7.1 (it's just a cleanup, it doesn't fix anything), but I will extract the test that fixes this ticket.
Attachment test-no-stdout-encoding.dpatch (5690 bytes) added
stringutils: add test for when sys.stdout has no encoding attribute (fixes #1099).
We ended up applying the patch for #1072 (see /tahoe-lafs/trac-2024-07-25/issues/6134#comment:17). The test is at source:src/allmydata/test/test_encodingutil.py@4543#L87 .
stdout might not have an 'encoding' attribute (test needed)to stdout might not have an 'encoding' attribute