From 0c241adbdf978f435d236a129ba606ebc3b11dc3 Mon Sep 17 00:00:00 2001 From: Philipp Klaus Date: Fri, 22 Jul 2016 18:30:56 +0200 Subject: [PATCH] new .dispose() method to release resources in the backend classes --- brother_ql/backends/generic.py | 12 ++++++++++++ brother_ql/backends/linux_kernel.py | 3 +++ brother_ql/backends/network.py | 4 ++++ brother_ql/backends/pyusb.py | 10 ++++++++++ brother_ql/web/__init__.py | 1 + 5 files changed, 30 insertions(+) diff --git a/brother_ql/backends/generic.py b/brother_ql/backends/generic.py index 64fbc7d..617a47e 100644 --- a/brother_ql/backends/generic.py +++ b/brother_ql/backends/generic.py @@ -39,3 +39,15 @@ class BrotherQLBackendGeneric(object): except Exception as e: logger.debug('Error reading... %s', e) raise + + def dispose(self): + try: + self._dispose() + except: + pass + + def _dispose(self): + raise NotImplementedError() + + def __del__(self): + self.dispose() diff --git a/brother_ql/backends/linux_kernel.py b/brother_ql/backends/linux_kernel.py index e0ac516..53eaff9 100755 --- a/brother_ql/backends/linux_kernel.py +++ b/brother_ql/backends/linux_kernel.py @@ -75,3 +75,6 @@ class BrotherQLBackendLinuxKernel(BrotherQLBackendGeneric): return data else: raise NotImplementedError('Unknown strategy') + + def _dispose(self): + os.close(self.dev) diff --git a/brother_ql/backends/network.py b/brother_ql/backends/network.py index 0b4bd6e..8fd13eb 100755 --- a/brother_ql/backends/network.py +++ b/brother_ql/backends/network.py @@ -90,3 +90,7 @@ class BrotherQLBackendNetwork(BrotherQLBackendGeneric): return data else: raise NotImplementedError('Unknown strategy') + + def _dispose(self): + self.s.shutdown(socket.SHUT_RDWR) + self.s.close() diff --git a/brother_ql/backends/pyusb.py b/brother_ql/backends/pyusb.py index e326e26..58cd5d0 100755 --- a/brother_ql/backends/pyusb.py +++ b/brother_ql/backends/pyusb.py @@ -88,6 +88,9 @@ class BrotherQLBackendPyUSB(BrotherQLBackendGeneric): if self.dev.is_kernel_driver_active(0): self.dev.detach_kernel_driver(0) + self.was_kernel_driver_active = True + else: + self.was_kernel_driver_active = False # set the active configuration. With no arguments, the first configuration will be the active one self.dev.set_configuration() @@ -135,3 +138,10 @@ class BrotherQLBackendPyUSB(BrotherQLBackendGeneric): return data else: raise NotImplementedError('Unknown strategy') + + def _dispose(self): + usb.util.dispose_resources(self.dev) + del self.write_dev, self.read_dev + if self.was_kernel_driver_active: + self.dev.attach_kernel_driver(0) + del self.dev diff --git a/brother_ql/web/__init__.py b/brother_ql/web/__init__.py index c6549cf..6df499b 100755 --- a/brother_ql/web/__init__.py +++ b/brother_ql/web/__init__.py @@ -149,6 +149,7 @@ def print_text(content=None): try: be = BACKEND_CLASS(BACKEND_STRING_DESCR) be.write(qlr.data) + be.dispose() del be except Exception as e: return_dict['message'] = str(e)