Skip to content
This repository has been archived by the owner on Feb 20, 2023. It is now read-only.

Version 1.27.0_1 (from brew) crashed when opening url #710

Open
yohannes opened this issue Jan 17, 2020 · 5 comments
Open

Version 1.27.0_1 (from brew) crashed when opening url #710

yohannes opened this issue Jan 17, 2020 · 5 comments
Labels

Comments

@yohannes
Copy link

yohannes commented Jan 17, 2020

Describe the bug
Brew recently released 1.27.0_1 that I think upped the python requirement to version 3.8 if i am not mistaken. However, now rtv will crash whehever it tries to open an url. From the console output, I deduce the crash may have something to do w/ mailcap being not found or something. But, it's there all along. Anyone faces similar issue?

Here's the traceback:

Traceback (most recent call last): File "/usr/local/Cellar/rtv/1.27.0_1/libexec/lib/python3.8/site-packages/rtv/terminal.py", line 458, in open_link command, entry = self.get_mailcap_entry(url) File "/usr/local/Cellar/rtv/1.27.0_1/libexec/lib/python3.8/site-packages/rtv/terminal.py", line 549, in get_mailcap_entry raise exceptions.MailcapEntryNotFound() rtv.exceptions.MailcapEntryNotFound

During handling of the above exception, another exception occurred:

Traceback (most recent call last): File "/usr/local/Cellar/rtv/1.27.0_1/libexec/lib/python3.8/site-packages/rtv/__main__.py", line 255, in main page = page.loop() File "/usr/local/Cellar/rtv/1.27.0_1/libexec/lib/python3.8/site-packages/rtv/page.py", line 97, in loop self.handle_selected_page() File "/usr/local/Cellar/rtv/1.27.0_1/libexec/lib/python3.8/site-packages/rtv/subreddit_page.py", line 43, in handle_selected_page self.selected_page = self.selected_page.loop() File "/usr/local/Cellar/rtv/1.27.0_1/libexec/lib/python3.8/site-packages/rtv/page.py", line 94, in loop self.controller.trigger(ch) File "/usr/local/Cellar/rtv/1.27.0_1/libexec/lib/python3.8/site-packages/rtv/objects.py", line 604, in trigger return func(self.instance, *args, **kwargs) File "/usr/local/Cellar/rtv/1.27.0_1/libexec/lib/python3.8/site-packages/rtv/submission_page.py", line 133, in open_link self.term.open_link(link) File "/usr/local/Cellar/rtv/1.27.0_1/libexec/lib/python3.8/site-packages/rtv/terminal.py", line 460, in open_link self.open_browser(url) File "/usr/local/Cellar/rtv/1.27.0_1/libexec/lib/python3.8/site-packages/rtv/terminal.py", line 615, in open_browser p.start() File "/usr/local/Cellar/python@3.8/3.8.1/Frameworks/Python.framework/Versions/3.8/lib/python3.8/multiprocessing/process.py", line 121, in start self._popen = self._Popen(self) File "/usr/local/Cellar/python@3.8/3.8.1/Frameworks/Python.framework/Versions/3.8/lib/python3.8/multiprocessing/context.py", line 224, in _Popen return _default_context.get_context().Process._Popen(process_obj) File "/usr/local/Cellar/python@3.8/3.8.1/Frameworks/Python.framework/Versions/3.8/lib/python3.8/multiprocessing/context.py", line 283, in _Popen return Popen(process_obj) File "/usr/local/Cellar/python@3.8/3.8.1/Frameworks/Python.framework/Versions/3.8/lib/python3.8/multiprocessing/popen_spawn_posix.py", line 32, in __init__ super().__init__(process_obj) File "/usr/local/Cellar/python@3.8/3.8.1/Frameworks/Python.framework/Versions/3.8/lib/python3.8/multiprocessing/popen_fork.py", line 19, in __init__ self._launch(process_obj) File "/usr/local/Cellar/python@3.8/3.8.1/Frameworks/Python.framework/Versions/3.8/lib/python3.8/multiprocessing/popen_spawn_posix.py", line 47, in _launch reduction.dump(process_obj, fp) File "/usr/local/Cellar/python@3.8/3.8.1/Frameworks/Python.framework/Versions/3.8/lib/python3.8/multiprocessing/reduction.py", line 60, in dump ForkingPickler(file, protocol).dump(obj) AttributeError: Can't pickle local object 'Terminal.open_browser.<locals>.open_url_silent'

Here's the debug info:
rtv version: rtv 1.27.0 rtv module path: /usr/local/Cellar/rtv/1.27.0_1/libexec/lib/python3.8/site-packages/rtv/__main__.py python version: 3.8.1 (default, Dec 27 2019, 18:06:00) [Clang 11.0.0 (clang-1100.0.33.16)] python executable: /usr/local/Cellar/rtv/1.27.0_1/libexec/bin/python3.8 praw version: packaged, commit 1656ec224e57 locale, encoding: C/UTF-8/C/C/C/C, UTF-8 Environment Variables BROWSER : DISPLAY : EDITOR : LANG : PAGER : less RTV_BROWSER : RTV_EDITOR : RTV_PAGER : RTV_URLVIEWER : TERM : xterm-256color VISUAL : XDG_CONFIG_HOME : XDG_DATA_HOME :

Local environment:
OS X Mojave

@yohannes yohannes added the bug label Jan 17, 2020
@yohannes yohannes changed the title Version 1.27.0_1 crashed when opening url Version 1.27.0_1 (from brew) crashed when opening url Jan 17, 2020
@arosl
Copy link

arosl commented Jan 23, 2020

I have the same issue with rtv from brew on macOS Catalina (10.15.2)

@michael-lazar
Copy link
Owner

https://docs.python.org/3.8/library/multiprocessing.html#contexts-and-start-methods

Changed in version 3.8: On macOS, the spawn start method is now the default. The fork start method should be considered unsafe as it can lead to crashes of the subprocess. See bpo-33725.

It looks like you will need to either change the Process(target=open_url_silent, args=(url,)) arguments to be pickle-safe, or configure the multiprocessing module to go back to using forking by default for macOS.

I suggest opening an issue/PR in one of the rtv forks, or submitting a bug report to Homebrew (I don't know if they accept code patches).

@yohannes
Copy link
Author

@michael-lazar I think I am going to forego installing from brew and install it via source. Question is, looking at the setup.py file, can you confirm that these are the 11 dependencies that will be installed?

install_requires = [ 9 'beautifulsoup4', 10 'decorator', 11 'kitchen', 12 'requests >=2.4.0', # https://github.com/michael-lazar/rtv/issues/325 13 'six', 14 ] 15 16 tests_require = [ 17 'coveralls', 18 'pytest>=3.1.0', # Pinned for the ``pytest.param`` method 19 'coverage', 20 'mock', 21 'pylint', 22 'vcrpy', 23 ]

which is quite different from the dependencies if installed view brew:

gdbm openssl@1.1 python@3.8 readline sqlite xz

Can you help to enlighten the reason of the diff between the two?

@michael-lazar
Copy link
Owner

Brew runs a pip install command inside of the formula, so it ends up installing all of the python dependencies directly from the definition in the setup.py file.

https://github.com/Homebrew/homebrew-core/blob/master/Formula/rtv.rb

The test dependencies are not part of a normal installation and will only be installed if you explicitly specify them like this

pip install rtv[test]

@yohannes
Copy link
Author

Thanks @michael-lazar for the pointer.

Sign up for free to subscribe to this conversation on GitHub. Already have an account? Sign in.
Labels
Projects
None yet
Development

No branches or pull requests

3 participants