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