[tor-commits] [nyx/master] Detect package manager in case of not finding pkg python-stem

atagar at torproject.org atagar at torproject.org
Tue Nov 19 01:19:16 UTC 2019


commit d25cdcf37bc53a4d095378a04f8e188fd83a3674
Author: Bounteous <bounteous17 at protonmail.com>
Date:   Mon Nov 18 20:22:45 2019 +0100

    Detect package manager in case of not finding pkg python-stem
---
 nyx/__init__.py | 78 +++++++++++++++++++++++++++++++++++++++++----------------
 1 file changed, 57 insertions(+), 21 deletions(-)

diff --git a/nyx/__init__.py b/nyx/__init__.py
index f58a33d..0418567 100644
--- a/nyx/__init__.py
+++ b/nyx/__init__.py
@@ -49,15 +49,63 @@ import platform
 import sys
 import threading
 import time
+import shutil
+
+def is_available(command):
+   return shutil.which(command) if True else False
+
+class PkgManagers:
+  ARCHLINUX = 'pacman'
+  GENTOO = 'emerge'
+  DEBIAN = 'apt'
+  DEBIAN_OLD = 'apt-get'
+  RED_HAT = 'yum'
+  PIP = 'pip'
+
+
+try:
+  import stem
+  import stem.connection
+  import stem.control
+  import stem.util.conf
+  import stem.util.connection
+  import stem.util.log
+  import stem.util.system
+  import stem.util.tor_tools
+except ImportError as exc:
+  if isinstance(exc, ModuleNotFoundError) and str(exc) == "No module named 'stem'":
+    missing_pkg_name = 'python-stem'
+    pkg_manager_not_found = False
+    if is_available(PkgManagers.DEBIAN):
+      pkg_install_procedure = PkgManagers.DEBIAN + ' install'
+    elif is_available(PkgManagers.DEBIAN_OLD):
+      pkg_install_procedure = PkgManagers.DEBIAN_OLD + ' install'
+    elif is_available(PkgManagers.GENTOO):
+      missing_pkg_name = 'net-libs/stem'
+      pkg_install_procedure = PkgManagers.GENTOO + ' --ask'
+    elif is_available(PkgManagers.RED_HAT):
+      pkg_install_procedure = PkgManagers.RED_HAT + ' install'
+    elif is_available(PkgManagers.ARCHLINUX):
+      pkg_install_procedure = PkgManagers.ARCHLINUX + ' -Syu'
+    elif is_available(PkgManagers.PIP):
+      missing_pkg_name = 'stem'
+      pkg_install_procedure = PkgManagers.PIP + ' install'
+    else:
+      pkg_manager_not_found = True
+      pkg_install_procedure = ', you can find it at https://stem.torproject.org/download.html'
+    
+    require_message = 'nyx requires python-stem'
+    if pkg_manager_not_found:
+      final_message = require_message + pkg_install_procedure
+    else:
+      final_message = require_message + ', try running:\n\nsudo ' + pkg_install_procedure + ' ' + missing_pkg_name + '\n'
+
+    print(final_message)
+  else:
+    print('Unable to start nyx: %s' % exc)
+
+  sys.exit(1)
 
-import stem
-import stem.connection
-import stem.control
-import stem.util.conf
-import stem.util.connection
-import stem.util.log
-import stem.util.system
-import stem.util.tor_tools
 
 SQLITE_UNAVAILABLE = """\
 Python's sqlite3 module is unavailable. Unfortunately some platforms
@@ -114,7 +162,6 @@ def conf_handler(key, value):
   if key == 'redraw_rate':
     return max(1, value)
 
-
 CONFIG = stem.util.conf.config_dict('nyx', {
   'confirm_quit': True,
   'redraw_rate': 5,
@@ -175,18 +222,7 @@ def main():
   try:
     nyx.starter.main()
   except ImportError as exc:
-    if exc.message == 'No module named stem':
-      if stem.util.system.is_available('pip'):
-        advice = ", try running 'sudo pip install stem'"
-      elif stem.util.system.is_available('apt-get'):
-        advice = ", try running 'sudo apt-get install python-stem'"
-      else:
-        advice = ', you can find it at https://stem.torproject.org/download.html'
-
-      print('nyx requires stem' + advice)
-    else:
-      print('Unable to start nyx: %s' % exc)
-
+    print('Unable to start nyx: %s' % exc)
     sys.exit(1)
 
 





More information about the tor-commits mailing list