Eluza133 commited on
Commit
1c5c1ac
·
verified ·
1 Parent(s): 8911d55

Update app.py

Browse files
Files changed (1) hide show
  1. app.py +18 -32
app.py CHANGED
@@ -1,4 +1,4 @@
1
- from flask import Flask, render_template_string, request, redirect, url_for, session, flash, jsonify
2
  from flask_caching import Cache
3
  import json
4
  import os
@@ -10,11 +10,10 @@ from huggingface_hub import HfApi, hf_hub_download
10
  from werkzeug.utils import secure_filename
11
  import random
12
  import string
13
- import traceback
14
 
15
  app = Flask(__name__)
16
  app.secret_key = os.getenv("FLASK_SECRET_KEY", "supersecretkey")
17
- DATA_FILE = 'cloud_data.json' # Can be changed to an absolute path if needed, e.g., os.path.join(os.getcwd(), 'cloud_data.json')
18
  REPO_ID = "Eluza133/Z1e1u"
19
  HF_TOKEN_WRITE = os.getenv("HF_TOKEN")
20
  HF_TOKEN_READ = os.getenv("HF_TOKEN_READ") or HF_TOKEN_WRITE
@@ -30,14 +29,13 @@ if not HF_TOKEN_WRITE:
30
  else:
31
  logging.info("HF_TOKEN_WRITE успешно установлен (первые 5 символов: {0}...)".format(HF_TOKEN_WRITE[:5]))
32
 
33
- # Инициализация файла базы данных при старте, если он не существует
34
  def initialize_data_file():
35
  if not os.path.exists(DATA_FILE):
36
  logging.info(f"Файл {DATA_FILE} не найден, создается новый.")
37
  with open(DATA_FILE, 'w', encoding='utf-8') as f:
38
  json.dump({'users': {}, 'files': {}}, f)
39
 
40
- # Функции для работы с базой данных и Hugging Face
41
  @cache.memoize(timeout=300)
42
  def load_data():
43
  try:
@@ -58,30 +56,28 @@ def load_data():
58
  logging.info("Данные успешно загружены")
59
  return data
60
  except Exception as e:
61
- logging.error(f"Ошибка при загрузке данных: {e}\n{traceback.format_exc()}")
62
- initialize_data_file() # Создаем файл, если загрузка не удалась
63
  return {'users': {}, 'files': {}}
64
 
65
  def save_data(data):
66
  try:
67
  with open(DATA_FILE, 'w', encoding='utf-8') as file:
68
  json.dump(data, file, ensure_ascii=False, indent=4)
69
- logging.info(f"Файл {DATA_FILE} успешно сохранен локально")
70
  upload_db_to_hf()
71
  cache.clear()
72
- logging.info("Данные сохранены и загружены на HF")
73
  except Exception as e:
74
- logging.error(f"Ошибка при сохранении данных: {e}\n{traceback.format_exc()}")
75
  raise
76
 
77
  def upload_db_to_hf():
78
  try:
79
  if not os.path.exists(DATA_FILE):
80
- logging.warning(f"Файл {DATA_FILE} не существует, пропускаем загрузку на Hugging Face")
81
- initialize_data_file() # Создаем пустой файл, чтобы избежать повторных ошибок
82
  return
83
  api = HfApi()
84
- logging.info(f"Загрузка файла {DATA_FILE} в {REPO_ID}")
85
  api.upload_file(
86
  path_or_fileobj=DATA_FILE,
87
  path_in_repo=DATA_FILE,
@@ -92,7 +88,7 @@ def upload_db_to_hf():
92
  )
93
  logging.info("База данных загружена на Hugging Face")
94
  except Exception as e:
95
- logging.error(f"Ошибка при загрузке базы данных: {e}\n{traceback.format_exc()}")
96
 
97
  def download_db_from_hf():
98
  try:
@@ -106,20 +102,18 @@ def download_db_from_hf():
106
  )
107
  logging.info("База данных скачана с Hugging Face")
108
  except Exception as e:
109
- logging.error(f"Ошибка при скачивании базы данных: {e}\n{traceback.format_exc()}")
110
  if not os.path.exists(DATA_FILE):
111
  initialize_data_file()
112
 
113
  def periodic_backup():
