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