import hashlib import pandas as pd import json import logging logger = logging.getLogger(__name__) def generate_data_hash(data, key_columns=None): """ Генерація хешу для даних. Args: data: DataFrame або словник з даними key_columns (list, optional): Список ключових колонок для хешування Returns: str: Хеш даних """ try: if isinstance(data, pd.DataFrame): # Якщо передано DataFrame if key_columns: # Фільтруємо тільки наявні колонки available_columns = [col for col in key_columns if col in data.columns] if not available_columns: # Якщо немає жодної ключової колонки, використовуємо всі дані data_str = data.to_json(orient='records') else: # Інакше використовуємо тільки ключові колонки data_str = data[available_columns].to_json(orient='records') else: # Якщо не вказано ключові колонки, використовуємо всі дані data_str = data.to_json(orient='records') elif isinstance(data, dict): # Якщо передано словник data_str = json.dumps(data, sort_keys=True) else: # Інакше конвертуємо в рядок data_str = str(data) # Створюємо хеш hash_object = hashlib.sha256(data_str.encode()) data_hash = hash_object.hexdigest() return data_hash except Exception as e: logger.error(f"Помилка при генерації хешу даних: {e}") # У випадку помилки повертаємо None return None