text: 
  from threading import Thread
  import os, logging, subprocess
  
  # import logger
  logger = logging.getLogger(__name__)
  
  class IrisSystemThread(Thread):
      def __init__(self, action, callback):
          Thread.__init__(self)
          self.action = action
          self.callback = callback
          self.path = os.path.dirname(__file__)
  
      ##
      # Run the defined action
      ##
      def run(self):
          logger.info("Running system action: "+self.action)
  
          try:
              self.can_run()
          except Exception as e:
              logger.error(e)
  
              error = {
                  'message': "Permission denied",
                  'description': str(e)
              }
  
              if self.callback:
                  self.callback(False, error)
              return
  
          # Run the actual task (this is the process-blocking instruction)
          output = subprocess.check_output(["sudo "+self.path+"/system.sh "+self.action], shell=True)
  
          # And then, when complete, return to our callback
          if self.callback:
              response = {
                  'output': output
              }
              self.callback(response, False)
  
  
      ##
      # Check if we have access to the system script (system.sh)
      #
      # @return boolean or exception
      ##
      def can_run(self, *args, **kwargs):
  
          # Attempt an empty call to our system file
          process = subprocess.Popen("sudo -n "+self.path+"/system.sh", stdout=subprocess.PIPE, stderr=subprocess.PIPE, shell=True)
          result, error = process.communicate()
          exitCode = process.wait()
  
          # Some kind of failure, so we can't run any commands this way
          if exitCode > 0:
              raise Exception("Password-less access to "+self.path+"/system.sh was refused. Check your /etc/sudoers file.")
          else:
              return True
  