Files
Excel-project/server/backend/handlers/ozon_wb_yandex_com_handler.py
2026-01-08 19:31:04 +03:00

38 lines
2.2 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.

from pydantic import ValidationError
from server.backend.schemas.pydantic import ExcelInfo,settings,Translit
from server.backend.api.nomenclature import processing
import re
import datetime
def first_day_of_prev_month(format: str):
today = datetime.datetime.now()
first_day_current_month = today.replace(day=1)
last_day_prev_month = (first_day_current_month - datetime.timedelta(days=1)).replace(day=1)
return last_day_prev_month.strftime(format)
def process_sheet(df, real_arti:str, real_quantity:str, real_sum_1:str):
df= df.iloc[2:].reset_index(drop=True)
#Выборка
df = df.iloc[:, [real_arti, real_quantity, real_sum_1]].copy().dropna()
df = df[(df != 0).all(axis=1)] #drop all 0 values
df.columns = ['arti', 'counts', 'price']
#Нормализация
df['arti'] = df['arti'].replace(Translit.TRANSLIT, regex=True)
df['arti'] = df['arti'].astype(str).str.upper().str.extract(f'({settings.PATTERN})') #arti под regex
df['price'] = df['price'].astype(float) #переделка к норм виду и преобразование в float
df['counts'] = df['counts'].astype(int) #Float to Int, if exists
#Группировка
df = df.groupby('arti', as_index=False).agg({'counts': 'sum', 'price': 'sum'}) #groupping
df = processing(df) #vlookup for ref_keys
validated_rows, errors = [], []
for i, row in df.iterrows(): #проходит построчно по df, где i - индекс строки, row - данные строки
try:
validated_rows.append(ExcelInfo(**row.to_dict())) #добавляем в список проверенные данные полученные от pydantic, которые туда передаются в виде dict
except ValidationError as e:
errors.append((i, e.errors())) #выводит ошибку и пишет номер строки
if errors:
raise Exception(f"There are some errors with validation in Лист_1, check it ", errors)
return validated_rows
def evaluating(dfs):
validated_rows_1 = process_sheet(dfs["Лист_1"], real_arti=0,real_quantity=4, real_sum_1=8)
date = first_day_of_prev_month(settings.TIMEFORMAT)
return validated_rows_1, date