Update app.py
Browse files
app.py
CHANGED
|
@@ -27,9 +27,9 @@ logging.basicConfig(level=logging.INFO, format='%(asctime)s - %(levelname)s - %(
|
|
| 27 |
if not HF_TOKEN_WRITE:
|
| 28 |
logging.error("HF_TOKEN_WRITE не установлен. Убедитесь, что переменная окружения HF_TOKEN задана.")
|
| 29 |
else:
|
| 30 |
-
logging.info("HF_TOKEN_WRITE
|
| 31 |
|
| 32 |
-
# Инициализация файла базы данных
|
| 33 |
def initialize_data_file():
|
| 34 |
if not os.path.exists(DATA_FILE):
|
| 35 |
logging.info(f"Файл {DATA_FILE} не найден, создается новый.")
|
|
@@ -39,26 +39,35 @@ def initialize_data_file():
|
|
| 39 |
@cache.memoize(timeout=300)
|
| 40 |
def load_data():
|
| 41 |
try:
|
| 42 |
-
|
| 43 |
-
|
| 44 |
-
|
| 45 |
-
|
| 46 |
-
logging.
|
| 47 |
-
|
| 48 |
-
|
| 49 |
-
|
| 50 |
-
|
| 51 |
-
|
| 52 |
-
|
| 53 |
-
|
| 54 |
-
|
| 55 |
-
|
| 56 |
-
|
| 57 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 58 |
except Exception as e:
|
| 59 |
logging.error(f"Ошибка при загрузке данных: {e}")
|
| 60 |
initialize_data_file()
|
| 61 |
-
|
|
|
|
| 62 |
|
| 63 |
def save_data(data):
|
| 64 |
try:
|
|
@@ -75,7 +84,6 @@ def upload_db_to_hf():
|
|
| 75 |
try:
|
| 76 |
if not os.path.exists(DATA_FILE):
|
| 77 |
logging.warning(f"Файл {DATA_FILE} не существует, пропускаем загрузку")
|
| 78 |
-
initialize_data_file()
|
| 79 |
return
|
| 80 |
api = HfApi()
|
| 81 |
api.upload_file(
|
|
@@ -86,9 +94,9 @@ def upload_db_to_hf():
|
|
| 86 |
token=HF_TOKEN_WRITE,
|
| 87 |
commit_message=f"Бэкап {datetime.now().strftime('%Y-%m-%d %H:%M:%S')}"
|
| 88 |
)
|
| 89 |
-
logging.info("База данных загружена на Hugging Face")
|
| 90 |
except Exception as e:
|
| 91 |
-
logging.error(f"Ошибка при загрузке базы
|
| 92 |
|
| 93 |
def download_db_from_hf():
|
| 94 |
try:
|
|
@@ -100,7 +108,7 @@ def download_db_from_hf():
|
|
| 100 |
local_dir=".",
|
| 101 |
local_dir_use_symlinks=False
|
| 102 |
)
|
| 103 |
-
logging.info("База данных скачана с Hugging Face")
|
| 104 |
except Exception as e:
|
| 105 |
logging.error(f"Ошибка при скачивании базы данных: {e}")
|
| 106 |
if not os.path.exists(DATA_FILE):
|
|
@@ -344,7 +352,7 @@ def register():
|
|
| 344 |
|
| 345 |
html = '''
|
| 346 |
<!DOCTYPE html>
|
| 347 |
-
<html lang="
|
| 348 |
<head>
|
| 349 |
<meta charset="UTF-8">
|
| 350 |
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
|
@@ -385,7 +393,7 @@ def login():
|
|
| 385 |
|
| 386 |
html = '''
|
| 387 |
<!DOCTYPE html>
|
| 388 |
-
<html lang="
|
| 389 |
<head>
|
| 390 |
<meta charset="UTF-8">
|
| 391 |
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
|
@@ -456,10 +464,10 @@ def dashboard():
|
|
| 456 |
file.save(temp_path)
|
| 457 |
file_size = os.path.getsize(temp_path)
|
| 458 |
|
| 459 |
-
# Логика загрузки файла на Hugging Face (взята из Code 1)
|
| 460 |
api = HfApi()
|
| 461 |
file_path = f"cloud_files/{token}_{filename}"
|
| 462 |
try:
|
|
|
|
| 463 |
api.upload_file(
|
| 464 |
path_or_fileobj=temp_path,
|
| 465 |
path_in_repo=file_path,
|
|
@@ -479,7 +487,7 @@ def dashboard():
|
|
| 479 |
file_info = {
|
| 480 |
'filename': filename,
|
| 481 |
'path': file_path,
|
| 482 |
-
'
|
| 483 |
'upload_date': datetime.now().strftime('%Y-%m-%d %H:%M:%S'),
|
| 484 |
'size': file_size
|
| 485 |
}
|
|
@@ -495,7 +503,7 @@ def dashboard():
|
|
| 495 |
|
| 496 |
html = '''
|
| 497 |
<!DOCTYPE html>
|
| 498 |
-
<html lang="
|
| 499 |
<head>
|
| 500 |
<meta charset="UTF-8">
|
| 501 |
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
|
@@ -613,6 +621,7 @@ def logout():
|
|
| 613 |
return redirect(url_for('login'))
|
| 614 |
|
| 615 |
if __name__ == '__main__':
|
|
|
|
| 616 |
initialize_data_file()
|
| 617 |
threading.Thread(target=periodic_backup, daemon=True).start()
|
| 618 |
app.run(debug=True, host='0.0.0.0', port=7860)
|
|
|
|
| 27 |
if not HF_TOKEN_WRITE:
|
| 28 |
logging.error("HF_TOKEN_WRITE не установлен. Убедитесь, что переменная окружения HF_TOKEN задана.")
|
| 29 |
else:
|
| 30 |
+
logging.info(f"HF_TOKEN_WRITE установлен (первые 5 символов: {HF_TOKEN_WRITE[:5]}...)")
|
| 31 |
|
| 32 |
+
# Инициализация файла базы данных только если он не существует
|
| 33 |
def initialize_data_file():
|
| 34 |
if not os.path.exists(DATA_FILE):
|
| 35 |
logging.info(f"Файл {DATA_FILE} не найден, создается новый.")
|
|
|
|
| 39 |
@cache.memoize(timeout=300)
|
| 40 |
def load_data():
|
| 41 |
try:
|
| 42 |
+
# Сначала пытаемся загрузить локальный файл, если он существует
|
| 43 |
+
if os.path.exists(DATA_FILE):
|
| 44 |
+
with open(DATA_FILE, 'r', encoding='utf-8') as file:
|
| 45 |
+
data = json.load(file)
|
| 46 |
+
logging.info("Данные загружены из локального файла")
|
| 47 |
+
else:
|
| 48 |
+
# Если локального файла нет, скачиваем с Hugging Face
|
| 49 |
+
download_db_from_hf()
|
| 50 |
+
with open(DATA_FILE, 'r', encoding='utf-8') as file:
|
| 51 |
+
data = json.load(file)
|
| 52 |
+
logging.info("Данные загружены с Hugging Face")
|
| 53 |
+
|
| 54 |
+
if not isinstance(data, dict):
|
| 55 |
+
logging.warning("Данные не в формате dict, инициализация пустой базы")
|
| 56 |
+
return {'users': {}, 'files': {}}
|
| 57 |
+
data.setdefault('users', {})
|
| 58 |
+
data.setdefault('files', {})
|
| 59 |
+
for token, user_data in data['users'].items():
|
| 60 |
+
if 'folders' in user_data:
|
| 61 |
+
user_data['files'] = user_data['folders'].get('root', {}).get('files', [])
|
| 62 |
+
del user_data['folders']
|
| 63 |
+
if 'storage_used' not in user_data:
|
| 64 |
+
user_data['storage_used'] = 0
|
| 65 |
+
return data
|
| 66 |
except Exception as e:
|
| 67 |
logging.error(f"Ошибка при загрузке данных: {e}")
|
| 68 |
initialize_data_file()
|
| 69 |
+
with open(DATA_FILE, 'r', encoding='utf-8') as file:
|
| 70 |
+
return json.load(file)
|
| 71 |
|
| 72 |
def save_data(data):
|
| 73 |
try:
|
|
|
|
| 84 |
try:
|
| 85 |
if not os.path.exists(DATA_FILE):
|
| 86 |
logging.warning(f"Файл {DATA_FILE} не существует, пропускаем загрузку")
|
|
|
|
| 87 |
return
|
| 88 |
api = HfApi()
|
| 89 |
api.upload_file(
|
|
|
|
| 94 |
token=HF_TOKEN_WRITE,
|
| 95 |
commit_message=f"Бэкап {datetime.now().strftime('%Y-%m-%d %H:%M:%S')}"
|
| 96 |
)
|
| 97 |
+
logging.info("База данных успешно загружена на Hugging Face")
|
| 98 |
except Exception as e:
|
| 99 |
+
logging.error(f"Ошибка при загрузке базы данных на Hugging Face: {e}")
|
| 100 |
|
| 101 |
def download_db_from_hf():
|
| 102 |
try:
|
|
|
|
| 108 |
local_dir=".",
|
| 109 |
local_dir_use_symlinks=False
|
| 110 |
)
|
| 111 |
+
logging.info("База данных успешно скачана с Hugging Face")
|
| 112 |
except Exception as e:
|
| 113 |
logging.error(f"Ошибка при скачивании базы данных: {e}")
|
| 114 |
if not os.path.exists(DATA_FILE):
|
|
|
|
| 352 |
|
| 353 |
html = '''
|
| 354 |
<!DOCTYPE html>
|
| 355 |
+
<html lang="ru">
|
| 356 |
<head>
|
| 357 |
<meta charset="UTF-8">
|
| 358 |
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
|
|
|
| 393 |
|
| 394 |
html = '''
|
| 395 |
<!DOCTYPE html>
|
| 396 |
+
<html lang="ru">
|
| 397 |
<head>
|
| 398 |
<meta charset="UTF-8">
|
| 399 |
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
|
|
|
| 464 |
file.save(temp_path)
|
| 465 |
file_size = os.path.getsize(temp_path)
|
| 466 |
|
|
|
|
| 467 |
api = HfApi()
|
| 468 |
file_path = f"cloud_files/{token}_{filename}"
|
| 469 |
try:
|
| 470 |
+
logging.info(f"Попытка загрузки файла: {filename} в {file_path}")
|
| 471 |
api.upload_file(
|
| 472 |
path_or_fileobj=temp_path,
|
| 473 |
path_in_repo=file_path,
|
|
|
|
| 487 |
file_info = {
|
| 488 |
'filename': filename,
|
| 489 |
'path': file_path,
|
| 490 |
+
' éxtra': get_file_type(filename),
|
| 491 |
'upload_date': datetime.now().strftime('%Y-%m-%d %H:%M:%S'),
|
| 492 |
'size': file_size
|
| 493 |
}
|
|
|
|
| 503 |
|
| 504 |
html = '''
|
| 505 |
<!DOCTYPE html>
|
| 506 |
+
<html lang="ru">
|
| 507 |
<head>
|
| 508 |
<meta charset="UTF-8">
|
| 509 |
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
|
|
|
| 621 |
return redirect(url_for('login'))
|
| 622 |
|
| 623 |
if __name__ == '__main__':
|
| 624 |
+
# Инициализация только если файла нет
|
| 625 |
initialize_data_file()
|
| 626 |
threading.Thread(target=periodic_backup, daemon=True).start()
|
| 627 |
app.run(debug=True, host='0.0.0.0', port=7860)
|