backend/app/search/services/load_products.py

102 lines
3.8 KiB
Python
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

import re
from ast import literal_eval
import pandas as pd
from search.models import (
Product,
Category,
UnitCharacteristic,
ProductUnitCharacteristic,
ProductCharacteristic,
Characteristic,
)
def load():
with open("data.json", "r", encoding="utf-16") as f:
data = literal_eval(f.read())
for el in data:
Product.objects.get_or_create(id=el)
print(el["characteristic"])
def load_excel():
df = pd.read_excel("media/data.xlsx", sheet_name="Запрос1")
for row in range(df.shape[0]):
try:
print(df.iat[row, 0], df.iat[row, 1], df.iat[row, 2])
product = Product(id=df.iat[row, 0])
product.name = df.iat[row, 1]
category = Category.objects.get_or_create(name=df.iat[row, 2])[0]
product.category = category
product.save()
if df.iat[row, 4]:
for cat in literal_eval(df.iat[row, 4]):
if "Value" in cat:
if "Unit" in cat:
pr = ProductUnitCharacteristic.objects.get_or_create(
characteristic=UnitCharacteristic.objects.get_or_create(
name=cat["Name"],
value=cat["Value"],
unit=cat["Unit"],
)[0],
product=product,
)[0]
nums = re.findall(
"[-+]?[.]?[\d]+(?:,\d\d\d)*[\.]?\d*(?:[eE][-+]?\d+)?",
cat["Value"],
)
if len(nums) == 1:
pr.numeric_value_min = int(
float(nums[0].replace(",", "."))
)
pr.numeric_value_max = int(
float(nums[0].replace(",", "."))
)
pr.save()
elif len(nums):
nums = [int(float(x.replace(",", "."))) for x in nums]
min_num = min(nums)
max_num = max(nums)
pr.numeric_value_min = min_num
pr.numeric_value_max = max_num
pr.save()
else:
ProductCharacteristic.objects.get_or_create(
characteristic=Characteristic.objects.get_or_create(
name=cat["Name"], value=cat["Value"]
)[0],
product=product,
)
except BaseException:
try:
product.delete()
except Exception:
continue
def process_unit_character():
for el in UnitCharacteristic.objects.all():
nums = re.findall(
"[-+]?[.]?[\d]+(?:,\d\d\d)*[\.]?\d*(?:[eE][-+]?\d+)?", el.value
)
if len(nums) == 1:
try:
el.numeric_value_min = int(float(nums[0].replace(",", ".")))
el.numeric_value_max = int(float(nums[0].replace(",", ".")))
el.save()
except ValueError:
el.delete()
elif len(nums):
try:
nums = [int(float(x.replace(",", "."))) for x in nums]
min_num = min(nums)
max_num = max(nums)
el.numeric_value_min = min_num
el.numeric_value_max = max_num
el.save()
except ValueError:
el.delete()