Source code for GLXCurses.libs.File

#!/usr/bin/env python
# -*- coding: utf-8 -*-

# It script it publish under GNU GENERAL PUBLIC LICENSE
# http://www.gnu.org/licenses/gpl-3.0.en.html
# Author: the Galaxie Curses Team, all rights reserved
import os


[docs]class File(object): def __init__(self): self.__path = None self.__directory = None self.__name = None self.__extension = None self.__overwrite = None self.extension = None self.name = None self.directory = None self.path = None self.overwrite = None @property def extension(self): return self.__extension @extension.setter def extension(self, value=None): """ Set the ``extension`` property value :param value: The extension of the file :type value: str or None :raise TypeError: When ``extension`` value is not a str type or None """ if value is not None and type(value) != tuple and type(value) != str: raise TypeError('"extension" value must be a str type or None') if value is None: if self.extension is not None: self.__extension = None if value is not None and self.extension != value: self.__extension = value @property def name(self): return self.__name @name.setter def name(self, value=None): """ Set the name property value :param value: The name of the file :type value: str or None :raise TypeError: When ``name`` value is not a str type or None """ if value is not None and type(value) != str: raise TypeError('"name" value must be a str type or None') if value is None: if self.name is not None: self.__name = None if value is not None and self.name != value: self.__name = value @property def directory(self): return self.__directory @directory.setter def directory(self, value=None): """ Set the directory property value :param value: The path of the file :type value: str or None :raise TypeError: When ``directory`` value is not a str type or None """ if value is not None and type(value) != str: raise TypeError('"directory" value must be a str type or None') if value is None: if self.directory is not None: self.__directory = None if value is not None and self.directory != value: self.__directory = value @property def path(self): if self.directory is not None and self.name is not None: if self.extension: return os.path.join( self.directory, "{0}{1}".format(self.name, self.extension) ) else: return os.path.join(self.directory, self.name) else: return None @path.setter def path(self, value=None): """ Set the path property value :param value: The path of the file :type value: str or None :raise TypeError: When value is not a str type or None """ if value is not None and type(value) != str: raise TypeError('"path" value must be a str type or None') self.extension = None self.name = None self.directory = None self.__path = None if value is not None: # Filename isolation if os.path.basename(value).startswith("."): self.name = ".{0}".format( os.path.basename(value)[1:].split(".")[0]) else: self.name = os.path.basename(value).split(".")[0] # Extension and post process spilt = os.path.basename(value).split(".") if spilt[0] == "": spilt.pop(0) if len(spilt) >= 1: spilt.pop(0) if ".".join(spilt) != "": self.extension = ".{0}".format(".".join(spilt)) # Directory self.directory = os.path.dirname(value) @property def overwrite(self): return self.__overwrite @overwrite.setter def overwrite(self, value=None): """ Set the overwrite property value :param value: If the file can be overwrite :type value: bool or None :raise TypeError: When value is not a bool type or None """ if value is None: if self.overwrite is not False: self.__overwrite = False else: if type(value) != bool: raise TypeError( "'overwrite' value must be a bool type or None") if self.overwrite != value: self.__overwrite = value
[docs] def is_binary(self): if os.path.exists(os.path.realpath(self.path)): if os.path.isfile(self.path) or os.path.islink(os.path.realpath(self.path)): fin = open(os.path.realpath(self.path), "rb") try: chunk_size = 1024 while 1: chunk = fin.read(chunk_size) if b"\0" in chunk: return True if len(chunk) < chunk_size: break finally: fin.close() return False else: raise FileNotFoundError("File Not Found")
[docs] def is_text(self): if os.path.exists(os.path.realpath(self.path)): if os.path.isfile(self.path) or os.path.islink(os.path.realpath(self.path)): fin = open(os.path.realpath(self.path), "rb") try: chunk_size = 1024 while 1: chunk = fin.read(chunk_size) if b"\0" in chunk: return False if len(chunk) < chunk_size: break finally: fin.close() return True else: raise FileNotFoundError("File Not Found")
[docs] def found_best_output_file_name(self): output_file = None if os.path.exists(self.path): if self.overwrite: output_file = self.path else: i = 1 if self.extension: extension = self.extension else: extension = "" while os.path.exists( os.path.join( self.directory, "{0}-{1}{2}".format( self.name, i, extension) ) ): i += 1 output_file = os.path.join( self.directory, "{0}-{1}{2}".format( self.name, i, extension) ) return output_file