File size: 2,069 Bytes
4ad5efa
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
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