114
  while True:
115
  upload_db_to_hf()
116
- time.sleep(1800)
117
 
118
- # Генерация 13-значного токена
119
  def generate_token():
120
  return ''.join(random.choices(string.ascii_letters + string.digits, k=13))
121
 
122
- # Определение типа файла для предпросмотра
123
  def get_file_type(filename):
124
  video_extensions = ('.mp4', '.mov', '.avi')
125
  image_extensions = ('.jpg', '.jpeg', '.png', '.gif')
@@ -129,7 +123,6 @@ def get_file_type(filename):
129
  return 'image'
130
  return 'other'
131
 
132
- # Базовый стиль CSS (без изменений)
133
  BASE_STYLE = '''
134
  :root {
135
  --primary: #ff4d6d;
@@ -331,7 +324,6 @@ body.dark .progress-text, body.dark .storage-text {
331
  }
332
  '''
333
 
334
- # Регистрация через /admhosto
335
  @app.route('/admhosto', methods=['GET', 'POST'])
336
  def register():
337
  if request.method == 'POST':
@@ -380,7 +372,6 @@ def register():
380
  '''
381
  return render_template_string(html)
382
 
383
- # Главная страница с вводом токена
384
  @app.route('/', methods=['GET', 'POST'])
385
  def login():
386
  if request.method == 'POST':
@@ -429,7 +420,6 @@ def login():
429
  '''
430
  return render_template_string(html)
431
 
432
- # Личный dashboard
433
  @app.route('/dashboard', methods=['GET', 'POST'])
434
  def dashboard():
435
  if 'token' not in session:
@@ -457,22 +447,19 @@ def dashboard():
457
  if storage_used + total_size > max_storage_bytes:
458
  flash('Недостаточно места для загрузки файлов!')
459
  else:
 
 
460
  for file in files:
461
  if file and file.filename:
462
  filename = secure_filename(file.filename)
463
- temp_path = os.path.join('uploads', filename)
464
- os.makedirs('uploads', exist_ok=True)
465
  file.save(temp_path)
466
  file_size = os.path.getsize(temp_path)
467
 
 
468
  api = HfApi()
469
  file_path = f"cloud_files/{token}_{filename}"
470
  try:
471
- logging.info(f"Попытка загрузки файла: {file_path} в репозиторий {REPO_ID}")
472
- if not HF_TOKEN_WRITE:
473
- raise ValueError("HF_TOKEN_WRITE не установлен")
474
- api.repo_info(repo_id=REPO_ID, repo_type="dataset", token=HF_TOKEN_WRITE)
475
- logging.info(f"Репозиторий доступен, загрузка файла: {filename}")
476
  api.upload_file(
477
  path_or_fileobj=temp_path,
478
  path_in_repo=file_path,
@@ -483,7 +470,7 @@ def dashboard():
483
  )
484
  logging.info(f"Файл {filename} успешно загружен в Hugging Face")
485
  except Exception as e:
486
- logging.error(f"Ошибка при загрузке файла на Hugging Face: {e}\n{traceback.format_exc()}")
487
  flash(f"Ошибка при загрузке файла {filename}: {str(e)}")
488
  if os.path.exists(temp_path):
489
  os.remove(temp_path)
@@ -620,13 +607,12 @@ def dashboard():
620
  MAX_STORAGE_GB=MAX_STORAGE_GB
621
  )
622
 
623
- # Выход
624
  @app.route('/logout')
625
  def logout():
626
  session.pop('token', None)
627
  return redirect(url_for('login'))
628
 
629
  if __name__ == '__main__':
630
- initialize_data_file() # Инициализация файла при запуске приложения
631
  threading.Thread(target=periodic_backup, daemon=True).start()
632
  app.run(debug=True, host='0.0.0.0', port=7860)
 
1
+ from flask import Flask, render_template_string, request, redirect, url_for, session, flash
2
  from flask_caching import Cache
3
  import json
4
  import os
 
10
  from werkzeug.utils import secure_filename
11
  import random
12
  import string
 
13
 
14
  app = Flask(__name__)
15
  app.secret_key = os.getenv("FLASK_SECRET_KEY", "supersecretkey")
