From 6d5d31b83c0452c4a23676665291e53f09518ad7 Mon Sep 17 00:00:00 2001 From: Jan Grewe Date: Sun, 27 Dec 2020 12:28:16 +0100 Subject: [PATCH] [file handler] make singleton class --- file_handler.py | 24 ++++++++++++++++++------ 1 file changed, 18 insertions(+), 6 deletions(-) diff --git a/file_handler.py b/file_handler.py index bd83908..64b0c23 100644 --- a/file_handler.py +++ b/file_handler.py @@ -2,9 +2,17 @@ import os import nixio as nix from nixio import file -class FileHandler(): +class Singleton(type): + _instances = {} + def __call__(cls, *args, **kwargs): + if cls not in cls._instances: + cls._instances[cls] = super(Singleton, cls).__call__(*args, **kwargs) + return cls._instances[cls] + +class FileHandler(metaclass=Singleton): def __init__(self) -> None: + print("Handler Init") super().__init__() self._nix_file = None self._file_requests = [] @@ -15,7 +23,6 @@ class FileHandler(): Args: filename ([type]): [description] """ - print("open file: %s" % filename) self.close() if not os.path.exists(filename): @@ -24,12 +31,17 @@ class FileHandler(): self._nix_file = nix.File.open(filename, nix.FileMode.ReadOnly) return True, "Successfully opened file %s." % filename.split(os.sep)[-1] except RuntimeError as e: - return False, "Failed to open file %s! \n Error message is: %s" % (filename, e) + return False, "Failed to open file %s! \n Error message is: %s" % (filename, e) + except OSError as e: + return False, "Failed to open file %s! \n Error message is: %s\n Probably no nix file?!" % (filename, e) def close(self): - print("close file") - # TODO check if there are any open file requests! + # TODO check if there are any pending file requests! if self._nix_file is not None and self._nix_file.is_open(): self._nix_file.close() self._nix_file = None - self._file_requests = [] \ No newline at end of file + self._file_requests = [] + + @property + def is_valid(self): + return self._nix_file is not None and self._nix_file.is_open() \ No newline at end of file