ZARAHOME передаем в json + api только те товары что есть в наличии. Можно поменять в коде комментом нескольких строк чтоб передавать все, а менять только inStock
This commit is contained in:
parent
ff136afe05
commit
4a7bf9a163
@ -25,6 +25,9 @@ MIN_PRICE = 40
|
|||||||
MAX_PRICE = 1200
|
MAX_PRICE = 1200
|
||||||
EXCLUSION_FILE = Path(__file__).with_name("exclusion_materials.txt") # в том же каталоге
|
EXCLUSION_FILE = Path(__file__).with_name("exclusion_materials.txt") # в том же каталоге
|
||||||
|
|
||||||
|
# Только такие статусы допускаем в JSON/POST
|
||||||
|
ALLOWED_VIS = {"SHOW", "RUNNING_OUT"}
|
||||||
|
|
||||||
INVALID_FILE_CHARS = r'[<>:"/\\|*?]' # для имён файлов Windows
|
INVALID_FILE_CHARS = r'[<>:"/\\|*?]' # для имён файлов Windows
|
||||||
|
|
||||||
def sanitize_filename(name: str, repl: str = "_") -> str:
|
def sanitize_filename(name: str, repl: str = "_") -> str:
|
||||||
@ -76,21 +79,31 @@ class Recorder:
|
|||||||
price_raw = row[idx["Цена закупки"]]
|
price_raw = row[idx["Цена закупки"]]
|
||||||
price_int = math.ceil(float(price_raw))
|
price_int = math.ceil(float(price_raw))
|
||||||
if not (MIN_PRICE <= price_int <= MAX_PRICE):
|
if not (MIN_PRICE <= price_int <= MAX_PRICE):
|
||||||
|
# вне ценового коридора — остаётся только в XLSX
|
||||||
continue
|
continue
|
||||||
|
|
||||||
# ----------- фильтр по составу -------
|
# ----------- фильтр статуса наличия --------
|
||||||
|
vis_val = row[idx["Наличие на сайте"]]
|
||||||
|
#Закомментить это если нужно выключить (начало)-------------------------------#
|
||||||
|
if vis_val not in ALLOWED_VIS: #
|
||||||
|
# любые статусы кроме SHOW/RUNNING_OUT — только в XLSX #
|
||||||
|
log.debug("Skip by availability: %s (%s)", row[idx["Артикул"]], vis_val) #
|
||||||
|
continue #
|
||||||
|
#Закомментить это если нужно выключить (конец)--------------------------------#
|
||||||
|
|
||||||
|
# ----------- фильтр по составу -----------
|
||||||
comp_txt = row[idx["Параметр: Состав"]].replace("\n", "<br/>")
|
comp_txt = row[idx["Параметр: Состав"]].replace("\n", "<br/>")
|
||||||
comp_low = comp_txt.lower()
|
comp_low = comp_txt.lower()
|
||||||
if any(tok in comp_low for tok in self.forbidden):
|
if any(tok in comp_low for tok in self.forbidden):
|
||||||
log.debug("Skip by exclusion token: %s", row[idx["Артикул"]])
|
log.debug("Skip by exclusion token: %s", row[idx["Артикул"]])
|
||||||
continue
|
continue
|
||||||
|
|
||||||
# ----------- формируем variant -------
|
# ----------- формируем variant -----------
|
||||||
article = row[idx["Артикул"]]
|
article = row[idx["Артикул"]]
|
||||||
partnumber = row[idx["PartNumber"]]
|
partnumber = row[idx["PartNumber"]]
|
||||||
clr_name = row[idx["Свойство: Цвет"]].capitalize()
|
clr_name = row[idx["Свойство: Цвет"]].capitalize()
|
||||||
size_full = row[idx["Свойство: Размер"]].replace("\n", "<br/>")
|
size_full = row[idx["Свойство: Размер"]].replace("\n", "<br/>")
|
||||||
vis = row[idx["Наличие на сайте"]]
|
vis = vis_val
|
||||||
weight_g = float(row[idx["Свойство: Вес(г)"]]) if row[idx["Свойство: Вес(г)"]] else 0.0
|
weight_g = float(row[idx["Свойство: Вес(г)"]]) if row[idx["Свойство: Вес(г)"]] else 0.0
|
||||||
weight_kg = math.ceil(weight_g / 1000) if weight_g else 0
|
weight_kg = math.ceil(weight_g / 1000) if weight_g else 0
|
||||||
url_full = row[idx["Краткое описание"]]
|
url_full = row[idx["Краткое описание"]]
|
||||||
@ -116,7 +129,7 @@ class Recorder:
|
|||||||
"originalDescription": desc_orig,
|
"originalDescription": desc_orig,
|
||||||
"originalComposition": comp_txt,
|
"originalComposition": comp_txt,
|
||||||
"images": images,
|
"images": images,
|
||||||
"inStock": vis == "SHOW",
|
"inStock": vis in ALLOWED_VIS, # ← здесь привязали к ALLOWED_VIS
|
||||||
"weight": weight_kg
|
"weight": weight_kg
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user