1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
|
# -*- 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
|