Kgshop commited on
Commit
2c5619c
·
verified ·
1 Parent(s): 41f6b2a

Update app.py

Browse files
Files changed (1) hide show
  1. app.py +35 -20
app.py CHANGED
@@ -27,7 +27,7 @@ def load_data():
27
  data = json.load(file)
28
  logging.info("Данные успешно загружены из JSON")
29
  if not isinstance(data, dict) or 'products' not in data or 'categories' not in data:
30
- return {'products': [], 'categories': []} # Corrected: return empty dict with lists
31
  return data
32
  except FileNotFoundError:
33
  logging.warning("Локальный файл базы данных не найден после скачивания.")
@@ -2377,7 +2377,7 @@ def favorites_page():
2377
  const cartContent = document.getElementById('cartContent');
2378
  let total = 0;
2379
 
2380
- cartContent.innerHTML = cart.length === 0 ? '<p>Корзина пуста</p>' : cart.map(item => {
2381
  const itemTotal = item.price * item.quantity;
2382
  total += itemTotal;
2383
  return `
@@ -2836,9 +2836,9 @@ def discounts_page():
2836
  </div>
2837
  <div class="products-grid" id="products-grid">
2838
  {% for product in products %}
2839
- <div class="product"
2840
  onclick="openModal({{ loop.index0 }})"
2841
- data-name="{{ product['name']|lower }}"
2842
  data-description="{{ product['description']|lower }}"
2843
  data-category="{{ product.get('category', 'Без категории') }}">
2844
  <button class="favorite-button" onclick="event.stopPropagation(); toggleFavorite({{ loop.index0 }})">
@@ -2846,8 +2846,8 @@ def discounts_page():
2846
  </button>
2847
  {% if product.get('photos') and product['photos']|length > 0 %}
2848
  <div class="product-image">
2849
- <img src="https://huggingface.co/datasets/{{ repo_id }}/resolve/main/photos/{{ product['photos'][0] }}"
2850
- alt="{{ product['name'] }}"
2851
  loading="lazy">
2852
  </div>
2853
  {% endif %}
@@ -3277,26 +3277,33 @@ def admin():
3277
 
3278
  if request.method == 'POST':
3279
  action = request.form.get('action')
3280
-
3281
  if action == 'add':
3282
  photos = request.files.getlist('photos')
3283
  photo_filenames = []
3284
  for photo in photos:
3285
  if photo and photo.filename:
3286
  filename = secure_filename(photo.filename)
 
 
 
 
 
 
3287
  api = HfApi()
3288
  api.upload_file(
3289
- path_or_fileobj=photo, # Исправлено: передаем сам объект photo
3290
  path_in_repo=f"photos/{filename}",
3291
  repo_id=REPO_ID,
3292
  repo_type="dataset",
3293
  token=HF_TOKEN_WRITE
3294
  )
3295
  photo_filenames.append(filename)
3296
-
 
3297
  colors = request.form.getlist('colors')
3298
  colors = [color.strip() for color in colors if color.strip()]
3299
-
3300
  new_product = {
3301
  'name': request.form['name'],
3302
  'price': float(request.form['price']),
@@ -3309,27 +3316,35 @@ def admin():
3309
  'discount': float(request.form['discount']) if request.form['discount'] else None
3310
  }
3311
  products.append(new_product)
3312
-
3313
  elif action == 'edit':
3314
  index = int(request.form['index'])
3315
  photos = request.files.getlist('photos')
3316
  photo_filenames = products[index].get('photos', []) # Keep existing photos
 
3317
  for photo in photos:
3318
  if photo and photo.filename:
3319
  filename = secure_filename(photo.filename)
 
 
 
 
 
 
3320
  api = HfApi()
3321
  api.upload_file(
3322
- path_or_fileobj=photo, # Исправлено: передаём сам объект photo
3323
  path_in_repo=f"photos/{filename}",
3324
  repo_id=REPO_ID,
3325
  repo_type="dataset",
3326
  token=HF_TOKEN_WRITE
3327
  )
3328
  photo_filenames.append(filename) # Add new photos
3329
-
 
3330
  colors = request.form.getlist('colors')
3331
  colors = [color.strip() for color in colors if color.strip()]
3332
-
3333
  products[index] = {
3334
  'name': request.form['name'],
3335
  'price': float(request.form['price']),
@@ -3341,7 +3356,7 @@ def admin():
3341
  'photos': photo_filenames, # Updated photo list
3342
  'discount': float(request.form['discount']) if request.form['discount'] else None
3343
  }
3344
-
3345
  elif action == 'delete':
3346
  index = int(request.form['index'])
3347
  # Delete photos from Hugging Face Hub before deleting the product
@@ -3360,12 +3375,12 @@ def admin():
3360
  logging.error(f"Error deleting photo {photo}: {e}")
3361
  products.pop(index)
3362
 
3363
-
3364
  elif action == 'add_category':
3365
  category = request.form['category_name'].strip()
3366
  if category and category not in categories:
3367
  categories.append(category)
3368
-
3369
  elif action == 'delete_category':
3370
  index = int(request.form['category_index'])
3371
  category_to_delete = categories[index]
@@ -3374,7 +3389,7 @@ def admin():
3374
  for product in products:
3375
  if product.get('category') == category_to_delete:
3376
  product['category'] = 'Без категории'
3377
-
3378
  save_data({'products': products, 'categories': categories})
3379
  return redirect(url_for('admin'))
3380
 
@@ -3596,8 +3611,8 @@ def admin():
3596
  </div>
3597
  <div class="product-list" id="product-list">
3598
  {% for product in products %}
3599
- <div class="product-item"
3600
- data-name="{{ product['name']|lower }}"
3601
  data-description="{{ product['description']|lower }}"
3602
  data-category="{{ product.get('category', 'Без категории') }}">
3603
  <h2>{{ product['name'] }}</h2>
 
27
  data = json.load(file)
28
  logging.info("Данные успешно загружены из JSON")
29
  if not isinstance(data, dict) or 'products' not in data or 'categories' not in data:
30
+ return {'products': [], 'categories': []}
31
  return data
32
  except FileNotFoundError:
33
  logging.warning("Локальный файл базы данных не найден после скачивания.")
 
2377
  const cartContent = document.getElementById('cartContent');
2378
  let total = 0;
2379
 
2380
+ cartContent.innerHTML = cart.length === 0 ? '<p>Корзина пуста</p>' : cart.map(item => {
2381
  const itemTotal = item.price * item.quantity;
2382
  total += itemTotal;
2383
  return `
 
2836
  </div>
2837
  <div class="products-grid" id="products-grid">
2838
  {% for product in products %}
2839
+ <div class="product"
2840
  onclick="openModal({{ loop.index0 }})"
2841
+ data-name="{{ product['name']|lower }}"
2842
  data-description="{{ product['description']|lower }}"
2843
  data-category="{{ product.get('category', 'Без категории') }}">
2844
  <button class="favorite-button" onclick="event.stopPropagation(); toggleFavorite({{ loop.index0 }})">
 
2846
  </button>
2847
  {% if product.get('photos') and product['photos']|length > 0 %}
2848
  <div class="product-image">
2849
+ <img src="https://huggingface.co/datasets/{{ repo_id }}/resolve/main/photos/{{ product['photos'][0] }}"
2850
+ alt="{{ product['name'] }}"
2851
  loading="lazy">
2852
  </div>
2853
  {% endif %}
 
3277
 
3278
  if request.method == 'POST':
3279
  action = request.form.get('action')
3280
+
3281
  if action == 'add':
3282
  photos = request.files.getlist('photos')
3283
  photo_filenames = []
3284
  for photo in photos:
3285
  if photo and photo.filename:
3286
  filename = secure_filename(photo.filename)
3287
+ # Создаем временный файл
3288
+ uploads_dir = "uploads"
3289
+ os.makedirs(uploads_dir, exist_ok=True) # Создаем директорию, если её нет
3290
+ temp_path = os.path.join(uploads_dir, filename)
3291
+ photo.save(temp_path)
3292
+
3293
  api = HfApi()
3294
  api.upload_file(
3295
+ path_or_fileobj=temp_path, # Передаем путь к временному файлу
3296
  path_in_repo=f"photos/{filename}",
3297
  repo_id=REPO_ID,
3298
  repo_type="dataset",
3299
  token=HF_TOKEN_WRITE
3300
  )
3301
  photo_filenames.append(filename)
3302
+ os.remove(temp_path) # Удаляем временный файл
3303
+
3304
  colors = request.form.getlist('colors')
3305
  colors = [color.strip() for color in colors if color.strip()]
3306
+
3307
  new_product = {
3308
  'name': request.form['name'],
3309
  'price': float(request.form['price']),
 
3316
  'discount': float(request.form['discount']) if request.form['discount'] else None
3317
  }
3318
  products.append(new_product)
3319
+
3320
  elif action == 'edit':
3321
  index = int(request.form['index'])
3322
  photos = request.files.getlist('photos')
3323
  photo_filenames = products[index].get('photos', []) # Keep existing photos
3324
+
3325
  for photo in photos:
3326
  if photo and photo.filename:
3327
  filename = secure_filename(photo.filename)
3328
+ # Создаем временный файл
3329
+ uploads_dir = "uploads"
3330
+ os.makedirs(uploads_dir, exist_ok=True)
3331
+ temp_path = os.path.join(uploads_dir, filename)
3332
+ photo.save(temp_path)
3333
+
3334
  api = HfApi()
3335
  api.upload_file(
3336
+ path_or_fileobj=temp_path, # Передаем путь к временному файлу
3337
  path_in_repo=f"photos/{filename}",
3338
  repo_id=REPO_ID,
3339
  repo_type="dataset",
3340
  token=HF_TOKEN_WRITE
3341
  )
3342
  photo_filenames.append(filename) # Add new photos
3343
+ os.remove(temp_path) # Удаляем временный файл
3344
+
3345
  colors = request.form.getlist('colors')
3346
  colors = [color.strip() for color in colors if color.strip()]
3347
+
3348
  products[index] = {
3349
  'name': request.form['name'],
3350
  'price': float(request.form['price']),
 
3356
  'photos': photo_filenames, # Updated photo list
3357
  'discount': float(request.form['discount']) if request.form['discount'] else None
3358
  }
3359
+
3360
  elif action == 'delete':
3361
  index = int(request.form['index'])
3362
  # Delete photos from Hugging Face Hub before deleting the product
 
3375
  logging.error(f"Error deleting photo {photo}: {e}")
3376
  products.pop(index)
3377
 
3378
+
3379
  elif action == 'add_category':
3380
  category = request.form['category_name'].strip()
3381
  if category and category not in categories:
3382
  categories.append(category)
3383
+
3384
  elif action == 'delete_category':
3385
  index = int(request.form['category_index'])
3386
  category_to_delete = categories[index]
 
3389
  for product in products:
3390
  if product.get('category') == category_to_delete:
3391
  product['category'] = 'Без категории'
3392
+
3393
  save_data({'products': products, 'categories': categories})
3394
  return redirect(url_for('admin'))
3395
 
 
3611
  </div>
3612
  <div class="product-list" id="product-list">
3613
  {% for product in products %}
3614
+ <div class="product-item"
3615
+ data-name="{{ product['name']|lower }}"
3616
  data-description="{{ product['description']|lower }}"
3617
  data-category="{{ product.get('category', 'Без категории') }}">
3618
  <h2>{{ product['name'] }}</h2>