# -*- coding: utf-8 -*- from openerp import http from openerp.http import request from werkzeug.wrappers import Response from werkzeug.datastructures import Headers from werkzeug.utils import redirect from gzip import GzipFile from StringIO import StringIO as IO import json import logging LOGGER = logging.getLogger(__name__) GZIP_COMPRESSION_LEVEL = 9 class PrintEngineController(http.Controller): ''' ''' def make_info_log(self, log): LOGGER.info('[INFO] {}'.format(log)) ''' Make GZIP to JSON response ''' def make_gzip_response(self, data=None, status=200): gzip_buffer = IO() with GzipFile(mode='wb', compresslevel=GZIP_COMPRESSION_LEVEL, fileobj=gzip_buffer) as gzip_file: gzip_file.write(json.dumps(data)) contents = gzip_buffer.getvalue() gzip_buffer.close() headers = Headers() headers.add('Content-Encoding', 'gzip') headers.add('Vary', 'Accept-Encoding') headers.add('Content-Length', len(contents)) return Response(contents, status=status, headers=headers, content_type='application/json') ''' ''' @http.route('/print_engine/update', auth='user', type='json', methods=['POST'], cors='*') def printers_update(self, **kw): printer_obj = request.env['print.engine.printer'] for printer in request.env.user.socket_ids.printer_ids: printer.unlink() for printer_name in json.loads(kw.get('data'))['printers']: printer_obj.create({ 'name': printer_name, 'socket_id': request.env.user.socket_ids.id }) return True ''' ''' def get_sockets(self): socket_obj = request.env['print.engine.socket'] return [{ 'protocol': socket.protocol, 'host': socket.host, 'port': socket.port, 'path': socket.path } for socket in socket_obj.search([('active', '=', True)])] ''' ''' @http.route('/print_engine/sockets', auth='user', methods=['GET'], cors='*') def printers_get_sockets(self, **kw): return self.make_gzip_response({ 'sockets': self.get_sockets() })