diff --git "a/app.py" "b/app.py"
--- "a/app.py"
+++ "b/app.py"
@@ -1,5 +1,4 @@
-# -*- coding: utf-8 -*-
-from flask import Flask, render_template_string, request, redirect, url_for, send_file
+from flask import Flask, render_template_string, request, redirect, url_for
import json
import os
import logging
@@ -9,76 +8,42 @@ from datetime import datetime
from huggingface_hub import HfApi, hf_hub_download
from huggingface_hub.utils import RepositoryNotFoundError
from werkzeug.utils import secure_filename
-from urllib.parse import quote
app = Flask(__name__)
-DATA_FILE = 'data.json'
+DATA_FILE = 'data_fabrics.json'
-REPO_ID = "Kgshop/Mebelhause"
+REPO_ID = "Kgshop/Konka"
HF_TOKEN_WRITE = os.getenv("HF_TOKEN")
HF_TOKEN_READ = os.getenv("HF_TOKEN_READ")
-LOGO_URL = "https://huggingface.co/spaces/Mebelhause/Kg/resolve/main/Screenshot_20250411-112027.png"
-WHATSAPP_NUMBER = "+996700253966"
-
-logging.basicConfig(level=logging.INFO)
+logging.basicConfig(level=logging.DEBUG)
def load_data():
try:
download_db_from_hf()
with open(DATA_FILE, 'r', encoding='utf-8') as file:
data = json.load(file)
- logging.info("Данные успешно загружены из JSON")
if not isinstance(data, dict) or 'products' not in data or 'categories' not in data:
- logging.warning("Структура данных некорректна, используется структура по умолчанию.")
return {'products': [], 'categories': []}
- # Ensure products and categories are lists
- if not isinstance(data.get('products'), list):
- data['products'] = []
- if not isinstance(data.get('categories'), list):
- data['categories'] = []
return data
except FileNotFoundError:
- logging.warning("Локальный файл базы данных не найден. Создание пустой базы.")
return {'products': [], 'categories': []}
except json.JSONDecodeError:
- logging.error("Ошибка: Невозможно декодировать JSON файл. Возврат пустой базы.")
return {'products': [], 'categories': []}
except RepositoryNotFoundError:
- logging.error("Репозиторий Hugging Face не найден. Создание локальной базы данных.")
- # Create an empty file if it doesn't exist locally after repo not found
- if not os.path.exists(DATA_FILE):
- with open(DATA_FILE, 'w', encoding='utf-8') as f:
- json.dump({'products': [], 'categories': []}, f)
return {'products': [], 'categories': []}
- except Exception as e:
- logging.error(f"Произошла ошибка при загрузке данных: {e}. Возврат пустой базы.")
+ except Exception:
return {'products': [], 'categories': []}
def save_data(data):
try:
- # Ensure structure is correct before saving
- if 'products' not in data or not isinstance(data['products'], list):
- data['products'] = []
- if 'categories' not in data or not isinstance(data['categories'], list):
- data['categories'] = []
-
with open(DATA_FILE, 'w', encoding='utf-8') as file:
json.dump(data, file, ensure_ascii=False, indent=4)
- logging.info("Данные успешно сохранены в JSON")
upload_db_to_hf()
- except Exception as e:
- logging.error(f"Ошибка при сохранении данных: {e}")
- # Optionally re-raise or handle differently
- # raise
+ except Exception:
+ raise
def upload_db_to_hf():
- if not HF_TOKEN_WRITE:
- logging.warning("HF_TOKEN (write) не установлен. Загрузка на Hugging Face пропущена.")
- return
- if not os.path.exists(DATA_FILE):
- logging.warning(f"Файл {DATA_FILE} не найден для загрузки.")
- return
try:
api = HfApi()
api.upload_file(
@@ -87,22 +52,12 @@ def upload_db_to_hf():
repo_id=REPO_ID,
repo_type="dataset",
token=HF_TOKEN_WRITE,
- commit_message=f"Автоматическое резервное копирование базы данных {datetime.now().strftime('%Y-%m-%d %H:%M:%S')}"
+ commit_message=f"Backup {datetime.now().strftime('%Y-%m-%d %H:%M:%S')}"
)
- logging.info("Резервная копия JSON базы успешно загружена на Hugging Face.")
- except RepositoryNotFoundError:
- logging.error(f"Репозиторий {REPO_ID} не найден на Hugging Face. Не удалось загрузить.")
- except Exception as e:
- logging.error(f"Ошибка при загрузке резервной копии на Hugging Face: {e}")
-
+ except Exception:
+ pass
def download_db_from_hf():
- if not HF_TOKEN_READ:
- logging.warning("HF_TOKEN_READ не установлен. Скачивание с Hugging Face пропущено.")
- # Attempt to create an empty file if none exists
- if not os.path.exists(DATA_FILE):
- save_data({'products': [], 'categories': []}) # Save an empty structure
- return
try:
hf_hub_download(
repo_id=REPO_ID,
@@ -110,585 +65,22 @@ def download_db_from_hf():
repo_type="dataset",
token=HF_TOKEN_READ,
local_dir=".",
- local_dir_use_symlinks=False,
- force_download=True, # Ensure we get the latest version
- resume_download=False # Avoid issues with partial downloads
+ local_dir_use_symlinks=False
)
- logging.info("JSON база успешно скачана из Hugging Face.")
- # Verify file integrity after download
- try:
- with open(DATA_FILE, 'r', encoding='utf-8') as f:
- json.load(f)
- logging.info("Проверка целостности JSON после скачивания: OK")
- except (json.JSONDecodeError, FileNotFoundError) as e:
- logging.error(f"Ошибка проверки JSON после скачивания: {e}. Файл может быть поврежден или пуст.")
- # Attempt to create a default empty file if it's broken
- save_data({'products': [], 'categories': []})
-
- except RepositoryNotFoundError as e:
- logging.error(f"Репозиторий {REPO_ID} не найден на Hugging Face: {e}")
- if not os.path.exists(DATA_FILE):
- save_data({'products': [], 'categories': []}) # Save an empty structure
- # Do not raise here, allow fallback to local/empty data
- except Exception as e:
- # Catch specific hf_hub exceptions if needed, e.g., HTTPError
- logging.error(f"Ошибка при скачивании JSON базы из Hugging Face: {e}")
- if not os.path.exists(DATA_FILE):
- save_data({'products': [], 'categories': []}) # Save an empty structure
- # Do not raise here, allow fallback to local/empty data
+ except RepositoryNotFoundError:
+ raise
+ except Exception:
+ raise
def periodic_backup():
while True:
- time.sleep(800) # Sleep first to avoid immediate backup on start
- logging.info("Запуск периодического резервного копирования...")
- # Ensure data is loaded before backup attempt
- try:
- load_data() # Reload potentially updated data
- except Exception as e:
- logging.error(f"Ошибка загрузки данных перед бэкапом: {e}")
- # Now attempt upload
upload_db_to_hf()
+ time.sleep(800)
-# --- Global Styles ---
-GLOBAL_STYLES = """
-
-
-
-
-"""
-
-# --- Landing Page ---
@app.route('/')
-def landing():
- landing_html = '''
-
-
-