import logging

log = logging.getLogger(__name__)


class HashBlobReader:
    """
    This is a file like reader class that supports
    read(size) and close()
    """
    def __init__(self, read_handle, finished_cb):
        self.finished_cb = finished_cb
        self.finished_cb_d = None
        self.read_handle = read_handle

    def __del__(self):
        if self.finished_cb_d is None:
            log.warning("Garbage collection was called, but reader for %s was not closed yet",
                        self.read_handle.name)
        self.close()

    def read(self, size=-1):
        return self.read_handle.read(size)

    def close(self):
        # if we've already closed and called finished_cb, do nothing
        if self.finished_cb_d is not None:
            return
        self.read_handle.close()
        self.finished_cb_d = self.finished_cb(self)