pytest-dev / pytest-dev/execnet
AttributeError: 'ChannelFileWrite' object has no attribute 'encoding'
Personne n'a encore pris cette issue.
- Langage dominant
- Python
- Étoiles
- 102
- Forks
- 47
- Métriques de merge des PR
- Aucune PR mergée en 30 j
Description
When I try to run testsuite for pytest-xdist and both execnet and teamcity-messages are installed few tests fails with errors like:
__________________ TestRemoteControl.test_failures_somewhere ___________________
self = <test_looponfail.TestRemoteControl object at 0x7fffaa00c7c0>
pytester = <Pytester PosixPath('/tmp/pytest-of-marcel/pytest-10/test_failures_somewhere0')>
def test_failures_somewhere(self, pytester: pytest.Pytester) -> None:
item = pytester.getitem("def test_func():\n assert 0\n")
control = RemoteControl(item.config)
control.setup()
> failures = control.runsession()
$(BLDDIR)/testing/test_looponfail.py:126:
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
$(INSTDIR)/usr/lib/python3.9/vendor-packages/xdist/looponfail.py:117: in runsession
return self.channel.receive()
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
self = <Channel id=1 closed>, timeout = None
def receive(self, timeout=None):
"""receive a data item that was sent from the other side.
timeout: None [default] blocked waiting. A positive number
indicates the number of seconds after which a channel.TimeoutError
exception will be raised if no item was received.
Note that exceptions from the remotely executing code will be
reraised as channel.RemoteError exceptions containing
a textual representation of the remote traceback.
"""
itemqueue = self._items
if itemqueue is None:
raise IOError("cannot receive(), channel has receiver callback")
try:
x = itemqueue.get(timeout=timeout)
except self.gateway.execmodel.queue.Empty:
raise self.TimeoutError("no item after %r seconds" % timeout)
if x is ENDMARKER:
itemqueue.put(x) # for other receivers
> raise self._getremoteerror() or EOFError()
E execnet.gateway_base.RemoteError: Traceback (most recent call last):
E File "/usr/lib/python3.9/vendor-packages/execnet/gateway_base.py", line 1088, in executetask
E function(channel, **kwargs)
E File "$(INSTDIR)/usr/lib/python3.9/vendor-packages/xdist/looponfail.py", line 171, in init_worker_session
E config = Config.fromdictargs(option_dict, list(args))
E File "/usr/lib/python3.9/vendor-packages/_pytest/config/__init__.py", line 1110, in fromdictargs
E config.parse(args, addopts=False)
E File "/usr/lib/python3.9/vendor-packages/_pytest/config/__init__.py", line 1346, in parse
E self._preparse(args, addopts=addopts)
E File "/usr/lib/python3.9/vendor-packages/_pytest/config/__init__.py", line 1229, in _preparse
E self.pluginmanager.load_setuptools_entrypoints("pytest11")
E File "/usr/lib/python3.9/vendor-packages/pluggy/_manager.py", line 287, in load_setuptools_entrypoints
E plugin = ep.load()
E File "/usr/lib/python3.9/importlib/metadata.py", line 86, in load
E module = import_module(match.group('module'))
E File "/usr/lib/python3.9/importlib/__init__.py", line 127, in import_module
E return _bootstrap._gcd_import(name[level:], package, level)
E File "<frozen importlib._bootstrap>", line 1030, in _gcd_import
E File "<frozen importlib._bootstrap>", line 1007, in _find_and_load
E File "<frozen importlib._bootstrap>", line 986, in _find_and_load_unlocked
E File "<frozen importlib._bootstrap>", line 680, in _load_unlocked
E File "/usr/lib/python3.9/vendor-packages/_pytest/assertion/rewrite.py", line 168, in exec_module
E exec(co, module.__dict__)
E File "/usr/lib/python3.9/vendor-packages/teamcity/pytest_plugin.py", line 22, in <module>
E from teamcity.common import convert_error_to_string, dump_test_stderr, dump_test_stdout
E File "<frozen importlib._bootstrap>", line 1007, in _find_and_load
E File "<frozen importlib._bootstrap>", line 986, in _find_and_load_unlocked
E File "<frozen importlib._bootstrap>", line 680, in _load_unlocked
E File "/usr/lib/python3.9/vendor-packages/_pytest/assertion/rewrite.py", line 168, in exec_module
E exec(co, module.__dict__)
E File "/usr/lib/python3.9/vendor-packages/teamcity/common.py", line 19, in <module>
E _sys_stdout_encoding = sys.stdout.encoding
E AttributeError: 'ChannelFileWrite' object has no attribute 'encoding'
/usr/lib/python3.9/vendor-packages/execnet/gateway_base.py:749: RemoteError
With teamcity-messages uninstalled these tests pass.
Guide de contribution
Aucun guide de contribution indexé pour ce dépôt
Par où commencer
- Lisez l'issue en entier, puis le guide de contribution du projet.
- Signalez en commentaire que vous la prenez — cela évite que deux personnes fassent le même travail.
- Forkez le dépôt et travaillez sur une branche.
- Ouvrez une pull request qui référence le numéro de l'issue.
Piste de recherche
Reproduisez l’échec avec execnet, pytest-xdist et teamcity-messages installés, en commençant par gateway_base.py de execnet et l’objet ChannelFileWrite dans la trace d’exécution. Examinez teamcity/common.py, où sys.stdout.encoding est lu, puis exécutez les tests pytest-xdist concernés avec et sans teamcity-messages. C’est terminé lorsque le plugin se charge sans cette AttributeError et que les tests réussissent.
Rédigé par le modèle d'indexation à partir du texte de l'issue.
Évaluation
- Stack technique
- python
- Domaine
- distributed-systems
- Type d'issue
- Bug
- Difficulté
- 3/5
- Temps estimé
- 1-2 jours
- Activité
- À l'abandon
- Clarté
- Plutôt claire
- Accessibilité débutants
- 42/100