from io import BytesIO
# Теперь функция принимает не путь к файлу, а буфер
def calculate_hash(readable_buffer):
hash_md5 = hashlib.md5()
for chunk in iter(lambda: readable_buffer.read(4096), b''):
hash_md5.update(chunk)
return hash_md5.hexdigest()
# Получить хэш локального файла
with open(file_path, 'rb') as f:
hash_local = calculate_hash(f)
# Получить хэш файла с удаленного сервера
readable_buffer = BytesIO() # Буфер, куда будет скачан файл
webdav_client.download_to(buff=readable_buffer, remote_path=webdav_url + '/' + filename) # Скачавание файла
readable_buffer.seek(0) # Перемещение указателя на начало буфера, чтобы корректно прочитать скачанный файл
hash_remote = calculate_hash(readable_buffer) # Вычисление хеша
def cache_deco(func):
cache = {}
def wrapper(*args):
if args in cache:
return cache[args]
result = func(*args)
cache[args] = result
return result
return wrapper
def solution(func_map, func_filter, data):
filtered_data = filter(func_filter, data)
mapped_data = map(func_map, filtered_data)
for i, data in enumerate(mapped_data):
if i % 2 == 0:
yield data
def calc():
count = 0
@cache_deco
def calc_(x):
nonlocal count
count += 1
print("Call:", count)
return x
return calc_
for i in solution(calc(), lambda x: x % 2 == 1, (1, 1, 2, 2, 2, 3, 1, 2, 3, 1)):
print(i)