astrXbian/.install/.kodi/addons/service.xbmc.versioncheck/resources/lib/version_check/shell_handler_apt.py

133 lines
3.9 KiB
Python

# -*- coding: utf-8 -*-
"""
Copyright (C) 2013-2014 Team-XBMC
Copyright (C) 2014-2019 Team Kodi
This file is part of service.xbmc.versioncheck
SPDX-License-Identifier: GPL-3.0-or-later
See LICENSES/GPL-3.0-or-later.txt for more information.
"""
import sys
from .common import log
from .handler import Handler
try:
from subprocess import check_output
except ImportError:
check_output = None
log('ImportError: subprocess')
class ShellHandlerApt(Handler):
""" Apt shell handler
"""
def __init__(self, use_sudo=False):
Handler.__init__(self)
self.sudo = use_sudo
self._update = False
installed, _ = self._check_versions('kodi')
if not installed:
# there is no package installed via repo, so we exit here
log('No installed package found, exiting')
sys.exit(0)
self._update = True
def _check_versions(self, package):
""" Check apt package versions
:param package: package to check
:type package: str
:return: installed version, candidate version
:rtype: str, str / False, False
"""
_cmd = 'apt-cache policy ' + package
if self.update and not self._update_cache():
return False, False
try:
result = check_output([_cmd], shell=True).split('\n')
except Exception as error: # pylint: disable=broad-except
log('ShellHandlerApt: exception while executing shell command %s: %s' % (_cmd, error))
return False, False
if result[0].replace(':', '') == package:
installed = result[1].split()[1]
candidate = result[2].split()[1]
if installed == '(none)':
installed = False
if candidate == '(none)':
candidate = False
return installed, candidate
log('ShellHandlerApt: error during version check')
return False, False
def _update_cache(self):
""" Update apt cache
:return: success of updating apt cache
:rtype: bool
"""
_cmd = 'apt-get update'
try:
if self.sudo:
_ = check_output('echo \'%s\' | sudo -S %s' %
(self._get_password(), _cmd), shell=True)
else:
_ = check_output(_cmd.split())
except Exception as error: # pylint: disable=broad-except
log('Exception while executing shell command %s: %s' % (_cmd, error))
return False
return True
def upgrade_package(self, package):
""" Upgrade apt package
:param package: package to upgrade
:type package: str
:return: success of apt package upgrade
:rtype: bool
"""
_cmd = 'apt-get install -y ' + package
try:
if self.sudo:
_ = check_output('echo \'%s\' | sudo -S %s' %
(self._get_password(), _cmd), shell=True)
else:
_ = check_output(_cmd.split())
log('Upgrade successful')
except Exception as error: # pylint: disable=broad-except
log('Exception while executing shell command %s: %s' % (_cmd, error))
return False
return True
def upgrade_system(self):
""" Upgrade system
:return: success of system upgrade
:rtype: bool
"""
_cmd = 'apt-get upgrade -y'
try:
log('Upgrading system')
if self.sudo:
_ = check_output('echo \'%s\' | sudo -S %s' %
(self._get_password(), _cmd), shell=True)
else:
_ = check_output(_cmd.split())
except Exception as error: # pylint: disable=broad-except
log('Exception while executing shell command %s: %s' % (_cmd, error))
return False
return True