Laelaps  2.3.5
RoadNarrows Robotics Small Outdoor Mobile Robot Project
laelaps_init.window Class Reference

Window class supporting application. More...

Inheritance diagram for laelaps_init.window:

Public Member Functions

def __init__ (self, master=None, cnf={}, kw)
 Constructor. More...
 
def initData (self, kw)
 Initialize class state data. More...
 
def createWidgets (self)
 Create gui widgets with supporting data and show.
 
def createHeading (self)
 Create top gui heading.
 
def createLeftButtons (self)
 Create gui left hand side buttons.
 
def createCenterPanel (self)
 Create gui center panel.
 
def createRightButtons (self)
 Create gui right hand side buttons.
 
def createStatusBar (self)
 Create gui multi-line status bar at bottom of gui window.
 
def createButton (self, parent, text, imagefile, command, fg='black')
 Create button. More...
 
def clearSelect (self)
 Clear all select checkboxes.
 
def cbSelect (self)
 Checkbox change state callback.
 
def cbStartServices (self)
 Start selected services callback.
 
def cbStopServices (self)
 Stop selected services callback.
 
def cbRestartServices (self)
 Restart selected services callback.
 
def cbRefreshStatus (self)
 Refresh services status callback.
 
def cbSave (self)
 Save new settings callback.
 
def destroy (self)
 Destroy window callback.
 
def showSbInfo (self, text)
 Show information text on status bar. More...
 
def showSbError (self, text)
 Show error text on status bar. More...
 
def showSbOk (self, text)
 Show ok text on status bar. More...
 
def showSbResult (self, text, success)
 Show operation result on status bar. More...
 
def showSbStatus (self, text, status)
 Show service status result on status bar. More...
 
def setStatus (self, service, status)
 Set service status field. More...
 
def autoRefresh (self)
 
def refresh (self)
 Refresh status of all services.
 
def execStart (self, service)
 Execute 'service <service> start' subprocess. More...
 
def execStop (self, service)
 Execute 'service <service> stop' subprocess. More...
 
def execRestart (self, service)
 Execute 'service <service> restart' subprocess. More...
 
def execStatus (self, service)
 Execute 'service <service> status' subprocess. More...
 

Public Attributes

 m_imageLoader
 
 m_osdist
 
 m_debug
 
 m_icons
 
 m_wBttn
 
 m_svcKeys
 
 m_svcDesc
 
 m_lock
 
 m_service
 
 m_wScrollBar
 
 m_wStatusBar
 

Detailed Description

Window class supporting application.

Definition at line 135 of file laelaps_init.d.py.

Constructor & Destructor Documentation

def laelaps_init.window.__init__ (   self,
  master = None,
  cnf = {},
  kw 
)

Constructor.

Parameters
masterWindow parent master widget.
cnfConfiguration dictionary.
kwKeyword options.

Definition at line 143 of file laelaps_init.d.py.

References laelaps_init.window.autoRefresh(), laelaps_init.window.createWidgets(), laelaps_init.window.initData(), laelaps_init.window.m_icons, and laelaps_init.window.m_imageLoader.

143  def __init__(self, master=None, cnf={}, **kw):
144  # intialize window data
145  kw = self.initData(kw)
146 
147  self.m_imageLoader = ImageLoader(py_pkg='Laelaps.images',
148  image_paths=imagePath)
149 
150  Frame.__init__(self, master=master, cnf=cnf, **kw)
151  self.master.title("Laelaps Init.d Console")
152 
153  self.m_icons['app_icon'] = \
154  self.m_imageLoader.loadImage("icons/LaelapsInitIcon.png")
155  if self.m_icons['app_icon'] is not None:
156  self.master.tk.call('wm', 'iconphoto', self.master._w,
157  self.m_icons['app_icon'])
158 
159  # craete and show widgets
160  self.createWidgets()
161 
162  self.grid(row=0, column=0, padx=5, pady=5)
163 
164  self.after(100, self.autoRefresh)
165 
def initData(self, kw)
Initialize class state data.
Class to handle image loading.
Definition: Utils.py:76
def createWidgets(self)
Create gui widgets with supporting data and show.
def __init__(self, master=None, cnf={}, kw)
Constructor.

Member Function Documentation

def laelaps_init.window.createButton (   self,
  parent,
  text,
  imagefile,
  command,
  fg = 'black' 
)

Create button.

Parameters
parentParent widget.
textButton text.
imagefileImage file name. None for no image.
commandCallback for button push.
fgForeground text color.
Returns
Button widget.

