Skip to content

Commit c930f57

Browse files
committed
Rewrite to use modules, clean up code, merged fixes
1 parent 1b8e749 commit c930f57

22 files changed

+1133
-1068
lines changed

Commands/__init__.py

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,16 @@
1+
# import sys
2+
# import imp
3+
4+
# from .create_connection import *
5+
# from .create_diff_scratch import *
6+
# from .enter_credentials import *
7+
# from .load_all_snow_record import *
8+
# from .load_snow_record import *
9+
# from .load_snow_table import *
10+
# from .open_service_now_record import *
11+
# from .refresh_snow_record import *
12+
# from .test_connection import *
13+
14+
# imp.reload('servicenow_sync.commands.test_connection')
15+
16+
# print("different")

Commands/create_connection.py

Lines changed: 37 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,37 @@
1+
from utils import *
2+
import sublime
3+
import sublime_plugin
4+
5+
class CreateConnectionCommand(sublime_plugin.WindowCommand):
6+
settings = dict()
7+
user = ""
8+
dir = ""
9+
10+
def run(self):
11+
if not self.window.folders():
12+
sublime.message_dialog("SNOW Sync Sublime plugin requires an open folder.")
13+
return
14+
else:
15+
self.dir = self.window.folders()[0]
16+
self.window.show_input_panel("Instance Name:", "", self.create_instance, None, None)
17+
18+
return
19+
20+
def create_instance(self, instance):
21+
self.settings['instance'] = instance
22+
23+
self.window.show_input_panel("User Name:", "", self.create_user, None, None)
24+
25+
def create_user(self, user):
26+
self.user = user
27+
self.window.show_input_panel("Password:", "", self.create_pass, None, None)
28+
29+
def create_pass(self, password):
30+
cred = self.user + ":" + password
31+
encoded_cred = base64.encodestring(bytes(cred, "utf-8"))
32+
33+
self.settings['auth'] = "Basic " + encoded_cred.decode("utf-8").replace("\n", "")
34+
save_settings(self.dir, self.settings)
35+
36+
def is_visible(self):
37+
return is_sn(self.window.folders()) is False

Commands/create_diff_scratch.py

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
1+
import sublime
2+
import sublime_plugin
3+
4+
class CreateDiffScratchCommand(sublime_plugin.TextCommand):
5+
def run(self, edit, content):
6+
self.view.insert(edit, 0, content)

Commands/enter_credentials.py

Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,24 @@
1+
from utils import *
2+
import sublime
3+
import sublime_plugin
4+
5+
class EnterCredentialsCommand(sublime_plugin.WindowCommand):
6+
settings = dict()
7+
user = ""
8+
dir = ""
9+
10+
def run(self):
11+
self.dir = self.window.folders()[0]
12+
self.window.show_input_panel("User Name:", "", self.create_user, None, None)
13+
14+
def create_user(self, user):
15+
self.user = user
16+
self.window.show_input_panel("Password:", "", self.create_pass, None, None)
17+
18+
def create_pass(self, password):
19+
cred = self.user + ":" + password
20+
encoded_cred = base64.encodestring(bytes(cred, "utf-8"))
21+
save_setting(self.dir, "auth", "Basic " + encoded_cred.decode("utf-8").replace("\n", ""))
22+
23+
def is_visible(self):
24+
return is_sn(self.window.folders()) is True

Commands/load_all_snow_record.py

Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,25 @@
1+
from utils import *
2+
import sublime
3+
import sublime_plugin
4+
5+
class LoadAllSnowRecordCommand(sublime_plugin.WindowCommand):
6+
this_dirs = []
7+
8+
def run(self, dirs):
9+
self.this_dirs = dirs
10+
self.window.show_input_panel("Enter an encoded query (or leave blank):", "", self.get_records, None, None)
11+
return
12+
13+
14+
def get_records(self, query):
15+
working_dir = self.window.folders()[0]
16+
settings = load_settings(working_dir)
17+
file_dir = self.this_dirs[0]
18+
table_settings = load_settings( file_dir )
19+
20+
load_multiple(settings, table_settings, file_dir, query)
21+
return
22+
23+
24+
def is_visible(self, dirs):
25+
return is_sn(self.window.folders()) and len(dirs) > 0

Commands/load_modified_records.py

Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,21 @@
1+
from utils import *
2+
import sublime
3+
import sublime_plugin
4+
5+
class LoadModifiedRecordCommand(sublime_plugin.WindowCommand):
6+
this_dirs = []
7+
8+
def run(self, dirs):
9+
working_dir = self.window.folders()[0]
10+
settings = load_settings(working_dir)
11+
file_dir = dirs[0]
12+
table_settings = load_settings(file_dir)
13+
query = "sys_customer_update=true"
14+
15+
settings = load_settings(working_dir)
16+
table_settings = load_settings( file_dir )
17+
18+
load_multiple(settings, table_settings, file_dir, query)
19+
20+
def is_visible(self, dirs):
21+
return is_sn(self.window.folders()) and len(dirs) > 0

