Source code for pynion.filesystem._filetypes.compressedfile

import bz2
import gzip

from .basefile import BaseFile


[docs]class CompressedFile(BaseFile): """ The **CompressedFile** :py:class:`pynion.Multiton` is a file management object created directly through the py:class:`pynion.File` factory. Extends :py:class:`pynion.filesystem._filetypes.BaseFile` It specifically manages compressed files. Allows the with statement in read files. """ def __init__(self, file_name, action, ctype): super(CompressedFile, self).__init__(file_name, action) self.ctype = ctype ############ # BOOLEANS # ############ @property def is_gzipped(self): """ :return: Check if compression is gzip :rtype: bool """ return self.ctype == 'gzip' @property def is_bzipped(self): """ :return: Check if compression is bzip :rtype: bool """ return self.ctype == 'bzip' #################### # METHODS: ON FILE # ####################
[docs] def open(self): """ Open the file in the previously defined action type. :rtype: self """ if self.is_open: return self if self.is_gzipped: self._fd = gzip.open(self.full, self.action) elif self.is_bzipped: self._fd = bz2.BZ2File(self.full, self.action) return self
[docs] def flush(self): """ :raise: :py:class:`pynion.errors.fe.FileWrongRequestedActionError` if opened in read mode. """ self._work_action('w') if self.is_bzipped: return self._fd.flush()