Definition at line 420 of file laelaps_init.d.py.

References laelaps_init.window.m_icons, and laelaps_init.window.m_wBttn.

Referenced by laelaps_init.window.createLeftButtons(), laelaps_tune_motors.window.createLeftButtons(), and laelaps_init.window.createRightButtons().

420  def createButton(self, parent, text, imagefile, command, fg='black'):
421  key = str.lower(text.replace("\n", "_"))
422  self.m_icons[key] = self.m_imageLoader.loadImage(imagefile)
423  w = Button(parent)
424  w['text'] = text
425  if self.m_icons[key]:
426  w['image'] = self.m_icons[key]
427  w['compound'] = LEFT
428  w['padx'] = 0
429  w['pady'] = 0
430  w['anchor'] = W
431  w['width'] = 105
432  else:
433  w['anchor'] = CENTER
434  w['width'] = 10
435  w['fg'] = fg
436  w['command'] = command
437  self.m_wBttn[key] = w
438  return self.m_wBttn[key]
439 
def createButton(self, parent, text, imagefile, command, fg='black')
Create button.
def laelaps_init.window.execRestart (   self,
  service 
)

Execute 'service <service> restart' subprocess.

Parameters
serviceService (key).
Returns
Returns True on success, False on failure.

Definition at line 691 of file laelaps_init.d.py.

References laelaps_init.window.m_osdist.

Referenced by laelaps_init.window.cbRestartServices().

691  def execRestart(self, service):
692  rsp = ''
693  hasLock = self.m_lock.acquire()
694  try:
695  rsp = subprocess.check_output(["service", service, "restart"],
696  stderr=subprocess.STDOUT)
697  except subprocess.CalledProcessError, inst:
698  self.m_lock.release()
699  return False
700  self.m_lock.release()
701  if os_ver_ge(self.m_osdist[1], 15.04):
702  return True # no output
703  else:
704  if reDoneDone.search(rsp):
705  return True
706  elif reFailDone.search(rsp):
707  return True
708  else:
709  return False
710 
def execRestart(self, service)
Execute &#39;service <service> restart&#39; subprocess.
def laelaps_init.window.execStart (   self,
  service 
)

Execute 'service <service> start' subprocess.

Parameters
serviceService (key).
Returns
Returns True on success, False on failure.

Definition at line 641 of file laelaps_init.d.py.

References laelaps_init.window.m_osdist.

Referenced by laelaps_init.window.cbStartServices().

641  def execStart(self, service):
642  rsp = ''
643  hasLock = self.m_lock.acquire()
644  try:
645  rsp = subprocess.check_output(["service", service, "start"],
646  stderr=subprocess.STDOUT)
647  except subprocess.CalledProcessError, inst:
648  self.m_lock.release()
649  return False
650  self.m_lock.release()
651  if os_ver_ge(self.m_osdist[1], 15.04):
652  return True # no output
653  else:
654  if reFail.search(rsp):
655  return False
656  else:
657  return True
658 
def execStart(self, service)
Execute &#39;service <service> start&#39; subprocess.
def laelaps_init.window.execStatus (   self,
  service 
)

Execute 'service <service> status' subprocess.

On Ubuntu 16.04+ the output to 'service <service> status' changed. It does call the init.d script, but rather uses the systemd calls. These output muliple lines of info. So this script now supports the new interace but is also backwards capatible with Ubuntu 14.04- releases (hopefully).

Parameters
serviceService (key).
Returns
Service status. One of: 'running' 'stopped' 'unknown'

Definition at line 723 of file laelaps_init.d.py.

References laelaps_init.window.m_osdist.

Referenced by laelaps_init.window.cbRefreshStatus(), and laelaps_init.window.refresh().

723  def execStatus(self, service):
724  rsp = ''
725  hasLock = self.m_lock.acquire()
726  try:
727  rsp = subprocess.check_output(["service", service, "status"],
728  stderr=subprocess.STDOUT)
729  except subprocess.CalledProcessError, inst:
730  rsp = inst.output
731  self.m_lock.release()
732 
733  if os_ver_ge(self.m_osdist[1], 15.04):
734  rsp = rsp.split("\n")
735  for line in rsp:
736  if reActive.search(line):
737  return ('running', line)
738  elif reInactive.search(line):
739  return ('stopped', line)
740  return ('unknown', "")
741  else:
742  if reRunning.search(rsp):
743  return ('running', rsp)
744  elif reNotRunning.search(rsp):
745  return ('stopped', rsp)
746  else:
747  return ('unknown', rsp)
748 
749 
750 # ------------------------------------------------------------------------------
751 # Exception Class usage
752 # ------------------------------------------------------------------------------
753 
def execStatus(self, service)
Execute &#39;service <service> status&#39; subprocess.
def laelaps_init.window.execStop (   self,
  service 
)

