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)
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)
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
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)
def close(file: File) -> None: if file.is_opened(): file.file_object.close()