Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #!/usr/bin/env python2.7
- #
- # Copyright 2010 shadowx <georgi.kolev@gmail.com>
- #
- # This program is free software; you can redistribute it and/or modify
- # it under the terms of the GNU General Public License as published by
- # the Free Software Foundation; either version 2 of the License, or
- # (at your option) any later version.
- #
- # This program is distributed in the hope that it will be useful,
- # but WITHOUT ANY WARRANTY; without even the implied warranty of
- # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- # GNU General Public License for more details.
- #
- # You should have received a copy of the GNU General Public License
- # along with this program; if not, write to the Free Software
- # Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
- # MA 02110-1301, USA.
- confFile = '/etc/xpqt.conf'
- import os
- import sys
- import time
- import pickle
- import subprocess
- import ConfigParser
- import gtk, gtk.glade
- import pygtk
- pygtk.require("2.0")
- import gobject
- try:
- import pg
- except:
- print 'pg modul not found. quiting!'
- sys.exit(1)
- try:
- import keybinder
- except:
- print 'keybinder not found. skipping.'
- keyb = False
- else:
- keyb = True
- class InfoWindow:
- def __init__(self, mainDict, boxList, swList):
- builder = gtk.Builder()
- builder.add_from_file("gui/info.xml")
- builder.connect_signals(self)
- self.mainDict = mainDict
- self.boxList = boxList
- self.swList = swList
- global lback, lastupdate
- self.main = builder.get_object("window1")
- self.lastupdate = builder.get_object('label7')
- self.lastupdate.set_text(lastupdate)
- self.lastbackup = builder.get_object('label8')
- self.lastbackup.set_text(lback)
- self.totalcount = builder.get_object('label9')
- self.totalcount.set_text("%s [%s/%s]" % (len(self.mainDict),
- len(self.boxList), len(self.swList)))
- self.main.show()
- class SettingsWindow:
- def __init__(self):
- global hotkey, bfile, dbhost
- global dbname, dbuser, dbpass
- builder = gtk.Builder()
- builder.add_from_file("gui/settings.xml")
- builder.connect_signals(self)
- self.main = builder.get_object("window1")
- self.hkey = builder.get_object('entry1')
- self.hkey.set_text(hotkey)
- self.bfile = builder.get_object('entry2')
- self.bfile.set_text(bfile)
- self.dbhost = builder.get_object('entry3')
- self.dbhost.set_text(dbhost)
- self.dbname = builder.get_object('entry4')
- self.dbname.set_text(dbname)
- self.dbuser = builder.get_object('entry5')
- self.dbuser.set_text(dbuser)
- self.dbpass = builder.get_object('entry6')
- self.dbpass.set_text(dbpass)
- self.main.show()
- def click_cancel(self, *dummy):
- self.main.destroy()
- def click_ok(self, *dummy):
- global hotkey, bfile, dbhost
- global dbname, dbuser, dbpass
- hotkey = self.hkey.get_text().strip()
- bfile = self.bfile.get_text().strip()
- dbhost = self.dbhost.get_text().strip()
- dbname = self.dbname.get_text().strip()
- dbuser = self.dbuser.get_text().strip()
- dbpass = self.dbpass.get_text().strip()
- save_settings()
- self.main.destroy()
- class AboutWindow:
- def __init__(self):
- builder = gtk.Builder()
- builder.add_from_file("gui/about.xml")
- builder.connect_signals(self)
- self.main = builder.get_object("aboutdialog1")
- self.main.show()
- def click_cancel(self, *dummy):
- self.main.destroy()
- class EditWindow:
- def __init__(self, ln, mainWindow, mainDict):
- if ln == None:
- return
- self.ln = ln
- self.mainWindow = mainWindow
- builder = gtk.Builder()
- builder.add_from_file("gui/edit.xml")
- builder.connect_signals(self)
- self.hidden_p = False
- self.ln = self.ln.strip()
- self.main = builder.get_object("window1")
- self.boxname = builder.get_object('entry1')
- self.boxname.set_text(self.ln.strip())
- self.ipaddr = builder.get_object('entry2')
- self.ipaddr.set_text(mainDict[self.ln][0].strip())
- self.bipaddr = builder.get_object('entry3')
- self.bipaddr.set_text(mainDict[self.ln][1].strip())
- self.usr = builder.get_object('entry4')
- self.usr.set_text(mainDict[self.ln][2].strip())
- self.grp = builder.get_object('entry6')
- self.grp.set_text(mainDict[self.ln][-1].strip())
- self.pas = builder.get_object('entry5')
- self.pas.set_text(dpswd(mainDict[self.ln][3].strip()))
- self.spas = builder.get_object('entry7')
- self.spas.set_text(mainDict[self.ln][7].strip())
- self.cport = builder.get_object('entry8')
- self.cport.set_text(mainDict[self.ln][9].strip())
- # su
- self.su1 = builder.get_object('radiobutton1')
- self.su2 = builder.get_object('radiobutton2')
- if mainDict[self.ln][5].lower()[0] == 't':
- self.su1.set_active(True)
- else: self.su2.set_active(True)
- # dev type
- self.d1 = builder.get_object('radiobutton3')
- self.d2 = builder.get_object('radiobutton4')
- if mainDict[self.ln][4].lower() == 'switch':
- self.d2.set_active(True)
- else: self.d1.set_active(True)
- # conn type
- self.c1 = builder.get_object('radiobutton5')
- self.c2 = builder.get_object('radiobutton6')
- if mainDict[self.ln][6].lower()[0] == 's':
- self.c1.set_active(True)
- else: self.c2.set_active(True)
- self.main.show()
- def on_ssh_change(self, *dummy):
- if self.c1.get_active():
- self.cport.set_text('23')
- elif self.c2.get_active():
- self.cport.set_text('22')
- def click_hidden(self, *dummy):
- if self.hidden_p:
- self.pas.set_visibility(False)
- self.spas.set_visibility(False)
- self.hidden_p = False
- else:
- self.pas.set_visibility(True)
- self.spas.set_visibility(True)
- self.hidden_p = True
- def click_edit(self, *dummy):
- if self.d1.get_active():
- self.dtype = 'server'
- else:
- self.dtype = 'switch'
- if self.c1.get_active():
- self.ct = 'ssh'
- else:
- self.ct = 'telnet'
- if len(self.spas.get_text()) < 1:
- self.spas_val.set_text('0')
- _sql1 = "DELETE from xpqt WHERE boxname = '%s';" % self.ln.strip()
- _sql2 = """INSERT INTO xpqt(boxname, ipaddr, bipaddr, usr, pas, grp,
- su, supas, cport, conntype, dtype)
- VALUES ('%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s',
- '%s', '%s', '%s');""" % (self.boxname.get_text(),
- self.ipaddr.get_text(), self.bipaddr.get_text(),
- self.usr.get_text().strip(), pswd(self.pas.get_text()),
- self.grp.get_text().strip(), str(self.c2.get_active()),
- pswd(self.spas.get_text()), self.cport.get_text(),
- self.ct, self.dtype)
- mSQL = [_sql1, _sql2]
- sqls(mSQL)
- self.main.destroy()
- return self.mainWindow.click_refresh()
- def on_cancel(self, *dummy):
- self.main.destroy()
- class AddWindow:
- def __init__(self, mainWindow):
- builder = gtk.Builder()
- builder.add_from_file("gui/add_new.xml")
- builder.connect_signals(self)
- self.mainWindow = mainWindow
- self.main = builder.get_object("window1")
- self.boxname = builder.get_object('entry1')
- self.ipaddr = builder.get_object('entry2')
- self.bipaddr = builder.get_object('entry3')
- self.usr = builder.get_object('entry4')
- self.usr.set_text('root')
- self.pas = builder.get_object('entry5')
- self.spas = builder.get_object('entry7')
- self.cport = builder.get_object('entry8')
- self.cport.set_text('22')
- self.group = builder.get_object('entry6')
- self.group.set_text('default')
- self.su1 = builder.get_object('radiobutton1')
- self.su2 = builder.get_object('radiobutton2')
- self.d1 = builder.get_object('radiobutton3')
- self.d2 = builder.get_object('radiobutton4')
- self.c1 = builder.get_object('radiobutton5')
- self.c2 = builder.get_object('radiobutton6')
- self.main.show()
- def click_port(self, *dummy):
- return
- def on_ssh_change(self, *dummy):
- if self.c1.get_active():
- self.cport.set_text('23')
- elif self.c2.get_active():
- self.cport.set_text('22')
- def click_add(self, *dummy):
- self.pas_val = self.pas.get_text()
- self.usr_val = self.usr.get_text()
- self.spas_val = self.spas.get_text()
- self.group_val = self.group.get_text()
- self.cport_val = self.cport.get_text()
- self.ipaddr_val = self.ipaddr.get_text()
- self.boxname_val = self.boxname.get_text()
- self.bipaddr_val = self.bipaddr.get_text()
- if len(self.spas_val) < 1:
- self.spas_val = '0'
- if self.c1.get_active():
- self.suv = True
- else:
- self.suv = False
- if self.d1.get_active():
- self.dev = 'server'
- else:
- self.dev = 'switch'
- if self.c1.get_active():
- self.ctype = 'ssh'
- else:
- self.ctype = 'telnet'
- _sql = """INSERT INTO xpqt(boxname, ipaddr, bipaddr, usr, pas, su,
- supas, cport, conntype, dtype, grp)
- VALUES ('%s', '%s', '%s', '%s', '%s', '%s',
- '%s', '%s', '%s', '%s', '%s');""" % (
- self.boxname_val, self.ipaddr_val, self.bipaddr_val,
- self.usr_val, pswd(self.pas_val), str(self.suv),
- pswd(self.spas_val), self.cport_val, self.ctype,
- self.dev, self.group_val
- )
- sqls([_sql,])
- self.main.destroy()
- return self.mainWindow.click_refresh()
- def on_cancel(self, *dummy):
- self.main.destroy()
- class MainWindow:
- def __init__(self):
- global boxList, swList, \
- mainDict, lastupdate, grpList
- self.ln = None
- self.mainDict = mainDict
- self.boxList = boxList
- self.swList = swList
- self.grpList = grpList
- self.shittyDict = {}
- builder = gtk.Builder()
- builder.add_from_file("gui/main.xml")
- builder.connect_signals(self)
- #connect the signals to the callbacks
- #self.main.signal_autoconnect(self)
- self.main = builder.get_object("window1")
- self.grp = builder.get_object('treeview1')
- #load the data into a ListStore
- self.tree()
- # Connect button
- self.cbutton = builder.get_object('button1')
- self.cbutton.hide()
- # Labels
- self.proto_label = builder.get_object('label7')
- self.dev_label = builder.get_object('label8')
- self.su_label = builder.get_object('label9')
- self.boxname = builder.get_object('label10')
- self.ipaddr = builder.get_object('label11')
- self.bipaddr = builder.get_object('label12')
- self.clipspace = builder.get_object('label10')
- self.group_label = builder.get_object('label14')
- self.port_label = builder.get_object('label16')
- # Progress bar
- self.pbar = builder.get_object('progressbar1')
- self.pbar.hide()
- # Protocol
- self.protocol = list()
- self.protocol.append(builder.get_object('radiobutton1'))
- self.protocol.append(builder.get_object('radiobutton2'))
- # Device type
- self.dtype = list()
- self.dtype.append(builder.get_object('radiobutton3'))
- self.dtype.append(builder.get_object('radiobutton4'))
- # su
- self.su = list()
- self.su.append(builder.get_object('radiobutton5'))
- self.su.append(builder.get_object('radiobutton6'))
- self.shown = False
- # Show main window
- #self.main.show()
- self.clipspace.connect('populate-popup', self.clip_me)
- # Catch close ( 'x' ) button
- self.main.connect("delete-event", self.delete_event)
- def delete_event(self, *widget):
- self.hide()
- return True
- def tree(self):
- global boxList, swList, grpList
- for col in self.grp.get_columns():
- self.grp.remove_column(col)
- C_DATA_COLUMN_NUMBER_IN_MODEL = 0
- cell0 = gtk.CellRendererText()
- col0 = gtk.TreeViewColumn("Devices", cell0,
- text=C_DATA_COLUMN_NUMBER_IN_MODEL)
- self.grp.append_column(col0)
- # set model (i.e. the data it contains. We assume this is not done via glade.)
- store = gtk.TreeStore(gobject.TYPE_STRING)
- store.clear()
- treestore = gtk.TreeStore(str,str)
- treestore.set_sort_column_id(1,gtk.SORT_ASCENDING)
- treestore.clear()
- n = 0
- for somegroup in grpList:
- piter = treestore.append(None, [somegroup, None])
- z = 0
- for bx in self.mainDict:
- if self.mainDict[bx][-1].strip() == somegroup:
- print bx
- self.shittyDict[str(str(n) + "_" + str(z))] = bx
- treestore.append(piter, [bx, None])
- z += 1
- n += 1
- self.grp.set_model(treestore)
- # set the selection option so that only one row can be selected
- sel = self.grp.get_selection()
- sel.set_mode(gtk.SELECTION_SINGLE)
- # Set reorderable
- self.grp.set_reorderable(False)
- def click_settings(self, *dummy):
- SettingsWindow()
- def click_save(self, parent):
- if save_backup():
- msg_string = 'Backup file saved.'
- msg_type = gtk.MESSAGE_INFO
- else:
- msg_string = 'Error while saving backup file:\n%s' % bfile
- msg_type = gtk.MESSAGE_ERROR
- mw = gtk.MessageDialog(
- parent = None,
- flags = 0,
- type = msg_type,
- buttons = gtk.BUTTONS_CLOSE,
- message_format = msg_string)
- mw.show()
- mw.connect('response', self.resp)
- def resp(self, dummy, dummy2):
- dummy.destroy()
- def click_remove(self, widget, response_id):
- try: self.ln.split()[0]
- except: pass
- if response_id == gtk.RESPONSE_OK:
- _sql = "DELETE FROM xpqt WHERE boxname = '%s';" % self.ln.split()[0]
- sqls([_sql,])
- widget.hide()
- else: widget.hide()
- self.click_refresh()
- # POP UP callback
- def popup(self, button, data=None):
- dialog = gtk.MessageDialog(
- parent = None,
- flags = gtk.DIALOG_DESTROY_WITH_PARENT,
- type = gtk.MESSAGE_INFO,
- buttons = gtk.BUTTONS_OK_CANCEL,
- message_format = "Remove '%s' from sql db?" % self.ln.split()[0])
- dialog.set_title('Delete box')
- dialog.connect('response', self.click_remove)
- dialog.show()
- def click_info(self, *dummy):
- InfoWindow(self.mainDict, self.boxList, self.swList)
- def click_about(self, *dummy):
- AboutWindow()
- def show(self):
- self.shown = True
- self.main.present()
- self.main.activate_focus()
- self.main.set_focus(self.grp)
- def click_hide(self, *dummy):
- self.hide()
- def hide(self):
- self.shown = False
- self.main.hide()
- def get_shown(self):
- return self.shown
- def on_col_change(self, pos):
- pos = self.grp.get_cursor()[0]
- try:
- if len(pos) == 1:
- self.cbutton.hide()
- self.boxname.set_text('')
- self.ipaddr.set_text('')
- self.bipaddr.set_text('')
- self.su_label.set_text('')
- self.dev_label.set_text('')
- self.port_label.set_text('')
- self.proto_label.set_text('')
- self.group_label.set_text('')
- return
- else:
- print pos[0], pos[1]
- ln = self.shittyDict[str(pos[0]) + "_" + str(pos[1])]
- print ln
- except:
- return
- self.cbutton.show()
- self.cbutton.set_size_request(250,25)
- self.grp.set_size_request(250,200)
- self.boxname.set_text(ln.strip())
- self.ipaddr.set_text(self.mainDict[ln][0])
- self.bipaddr.set_text(self.mainDict[ln][1])
- self.dev_label.set_text(self.mainDict[ln][4])
- self.port_label.set_text(self.mainDict[ln][9])
- self.proto_label.set_text(self.mainDict[ln][6])
- self.group_label.set_text(self.mainDict[ln][-1].strip())
- if self.mainDict[ln][5].upper() == 'TRUE':
- self.su_label.set_text('Yes')
- else:
- self.su_label.set_text('No')
- self.ln = ln
- azz = self.grp.get_selection()
- def click_add(self, dummy):
- AddWindow(self)
- def click_edit(self, dummy):
- EditWindow(self.ln, self, self.mainDict)
- def click_refresh(self, *dummy):
- self.mainDict, self.swList, self.boxList = get_list()
- self.tree()
- def clip_me(self, *dummy):
- # set the clipboard text data
- clipboard.set_text(dpswd(self.mainDict[self.ln][3].strip()))
- # make our data available to other applications
- clipboard.store()
- def on_quit(self, *dummy):
- self.main.destroy()
- def on_conn(self, *dummy):
- try: _cmd = """gnome-terminal -t %s \
- -e "/opt/gxpqt/xpqt %s %s %s %s %s %s %s %s" & """ % (
- self.ln.strip(), self.ipaddr.get_text(),
- self.bipaddr.get_text(), self.mainDict[self.ln][2],
- self.mainDict[self.ln][3], self.mainDict[self.ln][9],
- self.proto_label.get_text(), self.dev_label.get_text(),
- self.mainDict[self.ln][7]
- )
- except: return
- #print _cmd
- subprocess.call(_cmd, shell=True)
- def on_connect(self, *dummy):
- try: _cmd = """gnome-terminal -t %s \
- -e "/opt/gxpqt/xpqt %s %s %s %s %s %s %s %s" & """ % (
- self.ln.strip(), self.ipaddr.get_text(),
- self.bipaddr.get_text(), self.mainDict[self.ln][2],
- self.mainDict[self.ln][3], self.mainDict[self.ln][9],
- self.proto_label.get_text(), self.dev_label.get_text(),
- self.mainDict[self.ln][7]
- )
- except: return
- #print _cmd
- subprocess.call(_cmd, shell=True)
- class PyApp(gtk.Window):
- def __init__(self):
- super(PyApp, self).__init__()
- self.set_size_request(250, 100)
- self.set_position(gtk.WIN_POS_CENTER)
- self.connect("destroy", gtk.main_quit)
- self.set_title("Message dialogs")
- erro = gtk.Button("Error")
- erro.connect("clicked", self.on_erro)
- self.show_all()
- def on_erro(self, widget):
- md = gtk.MessageDialog(self,
- gtk.DIALOG_DESTROY_WITH_PARENT, gtk.MESSAGE_ERROR,
- gtk.BUTTONS_CLOSE, "Error loading file")
- md.run()
- md.destroy()
- class StatusIcc:
- # active callback
- def activate(self, widget, data=None):
- if self.app.get_shown():
- self.app.hide()
- else: self.app.show()
- # Show_Hide callback
- def show_hide(self, widget, response_id, data=None):
- if response_id == gtk.RESPONSE_YES:
- widget.hide()
- else:
- widget.hide()
- # Destroy callback
- def destroyer(self, widget, response_id, data=None):
- if response_id == gtk.RESPONSE_OK:
- gtk.main_quit()
- else:
- widget.hide()
- # POP UP callback
- def popup(self, button, widget, data=None):
- dialog = gtk.MessageDialog(
- parent = None,
- flags = gtk.DIALOG_DESTROY_WITH_PARENT,
- type = gtk.MESSAGE_WARNING,
- buttons = gtk.BUTTONS_OK_CANCEL,
- message_format = "Do you want to quit GUIxqpt?")
- dialog.set_title('Quit GUIxpqt')
- dialog.connect('response', self.destroyer)
- dialog.show()
- # bind hotkey
- def hotkey(self, user_data):
- if self.app.get_shown():
- self.app.hide()
- else: self.app.show()
- def __init__(self):
- # create a new Status Icon
- self.app = MainWindow()
- self.shown = False
- self.staticon = gtk.StatusIcon()
- self.staticon.set_from_stock(gtk.STOCK_QUIT)
- self.staticon.set_blinking(False)
- self.staticon.connect("activate", self.activate)
- self.staticon.connect("popup_menu", self.popup)
- self.staticon.set_visible(True)
- self.keystr = '<Super>X'
- keybinder.bind(self.keystr, self.hotkey, 'Keystring %s' % self.keystr)
- def pswd(n):
- if len(n) == 0:
- return ''
- n = n.encode('hex')
- _t = int(len(n) / int('2'))
- _t1 = int(len(n) - int('1'))
- _n1 = n[_t:]
- _n2 = n[:_t]
- n = '%s%s' % (_n1, _n2)
- n = '%s%s' % (n[:_t1], n[_t1])
- return n
- def dpswd(n):
- try:
- if len(n) == 0:
- return ''
- n = '%s' % n
- _t = int(len(n) / int('2'))
- _t1 = int(len(n) - int('1'))
- _n1 = n[_t:]
- _n2 = n[:_t]
- n = '%s%s' % (_n1, _n2)
- n = '%s%s' % (n[:_t1], n[_t1])
- n = n.decode('hex')
- return n
- except: return n
- def save_backup():
- global mainDict, bfile
- try: backf = open(bfile, 'w')
- except:
- print 'Unable to open backup file.'
- return False
- pickle.dump(mainDict, backf)
- backf.close()
- try: save_settings()
- except: False
- return True
- def save_settings():
- global hotkey, bfile, dbname
- global dbhost, dbuser, dbpass
- content = """[global]
- # Global hotkey
- # <Super> - Windows key
- # <Ctrl> - Control key
- # <Alt> - Alt key
- hotkey = %s
- # Load data
- # Use:
- # file - to load from file
- # db - to load from database
- load_from = db
- # Backup file
- backup_file = %s
- last_backup = %s
- [database]
- # Database connection
- name = %s
- host = %s
- user = %s
- pass = %s
- """ % (hotkey, bfile, str(time.ctime()),
- dbname, dbhost, dbuser, dbpass)
- try: cfile = open(confFile, 'w')
- except:
- print 'Unable to open config file!'
- return False
- cfile.write(content)
- cfile.close()
- return True
- def sqls(mList):
- global dbhost, dbuser
- global dbname, dbpass
- try:
- pgconn = pg.connect(
- dbname=dbname, host=dbhost,
- user=dbuser, passwd=dbpass
- )
- except:
- print 'Unable to connect to pgsql'
- return False
- for _ in mList:
- pgconn.query(_)
- pgconn.close()
- return True
- def get_flist():
- global bfile, mainDict
- mainDict = dict()
- try: of = open(bfile)
- except:
- print 'Unable to open backup file.'
- sys.exit(-1)
- try: mainDict = pickle.load(of)
- except:
- print 'Error while loading data from file.'
- sys.exit(-1)
- of.close()
- swList = list()
- boxList = list()
- for _element in mainDict:
- if mainDict[_element][4].strip() == 'server':
- boxList.append(_element)
- elif mainDict[_element][4].strip() == 'switch':
- swList.append(_element)
- return mainDict, swList, boxList
- def get_list():
- global dbhost, dbname
- global dbuser, dbpass
- try:
- pgconn = pg.connect(
- dbname=dbname, host=dbhost,
- user=dbuser, passwd=dbpass
- )
- except:
- print 'Unable to connect to pgsql'
- return False
- gL = {}; mD = {}
- bL = []; swL = []
- for _ in pgconn.query("SELECT * FROM xpqt ORDER BY grp,boxname;").dictresult():
- boxname = '%(boxname)s' % _
- bipaddr = '%(bipaddr)s' % _
- ctype = '%(conntype)s' % _
- ipaddr = '%(ipaddr)s' % _
- dtype = '%(dtype)s' % _
- cport = '%(cport)s' % _
- supas = '%(supas)s' % _
- susr = '%(suusr)s' % _
- usr = '%(usr)s' % _
- pas = '%(pas)s' % _
- grp = '%(grp)s' % _
- su = '%(su)s' % _
- if dtype == 'switch':
- swL.append(boxname.strip())
- elif dtype == 'server':
- bL.append(boxname.strip())
- mD[boxname.strip()] = (ipaddr, bipaddr, usr, pas, dtype,
- su, ctype, supas, dtype, cport, susr, grp)
- if not grp.strip() in gL:
- gL[grp.strip()] = list()
- gL[grp.strip()].append(boxname.strip())
- print _
- try:
- pgconn.close()
- except:
- pass
- return mD, swL, bL, gL
- # get the clipboard
- clipboard = gtk.clipboard_get()
- # Read config file
- config = ConfigParser.ConfigParser()
- config.read(confFile)
- hotkey = config.get("global", "hotkey")
- bfile = config.get("global", "backup_file")
- lback = config.get("global", "last_backup")
- lfrom = config.get("global", "load_from")
- dbhost = config.get("database", "host")
- dbname = config.get("database", "name")
- dbuser = config.get("database", "user")
- dbpass = config.get("database", "pass")
- mainDict = dict()
- boxList = list()
- swList = list()
- grpList = list()
- if lfrom == 'pgsql':
- lastupdate = time.ctime()
- mainDict, swList, boxList, grpList = get_list()
- else:
- lastupdate = '<empty>'
- mainDict, swList, boxList, grpList = get_flist()
- statusicon = StatusIcc()
- gtk.main()
Add Comment
Please, Sign In to add comment