mirror of
https://github.com/OCA/report-print-send.git
synced 2025-02-16 07:11:31 +02:00
[FIX] Bug #19 avoid crash when using 'raw' option
[Usability] Auto-add Administrator user to the Print group Make XML code more readable base_report_to_printer: add support for remote CUPS server (not just localhost) More logging and better error handling Add CUPS_HOST in more debug logs
This commit is contained in:
committed by
Carlos Roca
parent
84d395cf7c
commit
74ce12bf3f
@@ -23,14 +23,15 @@
|
|||||||
##############################################################################
|
##############################################################################
|
||||||
import logging
|
import logging
|
||||||
import os
|
import os
|
||||||
|
|
||||||
from tempfile import mkstemp
|
from tempfile import mkstemp
|
||||||
|
|
||||||
import cups
|
import cups
|
||||||
|
from openerp import models, fields, api, _
|
||||||
from openerp import models, fields, api
|
from openerp.exceptions import Warning
|
||||||
|
from openerp.tools.config import config
|
||||||
|
|
||||||
_logger = logging.getLogger(__name__)
|
_logger = logging.getLogger(__name__)
|
||||||
|
CUPS_HOST = config.get('cups_host', 'localhost')
|
||||||
|
CUPS_PORT = int(config.get('cups_port', 631)) # config.get returns a string
|
||||||
|
|
||||||
|
|
||||||
class PrintingPrinter(models.Model):
|
class PrintingPrinter(models.Model):
|
||||||
@@ -63,7 +64,7 @@ class PrintingPrinter(models.Model):
|
|||||||
def update_printers_status(self):
|
def update_printers_status(self):
|
||||||
printer_recs = self.search([])
|
printer_recs = self.search([])
|
||||||
try:
|
try:
|
||||||
connection = cups.Connection()
|
connection = cups.Connection(CUPS_HOST, CUPS_PORT)
|
||||||
printers = connection.getPrinters()
|
printers = connection.getPrinters()
|
||||||
except:
|
except:
|
||||||
printer_recs.write({'status': 'server-error'})
|
printer_recs.write({'status': 'server-error'})
|
||||||
@@ -111,7 +112,7 @@ class PrintingPrinter(models.Model):
|
|||||||
""" Hook to set print options """
|
""" Hook to set print options """
|
||||||
options = {}
|
options = {}
|
||||||
if format == 'raw':
|
if format == 'raw':
|
||||||
options['raw'] = True
|
options['raw'] = 'True'
|
||||||
return options
|
return options
|
||||||
|
|
||||||
@api.multi
|
@api.multi
|
||||||
@@ -127,15 +128,30 @@ class PrintingPrinter(models.Model):
|
|||||||
os.write(fd, content)
|
os.write(fd, content)
|
||||||
finally:
|
finally:
|
||||||
os.close(fd)
|
os.close(fd)
|
||||||
connection = cups.Connection()
|
|
||||||
|
try:
|
||||||
|
_logger.debug(
|
||||||
|
'Starting to connect to CUPS on %s:%s'
|
||||||
|
% (CUPS_HOST, CUPS_PORT))
|
||||||
|
connection = cups.Connection(CUPS_HOST, CUPS_PORT)
|
||||||
|
_logger.debug('Connection to CUPS successfull')
|
||||||
|
except:
|
||||||
|
raise Warning(
|
||||||
|
_("Failed to connect to the CUPS server on %s:%s. "
|
||||||
|
"Check that the CUPS server is running and that "
|
||||||
|
"you can reach it from the Odoo server.")
|
||||||
|
% (CUPS_HOST, CUPS_PORT))
|
||||||
|
|
||||||
options = self.print_options(report, format)
|
options = self.print_options(report, format)
|
||||||
|
|
||||||
|
_logger.debug(
|
||||||
|
'Sending job to CUPS printer %s on %s'
|
||||||
|
% (self.system_name, CUPS_HOST))
|
||||||
connection.printFile(self.system_name,
|
connection.printFile(self.system_name,
|
||||||
file_name,
|
file_name,
|
||||||
file_name,
|
file_name,
|
||||||
options=options)
|
options=options)
|
||||||
_logger.info("Printing job: '%s'" % file_name)
|
_logger.info("Printing job: '%s' on %s" % (file_name, CUPS_HOST))
|
||||||
return True
|
return True
|
||||||
|
|
||||||
@api.multi
|
@api.multi
|
||||||
|
|||||||
@@ -3,6 +3,7 @@
|
|||||||
<data noupdate="1">
|
<data noupdate="1">
|
||||||
<record id="res_groups_printingprintoperator0" model="res.groups">
|
<record id="res_groups_printingprintoperator0" model="res.groups">
|
||||||
<field name="name">Printing / Print Operator</field>
|
<field name="name">Printing / Print Operator</field>
|
||||||
|
<field name="users" eval="[(4, ref('base.user_root'))]"/>
|
||||||
</record>
|
</record>
|
||||||
<record id="ir_model_access_printingprintergroup1" model="ir.model.access">
|
<record id="ir_model_access_printingprintergroup1" model="ir.model.access">
|
||||||
<field name="name">printing_printer group</field>
|
<field name="name">printing_printer group</field>
|
||||||
|
|||||||
@@ -22,8 +22,14 @@
|
|||||||
##############################################################################
|
##############################################################################
|
||||||
|
|
||||||
import cups
|
import cups
|
||||||
|
from openerp.exceptions import Warning
|
||||||
|
from openerp import models, api, _
|
||||||
|
from openerp.tools.config import config
|
||||||
|
import logging
|
||||||
|
|
||||||
from openerp import models, api
|
_logger = logging.getLogger(__name__)
|
||||||
|
CUPS_HOST = config.get('cups_host', 'localhost')
|
||||||
|
CUPS_PORT = int(config.get('cups_port', 631))
|
||||||
|
|
||||||
|
|
||||||
class PrintingPrinterUpdateWizard(models.TransientModel):
|
class PrintingPrinterUpdateWizard(models.TransientModel):
|
||||||
@@ -35,16 +41,22 @@ class PrintingPrinterUpdateWizard(models.TransientModel):
|
|||||||
# Update Printers
|
# Update Printers
|
||||||
printer_obj = self.env['printing.printer']
|
printer_obj = self.env['printing.printer']
|
||||||
try:
|
try:
|
||||||
connection = cups.Connection()
|
_logger.info('Trying to get list of printers')
|
||||||
|
connection = cups.Connection(CUPS_HOST, CUPS_PORT)
|
||||||
printers = connection.getPrinters()
|
printers = connection.getPrinters()
|
||||||
|
_logger.info('Printers found: %s' % ','.join(printers.keys()))
|
||||||
except:
|
except:
|
||||||
return {}
|
raise Warning(
|
||||||
|
_('Could not get the list of printers from the CUPS server '
|
||||||
|
'(%s:%s)') % (CUPS_HOST, CUPS_PORT))
|
||||||
|
|
||||||
printer_recs = printer_obj.search(
|
printer_recs = printer_obj.search(
|
||||||
[('system_name', 'in', printers.keys())]
|
[('system_name', 'in', printers.keys())]
|
||||||
)
|
)
|
||||||
for printer in printer_recs:
|
for printer in printer_recs:
|
||||||
del printers[printer.system_name]
|
del printers[printer.system_name]
|
||||||
|
_logger.info(
|
||||||
|
'Printer %s was already created' % printer.system_name)
|
||||||
|
|
||||||
for name, printer in printers.iteritems():
|
for name, printer in printers.iteritems():
|
||||||
values = {
|
values = {
|
||||||
@@ -55,6 +67,9 @@ class PrintingPrinterUpdateWizard(models.TransientModel):
|
|||||||
'uri': printer.get('device-uri', False),
|
'uri': printer.get('device-uri', False),
|
||||||
}
|
}
|
||||||
self.env['printing.printer'].create(values)
|
self.env['printing.printer'].create(values)
|
||||||
|
_logger.info(
|
||||||
|
'Created new printer %s with URI %s'
|
||||||
|
% (values['name'], values['uri']))
|
||||||
|
|
||||||
return {
|
return {
|
||||||
'name': 'Printers',
|
'name': 'Printers',
|
||||||
|
|||||||
Reference in New Issue
Block a user