[file handler] make singleton class

This commit is contained in:
Jan Grewe 2020-12-27 12:28:16 +01:00
parent 3041dc60f8
commit 6d5d31b83c

View File

@ -2,9 +2,17 @@ import os
import nixio as nix import nixio as nix
from nixio import file 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: def __init__(self) -> None:
print("Handler Init")
super().__init__() super().__init__()
self._nix_file = None self._nix_file = None
self._file_requests = [] self._file_requests = []
@ -15,7 +23,6 @@ class FileHandler():
Args: Args:
filename ([type]): [description] filename ([type]): [description]
""" """
print("open file: %s" % filename)
self.close() self.close()
if not os.path.exists(filename): if not os.path.exists(filename):
@ -25,11 +32,16 @@ class FileHandler():
return True, "Successfully opened file %s." % filename.split(os.sep)[-1] return True, "Successfully opened file %s." % filename.split(os.sep)[-1]
except RuntimeError as e: 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): def close(self):
print("close file") # TODO check if there are any pending file requests!
# TODO check if there are any open file requests!
if self._nix_file is not None and self._nix_file.is_open(): if self._nix_file is not None and self._nix_file.is_open():
self._nix_file.close() self._nix_file.close()
self._nix_file = None self._nix_file = None
self._file_requests = [] self._file_requests = []
@property
def is_valid(self):
return self._nix_file is not None and self._nix_file.is_open()