Commands/load_snow_record.py

Lines changed: 116 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,116 @@
1+
from utils import *
2+
import sublime
3+
import sublime_plugin
4+
5+
class LoadSnowRecordCommand(sublime_plugin.WindowCommand):
6+
items = []
7+
table_settings = {}
8+
working_dir = ''
9+
file_dir = ""
10+
11+
def run(self, dirs):
12+
self.working_dir = self.window.folders()[0]
13+
settings = load_settings(self.working_dir)
14+
self.file_dir = dirs[0]
15+
self.table_settings = load_settings(self.file_dir)
16+
17+
query = ""
18+
19+
if 'query' in self.table_settings:
20+
query = self.table_settings['query']
21+
22+
if settings is not False and self.table_settings is not False:
23+
fields = ['sys_id','sys_updated_on']
24+
25+
if "display" in self.table_settings:
26+
fields.append(self.table_settings["display"])
27+
28+
fields = ",".join(fields);
29+
self.items = get_list(settings, self.table_settings['table'], query, fields)
30+
item_list = []
31+
32+
for item in self.items:
33+
item_list.append([item[self.table_settings['display']], item['sys_id']])
34+
35+
self.window.show_quick_panel(item_list, self.on_done)
36+
37+
def on_done(self, index):
38+
if index != -1:
39+
item = self.items[index]
40+
settings = load_settings(self.working_dir)
41+
42+
if settings is not False and self.table_settings is not False:
43+
record = get_record(settings,self.table_settings['table'],item['sys_id'])
44+
45+
if 'grouped' in self.table_settings:
46+
name_field = self.table_settings['display']
47+
name = record[name_field]
48+
name = re.sub('[^-a-zA-Z0-9_.() ]+', '', name)
49+
grouped_dir = os.path.join(self.file_dir, name)
50+
51+
if os.path.exists(grouped_dir):
52+
grouped_dir = grouped_dir + "_" + record['sys_id']
53+
54+
os.makedirs(grouped_dir)
55+
settings = json.loads('{}')
56+
settings['grouped_child'] = True
57+
settings['id'] = record['sys_id']
58+
save_settings(grouped_dir, settings)
59+
60+
for child in self.table_settings['fields']:
61+
body_field = child['field'];
62+
extension = child['extension']
63+
name = convert_file_name(child['name'] + "." + extension)
64+
file_name = os.path.join(grouped_dir , name)
65+
66+
if os.path.exists(file_name):
67+
if sublime.ok_cancel_dialog("File already exists.\nOverwrite?")==False:
68+
return False
69+
70+
doc = record[body_field]
71+
write_doc_file(file_name, doc)
72+
73+
if 'multi' in self.table_settings:
74+
for child in os.listdir(self.file_dir):
75+
test_path = os.path.join(self.file_dir, child)
76+
if os.path.isdir(test_path):
77+
sub_settings = load_settings(test_path)
78+
body_field = child
79+
name_field = sub_settings['display']
80+
extension = sub_settings['extension']
81+
name = convert_file_name(record[name_field] + "." + extension)
82+
83+
doc = record[body_field]
84+
file_name = os.path.join(self.file_dir, child, name)
85+
86+
if os.path.exists(file_name):
87+
if sublime.ok_cancel_dialog("File already exists.\nOverwrite?") is False:
88+
return False
89+
90+
write_doc_file(file_name, doc)
91+
92+
add_file(test_path, record['sys_id'], name)
93+
94+
else:
95+
body_field = self.table_settings['body_field']
96+
name_field = self.table_settings['display']
97+
extension = self.table_settings['extension']
98+
name = convert_file_name(record[name_field] + "." + extension)
99+
100+
doc = record[body_field]
101+
file_name = os.path.join(self.file_dir, name)
102+
103+
if os.path.exists(file_name):
104+
if sublime.ok_cancel_dialog("File already exists.\nOverwrite?") is False:
105+
return False
106+
107+
write_doc_file(file_name, doc)
108+
109+
add_file(self.file_dir, record['sys_id'], name)
110+
111+
self.window.open_file(os.path.join(self.file_dir, name))
112+
113+
return
114+
115+
def is_visible(self, dirs):
116+
return is_sn(self.window.folders()) and len(dirs) > 0