Execute 'service <service> stop' subprocess.

Parameters
serviceService (key).
Returns
Returns True on success, False on failure.

Definition at line 666 of file laelaps_init.d.py.

References laelaps_init.window.m_osdist.

Referenced by laelaps_init.window.cbStopServices().

666  def execStop(self, service):
667  rsp = ''
668  hasLock = self.m_lock.acquire()
669  try:
670  rsp = subprocess.check_output(["service", service, "stop"],
671  stderr=subprocess.STDOUT)
672  except subprocess.CalledProcessError, inst:
673  self.m_lock.release()
674  return False
675  self.m_lock.release()
676  if os_ver_ge(self.m_osdist[1], 15.04):
677  return True # no output
678  else:
679  if reFail.search(rsp):
680  return False
681  else:
682  return True
683 
def execStop(self, service)
Execute &#39;service <service> stop&#39; subprocess.
def laelaps_init.window.initData (   self,
  kw 
)

Initialize class state data.

Any keywords for this application specific window that are not supported by the Frame Tkinter class must be removed.

Parameters
kwKeyword options.
Returns
Modified keywords sans this specific class.

Definition at line 176 of file laelaps_init.d.py.

References laelaps_init.window.m_debug, laelaps_init.window.m_icons, laelaps_init.window.m_lock, laelaps_init.window.m_osdist, laelaps_init.window.m_svcDesc, laelaps_init.window.m_svcKeys, and laelaps_init.window.m_wBttn.

Referenced by laelaps_init.window.__init__(), and laelaps_tune_motors.window.__init__().

176  def initData(self, kw):
177  self.m_osdist = os_distribution()
178  self.m_debug = False # default debug level
179  self.m_icons = {} # must keep loaded icons referenced
180  self.m_wBttn = {} # button widgets
181  self.m_svcKeys = [
182  'laelaps_bsproxy', 'laelaps_roscore', 'laelaps_control',
183  'laelaps_xbox', 'laelaps_teleop']
184  self.m_svcDesc = {
185  'laelaps_bsproxy': 'BotSense Proxy Server',
186  'laelaps_roscore': 'ROS Master, Parameter Server, rosout logging node',
187  'laelaps_control': 'Laelaps Control ROS node',
188  'laelaps_xbox': 'HID Xbox360 daemon / ROS node',
189  'laelaps_teleop': 'Laelaps Teleoperation ROS node'}
190  self.m_lock = threading.Lock()
191 
192  if kw.has_key('debug'):
193  self.m_debug = kw['debug']
194  del kw['debug']
195 
196  # variables only used for debugging
197  if self.m_debug:
198  pass
199 
200  return kw
201 
def initData(self, kw)
Initialize class state data.
def laelaps_init.window.setStatus (   self,
  service,
  status 
)

Set service status field.

Parameters
serviceService (key).
statusService status. One of: 'running' 'stopped' 'unknown'

Definition at line 618 of file laelaps_init.d.py.

References laelaps_init.window.autoRefresh(), laelaps_init.window.m_service, and laelaps_init.window.refresh().

Referenced by laelaps_init.window.cbRefreshStatus(), and laelaps_init.window.refresh().

618  def setStatus(self, service, status):
619  self.m_service[service]['status'].set(status)
620  self.m_service[service]['wstatus']['fg'] = statusText[status]
621 
def setStatus(self, service, status)
Set service status field.
def laelaps_init.window.showSbError (   self,
  text 
)

Show error text on status bar.

Parameters
textError text string.

Definition at line 554 of file laelaps_init.d.py.

References laelaps_init.window.m_wStatusBar.

Referenced by laelaps_init.window.showSbResult(), and laelaps_init.window.showSbStatus().

554  def showSbError(self, text):
555  self.m_wStatusBar["state"] = "normal"
556  idx0 = self.m_wStatusBar.index(INSERT)
557  self.m_wStatusBar.insert(END, text)
558  idx1 = self.m_wStatusBar.index(INSERT)
559  self.m_wStatusBar.tag_add("err", idx0, idx1)
560  self.m_wStatusBar.tag_config("err", foreground=fgColors['error'])
561  self.m_wStatusBar.see(END)
562  self.m_wStatusBar["state"] = "disabled"
563 
def showSbError(self, text)
Show error text on status bar.
def laelaps_init.window.showSbInfo (   self,
  text 
)

