示例#1
0
    def open(file: File) -> None:
        if file.is_opened():
            return

        file.file_object = open(file.path, "rb")

        FileController.set_name(file)
        FileController.set_file_size(file)
        FileController.set_file_checksum(file)
示例#2
0
    def set_file_checksum(file: File) -> None:
        if file.is_opened() and file.current_chunk == 0:
            checksum_function = hashlib.md5()

            for chunk in iter(lambda: file.file_object.read(file.chunk_size),
                              b""):
                checksum_function.update(chunk)

            file.checksum = checksum_function.hexdigest()
            FileController.go_to_byte(file, 0)
示例#3
0
    def set_file_size(file: File) -> None:
        try:
            size = os.path.getsize(file.path)
        except os.error:
            return None

        file.size = size
示例#4
0
 def from_path_list(path_list: List[str], file_list: List[File],
                    chunk_size: int):
     for path in path_list:
         try:
             file_list.append(File(path, chunk_size))
         except FileExistsError:
             pass  # TODO: Implement
示例#5
0
    def read(file: File) -> None:
        if not file.is_opened():
            FileController.open(file)

        if file.current_chunk == -1:
            raise EndOfFile

        file.current_chunk_data = file.file_object.read(file.chunk_size)

        if file.current_chunk_data == b"":
            file.current_chunk = -1
            raise EndOfFile

        current_chunk_size = len(file.current_chunk_data)

        FileController.set_chunk_checksum(file)
        file.total_bytes_sent += current_chunk_size
        file.current_chunk_size = current_chunk_size
        file.current_chunk += 1
示例#6
0
    def set_content(directory: Directory, chunk_size: int) -> None:
        DirectoryController.set_name(directory)

        for element in os.listdir(directory.path):
            element_path = os.path.join(directory.path, element)

            if os.path.isdir(element_path):
                new_directory = Directory(element_path+"/", directory.level + 1)

                directory.sub_directories_list.append(new_directory)
                DirectoryController.set_content(new_directory, chunk_size)
            elif os.path.isfile(element_path):
                directory.files_list.append(File(element_path, chunk_size))
示例#7
0
 def go_to_byte(file: File, byte_number: int) -> None:
     if file.is_opened() and byte_number <= file.size:
         file.file_object.seek(byte_number)
示例#8
0
 def close(file: File) -> None:
     if file.is_opened():
         file.file_object.close()
示例#9
0
 def update_last_chunk_time(file: File) -> None:
     file.last_chunk_sent_time = datetime.now()
示例#10
0
    def set_chunk_checksum(file: File) -> None:
        if file.current_chunk_data is not None:
            checksum_function = hashlib.md5()
            checksum_function.update(file.current_chunk_data)

            file.current_chunk_checksum = checksum_function.hexdigest()
示例#11
0
 def set_name(file: File) -> None:
     file.name = file.path.split("/")[-1]