main.py 2.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778
  1. # -*- coding: utf-8 -*-
  2. from openerp import http
  3. from openerp.http import request
  4. from werkzeug.wrappers import Response
  5. from werkzeug.datastructures import Headers
  6. from werkzeug.utils import redirect
  7. from gzip import GzipFile
  8. from StringIO import StringIO as IO
  9. import json
  10. import logging
  11. LOGGER = logging.getLogger(__name__)
  12. GZIP_COMPRESSION_LEVEL = 9
  13. class PrintEngineController(http.Controller):
  14. '''
  15. '''
  16. def make_info_log(self, log):
  17. LOGGER.info('[INFO] {}'.format(log))
  18. '''
  19. Make GZIP to JSON response
  20. '''
  21. def make_gzip_response(self, data=None, status=200):
  22. gzip_buffer = IO()
  23. with GzipFile(mode='wb', compresslevel=GZIP_COMPRESSION_LEVEL, fileobj=gzip_buffer) as gzip_file:
  24. gzip_file.write(json.dumps(data))
  25. contents = gzip_buffer.getvalue()
  26. gzip_buffer.close()
  27. headers = Headers()
  28. headers.add('Content-Encoding', 'gzip')
  29. headers.add('Vary', 'Accept-Encoding')
  30. headers.add('Content-Length', len(contents))
  31. return Response(contents, status=status, headers=headers, content_type='application/json')
  32. '''
  33. '''
  34. @http.route('/print_engine/update', auth='user', type='http', methods=['POST'], cors='*')
  35. def printers_update(self, **kw):
  36. assert len(request.env.user.socket_ids) <= 1
  37. printer_obj = request.env['print.engine.printer']
  38. for printer in request.env.user.socket_ids.printer_ids:
  39. printer.unlink()
  40. for printer_name in json.loads(kw.get('data'))['printers']:
  41. printer_obj.create({
  42. 'name': printer_name,
  43. 'socket_id': request.env.user.socket_ids.id
  44. })
  45. return redirect('/web?id={}&view_type=form&model=print.engine.socket'.format(request.env.user.socket_ids.id))
  46. '''
  47. '''
  48. def get_sockets(self):
  49. socket_obj = request.env['print.engine.socket']
  50. return [{
  51. 'protocol': socket.protocol,
  52. 'host': socket.host,
  53. 'port': socket.port,
  54. 'path': socket.path
  55. } for socket in socket_obj.search([('active', '=', True)])]
  56. '''
  57. '''
  58. @http.route('/print_engine/sockets', auth='user', methods=['GET'], cors='*')
  59. def printers_get_sockets(self, **kw):
  60. return self.make_gzip_response({
  61. 'sockets': self.get_sockets()
  62. })