File size: 3,171 Bytes
bb6217a
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
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
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
"""
Патч для виправлення проблем з правами доступу в Docker-контейнері HuggingFace Spaces.
Цей файл повинен бути імпортований перед створенням директорій у вашому додатку.

Використання:
1. Додайте цей файл до свого репозиторію
2. Додайте цей імпорт на початку app.py:
   import docker_patch
"""

import os
import sys
import logging
from pathlib import Path
import shutil

# Перевіряємо, чи в контейнері
IN_DOCKER = os.path.exists('/.dockerenv')

if IN_DOCKER:
    # Базові шляхи для Docker
    BASE_DIR = "/tmp/jira_assistant"
    
    # Створення директорій
    os.makedirs(BASE_DIR, exist_ok=True)
    for directory in ["data", "reports", "temp", "logs"]:
        os.makedirs(os.path.join(BASE_DIR, directory), exist_ok=True)
    
    # Патчимо шляхи
    original_mkdir = Path.mkdir
    def patched_mkdir(self, mode=0o777, parents=False, exist_ok=False):
        # Якщо шлях вказаний відносно, змінюємо його на шлях в /tmp
        if str(self).startswith(('data', 'reports', 'temp', 'logs')):
            # Створюємо новий шлях в /tmp
            new_path = Path(os.path.join(BASE_DIR, str(self)))
            return original_mkdir(new_path, mode, parents, exist_ok)
        return original_mkdir(self, mode, parents, exist_ok)
    
    # Заміняємо оригінальний метод на наш патч
    Path.mkdir = patched_mkdir
    
    # Патчимо os.path.join
    original_join = os.path.join
    def patched_join(*args):
        result = original_join(*args)
        if isinstance(result, str) and result.startswith(('data/', 'reports/', 'temp/', 'logs/')):
            return original_join(BASE_DIR, result)
        return result
    
    # Заміняємо функцію
    os.path.join = patched_join
    
    # Налаштування логування
    try:
        log_path = os.path.join(BASE_DIR, "logs", "jira_assistant.log")
        log_handler = logging.FileHandler(log_path)
        print(f"Логування встановлено в: {log_path}")
    except Exception as e:
        print(f"Не вдалося створити файл логів: {e}")
        log_handler = logging.StreamHandler()
    
    # Перевизначаємо оригінальні функції для роботи з файлами
    original_open = open
    def patched_open(file, *args, **kwargs):
        if isinstance(file, str) and file.startswith(('data/', 'reports/', 'temp/', 'logs/')):
            file = os.path.join(BASE_DIR, file)
        return original_open(file, *args, **kwargs)
    
    # Заміняємо функцію
    open = patched_open
    
    print(f"Docker-патч активовано. Всі операції з файлами будуть перенаправлені в {BASE_DIR}")
else:
    print("Docker-патч не активований (не в контейнері)")