main.py 2.4 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980
  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='json', methods=['POST'], cors='*')
  35. def printers_update(self, **kw):
  36. printer_obj = request.env['print.engine.printer']
  37. for printer in request.env.user.socket_ids.printer_ids:
  38. printer.unlink()
  39. for printer_name in json.loads(kw.get('data'))['printers']:
  40. printer_obj.create({
  41. 'name': printer_name,
  42. 'socket_id': request.env.user.socket_ids.id
  43. })
  44. return True
  45. '''
  46. '''
  47. def get_sockets(self):
  48. socket_obj = request.env['print.engine.socket']
  49. return [{
  50. 'protocol': socket.protocol,
  51. 'host': socket.host,
  52. 'port': socket.port,
  53. 'path': socket.path,
  54. 'printers': [{
  55. 'name': printer.name,
  56. 'isDefault': printer.is_default
  57. } for printer in socket.printer_ids]
  58. } for socket in socket_obj.search([('active', '=', True)])]
  59. '''
  60. '''
  61. @http.route('/print_engine/sockets', auth='user', methods=['GET'], cors='*')
  62. def printers_get_sockets(self, **kw):
  63. return self.make_gzip_response({
  64. 'sockets': self.get_sockets()
  65. })