Source code for can.io.generic

# coding: utf-8

"""
Contains a generic class for file IO.
"""

from abc import ABCMeta, abstractmethod

from can import Listener


[docs]class BaseIOHandler(object): """A generic file handler that can be used for reading and writing. Can be used as a context manager. :attr file-like file: the file-like object that is kept internally, or None if none was opened """ __metaclass__ = ABCMeta def __init__(self, file, mode='rt'): """ :param file: a path-like object to open a file, a file-like object to be used as a file or `None` to not use a file at all :param str mode: the mode that should be used to open the file, see :func:`open`, ignored if *file* is `None` """ if file is None or (hasattr(file, 'read') and hasattr(file, 'write')): # file is None or some file-like object self.file = file else: # file is some path-like object self.file = open(file, mode) # for multiple inheritance super(BaseIOHandler, self).__init__() def __enter__(self): return self def __exit__(self, *args): self.stop() def stop(self): if self.file is not None: # this also implies a flush() self.file.close()