""" Патч для виправлення проблем з правами доступу в 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-патч не активований (не в контейнері)")