Show information text on status bar.

Parameters
textInfo text string.

Definition at line 539 of file laelaps_init.d.py.

References laelaps_init.window.m_wStatusBar.

Referenced by laelaps_init.window.cbRefreshStatus(), laelaps_init.window.cbRestartServices(), laelaps_init.window.cbSave(), laelaps_init.window.cbStartServices(), laelaps_init.window.cbStopServices(), and laelaps_init.window.showSbStatus().

539  def showSbInfo(self, text):
540  self.m_wStatusBar["state"] = "normal"
541  idx0 = self.m_wStatusBar.index(INSERT)
542  self.m_wStatusBar.insert(END, text)
543  idx1 = self.m_wStatusBar.index(INSERT)
544  self.m_wStatusBar.tag_add("norm", idx0, idx1)
545  self.m_wStatusBar.tag_config("norm", foreground=fgColors['normal'])
546  self.m_wStatusBar.see(END)
547  self.m_wStatusBar["state"] = "disabled"
548 
def showSbInfo(self, text)
Show information text on status bar.
def laelaps_init.window.showSbOk (   self,
  text 
)

Show ok text on status bar.

Parameters
textOk text string.

Definition at line 569 of file laelaps_init.d.py.

References laelaps_init.window.m_wStatusBar.

Referenced by laelaps_init.window.showSbResult(), and laelaps_init.window.showSbStatus().

569  def showSbOk(self, text):
570  self.m_wStatusBar["state"] = "normal"
571  idx0 = self.m_wStatusBar.index(INSERT)
572  self.m_wStatusBar.insert(END, text)
573  idx1 = self.m_wStatusBar.index(INSERT)
574  self.m_wStatusBar.tag_add("ok", idx0, idx1)
575  self.m_wStatusBar.tag_config("ok", foreground=fgColors['ok'])
576  self.m_wStatusBar.see(END)
577  self.m_wStatusBar["state"] = "disabled"
578 
def showSbOk(self, text)
Show ok text on status bar.
def laelaps_init.window.showSbResult (   self,
  text,
  success 
)

Show operation result on status bar.

Parameters
textPrefix text already displayed on current status bar line.
successOperation was [not] a success.

Definition at line 585 of file laelaps_init.d.py.

References laelaps_init.window.m_wStatusBar, laelaps_init.window.showSbError(), and laelaps_init.window.showSbOk().

Referenced by laelaps_init.window.cbRestartServices(), laelaps_init.window.cbStartServices(), and laelaps_init.window.cbStopServices().

585  def showSbResult(self, text, success):
586  n = self.m_wStatusBar['width'] - len(text)
587  if success:
588  rc = '[ok]'
589  self.showSbOk("%*s\n" % (n, rc))
590  else:
591  rc = '[failed]'
592  self.showSbError("%*s\n" % (n, rc))
593 
def showSbError(self, text)
Show error text on status bar.
def showSbResult(self, text, success)
Show operation result on status bar.
def showSbOk(self, text)
Show ok text on status bar.
def laelaps_init.window.showSbStatus (   self,
  text,
  status 
)

Show service status result on status bar.

Parameters
textPrefix text already displayed on current status bar line.
statusService status. One of: 'running' 'stopped' 'unknown'

Definition at line 600 of file laelaps_init.d.py.

References laelaps_init.window.m_wStatusBar, laelaps_init.window.showSbError(), laelaps_init.window.showSbInfo(), and laelaps_init.window.showSbOk().

Referenced by laelaps_init.window.cbRefreshStatus().

600  def showSbStatus(self, text, status):
601  n = self.m_wStatusBar['width'] - len(text)
602  if status == 'running':
603  rc = '[running]'
604  self.showSbOk("%*s\n" % (n, rc))
605  elif status == 'stopped':
606  rc = '[stopped]'
607  self.showSbError("%*s\n" % (n, rc))
608  else:
609  rc = '[unknown]'
610  self.showSbInfo("%*s\n" % (n, rc))
611 
def showSbError(self, text)
Show error text on status bar.
def showSbOk(self, text)
Show ok text on status bar.
def showSbStatus(self, text, status)
Show service status result on status bar.
def showSbInfo(self, text)
Show information text on status bar.

The documentation for this class was generated from the following file: