[Install Checker] Added option to show the paths

This commit is contained in:
Salvador E. Tropea 2022-09-07 12:45:02 -03:00
parent 6354ccdd7d
commit 835920810e
3 changed files with 70 additions and 7 deletions

View File

@ -31,6 +31,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
- Option to control the resolution (DPI). (See #259) - Option to control the resolution (DPI). (See #259)
- Option to move the page number to the extension (page_number_as_extension) - Option to move the page number to the extension (page_number_as_extension)
(See #283) (See #283)
- Installation checker: option to show the tool paths.
### Fixed ### Fixed
- OAR computation (Report) (#225) - OAR computation (Report) (#225)

View File

@ -6,6 +6,7 @@
# Project: KiBot (formerly KiPlot) # Project: KiBot (formerly KiPlot)
# #
# This is the installation checker, should help people to detect installation issues and install needed tools # This is the installation checker, should help people to detect installation issues and install needed tools
import argparse
from contextlib import contextmanager from contextlib import contextmanager
import importlib import importlib
import json import json
@ -251,7 +252,7 @@ deps = '{\
"downloader_str": "pytool",\ "downloader_str": "pytool",\
"extra_deb": null,\ "extra_deb": null,\
"help_option": "--version",\ "help_option": "--version",\
"importance": 110002,\ "importance": 110003,\
"in_debian": false,\ "in_debian": false,\
"is_kicad_plugin": false,\ "is_kicad_plugin": false,\
"is_python": false,\ "is_python": false,\
@ -282,6 +283,16 @@ deps = '{\
5\ 5\
]\ ]\
},\ },\
{\
"desc": "Show KiAuto installation information",\
"mandatory": false,\
"output": "info",\
"version": [\
2,\
0,\
0\
]\
},\
{\ {\
"desc": null,\ "desc": null,\
"mandatory": true,\ "mandatory": true,\
@ -797,6 +808,7 @@ if sys.stdout.isatty():
else: else:
RED = GREEN = YELLOW = YELLOW2 = RESET = BRIGHT = NORMAL = '' RED = GREEN = YELLOW = YELLOW2 = RESET = BRIGHT = NORMAL = ''
last_ok = False last_ok = False
last_cmd = None
is_x86 = is_64 = is_linux = False is_x86 = is_64 = is_linux = False
ver_re = re.compile(r'(\d+)\.(\d+)(?:\.(\d+))?(?:[\.-](\d+))?') ver_re = re.compile(r'(\d+)\.(\d+)(?:\.(\d+))?(?:[\.-](\d+))?')
@ -822,6 +834,7 @@ def check_tool_binary_local(name):
def run_command(cmd, only_first_line=False, pre_ver_text=None, no_err_2=False): def run_command(cmd, only_first_line=False, pre_ver_text=None, no_err_2=False):
global last_ok global last_ok
global last_cmd
cmd_full = which(cmd[0]) cmd_full = which(cmd[0])
if not cmd_full: if not cmd_full:
cmd_full = check_tool_binary_python(cmd[0]) cmd_full = check_tool_binary_python(cmd[0])
@ -831,8 +844,10 @@ def run_command(cmd, only_first_line=False, pre_ver_text=None, no_err_2=False):
last_ok = False last_ok = False
return NOT_AVAIL return NOT_AVAIL
cmd[0] = cmd_full cmd[0] = cmd_full
last_cmd = None
try: try:
cmd_output = subprocess.check_output(cmd, stderr=subprocess.DEVNULL) cmd_output = subprocess.check_output(cmd, stderr=subprocess.DEVNULL)
last_cmd = cmd[0]
except FileNotFoundError as e: except FileNotFoundError as e:
last_ok = False last_ok = False
return NOT_AVAIL return NOT_AVAIL
@ -1020,6 +1035,10 @@ def binary_tool(severity, name, url, url_down, deb_package, deb, extra_deb, role
print(RESET) print(RESET)
parser = argparse.ArgumentParser(description='KiBot installation checker')
parser.add_argument('--show-paths', '-p', help='Show paths to tools', action='store_true')
args = parser.parse_args()
# Force iBoM to avoid the use of graphical stuff # Force iBoM to avoid the use of graphical stuff
os.environ['INTERACTIVE_HTML_BOM_NO_DISPLAY'] = 'True' os.environ['INTERACTIVE_HTML_BOM_NO_DISPLAY'] = 'True'
@ -1035,6 +1054,8 @@ system = platform.system()
if system == 'Linux': if system == 'Linux':
linux_version = simple_run_command(['uname', '-a']) linux_version = simple_run_command(['uname', '-a'])
print('Linux: '+linux_version) print('Linux: '+linux_version)
if args.show_paths:
print(' '+str(which('uname')))
os_ok = True os_ok = True
is_x86 = 'x86' in linux_version is_x86 = 'x86' in linux_version
is_64 = ('x86_64' in linux_version) or ('amd64' in linux_version) is_64 = ('x86_64' in linux_version) or ('amd64' in linux_version)
@ -1050,6 +1071,9 @@ else:
py_ok = False py_ok = False
sev = 4 sev = 4
print('Python: '+do_color(sys.version.replace('\n', ' '), sev)) print('Python: '+do_color(sys.version.replace('\n', ' '), sev))
if args.show_paths:
print(' '+os.__file__)
print(' '+str(which('python3')))
# KiCad # KiCad
home = None home = None
try: try:
@ -1107,16 +1131,23 @@ if kicad_version >= (5, 1, 6) and kicad_version < (6, 99):
else: else:
sev = 4 sev = 4
print('KiCad: '+do_color(version, sev)) print('KiCad: '+do_color(version, sev))
if args.show_paths and kicad_ok:
print(' '+pcbnew.__file__)
print(' '+str(which('kicad')))
# KiBot version # KiBot version
try: try:
from kibot.__main__ import __version__ import kibot.__main__
version = kibot.__main__.__version__
kibot_ok = True kibot_ok = True
sev = 0 sev = 0
except: except:
__version__ = NOT_AVAIL version = NOT_AVAIL
kibot_ok = False kibot_ok = False
sev = 4 sev = 4
print('Kibot: '+do_color(__version__, sev)) print('Kibot: '+do_color(version, sev))
if args.show_paths and kibot_ok:
print(' '+kibot.__main__.__file__)
print(' '+str(which('kibot')))
if kibot_ok and which('kibot') is None: if kibot_ok and which('kibot') is None:
print(sev2color(4)+'* KiBot is installed but not available in your PATH') print(sev2color(4)+'* KiBot is installed but not available in your PATH')
import kibot import kibot
@ -1132,6 +1163,7 @@ print(do_bright('\nModules:'))
for name, d in dependencies.items(): for name, d in dependencies.items():
if not d['is_python']: if not d['is_python']:
continue continue
mod = None
try: try:
mod = importlib.import_module(d['module_name']) mod = importlib.import_module(d['module_name'])
if hasattr(mod, '__version__'): if hasattr(mod, '__version__'):
@ -1144,6 +1176,8 @@ for name, d in dependencies.items():
d['sev'] = sev d['sev'] = sev
version = version.split('\n')[0] version = version.split('\n')[0]
print(name+': '+do_color(version, sev, version=ver)) print(name+': '+do_color(version, sev, version=ver))
if args.show_paths and mod:
print(' '+mod.__file__)
print(do_bright('\nTools:')) print(do_bright('\nTools:'))
for name, d in dependencies.items(): for name, d in dependencies.items():
@ -1168,6 +1202,8 @@ for name, d in dependencies.items():
if pypi_name and pypi_name.lower() != name.lower(): if pypi_name and pypi_name.lower() != name.lower():
name += ' ({})'.format(pypi_name) name += ' ({})'.format(pypi_name)
print(name+': '+do_color(version, sev, version=ver)) print(name+': '+do_color(version, sev, version=ver))
if args.show_paths and last_cmd:
print(' '+last_cmd)
# ###################################################################################################################### # ######################################################################################################################
# Recommendations # Recommendations

View File

@ -6,6 +6,7 @@
# Project: KiBot (formerly KiPlot) # Project: KiBot (formerly KiPlot)
# #
# This is the installation checker, should help people to detect installation issues and install needed tools # This is the installation checker, should help people to detect installation issues and install needed tools
import argparse
from contextlib import contextmanager from contextlib import contextmanager
import importlib import importlib
import json import json
@ -34,6 +35,7 @@ if sys.stdout.isatty():
else: else:
RED = GREEN = YELLOW = YELLOW2 = RESET = BRIGHT = NORMAL = '' RED = GREEN = YELLOW = YELLOW2 = RESET = BRIGHT = NORMAL = ''
last_ok = False last_ok = False
last_cmd = None
is_x86 = is_64 = is_linux = False is_x86 = is_64 = is_linux = False
ver_re = re.compile(r'(\d+)\.(\d+)(?:\.(\d+))?(?:[\.-](\d+))?') ver_re = re.compile(r'(\d+)\.(\d+)(?:\.(\d+))?(?:[\.-](\d+))?')
@ -59,6 +61,7 @@ def check_tool_binary_local(name):
def run_command(cmd, only_first_line=False, pre_ver_text=None, no_err_2=False): def run_command(cmd, only_first_line=False, pre_ver_text=None, no_err_2=False):
global last_ok global last_ok
global last_cmd
cmd_full = which(cmd[0]) cmd_full = which(cmd[0])
if not cmd_full: if not cmd_full:
cmd_full = check_tool_binary_python(cmd[0]) cmd_full = check_tool_binary_python(cmd[0])
@ -68,8 +71,10 @@ def run_command(cmd, only_first_line=False, pre_ver_text=None, no_err_2=False):
last_ok = False last_ok = False
return NOT_AVAIL return NOT_AVAIL
cmd[0] = cmd_full cmd[0] = cmd_full
last_cmd = None
try: try:
cmd_output = subprocess.check_output(cmd, stderr=subprocess.DEVNULL) cmd_output = subprocess.check_output(cmd, stderr=subprocess.DEVNULL)
last_cmd = cmd[0]
except FileNotFoundError as e: except FileNotFoundError as e:
last_ok = False last_ok = False
return NOT_AVAIL return NOT_AVAIL
@ -257,6 +262,10 @@ def binary_tool(severity, name, url, url_down, deb_package, deb, extra_deb, role
print(RESET) print(RESET)
parser = argparse.ArgumentParser(description='KiBot installation checker')
parser.add_argument('--show-paths', '-p', help='Show paths to tools', action='store_true')
args = parser.parse_args()
# Force iBoM to avoid the use of graphical stuff # Force iBoM to avoid the use of graphical stuff
os.environ['INTERACTIVE_HTML_BOM_NO_DISPLAY'] = 'True' os.environ['INTERACTIVE_HTML_BOM_NO_DISPLAY'] = 'True'
@ -272,6 +281,8 @@ system = platform.system()
if system == 'Linux': if system == 'Linux':
linux_version = simple_run_command(['uname', '-a']) linux_version = simple_run_command(['uname', '-a'])
print('Linux: '+linux_version) print('Linux: '+linux_version)
if args.show_paths:
print(' '+str(which('uname')))
os_ok = True os_ok = True
is_x86 = 'x86' in linux_version is_x86 = 'x86' in linux_version
is_64 = ('x86_64' in linux_version) or ('amd64' in linux_version) is_64 = ('x86_64' in linux_version) or ('amd64' in linux_version)
@ -287,6 +298,9 @@ else:
py_ok = False py_ok = False
sev = 4 sev = 4
print('Python: '+do_color(sys.version.replace('\n', ' '), sev)) print('Python: '+do_color(sys.version.replace('\n', ' '), sev))
if args.show_paths:
print(' '+os.__file__)
print(' '+str(which('python3')))
# KiCad # KiCad
home = None home = None
try: try:
@ -344,16 +358,23 @@ if kicad_version >= (5, 1, 6) and kicad_version < (6, 99):
else: else:
sev = 4 sev = 4
print('KiCad: '+do_color(version, sev)) print('KiCad: '+do_color(version, sev))
if args.show_paths and kicad_ok:
print(' '+pcbnew.__file__)
print(' '+str(which('kicad')))
# KiBot version # KiBot version
try: try:
from kibot.__main__ import __version__ import kibot.__main__
version = kibot.__main__.__version__
kibot_ok = True kibot_ok = True
sev = 0 sev = 0
except: except:
__version__ = NOT_AVAIL version = NOT_AVAIL
kibot_ok = False kibot_ok = False
sev = 4 sev = 4
print('Kibot: '+do_color(__version__, sev)) print('Kibot: '+do_color(version, sev))
if args.show_paths and kibot_ok:
print(' '+kibot.__main__.__file__)
print(' '+str(which('kibot')))
if kibot_ok and which('kibot') is None: if kibot_ok and which('kibot') is None:
print(sev2color(4)+'* KiBot is installed but not available in your PATH') print(sev2color(4)+'* KiBot is installed but not available in your PATH')
import kibot import kibot
@ -369,6 +390,7 @@ print(do_bright('\nModules:'))
for name, d in dependencies.items(): for name, d in dependencies.items():
if not d['is_python']: if not d['is_python']:
continue continue
mod = None
try: try:
mod = importlib.import_module(d['module_name']) mod = importlib.import_module(d['module_name'])
if hasattr(mod, '__version__'): if hasattr(mod, '__version__'):
@ -381,6 +403,8 @@ for name, d in dependencies.items():
d['sev'] = sev d['sev'] = sev
version = version.split('\n')[0] version = version.split('\n')[0]
print(name+': '+do_color(version, sev, version=ver)) print(name+': '+do_color(version, sev, version=ver))
if args.show_paths and mod:
print(' '+mod.__file__)
print(do_bright('\nTools:')) print(do_bright('\nTools:'))
for name, d in dependencies.items(): for name, d in dependencies.items():
@ -405,6 +429,8 @@ for name, d in dependencies.items():
if pypi_name and pypi_name.lower() != name.lower(): if pypi_name and pypi_name.lower() != name.lower():
name += ' ({})'.format(pypi_name) name += ' ({})'.format(pypi_name)
print(name+': '+do_color(version, sev, version=ver)) print(name+': '+do_color(version, sev, version=ver))
if args.show_paths and last_cmd:
print(' '+last_cmd)
# ###################################################################################################################### # ######################################################################################################################
# Recommendations # Recommendations