- Split driver.py to multiple files - Remove hw_proxy module as most of its routes were not used and move remaingin routes to a controller in hw_drivers - Add missing coding and license lines at the beginning of files - Reorder imports and remove unused ones - Rename device_id to device_identifier for clarity - Rename screen to display for consistency - Other minors improvements Taskid: 1973956 X-original-commit: 841c016913a87133bf7257c62ae5f6bf7d99e06d
38 lines
1.4 KiB
Python
38 lines
1.4 KiB
Python
# -*- 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
|