backend/app/search/services/load_products.py

102 lines
3.8 KiB
Python
Raw Normal View History

import re
from ast import literal_eval
import pandas as pd
2022-10-22 00:09:26 +03:00
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]):
2022-10-22 03:09:39 +03:00
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:
2022-10-22 03:09:39 +03:00
if "Unit" in cat:
pr = ProductUnitCharacteristic.objects.get_or_create(
2022-10-22 03:09:39 +03:00
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"],
2022-10-22 03:09:39 +03:00
)
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()
2022-10-22 03:09:39 +03:00
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()