/
nodeflow.py
68 lines (54 loc) · 1.77 KB
/
nodeflow.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
56
57
58
59
60
61
62
63
64
65
66
67
68
import subprocess, plistlib, os
from os import path
from feedback import Item, feedback
SETTINGS_PATH = 'settings.plist'
NODE_PATH = 'node_path'
class NodeFlow(object):
"""docstring for NodeFlow"""
def __init__(self):
super(NodeFlow, self).__init__()
def has_node(self):
proc = subprocess.Popen(['which', 'node'], stdout = subprocess.PIPE, stderr = subprocess.PIPE)
out = proc.stdout.read()
if out:
return True
else:
return False
def set_node(self, path):
self.add_node_to_evn(path)
self.set(NODE_PATH, path)
def add_node_to_evn(self, path):
os.environ["PATH"] = path + ":" + os.environ["PATH"]
def set(self, key, value, file = SETTINGS_PATH):
if path.isfile(file):
obj = plistlib.readPlist(file)
else:
obj = dict()
obj[key] = value
plistlib.writePlist(obj, file)
def get(self, key, file = SETTINGS_PATH):
if not path.isfile(file):
return None
obj = plistlib.readPlist(file)
return obj.get(key)
def ensure_node(self):
has_node = self.has_node()
if has_node:
return True
else:
node_path = self.get(NODE_PATH)
if node_path == None:
has_node = False
else:
self.add_node_to_evn(node_path)
has_node = self.has_node()
return has_node
def feedback(self, has_node):
if has_node:
title = "Node is available!"
else:
title = "Node is not found, please set its path!"
item = Item(uid="node", valid="no", title=title, icon="nodejs.png")
feedback(item)
def run(self, args):
return subprocess.call(args)