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. host, printer = self.split_name(printer)
  42.  
  43. try:
  44. client = paramiko.SSHClient()
  45. client.set_missing_host_key_policy(paramiko.AutoAddPolicy())
  46. except:
  47. raise RuntimeError('Impossibile inizializzare paramiko')
  48.  
  49. try:
  50. client.connect(remote_host,
  51. port = 22,
  52. username = username,
  53. password = password)
  54. except:
  55. raise RuntimeError('Impossibile connettersi a %s' % remote_host)
  56.  
  57. stdin, stdout, stderr = client.exec_command("lpq -h %s -P%s" % (host, printer))
  58. output = stdout.read()
  59.  
  60. # Parse output
  61. jobs = []
  62. for line in re.findall(r"active\s+(\w+)\s+(\d+)\s+(.+)\s+(\d+) bytes", output):
  63. job = {
  64. 'position': 1,
  65. 'user': line[0],
  66. 'id': line[1],
  67. 'filename': line[2],
  68. 'size': line[3],
  69. }
  70. jobs.append (job)
  71.  
  72. for line in re.findall(r"(\d)\w*\s+(\w+)\s+(\d+)\s+(.+)\s+(\d+) bytes",
  73. output):
  74. pos = int(line[0]) + 1
  75. job = {
  76. 'position': pos,
  77. 'user': line[1],
  78. 'id': line[2],
  79. 'filename': line[3].strip(),
  80. 'size': line[4]
  81. }
  82. jobs.append(job)
  83. return jobs
  84.  
  85.  
  86. def cancel_transfer(self, widget):
  87. self.__abort_transfer = True
  88.  
  89. def split_name(self, printer):
  90. host = "lasker.dm.unipi.it"
  91. if "@" in printer:
  92. pos = printer.index("@")
  93. host = printer[pos+1:]
  94. printer = printer[:pos]
  95. else:
  96. printer = printer
  97.  
  98. return host, printer
  99.  
  100. def send_print(self, printer, username, password, page_per_page,
  101. filename, page_range, copies, orientation, sides, remote_host):
  102.  
  103. self.__abort_transfer = False
  104. host, printer = self.split_name(printer)
  105.  
  106. # Get connection
  107. try:
  108. client = paramiko.SSHClient()
  109. client.set_missing_host_key_policy(paramiko.AutoAddPolicy())
  110. except:
  111. raise PrintingError('Impossibili inizializzare paramiko')
  112.  
  113. try:
  114. client.connect(remote_host,
  115. port=22,
  116. username=username,
  117. password=password)
  118. except paramiko.AuthenticationException, e:
  119. raise PrintingError('Autenticazione fallita')
  120. except Exception, e:
  121. raise PrintingError('Connessione fallita (%s)' % e)
  122.  
  123. t = client.get_transport()
  124. sftp = paramiko.SFTPClient.from_transport(t)
  125.  
  126. # Questo è inevitabile.. :)
  127. cmd = "lpr -P%s " % printer
  128.  
  129. # Numero di pagine
  130. try:
  131. copies = int(float(copies))
  132. except ValueError:
  133. copies = 1
  134. if copies is not 1:
  135. cmd = cmd + "-# %s " % copies
  136.  
  137.  
  138. cmd_opts = " -H %s " % host
  139.  
  140. ## Pagine logiche per pagine
  141. if not page_per_page == 1:
  142. cmd_opts += "-o number-up=%s " % str(page_per_page)
  143.  
  144. ## Da a
  145. if not page_range == None:
  146. cmd_opts += "-o page-ranges=%s " % page_range
  147.  
  148. ## Orientazione (se è vuoto è verticale)
  149. if not orientation == "":
  150. cmd_opts += "-o %s " % orientation
  151.  
  152. ## Long edge, short edge ed amici vari
  153. cmd_opts += "-o sides=%s " % sides
  154.  
  155. ## Se ci sono opzioni dai il -o e specificale
  156. if not cmd_opts == "":
  157. cmd = cmd + "%s" % cmd_opts + " /tmp/drprint_tmp_%s" % username
  158.  
  159. try:
  160. self.emit('transfer-started')
  161. buf_size = 4096 # 4 Kb
  162. open_file = sftp.file("/tmp/drprint_tmp_%s" % username, "w")
  163. bytes_read = 0
  164. file_size = os.path.getsize(filename)
  165. with open(filename, "r") as local_handle:
  166. buf = None
  167. while(buf != ""):
  168. buf = local_handle.read(buf_size)
  169. bytes_read = bytes_read + len(buf)
  170. if self.__abort_transfer:
  171. return self.__abort_transfer
  172. open_file.write(buf)
  173. self.emit('transfer-progress', bytes_read, file_size)
  174. except OSError:
  175. raise PrintingError('Errore nel trasferimento del file')
  176. else:
  177. pass
  178.  
  179. self.emit('transfer-finished')
  180.  
  181. # Apriamo la sessione.
  182. chan = t.open_session()
  183.  
  184. # Diamo il comando sul canale
  185. chan.exec_command(cmd)
  186. exit_status = chan.recv_exit_status()
  187.  
  188. chan.close()
  189. if exit_status == 0:
  190. sftp.remove("/tmp/drprint_tmp_%s" % username)
  191.  
  192. if exit_status != 0:
  193. raise PrintingError('Il comando <b>lpr</b> non e\' andato a buon fine (Exit status = %d)' % exit_status)
  194.  
  195. return self.__abort_transfer