Commands/load_snow_table.py

Lines changed: 131 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,131 @@
1+
from utils import *
2+
import sublime
3+
import sublime_plugin
4+
5+
class LoadSnowTableCommand(sublime_plugin.WindowCommand):
6+
items = []
7+
folder = ''
8+
display = ''
9+
description = ''
10+
body_field = ''
11+
extension = ''
12+
settings = {}
13+
file_dir = ""
14+
item = {}
15+
table_fields = {}
16+
17+
def run(self):
18+
working_dir = self.window.folders()
19+
app_settings = load_settings(working_dir[0])
20+
print(app_settings)
21+
self.file_dir = working_dir[0]
22+
23+
if app_settings is not False:
24+
self.items = get_tables(app_settings)
25+
item_list = []
26+
27+
for item in self.items:
28+
item_list.append([item['label'], item['name']])
29+
30+
self.window.show_quick_panel(item_list, self.sync_table)
31+
32+
def sync_table(self, index):
33+
if index != -1:
34+
self.item = self.items[index]
35+
name = self.item['name']
36+
37+
self.table_fields = json.loads(table_field_list)
38+
39+
if name in self.table_fields:
40+
if len(self.table_fields[name]) == 1:
41+
self.create_single()
42+
else:
43+
self.create_multi()
44+
else:
45+
self.custom_get_folder_name()
46+
47+
return
48+
49+
def create_single(self):
50+
name = self.item['name']
51+
parent_settings = {}
52+
53+
friendly_name = str.replace(str.lower(self.item['label']), " ", "_") + "s"
54+
os.makedirs(os.path.join(self.file_dir, friendly_name))
55+
56+
parent_settings['table'] = self.item['name']
57+
parent_settings['display'] = 'name'
58+
parent_settings['body_field'] = self.table_fields[name][0]['field']
59+
parent_settings['extension'] = self.table_fields[name][0]['extension']
60+
parent_settings['files'] = {}
61+
62+
save_settings(os.path.join(self.file_dir, friendly_name), parent_settings)
63+
64+
def create_multi(self):
65+
name = self.item['name']
66+
parent_settings = {}
67+
68+
friendly_name = str.replace(str.lower(self.item['label']), " ", "_") + "s"
69+
base_folder = os.path.join(self.file_dir, friendly_name)
70+
os.makedirs(base_folder)
71+
72+
parent_settings['table'] = self.item['name']
73+
parent_settings['display'] = 'name'
74+
parent_settings['multi'] = True
75+
76+
save_settings(base_folder, parent_settings)
77+
78+
for field in self.table_fields[name]:
79+
sub_settings = {}
80+
folder_name = field['field']
81+
sub_folder = os.path.join(base_folder, folder_name)
82+
os.makedirs(sub_folder)
83+
84+
sub_settings['table'] = self.item['name']
85+
sub_settings['display'] = 'name'
86+
sub_settings['body_field'] = field['field']
87+
sub_settings['extension'] = field['extension']
88+
sub_settings['files'] = {}
89+
sub_settings['sub'] = 'true'
90+
91+
save_settings(sub_folder, sub_settings)
92+
93+
def custom_get_folder_name(self):
94+
friendly_name = str.replace(str.lower(self.item['label']), " ", "_")
95+
self.window.show_input_panel("Table Folder Name:", friendly_name + "s", self.custom_create_folder, None, None)
96+
97+
return
98+
99+
def custom_create_folder(self, name):
100+
self.file_dir = os.path.join(self.file_dir, name)
101+
102+
os.makedirs(self.file_dir)
103+
104+
self.settings['table'] = self.item['name']
105+
self.window.show_input_panel("Display Field:", "name", self.custom_get_display_field, None, None)
106+
107+
def custom_get_display_field(self, display):
108+
self.settings['display'] = display
109+
110+
self.window.show_input_panel("Body Field:", "script", self.custom_get_extension, None, None)
111+
return
112+
113+
def custom_get_extension(self, body_field):
114+
self.settings['body_field'] = body_field
115+
116+
self.window.show_input_panel("File Extension:", "js", self.custom_create_settings, None, None)
117+
return
118+
119+
def custom_create_settings(self, extension):
120+
self.settings['extension'] = extension
121+
self.settings['files'] = {}
122+
123+
file_name = os.path.join(self.file_dir, "service-now.json")
124+
f = open(file_name, 'wb')
125+
f.write(bytes(json.dumps(self.settings, indent=4), 'utf-8'))
126+
f.close()
127+
128+
return
129+
130+
def is_visible(self):
131+
return is_sn(self.window.folders())

0 commit comments

Comments
 (0)