Gentoo Websites Logo
Go to: Gentoo Home Documentation Forums Lists Bugs Planet Store Wiki Get Gentoo!
Bug 934148 - sys-apps/portage-3.0.63-r1: TTYOutStream object has no attribute 'buffer' when used in spyder
Summary: sys-apps/portage-3.0.63-r1: TTYOutStream object has no attribute 'buffer' whe...
Status: CONFIRMED
Alias: None
Product: Portage Development
Classification: Unclassified
Component: Core (show other bugs)
Hardware: All Linux
: Normal normal
Assignee: Portage team
URL:
Whiteboard:
Keywords:
Depends on:
Blocks:
 
Reported: 2024-06-12 14:08 UTC by Fabio Rossi
Modified: 2024-06-12 14:17 UTC (History)
1 user (show)

See Also:
Package list:
Runtime testing required: ---


Attachments

Note You need to log in before you can comment on or make changes to this bug.
Description Fabio Rossi 2024-06-12 14:08:19 UTC
I am trying to use portage python API in spyder, the following simple code 

import portage
p = portage.db[portage.root]["porttree"].dbapi

triggers an exception:


  File /usr/lib/python3.11/site-packages/spyder_kernels/py3compat.py:356 in compat_exec
    exec(code, globals, locals)

  File ~/.config/spyder-py3/temp.py:10
    p = portage.db[portage.root]["porttree"].dbapi

  File /usr/lib/python3.11/site-packages/portage/proxy/objectproxy.py:44 in __getitem__
    return object.__getattribute__(self, "_get_target")()[key]

  File /usr/lib/python3.11/site-packages/portage/__init__.py:807 in _get_target
    return _get_legacy_global(name)

  File /usr/lib/python3.11/site-packages/portage/_legacy_globals.py:41 in _get_legacy_global
    portage.db = portage.create_trees(**kwargs)

  File /usr/lib/python3.11/site-packages/portage/__init__.py:641 in create_trees
    settings = config(

  File /usr/lib/python3.11/site-packages/portage/proxy/objectproxy.py:30 in __call__
    return result(*args, **kwargs)

  File /usr/lib/python3.11/site-packages/portage/package/ebuild/config.py:644 in __init__
    self.repositories = load_repository_config(self)

  File /usr/lib/python3.11/site-packages/portage/repository/config.py:1361 in load_repository_config
    return RepoConfigLoader(repoconfigpaths, settings)

  File /usr/lib/python3.11/site-packages/portage/repository/config.py:1070 in __init__
    writemsg_level(

  File /usr/lib/python3.11/site-packages/portage/util/__init__.py:150 in writemsg_level
    writemsg(msg, noiselevel=noiselevel, fd=fd)

  File /usr/lib/python3.11/site-packages/portage/util/__init__.py:123 in writemsg
    fd = fd.buffer

AttributeError: 'TTYOutStream' object has no attribute 'buffer'


where inside the spyder ipython console I have

In [1]: type(sys.stderr)
Out[1]: spyder_kernels.console.outstream.TTYOutStream

where TTYOutStream is derived from OutStream which is derived from TextIOBase in ipykernel.iostream.py

In a regular ipython console I have

In [1]: type(sys.stderr)
Out[1]: _io.TextIOWrapper


Is this a problem of portage, spyder or ipython?
Comment 1 Zac Medico gentoo-dev 2024-06-12 14:17:35 UTC
It uses the buffer attribute so that it can write raw bytes and avoid unicode encoding issues for non-UTF-8 locales. So, we need TTYOutStream to provide some kind of compatible interface to write bytes, or else for UTF8 locales it should be safe use it as a text stream.