-
Notifications
You must be signed in to change notification settings - Fork 3
/
snap.py
55 lines (42 loc) · 1.73 KB
/
snap.py
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
import subprocess
import dotbot
from typing import List, Dict, Union
class Snap(dotbot.Plugin):
_directive = 'snap'
def can_handle(self, directive: str):
return self._directive == directive
def handle(self, directive: str, data: Union[List, Dict]):
if directive != self._directive:
raise ValueError('snap cannot handle directive %s' % directive)
success = True
defaults = self._context.defaults().get(self._directive, {})
if isinstance(data, Dict):
data = [{key: data[key]} if bool(data[key]) else key
for key in data]
for item in data:
classic = defaults.get("classic", False)
channel = defaults.get("channel", "latest/stable")
app = None
if isinstance(item, Dict):
app, options = list(item.items())[0]
if options is not None:
classic = options.get("classic", classic)
channel = options.get("channel", channel)
else:
app = item
try:
command = ['snap install']
if classic:
command.append("--classic")
if channel:
command.append("--channel='%s'" % channel)
command.append(app)
self._log.debug('Using command: %s' % command)
subprocess.run([' '.join(command)], shell=True, check=True)
except subprocess.CalledProcessError:
success = False
if success:
self._log.info('All packages have been installed')
else:
self._log.error('Some packages were not successfully installed')
return success