viewgit/index.php:465 Only variables should be passed by reference [2048]

viewgit/index.php:466 Non-static method GeSHi::get_language_name_from_extension() should not be called statically [2048]

  1. # -*- coding: utf-8 -*-
  2. ## Some useful function to help DrPrint to
  3.  
  4. import paramiko, gobject, select, time, re, os
  5.  
  6. class PrintingError(Exception):
  7.  
  8. def __init__(self, value):
  9. self.value = value
  10.  
  11. def __str__(self):
  12. return repr(self.value)
  13.  
  14.  
  15. class Backend(gobject.GObject):
  16.  
  17. __gsignals__ = {
  18. 'transfer-progress': (gobject.SIGNAL_RUN_FIRST,
  19. gobject.TYPE_NONE,
  20. (gobject.TYPE_INT,
  21. gobject.TYPE_INT)),
  22.  
  23. 'transfer-started': (gobject.SIGNAL_RUN_FIRST,
  24. gobject.TYPE_NONE,
  25. ()),
  26.  
  27. 'transfer-finished': (gobject.SIGNAL_RUN_FIRST,
  28. gobject.TYPE_NONE,
  29. ()),
  30. }
  31.  
  32. def __init__(self):
  33. gobject.GObject.__init__(self)
  34.  
  35. def get_queue(self, printer, remote_host, username, password):
  36. """
  37. Obtain the queue of jobs on selected printer. It opens an SSH
  38. connection to the server and parse lpq -Pprinter output
  39. """
  40.  
  41. try:
  42. client = paramiko.SSHClient()
  43. client.set_missing_host_key_policy(paramiko.AutoAddPolicy())
  44. except:
  45. raise RuntimeError('Impossibile inizializzare paramiko')
  46.  
  47. try:
  48. client.connect(remote_host,
  49. port = 22,
  50. username = username,
  51. password = password)
  52. except:
  53. raise RuntimeError('Impossibile connettersi a %s' % remote_host)
  54.  
  55. stdin, stdout, stderr = client.exec_command("lpq -P%s" % printer)
  56. output = stdout.read()
  57.  
  58. # Parse output
  59. jobs = []
  60. for line in re.findall(r"active\s+(\w+)\s+(\d+)\s+(.+)\s+(\d+) bytes", output):
  61. job = {
  62. 'position': 1,
  63. 'user': line[0],
  64. 'id': line[1],
  65. 'filename': line[2],
  66. 'size': line[3],
  67. }
  68. jobs.append (job)
  69.  
  70. for line in re.findall(r"(\d)\w*\s+(\w+)\s+(\d+)\s+(.+)\s+(\d+) bytes",
  71. output):
  72. pos = int(line[0]) + 1
  73. job = {
  74. 'position': pos,
  75. 'user': line[1],
  76. 'id': line[2],
  77. 'filename': line[3].strip(),
  78. 'size': line[4]
  79. }
  80. jobs.append(job)
  81. return jobs
  82.  
  83.  
  84. def cancel_transfer(self, widget):
  85. self.__abort_transfer = True
  86.  
  87. def send_print(self, printer, username, password, page_per_page,
  88. filename, page_range, copies, orientation, sides, remote_host):
  89.  
  90. self.__abort_transfer = False
  91.  
  92. # Get connection
  93. try:
  94. client = paramiko.SSHClient()
  95. client.set_missing_host_key_policy(paramiko.AutoAddPolicy())
  96. except:
  97. raise PrintingError('Impossibili inizializzare paramiko')
  98.  
  99. try:
  100. client.connect(remote_host,
  101. port=22,
  102. username=username,
  103. password=password)
  104. except paramiko.AuthenticationException, e:
  105. raise PrintingError('Autenticazione fallita')
  106. except Exception, e:
  107. raise PrintingError('Connessione fallita (%s)' % e)
  108.  
  109. t = client.get_transport()
  110. sftp = paramiko.SFTPClient.from_transport(t)
  111.  
  112. # Questo è inevitabile.. :)
  113. cmd = "lpr -P%s " % printer
  114.  
  115. # Numero di pagine
  116. try:
  117. copies = int(float(copies))
  118. except ValueError:
  119. copies = 1
  120. if copies is not 1:
  121. cmd = cmd + "-# %s " % copies
  122.  
  123.  
  124. cmd_opts = ""
  125.  
  126. ## Pagine logiche per pagine
  127. if not page_per_page == 1:
  128. cmd_opts += "-o number-up=%s " % str(page_per_page)
  129.  
  130. ## Da a
  131. if not page_range == None:
  132. cmd_opts += "-o page-ranges=%s " % page_range
  133.  
  134. ## Orientazione (se è vuoto è verticale)
  135. if not orientation == "":
  136. cmd_opts += "-o %s " % orientation
  137.  
  138. ## Long edge, short edge ed amici vari
  139. cmd_opts += "-o sides=%s " % sides
  140.  
  141. ## Se ci sono opzioni dai il -o e specificale
  142. if not cmd_opts == "":
  143. cmd = cmd + "%s" % cmd_opts + " /tmp/drprint_tmp_%s" % username
  144.  
  145. try:
  146. self.emit('transfer-started')
  147. buf_size = 4096 # 4 Kb
  148. open_file = sftp.file("/tmp/drprint_tmp_%s" % username, "w")
  149. bytes_read = 0
  150. file_size = os.path.getsize(filename)
  151. with open(filename, "r") as local_handle:
  152. buf = None
  153. while(buf != ""):
  154. buf = local_handle.read(buf_size)
  155. bytes_read = bytes_read + len(buf)
  156. if self.__abort_transfer:
  157. return self.__abort_transfer
  158. open_file.write(buf)
  159. self.emit('transfer-progress', bytes_read, file_size)
  160. except OSError:
  161. raise PrintingError('Errore nel trasferimento del file')
  162. else:
  163. pass
  164.  
  165. self.emit('transfer-finished')
  166.  
  167. # Apriamo la sessione.
  168. chan = t.open_session()
  169.  
  170. # Diamo il comando sul canale
  171. chan.exec_command(cmd)
  172. exit_status = chan.recv_exit_status()
  173.  
  174. chan.close()
  175. if exit_status == 0:
  176. sftp.remove("/tmp/drprint_tmp_%s" % username)
  177.  
  178. if exit_status != 0:
  179. raise PrintingError('Il comando <b>lpr</b> non e\' andato a buon fine (Exit status = %d)' % exit_status)
  180.  
  181. return self.__abort_transfer