From 3751379f1e9a4c215fb6eb898b4ccc67659b9ace Mon Sep 17 00:00:00 2001 From: stephanchrst Date: Tue, 10 May 2022 21:51:50 +0700 Subject: initial commit 2 --- .../iot_handlers/interfaces/PrinterInterface.py | 37 ++++++++++++++++++++++ 1 file changed, 37 insertions(+) create mode 100644 addons/hw_drivers/iot_handlers/interfaces/PrinterInterface.py (limited to 'addons/hw_drivers/iot_handlers/interfaces/PrinterInterface.py') diff --git a/addons/hw_drivers/iot_handlers/interfaces/PrinterInterface.py b/addons/hw_drivers/iot_handlers/interfaces/PrinterInterface.py new file mode 100644 index 00000000..ca601dbc --- /dev/null +++ b/addons/hw_drivers/iot_handlers/interfaces/PrinterInterface.py @@ -0,0 +1,37 @@ +# -*- coding: utf-8 -*- +# Part of Odoo. See LICENSE file for full copyright and licensing details. + +from cups import Connection as cups_connection +from re import sub +from threading import Lock + +from odoo.addons.hw_drivers.interface import Interface + +conn = cups_connection() +PPDs = conn.getPPDs() +cups_lock = Lock() # We can only make one call to Cups at a time + +class PrinterInterface(Interface): + _loop_delay = 120 + connection_type = 'printer' + + def get_devices(self): + printer_devices = {} + with cups_lock: + printers = conn.getPrinters() + devices = conn.getDevices() + for printer in printers: + path = printers.get(printer).get('device-uri', False) + if path and path in devices: + devices.get(path).update({'supported': True}) # these printers are automatically supported + for path in devices: + if 'uuid=' in path: + identifier = sub('[^a-zA-Z0-9_]', '', path.split('uuid=')[1]) + elif 'serial=' in path: + identifier = sub('[^a-zA-Z0-9_]', '', path.split('serial=')[1]) + else: + identifier = sub('[^a-zA-Z0-9_]', '', path) + devices[path]['identifier'] = identifier + devices[path]['url'] = path + printer_devices[identifier] = devices[path] + return printer_devices -- cgit v1.2.3