16
+ DATA_FILE = 'cloud_data.json'
17
  REPO_ID = "Eluza133/Z1e1u"
18
  HF_TOKEN_WRITE = os.getenv("HF_TOKEN")
19
  HF_TOKEN_READ = os.getenv("HF_TOKEN_READ") or HF_TOKEN_WRITE
 
29
  else:
30
  logging.info("HF_TOKEN_WRITE успешно установлен (первые 5 символов: {0}...)".format(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} не найден, создается новый.")
36
  with open(DATA_FILE, 'w', encoding='utf-8') as f:
37
  json.dump({'users': {}, 'files': {}}, f)
38
 
 
39
  @cache.memoize(timeout=300)
40
  def load_data():
41
  try:
 
56
  logging.info("Данные успешно загружены")
57
  return data
58
  except Exception as e:
59
+ logging.error(f"Ошибка при загрузке данных: {e}")
60
+ initialize_data_file()
61
  return {'users': {}, 'files': {}}
62
 
63
  def save_data(data):
64
  try:
65
  with open(DATA_FILE, 'w', encoding='utf-8') as file:
66
  json.dump(data, file, ensure_ascii=False, indent=4)
67
+ logging.info(f"Данные успешно сохранены в {DATA_FILE}")
68
  upload_db_to_hf()
69
  cache.clear()
 
70
  except Exception as e:
71
+ logging.error(f"Ошибка при сохранении данных: {e}")
72
  raise
73
 
74
  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(
82
  path_or_fileobj=DATA_FILE,
83
  path_in_repo=DATA_FILE,
 
88
  )
89
  logging.info("База данных загружена на Hugging Face")
90
  except Exception as e:
91
+ logging.error(f"Ошибка при загрузке базы данных: {e}")
92
 
93
  def download_db_from_hf():
94
  try:
 
102
  )
103
  logging.info("База данных скачана с Hugging Face")
104
  except Exception as e:
105
+ logging.error(f"Ошибка при скачивании базы данных: {e}")
106
  if not os.path.exists(DATA_FILE):
107
  initialize_data_file()
108
 
109
  def periodic_backup():
110
  while True:
111
  upload_db_to_hf()
112
+ time.sleep(1800) # 30 минут
113
 
 
114
  def generate_token():
115
  return ''.join(random.choices(string.ascii_letters + string.digits, k=13))
116
 
 
117
  def get_file_type(filename):
118
  video_extensions = ('.mp4', '.mov', '.avi')
119
  image_extensions = ('.jpg', '.jpeg', '.png', '.gif')
 
123
  return 'image'
124
  return 'other'
125
 
 
126
  BASE_STYLE = '''
127
  :root {
128
  --primary: #ff4d6d;
 
324
  }
325
  '''
326
 
 
327
  @app.route('/admhosto', methods=['GET', 'POST'])
328
  def register():
329
  if request.method == 'POST':
 
372
  '''
373
  return render_template_string(html)
374
 
 
375
  @app.route('/', methods=['GET', 'POST'])
376
  def login():
377
  if request.method == 'POST':
 
420
  '''
421
  return render_template_string(html)
422
 
 
423
  @app.route('/dashboard', methods=['GET', 'POST'])
424
  def dashboard():
425
  if 'token' not in session:
 
447
  if storage_used + total_size > max_storage_bytes:
448
  flash('Недостаточно места для загрузки файлов!')
449
  else:
450
+ uploads_dir = 'uploads'
451
+ os.makedirs(uploads_dir, exist_ok=True)
452
  for file in files:
453
  if file and file.filename:
454
  filename = secure_filename(file.filename)
455
+ temp_path = os.path.join(uploads_dir, filename)
 
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,
 
470
  )
471
  logging.info(f"Файл {filename} успешно загружен в Hugging Face")
472
  except Exception as e:
473
+ logging.error(f"Ошибка при загрузке файла на Hugging Face: {e}")
474
  flash(f"Ошибка при загрузке файла {filename}: {str(e)}")
475
  if os.path.exists(temp_path):
476
  os.remove(temp_path)
 
607
  MAX_STORAGE_GB=MAX_STORAGE_GB
608
  )
609
 
 
610
  @app.route('/logout')
611
  def logout():
612
  session.pop('token', None)
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)