home *** CD-ROM | disk | FTP | other *** search
/ Mac Easy 2010 May / Mac Life Ubuntu.iso / casper / filesystem.squashfs / usr / share / system-config-printer / troubleshoot / ErrorLogCheckpoint.pyc (.txt) < prev    next >
Encoding:
Python Compiled Bytecode  |  2009-10-12  |  6.7 KB  |  222 lines

  1. # Source Generated with Decompyle++
  2. # File: in.pyc (Python 2.6)
  3.  
  4. import cups
  5. import os
  6. import tempfile
  7. import time
  8. from timedops import TimedOperation
  9. from base import *
  10.  
  11. class ErrorLogCheckpoint(Question):
  12.     
  13.     def __init__(self, troubleshooter):
  14.         Question.__init__(self, troubleshooter, 'Error log checkpoint')
  15.         page = self.initial_vbox(_('Debugging'), _('I would like to enable debugging output from the CUPS scheduler.  This may cause the scheduler to restart.  Click the button below to enable debugging.'))
  16.         button = gtk.Button(_('Enable Debugging'))
  17.         buttonbox = gtk.HButtonBox()
  18.         buttonbox.set_border_width(0)
  19.         buttonbox.set_layout(gtk.BUTTONBOX_START)
  20.         buttonbox.pack_start(button, False, False, 0)
  21.         self.button = button
  22.         page.pack_start(buttonbox, False, False, 0)
  23.         self.label = gtk.Label()
  24.         self.label.set_alignment(0, 0)
  25.         self.label.set_line_wrap(True)
  26.         page.pack_start(self.label, False, False, 0)
  27.         troubleshooter.new_page(page, self)
  28.         self.persistent_answers = { }
  29.  
  30.     
  31.     def __del__(self):
  32.         if not self.persistent_answers.get('error_log_debug_logging_set', False):
  33.             return None
  34.         c = self.troubleshooter.answers['_authenticated_connection']
  35.         c._set_lock(False)
  36.         settings = c.adminGetServerSettings()
  37.         if len(settings.keys()) == 0:
  38.             return None
  39.         settings[cups.CUPS_SERVER_DEBUG_LOGGING] = '0'
  40.         answers = self.troubleshooter.answers
  41.         orig_settings = self.persistent_answers['cups_server_settings']
  42.         settings['MaxLogSize'] = orig_settings.get('MaxLogSize', '2000000')
  43.         c.adminSetServerSettings(settings)
  44.  
  45.     
  46.     def display(self):
  47.         self.answers = { }
  48.         answers = self.troubleshooter.answers
  49.         if not answers['cups_queue_listed']:
  50.             return False
  51.         self.authconn = answers['_authenticated_connection']
  52.         parent = self.troubleshooter.get_window()
  53.         
  54.         def getServerSettings():
  55.             cups.setPasswordCB((lambda x: ''))
  56.             cups.setServer('')
  57.             c = cups.Connection()
  58.             return c.adminGetServerSettings()
  59.  
  60.         
  61.         try:
  62.             self.op = TimedOperation(getServerSettings, parent = parent)
  63.             settings = self.op.run()
  64.         except RuntimeError:
  65.             answers['cups_queue_listed']
  66.             answers['cups_queue_listed']
  67.             return False
  68.             except cups.IPPError:
  69.                 settings = { }
  70.             except:
  71.                 None<EXCEPTION MATCH>cups.IPPError
  72.             
  73.  
  74.         self.forward_allowed = False
  75.         self.label.set_text('')
  76.         if len(settings.keys()) == 0:
  77.             return True
  78.         self.persistent_answers['cups_server_settings'] = settings
  79.         
  80.         try:
  81.             if int(settings[cups.CUPS_SERVER_DEBUG_LOGGING]) != 0:
  82.                 return False
  83.         except KeyError:
  84.             len(settings.keys()) == 0
  85.             len(settings.keys()) == 0
  86.         except ValueError:
  87.             pass
  88.         except:
  89.             len(settings.keys()) == 0
  90.  
  91.         return True
  92.  
  93.     
  94.     def connect_signals(self, handler):
  95.         self.button_sigid = self.button.connect('clicked', self.enable_clicked, handler)
  96.  
  97.     
  98.     def disconnect_signals(self):
  99.         self.button.disconnect(self.button_sigid)
  100.  
  101.     
  102.     def collect_answer(self):
  103.         answers = self.troubleshooter.answers
  104.         if not answers['cups_queue_listed']:
  105.             return { }
  106.         parent = self.troubleshooter.get_window()
  107.         self.answers.update(self.persistent_answers)
  108.         (tmpfd, tmpfname) = tempfile.mkstemp()
  109.         os.close(tmpfd)
  110.         
  111.         try:
  112.             self.op = TimedOperation(self.authconn.getFile, args = ('/admin/log/error_log', tmpfname), parent = parent)
  113.             self.op.run()
  114.         except RuntimeError:
  115.             answers['cups_queue_listed']
  116.             answers['cups_queue_listed']
  117.             
  118.             try:
  119.                 os.remove(tmpfname)
  120.             except OSError:
  121.                 pass
  122.  
  123.             return self.answers
  124.             except cups.IPPError:
  125.                 
  126.                 try:
  127.                     os.remove(tmpfname)
  128.                 except OSError:
  129.                     pass
  130.  
  131.                 return self.answers
  132.             else:
  133.                 statbuf = os.stat(tmpfname)
  134.                 os.remove(tmpfname)
  135.                 self.answers['error_log_checkpoint'] = statbuf[6]
  136.                 return self.answers
  137.  
  138.  
  139.     
  140.     def can_click_forward(self):
  141.         return self.forward_allowed
  142.  
  143.     
  144.     def enable_clicked(self, button, handler):
  145.         parent = self.troubleshooter.get_window()
  146.         self.troubleshooter.busy()
  147.         
  148.         try:
  149.             self.op = TimedOperation(self.authconn.adminGetServerSettings, parent = parent)
  150.             settings = self.op.run()
  151.         except cups.IPPError:
  152.             self.troubleshooter.ready()
  153.             self.forward_allowed = True
  154.             handler(button)
  155.             return None
  156.  
  157.         self.persistent_answers['cups_server_settings'] = settings.copy()
  158.         MAXLOGSIZE = 'MaxLogSize'
  159.         
  160.         try:
  161.             prev_debug = int(settings[cups.CUPS_SERVER_DEBUG_LOGGING])
  162.         except KeyError:
  163.             prev_debug = 0
  164.  
  165.         
  166.         try:
  167.             prev_logsize = int(settings[MAXLOGSIZE])
  168.         except (KeyError, ValueError):
  169.             prev_logsize = -1
  170.  
  171.         if prev_debug == 0 or prev_logsize != '0':
  172.             settings[cups.CUPS_SERVER_DEBUG_LOGGING] = '1'
  173.             settings[MAXLOGSIZE] = '0'
  174.             success = False
  175.             
  176.             def set_settings(connection, settings):
  177.                 connection.adminSetServerSettings(settings)
  178.                 attempt = 1
  179.                 while attempt <= 5:
  180.                     
  181.                     try:
  182.                         time.sleep(1)
  183.                         connection._connect()
  184.                     continue
  185.                     except RuntimeError:
  186.                         attempt += 1
  187.                         continue
  188.                     
  189.  
  190.                     None<EXCEPTION MATCH>RuntimeError
  191.  
  192.             
  193.             try:
  194.                 debugprint('Settings to set: ' + repr(settings))
  195.                 self.op = TimedOperation(set_settings, args = (self.authconn, settings), parent = parent)
  196.                 self.op.run()
  197.                 success = True
  198.             except cups.IPPError:
  199.                 pass
  200.             except RuntimeError:
  201.                 pass
  202.  
  203.             if success:
  204.                 self.persistent_answers['error_log_debug_logging_set'] = True
  205.                 self.label.set_text(_('Debug logging enabled.'))
  206.             
  207.         else:
  208.             self.label.set_text(_('Debug logging was already enabled.'))
  209.         self.forward_allowed = True
  210.         self.troubleshooter.ready()
  211.         handler(button)
  212.  
  213.     
  214.     def cancel_operation(self):
  215.         self.op.cancel()
  216.         answers = self.troubleshooter.answers
  217.         factory = answers['_authenticated_connection_factory']
  218.         self.authconn = factory.get_connection()
  219.         self.answers['_authenticated_connection'] = self.authconn
  220.  
  221.  
  222.