Correction and create command terminal api woocommerce
This commit is contained in:
1150
api_woocommerce_070425.py
Normal file
1150
api_woocommerce_070425.py
Normal file
File diff suppressed because it is too large
Load Diff
@ -0,0 +1 @@
|
|||||||
|
,LAPTOP-8GN3F14J/beren,LAPTOP-8GN3F14J,24.04.2025 17:17,file:///C:/Users/beren/AppData/Roaming/LibreOffice/4;
|
||||||
Binary file not shown.
Binary file not shown.
BIN
final_api_woocommerce/__pycache__/watermark.cpython-311.pyc
Normal file
BIN
final_api_woocommerce/__pycache__/watermark.cpython-311.pyc
Normal file
Binary file not shown.
@ -12,22 +12,50 @@ import unicodedata
|
|||||||
import logging
|
import logging
|
||||||
import os
|
import os
|
||||||
import time
|
import time
|
||||||
|
import argparse
|
||||||
|
from logging.handlers import TimedRotatingFileHandler
|
||||||
|
from watermark import create_watermark_image
|
||||||
|
|
||||||
logger = logging.getLogger(__name__)
|
# Créer un dossier 'logs' s'il n'existe pas
|
||||||
|
log_directory = "logs"
|
||||||
|
os.makedirs(log_directory, exist_ok=True)
|
||||||
|
|
||||||
# 1️⃣ Configurer le logger
|
# 🔧 Configuration du handler avec rotation quotidienne
|
||||||
logging.basicConfig(
|
log_file = os.path.join(log_directory, "woocommerce.log")
|
||||||
filename="woocommerce.log", # 📌 Fichier où les logs seront sauvegardés
|
handler = TimedRotatingFileHandler(
|
||||||
level=logging.DEBUG, # 📌 Niveau de log (DEBUG, INFO, WARNING, ERROR, CRITICAL)
|
filename=log_file,
|
||||||
format="%(asctime)s - %(levelname)s - %(message)s", # 📌 Format du log
|
when="midnight", # ⏰ Rotation tous les jours à minuit
|
||||||
datefmt="%Y-%m-%d %H:%M:%S" # 📌 Format de la date
|
interval=1, # 📅 Chaque 1 jour
|
||||||
|
backupCount=7, # ♻️ Garde les 7 derniers fichiers de log
|
||||||
|
encoding='utf-8' # 🧾 Pour supporter tous les caractères
|
||||||
)
|
)
|
||||||
|
|
||||||
|
# 📋 Format du log
|
||||||
|
formatter = logging.Formatter(
|
||||||
|
fmt="%(asctime)s - %(levelname)s - %(message)s",
|
||||||
|
datefmt="%Y-%m-%d %H:%M:%S"
|
||||||
|
)
|
||||||
|
handler.setFormatter(formatter)
|
||||||
|
|
||||||
|
# 🔌 Récupère le logger
|
||||||
|
logger = logging.getLogger(__name__)
|
||||||
|
logger.setLevel(logging.DEBUG) # 👁 Niveau minimum à capturer
|
||||||
|
logger.addHandler(handler)
|
||||||
|
|
||||||
|
# 🧪 Test
|
||||||
|
"""logger.debug("Démarrage du programme (DEBUG)")
|
||||||
|
logger.info("Traitement en cours (INFO)")
|
||||||
|
logger.warning("Avertissement (WARNING)")
|
||||||
|
logger.error("Erreur (ERROR)")
|
||||||
|
logger.critical("Erreur critique (CRITICAL)")"""
|
||||||
|
|
||||||
|
|
||||||
# via consumer key and consumer secret :
|
# via consumer key and consumer secret :
|
||||||
# https://lescreationsdemissbleue.local/wp-json/wc/v3/products?consumer_key=ck_604e9b7b5d290cce72346efade6b31cb9a1ff28e&consumer_secret=cs_563974c7e59532c1ae1d0f8bbf61f0500d6bc768
|
# https://lescreationsdemissbleue.local/wp-json/wc/v3/products?consumer_key=ck_604e9b7b5d290cce72346efade6b31cb9a1ff28e&consumer_secret=cs_563974c7e59532c1ae1d0f8bbf61f0500d6bc768
|
||||||
|
|
||||||
wcapi = WoocommerceApi(
|
wcapi = WoocommerceApi(
|
||||||
url="https://lescreationsdemissbleue.local",
|
#url="https://lescreationsdemissbleue.local",
|
||||||
|
url="https://les-creations-de-missbleue.local",
|
||||||
consumer_key="ck_604e9b7b5d290cce72346efade6b31cb9a1ff28e",
|
consumer_key="ck_604e9b7b5d290cce72346efade6b31cb9a1ff28e",
|
||||||
consumer_secret="cs_563974c7e59532c1ae1d0f8bbf61f0500d6bc768",
|
consumer_secret="cs_563974c7e59532c1ae1d0f8bbf61f0500d6bc768",
|
||||||
wp_api=True,
|
wp_api=True,
|
||||||
@ -48,10 +76,14 @@ class AuthentificationWpApi:
|
|||||||
|
|
||||||
ath = AuthentificationWpApi()
|
ath = AuthentificationWpApi()
|
||||||
|
|
||||||
WEBSITE_URL = "https://lescreationsdemissbleue.local"
|
#WEBSITE_URL = "https://lescreationsdemissbleue.local"
|
||||||
FILENAME_ODS = "C:\\Users\\beren\\OneDrive\\Documents\\nextcloud\\beren\\site_missbleue\\donnees_site_internet_missbleue_corrige.ods"
|
WEBSITE_URL = "https://les-creations-de-missbleue.local"
|
||||||
|
#FILENAME_ODS = "C:\\Users\\beren\\OneDrive\\Documents\\nextcloud\\beren\\site_missbleue\\donnees_site_internet_missbleue_corrige.ods"
|
||||||
BASE_PATH = "C:\\Users\\beren\\OneDrive\\Documents\\nextcloud\\beren\\site_missbleue\\photos\\photos_site\\Photos_site\\"
|
BASE_PATH = "C:\\Users\\beren\\OneDrive\\Documents\\nextcloud\\beren\\site_missbleue\\photos\\photos_site\\Photos_site\\"
|
||||||
#FILENAME_ODS = "C:\\Users\\beren\\OneDrive\\Documents\\nextcloud\\beren\\site_missbleue\\infos_site.ods"
|
#FILENAME_ODS = "C:\\Users\\beren\\OneDrive\\Documents\\nextcloud\\beren\\site_missbleue\\infos_site.ods"
|
||||||
|
FILENAME_ODS = "C:\\Users\\beren\\OneDrive\\Documents\\nextcloud\\beren\\site_missbleue\\api_woocommerce\\final_api_woocommerce\\donnees_site_internet_missbleue_corrige.ods"
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
class OdsReader:
|
class OdsReader:
|
||||||
def __init__(self, filename_ods=FILENAME_ODS):
|
def __init__(self, filename_ods=FILENAME_ODS):
|
||||||
@ -60,6 +92,12 @@ class OdsReader:
|
|||||||
def get_all_product_lines(self):
|
def get_all_product_lines(self):
|
||||||
return self.get_doc_ods(2)
|
return self.get_doc_ods(2)
|
||||||
|
|
||||||
|
def fetch_all_product_rows(self, start, end=None):
|
||||||
|
return self.extract_ods_row(2, start, end)
|
||||||
|
|
||||||
|
def get_product_line_by_value(self, search_value):
|
||||||
|
return self.get_doc_ods_by_value(2, search_value)
|
||||||
|
|
||||||
def get_product_by_slug_from_ods(self, slug):
|
def get_product_by_slug_from_ods(self, slug):
|
||||||
for product in self.get_all_product_lines():
|
for product in self.get_all_product_lines():
|
||||||
if product['Slug'] == slug: return product
|
if product['Slug'] == slug: return product
|
||||||
@ -68,12 +106,27 @@ class OdsReader:
|
|||||||
def get_all_media_lines(self):
|
def get_all_media_lines(self):
|
||||||
return self.get_doc_ods(0)
|
return self.get_doc_ods(0)
|
||||||
|
|
||||||
|
def fetch_all_media_rows(self, start, end=None):
|
||||||
|
return self.extract_ods_row(0, start, end)
|
||||||
|
|
||||||
|
def get_media_line_by_value(self, search_value):
|
||||||
|
return self.get_doc_ods_by_value(0, search_value)
|
||||||
|
|
||||||
def get_all_attribute_and_tab_lines(self):
|
def get_all_attribute_and_tab_lines(self):
|
||||||
return self.get_doc_ods(3)
|
return self.get_doc_ods(3)
|
||||||
|
|
||||||
|
def get_attribute_and_tab_lines(self, search_value):
|
||||||
|
return self.get_doc_ods_by_value(3, search_value)
|
||||||
|
|
||||||
def get_all_category_lines(self):
|
def get_all_category_lines(self):
|
||||||
return self.get_doc_ods(1)
|
return self.get_doc_ods(1)
|
||||||
|
|
||||||
|
def get_category_line_by_value(self, search_value):
|
||||||
|
return self.get_doc_ods_by_value(1, search_value)
|
||||||
|
|
||||||
|
def get_all_seo_lines(self):
|
||||||
|
return self.get_doc_ods(6)
|
||||||
|
|
||||||
def get_doc_ods(self, number_sheet):
|
def get_doc_ods(self, number_sheet):
|
||||||
doc = ezodf.opendoc(self.filename_ods)
|
doc = ezodf.opendoc(self.filename_ods)
|
||||||
sheet = doc.sheets[number_sheet]
|
sheet = doc.sheets[number_sheet]
|
||||||
@ -88,21 +141,151 @@ class OdsReader:
|
|||||||
json_data = df.to_dict(orient="records")
|
json_data = df.to_dict(orient="records")
|
||||||
return json_data
|
return json_data
|
||||||
|
|
||||||
|
def get_doc_ods_by_value(self, number_sheet, search_value=None):
|
||||||
|
doc = ezodf.opendoc(self.filename_ods)
|
||||||
|
sheet = doc.sheets[number_sheet]
|
||||||
|
data = []
|
||||||
|
|
||||||
|
for row in sheet.rows():
|
||||||
|
data.append([cell.value for cell in row])
|
||||||
|
|
||||||
|
df = pd.DataFrame(data)
|
||||||
|
df.columns = df.iloc[0]
|
||||||
|
df = df[1:].reset_index(drop=True)
|
||||||
|
df = df.dropna(how='all')
|
||||||
|
|
||||||
|
if search_value:
|
||||||
|
try:
|
||||||
|
print(f"Recherche de la valeur : {search_value}")
|
||||||
|
|
||||||
|
# Vérifier que le DataFrame n'est pas vide
|
||||||
|
if df.empty:
|
||||||
|
raise ValueError("Le DataFrame est vide")
|
||||||
|
|
||||||
|
# Nettoyer le search_value pour enlever les espaces superflus
|
||||||
|
search_value = str(search_value).strip()
|
||||||
|
|
||||||
|
# Dynamique sur la colonne à rechercher
|
||||||
|
column_name = 'Nom' # à modifier selon la situation
|
||||||
|
|
||||||
|
if column_name not in df.columns:
|
||||||
|
raise ValueError(f"La colonne '{column_name}' n'existe pas dans le DataFrame")
|
||||||
|
|
||||||
|
# Supprimer les espaces avant et après dans la colonne cible
|
||||||
|
df[column_name] = df[column_name].str.strip()
|
||||||
|
|
||||||
|
# Remplir les NaN par des chaînes vides
|
||||||
|
df[column_name] = df[column_name].fillna('')
|
||||||
|
|
||||||
|
# Recherche avec contains sur la colonne
|
||||||
|
mask = df[column_name].str.contains(str(search_value), case=False, na=False)
|
||||||
|
#print(f"Masque généré :\n{mask}")
|
||||||
|
|
||||||
|
if mask.sum() == 0: # Si aucune ligne ne correspond
|
||||||
|
raise ValueError(f"Aucune correspondance trouvée pour '{search_value}' dans la colonne '{column_name}'")
|
||||||
|
|
||||||
|
# Filtrage du DataFrame
|
||||||
|
df = df[mask]
|
||||||
|
#print(f"df après filtrage :\n{df}")
|
||||||
|
|
||||||
|
except ValueError as ve:
|
||||||
|
print(f"Erreur : {ve}")
|
||||||
|
logger.exception(f"🚫 Aucune correspondance trouvée pour '{search_value}' dans la colonne '{column_name}'")
|
||||||
|
|
||||||
|
except Exception as e:
|
||||||
|
print(f"Erreur lors de la recherche : {e}")
|
||||||
|
logger.exception(f"🚫 Erreur lors de la recherche de '{search_value}' dans la colonne '{column_name}'. Exception : {e}")
|
||||||
|
else:
|
||||||
|
print("Aucun search_value fourni")
|
||||||
|
|
||||||
|
# Convertir en json_data pour le retour
|
||||||
|
json_data = df.to_dict(orient="records")
|
||||||
|
return json_data
|
||||||
|
|
||||||
|
def extract_ods_row(self, number_sheet, start_row=None, end_row=None):
|
||||||
|
doc = ezodf.opendoc(self.filename_ods)
|
||||||
|
sheet = doc.sheets[number_sheet]
|
||||||
|
data = []
|
||||||
|
|
||||||
|
for row in sheet.rows():
|
||||||
|
data.append([cell.value for cell in row])
|
||||||
|
|
||||||
|
df = pd.DataFrame(data)
|
||||||
|
df.columns = df.iloc[0]
|
||||||
|
df = df[1:].reset_index(drop=True)
|
||||||
|
|
||||||
|
if start_row is not None and end_row is not None:
|
||||||
|
df = df.iloc[start_row:end_row]
|
||||||
|
elif start_row is not None:
|
||||||
|
df = df.iloc[start_row:]
|
||||||
|
elif end_row is not None:
|
||||||
|
df = df.iloc[:end_row]
|
||||||
|
|
||||||
|
df = df.dropna(how='all')
|
||||||
|
return df.to_dict(orient="records")
|
||||||
|
|
||||||
class MediaManager(OdsReader):
|
class MediaManager(OdsReader):
|
||||||
|
|
||||||
def __init__(self, ath):
|
def __init__(self, ath, filename_ods):# filename_ods
|
||||||
super().__init__()
|
super().__init__(filename_ods) # filename_ods
|
||||||
self.ath = ath
|
self.ath = ath
|
||||||
self.media_api_url = f"{WEBSITE_URL}/wp-json/wp/v2/media"
|
self.media_api_url = f"{WEBSITE_URL}/wp-json/wp/v2/media"
|
||||||
self.media_api_settings = f"{WEBSITE_URL}/wp-json/wp/v2/settings"
|
self.media_api_settings = f"{WEBSITE_URL}/wp-json/wp/v2/settings"
|
||||||
|
|
||||||
def upload_media(self):
|
def upload_media(self, search_value=None):
|
||||||
json_data = self.get_all_media_lines()
|
if search_value:
|
||||||
|
json_data = self.get_media_line_by_value(search_value)
|
||||||
|
else:
|
||||||
|
json_data = self.get_all_media_lines()
|
||||||
|
|
||||||
for media in json_data:
|
for media in json_data:
|
||||||
path = Path(BASE_PATH + media['Chemin'])
|
path = Path(BASE_PATH + media['Chemin'])
|
||||||
image_name = path.name
|
image_name = path.name
|
||||||
|
try:
|
||||||
|
if not self.is_exists(media, image_name):
|
||||||
|
image_path = BASE_PATH + media['Chemin']
|
||||||
|
|
||||||
|
# 👇 Tentative d'ouverture et d'envoi
|
||||||
|
with open(image_path, "rb") as image_file:
|
||||||
|
response = requests.post(
|
||||||
|
self.media_api_url,
|
||||||
|
headers={
|
||||||
|
"Authorization": f"Basic {self.ath.auth_base64}",
|
||||||
|
"Content-Disposition": f"attachment; filename={image_name}"
|
||||||
|
},
|
||||||
|
files={"file": image_file},
|
||||||
|
verify=False
|
||||||
|
)
|
||||||
|
|
||||||
|
if response.status_code == 201:
|
||||||
|
media_data = response.json()
|
||||||
|
self.update_data_media(media, media_data['id'])
|
||||||
|
logger.info(f"✅ Image uploadée : {image_name}")
|
||||||
|
else:
|
||||||
|
logger.error(f"❌ Échec de l'upload ({response.status_code}) pour : {image_name} - URL: {self.media_api_url}")
|
||||||
|
else:
|
||||||
|
logger.info(f"↪️ Image déjà existante (non uploadée) : {image_name}")
|
||||||
|
|
||||||
|
except FileNotFoundError:
|
||||||
|
logger.exception(f"🚫 Fichier introuvable : {image_name} ({path})")
|
||||||
|
|
||||||
|
except requests.RequestException as e:
|
||||||
|
logger.exception(f"🔌 Problème réseau/API lors de l'upload de {image_name} : {e}")
|
||||||
|
|
||||||
|
except Exception as e:
|
||||||
|
logger.exception(f"🔥 Erreur inattendue lors de l'upload de {image_name} : {e}")
|
||||||
|
|
||||||
|
|
||||||
|
def create_and_update_media(self, media, image_name, path, watermark=False):
|
||||||
|
try:
|
||||||
if not self.is_exists(media, image_name):
|
if not self.is_exists(media, image_name):
|
||||||
with open(BASE_PATH + media['Chemin'], "rb") as image_file:
|
if watermark:
|
||||||
|
image_path = path
|
||||||
|
else:
|
||||||
|
image_path = BASE_PATH + media['Chemin']
|
||||||
|
print(f"image_path = {image_path}")
|
||||||
|
# 👇 Tentative d'ouverture et d'envoi
|
||||||
|
with open(image_path, "rb") as image_file:
|
||||||
response = requests.post(
|
response = requests.post(
|
||||||
self.media_api_url,
|
self.media_api_url,
|
||||||
headers={
|
headers={
|
||||||
@ -115,10 +298,34 @@ class MediaManager(OdsReader):
|
|||||||
if response.status_code == 201:
|
if response.status_code == 201:
|
||||||
media_data = response.json()
|
media_data = response.json()
|
||||||
self.update_data_media(media, media_data['id'])
|
self.update_data_media(media, media_data['id'])
|
||||||
|
logger.info(f"✅ Image uploadée : {image_name}")
|
||||||
else:
|
else:
|
||||||
return None
|
logger.error(f"❌ Échec de l'upload ({response.status_code}) pour : {image_name} - URL: {self.media_api_url}")
|
||||||
|
except FileNotFoundError:
|
||||||
|
logger.exception(f"🚫 Fichier introuvable : {image_name} ({path})")
|
||||||
|
|
||||||
|
except requests.RequestException as e:
|
||||||
|
logger.exception(f"🔌 Problème réseau/API lors de l'upload de {image_name} : {e}")
|
||||||
|
|
||||||
|
except Exception as e:
|
||||||
|
logger.exception(f"🔥 Erreur inattendue lors de l'upload de {image_name} : {e}")
|
||||||
|
|
||||||
|
|
||||||
|
def upload_media_from_to(self, range_start, range_end=None):
|
||||||
|
json_data = self.fetch_all_media_rows(range_start, range_end)
|
||||||
|
|
||||||
|
for media in json_data:
|
||||||
|
path = Path(BASE_PATH + media['Chemin'])
|
||||||
|
image_name = path.name
|
||||||
|
first_folder = media['Chemin'].split("\\")[0]
|
||||||
|
print(f"first_folder = {first_folder}")
|
||||||
|
watermarked_path = Path(create_watermark_image(str(path)))
|
||||||
|
watermarked_name = watermarked_path.name
|
||||||
|
if first_folder == 'Logo':
|
||||||
|
self.create_and_update_media(media,image_name,path)
|
||||||
else:
|
else:
|
||||||
pass
|
self.create_and_update_media(media, watermarked_name, watermarked_path, True)
|
||||||
|
|
||||||
|
|
||||||
def is_exists(self, media, image_name):
|
def is_exists(self, media, image_name):
|
||||||
all_images = self.get_all_images()
|
all_images = self.get_all_images()
|
||||||
@ -139,10 +346,13 @@ class MediaManager(OdsReader):
|
|||||||
}
|
}
|
||||||
path = Path(BASE_PATH + media['Chemin'])
|
path = Path(BASE_PATH + media['Chemin'])
|
||||||
image_name = path.name
|
image_name = path.name
|
||||||
|
|
||||||
|
|
||||||
response = requests.post(
|
response = requests.post(
|
||||||
f"{self.media_api_url}/{id_img}",
|
f"{self.media_api_url}/{id_img}",
|
||||||
headers={
|
headers={
|
||||||
"Authorization": f"Basic {self.ath.auth_base64}",
|
"Authorization": f"Basic {self.ath.auth_base64}",
|
||||||
|
#"Authorization": f"Basic {self.ath['auth_base64']}",
|
||||||
"Content-Disposition": f"attachment; filename={image_name}"
|
"Content-Disposition": f"attachment; filename={image_name}"
|
||||||
},
|
},
|
||||||
json=update_data,
|
json=update_data,
|
||||||
@ -173,6 +383,7 @@ class MediaManager(OdsReader):
|
|||||||
if img['slug'] == slug:
|
if img['slug'] == slug:
|
||||||
delete_url = f"{self.media_api_url}/{img['id']}?force=true"
|
delete_url = f"{self.media_api_url}/{img['id']}?force=true"
|
||||||
response = requests.delete(delete_url,
|
response = requests.delete(delete_url,
|
||||||
|
#headers={"Authorization": f"Basic {self.ath['auth_base64']}"},
|
||||||
headers={"Authorization": f"Basic {self.ath.auth_base64}"},
|
headers={"Authorization": f"Basic {self.ath.auth_base64}"},
|
||||||
verify=False)
|
verify=False)
|
||||||
|
|
||||||
@ -183,6 +394,7 @@ class MediaManager(OdsReader):
|
|||||||
while True:
|
while True:
|
||||||
response = requests.get(f"{self.media_api_url}?per_page=100&page={page}",
|
response = requests.get(f"{self.media_api_url}?per_page=100&page={page}",
|
||||||
headers={"Authorization": f"Basic {self.ath.auth_base64}"},
|
headers={"Authorization": f"Basic {self.ath.auth_base64}"},
|
||||||
|
#headers={"Authorization": f"Basic {self.ath['auth_base64']}"},
|
||||||
verify=False
|
verify=False
|
||||||
)
|
)
|
||||||
if response.status_code != 200:
|
if response.status_code != 200:
|
||||||
@ -205,6 +417,7 @@ class MediaManager(OdsReader):
|
|||||||
|
|
||||||
response = requests.delete(delete_url,
|
response = requests.delete(delete_url,
|
||||||
headers={"Authorization": f"Basic {self.ath.auth_base64}"},
|
headers={"Authorization": f"Basic {self.ath.auth_base64}"},
|
||||||
|
#{"Authorization": f"Basic {self.ath['auth_base64']}"},
|
||||||
verify=False)
|
verify=False)
|
||||||
if response.status_code in [200, 410]: # 410 = déjà supprimé
|
if response.status_code in [200, 410]: # 410 = déjà supprimé
|
||||||
print(f"Image {img_id} supprimée.")
|
print(f"Image {img_id} supprimée.")
|
||||||
@ -219,6 +432,7 @@ class MediaManager(OdsReader):
|
|||||||
|
|
||||||
response = requests.delete(delete_url,
|
response = requests.delete(delete_url,
|
||||||
headers={"Authorization": f"Basic {self.ath.auth_base64}"},
|
headers={"Authorization": f"Basic {self.ath.auth_base64}"},
|
||||||
|
#"Authorization": f"Basic {self.ath['auth_base64']}"},
|
||||||
verify=False)
|
verify=False)
|
||||||
if response.status_code in [200, 410]: # 410 = déjà supprimé
|
if response.status_code in [200, 410]: # 410 = déjà supprimé
|
||||||
print(f"Image {img_id} supprimée.")
|
print(f"Image {img_id} supprimée.")
|
||||||
@ -248,8 +462,8 @@ class MediaManager(OdsReader):
|
|||||||
|
|
||||||
class CategoryManager(OdsReader):
|
class CategoryManager(OdsReader):
|
||||||
|
|
||||||
def __init__(self, wcapi, ath, medias=None):
|
def __init__(self, wcapi, ath, filename_ods, medias=None):
|
||||||
super().__init__()
|
super().__init__(filename_ods)
|
||||||
self.wcapi = wcapi
|
self.wcapi = wcapi
|
||||||
self.ath = ath
|
self.ath = ath
|
||||||
self.medias = medias
|
self.medias = medias
|
||||||
@ -275,9 +489,17 @@ class CategoryManager(OdsReader):
|
|||||||
"slug":slug
|
"slug":slug
|
||||||
}
|
}
|
||||||
if self.find_id_by_slug(slug):
|
if self.find_id_by_slug(slug):
|
||||||
self.error_log.append(f"Catégorie contenant comme slug '{slug}' existe déjà")
|
#self.error_log.append(f"Catégorie contenant comme slug '{slug}' existe déjà")
|
||||||
|
logger.debug(f"Catégorie contenant comme slug '{slug}' existe déjà")
|
||||||
else:
|
else:
|
||||||
self.wcapi.post("products/categories/", category_data)
|
try:
|
||||||
|
response = self.wcapi.post("products/categories/", category_data)
|
||||||
|
if response.status_code == 201:
|
||||||
|
logger.info(f"Catégorie créé avec succès. ID: {response.json()['id']}")
|
||||||
|
else:
|
||||||
|
logger.error(f"Erreur lors de la création de la catégorie. Code: {response.status_code}, Message: {response.text}")
|
||||||
|
except Exception as e:
|
||||||
|
logger.error(f"Erreur inattendue lors de l'envoi de la catégorie à WooCommerce: {e}")
|
||||||
|
|
||||||
def assign_parent_category(self, parent_slug, slug):
|
def assign_parent_category(self, parent_slug, slug):
|
||||||
response = self.wcapi.get("products/categories/",params={"per_page": 100})
|
response = self.wcapi.get("products/categories/",params={"per_page": 100})
|
||||||
@ -298,6 +520,8 @@ class CategoryManager(OdsReader):
|
|||||||
return cat['id']
|
return cat['id']
|
||||||
|
|
||||||
def find_media_id_by_slug(self, media_slug):
|
def find_media_id_by_slug(self, media_slug):
|
||||||
|
#print(f"media_slug = {media_slug}")
|
||||||
|
#pprint.pprint(self.medias.items())
|
||||||
for id, slug in self.medias.items():
|
for id, slug in self.medias.items():
|
||||||
if media_slug == slug:
|
if media_slug == slug:
|
||||||
return id
|
return id
|
||||||
@ -312,8 +536,13 @@ class CategoryManager(OdsReader):
|
|||||||
}
|
}
|
||||||
self.wcapi.put(f"products/categories/{cat_id}", update_category_data)
|
self.wcapi.put(f"products/categories/{cat_id}", update_category_data)
|
||||||
|
|
||||||
def update_data_categories(self):
|
def update_data_categories(self, search_value=None):
|
||||||
json_data = self.get_all_category_lines()
|
if search_value:
|
||||||
|
print("la")
|
||||||
|
json_data = self.get_category_line_by_value(search_value)
|
||||||
|
else:
|
||||||
|
print("oula")
|
||||||
|
json_data = self.get_all_category_lines()
|
||||||
for category in json_data:
|
for category in json_data:
|
||||||
self.create_category(category['Nom'], category['Description'], category['Slug'])
|
self.create_category(category['Nom'], category['Description'], category['Slug'])
|
||||||
cat_id = self.find_id_by_slug(category['Slug'])
|
cat_id = self.find_id_by_slug(category['Slug'])
|
||||||
@ -346,8 +575,8 @@ class CategoryManager(OdsReader):
|
|||||||
return print(f"self.error_log = {self.error_log}")
|
return print(f"self.error_log = {self.error_log}")
|
||||||
|
|
||||||
class ProductManager(OdsReader):
|
class ProductManager(OdsReader):
|
||||||
def __init__(self, wcapi, ath, medias=None):
|
def __init__(self, wcapi, ath, filename_ods, medias=None):
|
||||||
super().__init__()
|
super().__init__(filename_ods)
|
||||||
self.wcapi = wcapi
|
self.wcapi = wcapi
|
||||||
self.ath = ath
|
self.ath = ath
|
||||||
self.medias = medias
|
self.medias = medias
|
||||||
@ -431,12 +660,22 @@ class ProductManager(OdsReader):
|
|||||||
else:
|
else:
|
||||||
print(f"error")
|
print(f"error")
|
||||||
|
|
||||||
def create_product(self, product_data):
|
def create_product(self, product_data):
|
||||||
if self.find_id_by_slug(product_data['slug']):
|
if self.find_id_by_slug(product_data['slug']):
|
||||||
self.error_log.append(f"Produit contenant comme slug '{product_data['slug']}' existe déjà")
|
#self.error_log.append(f"Produit contenant comme slug '{product_data['slug']}' existe déjà")
|
||||||
|
logger.debug(f"Produit contenant comme slug '{product_data['slug']}' existe déjà")
|
||||||
else:
|
else:
|
||||||
response = self.wcapi.post("products/", product_data)
|
try:
|
||||||
|
response = self.wcapi.post("products/", product_data)
|
||||||
|
if response.status_code == 201:
|
||||||
|
# Le produit a été créé avec succès
|
||||||
|
logger.info(f"Produit créé avec succès. ID: {response.json()['id']}")
|
||||||
|
else:
|
||||||
|
# Le produit n'a pas été créé, mais il y a une réponse avec un code d'erreur
|
||||||
|
logger.error(f"Erreur lors de la création du produit. Code: {response.status_code}, Message: {response.text}")
|
||||||
|
except Exception as e:
|
||||||
|
logger.error(f"Erreur inattendue lors de l'envoi du produit à WooCommerce: {e}")
|
||||||
|
|
||||||
def update_data_product(self, product_data, categories, medias):
|
def update_data_product(self, product_data, categories, medias):
|
||||||
json_data = self.get_all_product_lines()
|
json_data = self.get_all_product_lines()
|
||||||
for product in json_data:
|
for product in json_data:
|
||||||
@ -526,8 +765,8 @@ class ProductManager(OdsReader):
|
|||||||
|
|
||||||
class AttributeManager(OdsReader):
|
class AttributeManager(OdsReader):
|
||||||
|
|
||||||
def __init__(self, wcapi):
|
def __init__(self, wcapi, filename_ods):
|
||||||
super().__init__()
|
super().__init__(filename_ods)
|
||||||
self.wcapi = wcapi
|
self.wcapi = wcapi
|
||||||
|
|
||||||
def get_attributes(self):
|
def get_attributes(self):
|
||||||
@ -550,8 +789,11 @@ class AttributeManager(OdsReader):
|
|||||||
list_name_data.append(item['Nom'])
|
list_name_data.append(item['Nom'])
|
||||||
return list_name_data
|
return list_name_data
|
||||||
|
|
||||||
def create(self):
|
def create(self, search_value=None):
|
||||||
features_json_data = self.get_all_attribute_and_tab_lines()
|
if search_value:
|
||||||
|
features_json_data = self.get_attribute_and_tab_lines(search_value)
|
||||||
|
else:
|
||||||
|
features_json_data = self.get_all_attribute_and_tab_lines()
|
||||||
for item in features_json_data:
|
for item in features_json_data:
|
||||||
if item['Onglet'].strip() == "Informations Complémentaires":
|
if item['Onglet'].strip() == "Informations Complémentaires":
|
||||||
attribute_data = {
|
attribute_data = {
|
||||||
@ -559,11 +801,14 @@ class AttributeManager(OdsReader):
|
|||||||
}
|
}
|
||||||
self.wcapi.post(f"products/attributes", attribute_data)
|
self.wcapi.post(f"products/attributes", attribute_data)
|
||||||
|
|
||||||
def get_term(self):
|
def get_term(self, search_value=None):
|
||||||
term_dict = {}
|
term_dict = {}
|
||||||
list_item = []
|
if search_value:
|
||||||
term_json_data = self.get_all_attribute_and_tab_lines()
|
term_json_data = self.get_attribute_and_tab_lines(search_value)
|
||||||
|
else:
|
||||||
|
term_json_data = self.get_all_attribute_and_tab_lines()
|
||||||
for item in term_json_data:
|
for item in term_json_data:
|
||||||
|
list_item = []
|
||||||
if item['Onglet'].strip() == "Informations Complémentaires":
|
if item['Onglet'].strip() == "Informations Complémentaires":
|
||||||
if "," in item["Valeurs"]:
|
if "," in item["Valeurs"]:
|
||||||
list_item = [value_term.strip() for value_term in item['Valeurs'].split(",")]
|
list_item = [value_term.strip() for value_term in item['Valeurs'].split(",")]
|
||||||
@ -573,6 +818,7 @@ class AttributeManager(OdsReader):
|
|||||||
term_dict[item['Nom']] = list_item
|
term_dict[item['Nom']] = list_item
|
||||||
else:
|
else:
|
||||||
term_dict[item['Nom']] = item['Valeurs']
|
term_dict[item['Nom']] = item['Valeurs']
|
||||||
|
|
||||||
return term_dict
|
return term_dict
|
||||||
|
|
||||||
def configure_term(self):
|
def configure_term(self):
|
||||||
@ -677,12 +923,15 @@ class AttributeManager(OdsReader):
|
|||||||
|
|
||||||
class TabManager(OdsReader):
|
class TabManager(OdsReader):
|
||||||
|
|
||||||
def __init__(self, wcapi):
|
def __init__(self, wcapi,filename_ods):
|
||||||
super().__init__()
|
super().__init__(filename_ods)
|
||||||
self.wcapi = wcapi
|
self.wcapi = wcapi
|
||||||
|
|
||||||
def get_list_name_data(self):
|
def get_list_name_data(self, search_value=None):
|
||||||
list_name_data = []
|
list_name_data = []
|
||||||
|
"""if search_value:
|
||||||
|
json_data = self.get_attribute_and_tab_lines(search_value)
|
||||||
|
else:"""
|
||||||
json_data = self.get_all_attribute_and_tab_lines()
|
json_data = self.get_all_attribute_and_tab_lines()
|
||||||
for item in json_data:
|
for item in json_data:
|
||||||
if item['Onglet'].strip() != "Informations Complémentaires":
|
if item['Onglet'].strip() != "Informations Complémentaires":
|
||||||
@ -731,7 +980,7 @@ class TabManager(OdsReader):
|
|||||||
}
|
}
|
||||||
res = self.wcapi.put(f"products/{product_id}", meta_data_data)
|
res = self.wcapi.put(f"products/{product_id}", meta_data_data)
|
||||||
else:
|
else:
|
||||||
print('else')
|
#print('else')
|
||||||
data_tab = {
|
data_tab = {
|
||||||
'content':content,
|
'content':content,
|
||||||
}
|
}
|
||||||
@ -771,8 +1020,8 @@ class TabManager(OdsReader):
|
|||||||
|
|
||||||
class VariationsManager(OdsReader):
|
class VariationsManager(OdsReader):
|
||||||
|
|
||||||
def __init__(self, wcapi):
|
def __init__(self, wcapi, filename_ods):
|
||||||
super().__init__()
|
super().__init__(filename_ods)
|
||||||
self.wcapi = wcapi
|
self.wcapi = wcapi
|
||||||
|
|
||||||
def get_attribute_id(self, product_data):
|
def get_attribute_id(self, product_data):
|
||||||
@ -880,8 +1129,8 @@ class VariationsManager(OdsReader):
|
|||||||
return False
|
return False
|
||||||
|
|
||||||
class WooCommerceManager(OdsReader):
|
class WooCommerceManager(OdsReader):
|
||||||
def __init__(self, wcapi, media_manager, category_manager, product_manager, tab_manager, attribute_manager, variation_manager):
|
def __init__(self, wcapi, media_manager, category_manager, product_manager, tab_manager, attribute_manager, variation_manager, filename_ods):
|
||||||
super().__init__()
|
super().__init__(filename_ods)
|
||||||
self.wcapi = wcapi
|
self.wcapi = wcapi
|
||||||
self.media_manager = media_manager
|
self.media_manager = media_manager
|
||||||
self.category_manager = category_manager
|
self.category_manager = category_manager
|
||||||
@ -889,6 +1138,7 @@ class WooCommerceManager(OdsReader):
|
|||||||
self.tab_manager = tab_manager
|
self.tab_manager = tab_manager
|
||||||
self.attribute_manager = attribute_manager
|
self.attribute_manager = attribute_manager
|
||||||
self.variation_manager = variation_manager
|
self.variation_manager = variation_manager
|
||||||
|
self.filename_ods = filename_ods
|
||||||
|
|
||||||
def tab_exists(self, product_id, name_tab):
|
def tab_exists(self, product_id, name_tab):
|
||||||
return self.product_manager.tab_exists(product_id, name_tab)
|
return self.product_manager.tab_exists(product_id, name_tab)
|
||||||
@ -923,7 +1173,7 @@ class WooCommerceManager(OdsReader):
|
|||||||
for title, content in value:
|
for title, content in value:
|
||||||
if key:
|
if key:
|
||||||
if key in product['short_description']:
|
if key in product['short_description']:
|
||||||
tab_manager.create_for_product(product_id=product_id, title=title, content=content, nickname="", position=x, tab_type="local")
|
self.tab_manager.create_for_product(product_id=product_id, title=title, content=content, nickname="", position=x, tab_type="local")
|
||||||
x=x+1
|
x=x+1
|
||||||
else:
|
else:
|
||||||
pass
|
pass
|
||||||
@ -999,20 +1249,83 @@ class WooCommerceManager(OdsReader):
|
|||||||
|
|
||||||
|
|
||||||
def create_or_update_product(self, product_data, attributes, tabs, categories, medias):
|
def create_or_update_product(self, product_data, attributes, tabs, categories, medias):
|
||||||
self.product_manager.update_data_product(product_data=product_data, categories=categories, medias=medias)
|
try:
|
||||||
self.update_product_attribute(attributes=attributes, product_data=product_data)
|
self.product_manager.update_data_product(product_data=product_data, categories=categories, medias=medias)
|
||||||
product_id = self.product_manager.find_id_by_slug(product_data['slug'])
|
self.update_product_attribute(attributes=attributes, product_data=product_data)
|
||||||
self.update_product_variations(product_data)
|
product_id = self.product_manager.find_id_by_slug(product_data['slug'])
|
||||||
self.tab_manager.create_or_update_for_product(product_id=product_id, tabs=tabs)
|
self.update_product_variations(product_data)
|
||||||
|
self.tab_manager.create_or_update_for_product(product_id=product_id, tabs=tabs)
|
||||||
|
except Exception as e:
|
||||||
|
print(f"Erreur lors de la mise à jour du produit: {e}")
|
||||||
|
logger.exception(f"Erreur lors de la mise à jour du produit: {e}")
|
||||||
|
|
||||||
|
def get_product_lines(self, search_value=None):
|
||||||
|
if search_value:
|
||||||
|
print('là')
|
||||||
|
return self.get_product_line_by_value(search_value)
|
||||||
|
else:
|
||||||
|
return self.get_all_product_lines()
|
||||||
|
|
||||||
def process_file(self, filename):
|
def process_file(self, search_value=None):
|
||||||
# refresh media cache
|
# refresh media cache
|
||||||
medias = media_manager.get_all_as_slug_dict()
|
medias = self.media_manager.get_all_as_slug_dict()
|
||||||
|
self.product_manager.medias = medias
|
||||||
|
# read provided file
|
||||||
|
products_lines = self.get_product_lines(search_value)
|
||||||
|
print('yoooo')
|
||||||
|
#pprint.pprint(products_lines)
|
||||||
|
for product_line in products_lines:
|
||||||
|
# standard product data
|
||||||
|
product_data = {
|
||||||
|
'name' : product_line['Nom'],
|
||||||
|
'price': product_line['Prix'],
|
||||||
|
'regular_price': product_line['Prix'],
|
||||||
|
'stock_quantity': product_line['Stock'],
|
||||||
|
'manage_stock':True,
|
||||||
|
'weight':str(product_line['Poids']),
|
||||||
|
'sku':str(product_line['Numéro de référence']),
|
||||||
|
'description': product_line['Description'],
|
||||||
|
'short_description': product_line['Courte Description'],
|
||||||
|
'slug':product_line['Slug']
|
||||||
|
}
|
||||||
|
if product_line['Type'] == "parfums":
|
||||||
|
product_data['type'] = "variable"
|
||||||
|
else:
|
||||||
|
product_data['type'] = "simple"
|
||||||
|
|
||||||
|
attributes = {
|
||||||
|
"Temps de combustion" : product_line['Temps de combustion'],
|
||||||
|
"Type de cire" : product_line['Type de cire'],
|
||||||
|
"Mèche" : product_line['Mèche'],
|
||||||
|
"Fabrication" : product_line['Fabrication'],
|
||||||
|
"Composition" : product_line['Composition'],
|
||||||
|
"Ingrédients et engagements" : product_line['Ingrédients et engagements'],
|
||||||
|
"Parfums" : product_line['Parfums']
|
||||||
|
}
|
||||||
|
|
||||||
|
tabs ={
|
||||||
|
#"Description" : product_line["Description"],
|
||||||
|
"Conseils d'utilisation" : product_line["Conseils d’utilisation"],
|
||||||
|
"Précautions articles" : product_line["Précautions articles"],
|
||||||
|
#"Allergènes" : product_line["Allergènes"]
|
||||||
|
}
|
||||||
|
# ... associated categories
|
||||||
|
categories = self.get_list_category_for_product(product_line['Catégories'])
|
||||||
|
|
||||||
|
# ... associated medias
|
||||||
|
medias = self.get_list_media_id_for_product(product_line['Media Slugs'])
|
||||||
|
|
||||||
|
# create or update product
|
||||||
|
self.create_or_update_product(product_data=product_data, attributes=attributes, tabs=tabs, categories=categories, medias=medias)
|
||||||
|
|
||||||
|
|
||||||
|
def process_file_from_to(self, range_start, range_end=None):
|
||||||
|
# refresh media cache
|
||||||
|
medias = self.media_manager.get_all_as_slug_dict()
|
||||||
self.product_manager.medias = medias
|
self.product_manager.medias = medias
|
||||||
# read provided file
|
# read provided file
|
||||||
reader = OdsReader(filename)
|
#reader = OdsReader(filename)
|
||||||
for product_line in reader.get_all_product_lines():
|
for product_line in self.fetch_all_product_rows(range_start, range_end):
|
||||||
# standard product data
|
# standard product data
|
||||||
product_data = {
|
product_data = {
|
||||||
'name' : product_line['Nom'],
|
'name' : product_line['Nom'],
|
||||||
@ -1074,48 +1387,174 @@ class WooCommerceManager(OdsReader):
|
|||||||
self.category_manager.delete_all_category()
|
self.category_manager.delete_all_category()
|
||||||
|
|
||||||
def delete_information_by_slug(self):
|
def delete_information_by_slug(self):
|
||||||
product_manager.delete_product_by_slug("chope-adoucissant")
|
self.product_manager.delete_product_by_slug("chope-adoucissant")
|
||||||
#category_manager.delete_all_category()
|
#category_manager.delete_all_category()
|
||||||
|
|
||||||
|
class OrderManager:
|
||||||
|
def __init__(self, wcapi, ath):
|
||||||
|
super().__init__()
|
||||||
|
self.wcapi = wcapi
|
||||||
|
self.ath = ath
|
||||||
|
self.error_log = []
|
||||||
|
self.headers = {
|
||||||
|
"Authorization": f"Basic {self.ath.auth_base64}",
|
||||||
|
"Content-Type": "application/json"
|
||||||
|
}
|
||||||
|
|
||||||
|
def delete_all_orders(self):
|
||||||
|
response = self.wcapi.get("orders/",params={"per_page": 100})
|
||||||
|
print(f"response = {response.status_code}")
|
||||||
|
if response.status_code == 200:
|
||||||
|
orders = response.json()
|
||||||
|
for index, order in enumerate(orders):
|
||||||
|
#print(f"index = {index}")
|
||||||
|
#print(f"order = {order}")
|
||||||
|
self.wcapi.delete(f"orders/{order['id']}", params={"force": True}).json()
|
||||||
|
|
||||||
|
|
||||||
|
"""def find_order_id_by_slug(self, slug):
|
||||||
|
response = self.wcapi.get("orders/",params={"per_page": 100})
|
||||||
|
if response.status_code == 200:
|
||||||
|
orders = response.json()
|
||||||
|
for cat in categories:
|
||||||
|
if cat['slug'] == slug:
|
||||||
|
return cat['id']"""
|
||||||
|
|
||||||
|
class SeoManager(OdsReader):
|
||||||
|
|
||||||
|
def __init__(self, ath, filename_ods):# filename_ods
|
||||||
|
super().__init__(filename_ods) # filename_ods
|
||||||
|
self.ath = ath
|
||||||
|
self.page_api_url = f"{WEBSITE_URL}/wp-json/wp/v2/pages"
|
||||||
|
|
||||||
|
def get_all_pages(self):
|
||||||
|
print("coucou")
|
||||||
|
"""Récupère toutes les images en gérant la pagination"""
|
||||||
|
all_pages = []
|
||||||
|
dict_id_slug = {}
|
||||||
|
#while True:
|
||||||
|
response = requests.get(f"{self.page_api_url}?per_page=100",
|
||||||
|
headers={"Authorization": f"Basic {self.ath.auth_base64}"},
|
||||||
|
#headers={"Authorization": f"Basic {self.ath['auth_base64']}"},
|
||||||
|
verify=False
|
||||||
|
)
|
||||||
|
if response.status_code != 200:
|
||||||
|
pass
|
||||||
|
|
||||||
|
list_pages = response.json()
|
||||||
|
#pprint.pprint(page)
|
||||||
|
#print(page[0]['_links'])
|
||||||
|
#print(page[0]['slug'])
|
||||||
|
print(f"count = {len(list_pages)}")
|
||||||
|
if not list_pages:
|
||||||
|
pass
|
||||||
|
#print('_______')
|
||||||
|
#pprint.pprint(page)
|
||||||
|
for index, page in enumerate(list_pages):
|
||||||
|
dict_id_slug[list_pages[index]['id']] = list_pages[index]['slug']
|
||||||
|
all_pages.append(dict_id_slug)
|
||||||
|
dict_id_slug = {}
|
||||||
|
return all_pages
|
||||||
|
|
||||||
|
def update_seo_page(self):
|
||||||
|
all_pages = self.get_all_pages()
|
||||||
|
pprint.pprint(all_pages)
|
||||||
|
seo_lines = self.get_all_seo_lines()
|
||||||
|
#pprint.pprint(seo_lines)
|
||||||
|
for page_id_slug in all_pages:
|
||||||
|
for key_page, slug_page in page_id_slug.items():
|
||||||
|
print(f"key_page = {key_page}")
|
||||||
|
for line in seo_lines:
|
||||||
|
#dict_seo = {}
|
||||||
|
if line['Slug'] == slug_page:
|
||||||
|
data = {
|
||||||
|
"meta": {
|
||||||
|
"og_title": line["Titre"],
|
||||||
|
"og_description": line["Description"],
|
||||||
|
#"_yoast_wpseo_opengraph-title": line["Titre"],
|
||||||
|
#"_yoast_wpseo_opengraph-description": line["Description"]
|
||||||
|
}
|
||||||
|
}
|
||||||
|
response = requests.post(
|
||||||
|
f"{self.page_api_url}/{key_page}",
|
||||||
|
headers={
|
||||||
|
"Authorization": f"Basic {self.ath.auth_base64}",
|
||||||
|
"Content-Type": "application/json"
|
||||||
|
},
|
||||||
|
json=data,
|
||||||
|
verify=False
|
||||||
|
)
|
||||||
|
|
||||||
|
""""meta": {
|
||||||
|
"_yoast_wpseo_title": line["Titre"],
|
||||||
|
"_yoast_wpseo_metadesc": line["Description"],
|
||||||
|
"_yoast_wpseo_opengraph-title": line["Titre"],
|
||||||
|
"_yoast_wpseo_opengraph-description": line["Description"]
|
||||||
|
}"""
|
||||||
|
|
||||||
|
"""dict_seo['yoast_head_json']['description'] = line['Description']
|
||||||
|
dict_seo['yoast_head_json']['og_description'] = line['Description']
|
||||||
|
dict_seo['yoast_head_json']['og_title'] = line['Titre']
|
||||||
|
|
||||||
|
response = requests.post(
|
||||||
|
f"{self.page_api_url}/{page['id']}",
|
||||||
|
headers={
|
||||||
|
"Authorization": f"Basic {self.ath.auth_base64}",
|
||||||
|
#"Authorization": f"Basic {self.ath['auth_base64']}",
|
||||||
|
#"Content-Disposition": f"attachment; filename={image_name}"
|
||||||
|
},
|
||||||
|
json=dict_seo,
|
||||||
|
verify=False
|
||||||
|
)"""
|
||||||
|
|
||||||
|
#page['yoast_head_json']['description']
|
||||||
|
#page['yoast_head_json']['og_description']
|
||||||
|
#page['yoast_head_json']['og_title']
|
||||||
|
|
||||||
#ALL_TABS = ["Allergènes", "Conseils d’utilisation", "Description", "Précautions articles"]
|
#ALL_TABS = ["Allergènes", "Conseils d’utilisation", "Description", "Précautions articles"]
|
||||||
#ALL_ATTRIBUTES = ["Temps de combustion", "Type de cire", "Mèche", "Fabrication", "Composition", "Ingrédients et engagement"]
|
#ALL_ATTRIBUTES = ["Temps de combustion", "Type de cire", "Mèche", "Fabrication", "Composition", "Ingrédients et engagement"]
|
||||||
|
if __name__ == "__main__":
|
||||||
media_manager = MediaManager(ath=ath)
|
#seo_manager = SeoManager(ath=ath, filename_ods=FILENAME_ODS)
|
||||||
#media_manager.upload_media()
|
#pages = seo_manager.get_all_pages()
|
||||||
#media_manager.delete_all_images()
|
#seo_manager.update_seo_page()
|
||||||
#media_manager.assign_image_logo()
|
#media_manager = MediaManager(ath=ath)
|
||||||
category_manager = CategoryManager(wcapi=wcapi,ath=ath)
|
#media_manager.upload_media()
|
||||||
#category_manager.delete_all_category()
|
#media_manager.delete_all_images()
|
||||||
product_manager = ProductManager(wcapi=wcapi,ath=ath)
|
#media_manager.assign_image_logo()
|
||||||
#product_manager.delete_all_product()
|
#category_manager = CategoryManager(wcapi=wcapi,ath=ath)
|
||||||
#medias=media_manager.get_all_as_slug_dict()
|
#category_manager.delete_all_category()
|
||||||
#media_manager.delete_media_by_slug('pyramide-olfactive-frangipanier')
|
order_manager = OrderManager(wcapi=wcapi,ath=ath)
|
||||||
#product_manager.delete_product_by_slug("citron-meringue")
|
order_manager.delete_all_orders()
|
||||||
#product_manager.update_data_product()
|
#product_manager = ProductManager(wcapi=wcapi,ath=ath)
|
||||||
tab_manager = TabManager(wcapi=wcapi)
|
#product_manager.delete_all_product()
|
||||||
attribute_manager = AttributeManager(wcapi=wcapi)
|
#medias=media_manager.get_all_as_slug_dict()
|
||||||
variation_manager = VariationsManager(wcapi=wcapi)
|
#media_manager.delete_media_by_slug('pyramide-olfactive-frangipanier')
|
||||||
#attribute_manager.create(ALL_ATTRIBUTES)
|
#product_manager.delete_product_by_slug("citron-meringue")
|
||||||
#attribute_manager.create()
|
#product_manager.update_data_product()
|
||||||
#attribute_manager.configure_term()
|
#tab_manager = TabManager(wcapi=wcapi)
|
||||||
#attribute_manager.delete_all_term()
|
#attribute_manager = AttributeManager(wcapi=wcapi)
|
||||||
#product_id = product_manager.find_id_by_slug("citron-meringue")"""
|
#variation_manager = VariationsManager(wcapi=wcapi)
|
||||||
woocommerce_manager = WooCommerceManager(wcapi=wcapi, media_manager=media_manager,category_manager=category_manager,product_manager=product_manager, tab_manager=tab_manager, attribute_manager=attribute_manager, variation_manager=variation_manager)
|
#attribute_manager.create(ALL_ATTRIBUTES)
|
||||||
##woocommerce_manager.delete_all_informations() #
|
#attribute_manager.create()
|
||||||
woocommerce_manager.create_all_informations()
|
#attribute_manager.configure_term()
|
||||||
##woocommerce_manager.process_file(FILENAME_ODS)
|
#attribute_manager.delete_all_term()
|
||||||
#category_manager.update_data_categories()
|
#product_id = product_manager.find_id_by_slug("citron-meringue")"""
|
||||||
#woocommerce_manager.delete_all_informations()
|
#woocommerce_manager = WooCommerceManager(wcapi=wcapi, media_manager=media_manager,category_manager=category_manager,product_manager=product_manager, tab_manager=tab_manager, attribute_manager=attribute_manager, variation_manager=variation_manager)
|
||||||
#woocommerce_manager.delete_information_by_slug()
|
##woocommerce_manager.delete_all_informations() #
|
||||||
#woocommerce_manager.create_all_informations()
|
#woocommerce_manager.create_all_informations()
|
||||||
#woocommerce_manager.create_all_categories_and_products()
|
##woocommerce_manager.process_file(FILENAME_ODS)
|
||||||
#woocommerce_manager.update_product_tab()
|
#category_manager.update_data_categories()
|
||||||
#woocommerce_manager.tab_manager.delete_by_product_id(1890)
|
#woocommerce_manager.delete_all_informations()
|
||||||
#woocommerce_manager.tab_manager.delete_all()
|
#woocommerce_manager.delete_information_by_slug()
|
||||||
#woocommerce_manager.update_product()
|
#woocommerce_manager.create_all_informations()
|
||||||
#woocommerce_manager.attribute_manager.delete_all_for_product()
|
#woocommerce_manager.create_all_categories_and_products()
|
||||||
#woocommerce_manager.update_product_attribute_by_slug('citron-meringue')
|
#woocommerce_manager.update_product_tab()
|
||||||
#woocommerce_manager.attribute_manager.delete_all_for_product()
|
#woocommerce_manager.tab_manager.delete_by_product_id(1890)
|
||||||
|
#woocommerce_manager.tab_manager.delete_all()
|
||||||
|
#woocommerce_manager.update_product()
|
||||||
|
#woocommerce_manager.attribute_manager.delete_all_for_product()
|
||||||
|
#woocommerce_manager.update_product_attribute_by_slug('citron-meringue')
|
||||||
|
#woocommerce_manager.attribute_manager.delete_all_for_product()
|
||||||
|
|
||||||
"""tabs_in_product = []
|
"""tabs_in_product = []
|
||||||
for tab in ALL_TABS:
|
for tab in ALL_TABS:
|
||||||
@ -1147,4 +1586,10 @@ ex: traiter uniquement les articles dont le nom contient le terme "bougie"
|
|||||||
... --categories [--products-regex=.*bougie.*]
|
... --categories [--products-regex=.*bougie.*]
|
||||||
|
|
||||||
|
|
||||||
"""
|
"""
|
||||||
|
|
||||||
|
|
||||||
|
#parser = argparse.ArgumentParser(description="Script de traitement WooCommerce")
|
||||||
|
|
||||||
|
#wcctl --wc-url=https://lescreationsdemissbleue.local --wc-key=<consumer_key> --wc-secret=<consumer_secret> import-ods --ods-path=fichier.ods
|
||||||
|
|
||||||
|
|||||||
BIN
final_api_woocommerce/chope-fraise-menthe-face.jpg
Normal file
BIN
final_api_woocommerce/chope-fraise-menthe-face.jpg
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 2.6 MiB |
BIN
final_api_woocommerce/chope-fraise-menthe-face_filigrane.jpg
Normal file
BIN
final_api_woocommerce/chope-fraise-menthe-face_filigrane.jpg
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 1.3 MiB |
Binary file not shown.
Binary file not shown.
|
After Width: | Height: | Size: 177 KiB |
2952
final_api_woocommerce/logs/woocommerce.log
Normal file
2952
final_api_woocommerce/logs/woocommerce.log
Normal file
File diff suppressed because it is too large
Load Diff
1241
final_api_woocommerce/logs/woocommerce.log.2025-04-08
Normal file
1241
final_api_woocommerce/logs/woocommerce.log.2025-04-08
Normal file
File diff suppressed because it is too large
Load Diff
46
final_api_woocommerce/logs/woocommerce.log.2025-04-09
Normal file
46
final_api_woocommerce/logs/woocommerce.log.2025-04-09
Normal file
@ -0,0 +1,46 @@
|
|||||||
|
2025-04-09 10:18:28 - DEBUG - Produit contenant comme slug 'chope-citron-meringue' existe déjà
|
||||||
|
2025-04-09 10:18:31 - DEBUG - Produit contenant comme slug 'chope-citron-meringue' existe déjà
|
||||||
|
2025-04-09 10:18:34 - DEBUG - Produit contenant comme slug 'chope-citron-meringue' existe déjà
|
||||||
|
2025-04-09 10:18:37 - DEBUG - Produit contenant comme slug 'chope-citron-meringue' existe déjà
|
||||||
|
2025-04-09 10:18:42 - DEBUG - Produit contenant comme slug 'chope-citron-meringue' existe déjà
|
||||||
|
2025-04-09 10:18:45 - DEBUG - Produit contenant comme slug 'chope-citron-meringue' existe déjà
|
||||||
|
2025-04-09 10:18:48 - DEBUG - Produit contenant comme slug 'chope-citron-meringue' existe déjà
|
||||||
|
2025-04-09 10:18:51 - DEBUG - Produit contenant comme slug 'chope-citron-meringue' existe déjà
|
||||||
|
2025-04-09 10:18:54 - DEBUG - Produit contenant comme slug 'chope-citron-meringue' existe déjà
|
||||||
|
2025-04-09 10:18:57 - DEBUG - Produit contenant comme slug 'chope-citron-meringue' existe déjà
|
||||||
|
2025-04-09 10:19:01 - DEBUG - Produit contenant comme slug 'chope-citron-meringue' existe déjà
|
||||||
|
2025-04-09 10:19:04 - DEBUG - Produit contenant comme slug 'chope-citron-meringue' existe déjà
|
||||||
|
2025-04-09 10:19:07 - DEBUG - Produit contenant comme slug 'chope-citron-meringue' existe déjà
|
||||||
|
2025-04-09 10:19:10 - DEBUG - Produit contenant comme slug 'chope-citron-meringue' existe déjà
|
||||||
|
2025-04-09 10:19:13 - DEBUG - Produit contenant comme slug 'chope-citron-meringue' existe déjà
|
||||||
|
2025-04-09 10:19:16 - DEBUG - Produit contenant comme slug 'chope-citron-meringue' existe déjà
|
||||||
|
2025-04-09 10:19:19 - DEBUG - Produit contenant comme slug 'chope-citron-meringue' existe déjà
|
||||||
|
2025-04-09 10:19:22 - DEBUG - Produit contenant comme slug 'chope-citron-meringue' existe déjà
|
||||||
|
2025-04-09 10:19:25 - DEBUG - Produit contenant comme slug 'chope-citron-meringue' existe déjà
|
||||||
|
2025-04-09 10:19:28 - DEBUG - Produit contenant comme slug 'chope-citron-meringue' existe déjà
|
||||||
|
2025-04-09 10:19:31 - DEBUG - Produit contenant comme slug 'chope-citron-meringue' existe déjà
|
||||||
|
2025-04-09 10:19:34 - DEBUG - Produit contenant comme slug 'chope-citron-meringue' existe déjà
|
||||||
|
2025-04-09 10:19:39 - DEBUG - Produit contenant comme slug 'chope-citron-meringue' existe déjà
|
||||||
|
2025-04-09 10:19:42 - DEBUG - Produit contenant comme slug 'chope-citron-meringue' existe déjà
|
||||||
|
2025-04-09 10:19:46 - DEBUG - Produit contenant comme slug 'chope-citron-meringue' existe déjà
|
||||||
|
2025-04-09 10:19:49 - DEBUG - Produit contenant comme slug 'chope-citron-meringue' existe déjà
|
||||||
|
2025-04-09 10:19:52 - DEBUG - Produit contenant comme slug 'chope-citron-meringue' existe déjà
|
||||||
|
2025-04-09 10:19:57 - DEBUG - Produit contenant comme slug 'chope-citron-meringue' existe déjà
|
||||||
|
2025-04-09 10:20:03 - DEBUG - Produit contenant comme slug 'chope-citron-meringue' existe déjà
|
||||||
|
2025-04-09 10:20:06 - DEBUG - Produit contenant comme slug 'chope-citron-meringue' existe déjà
|
||||||
|
2025-04-09 10:20:09 - DEBUG - Produit contenant comme slug 'chope-citron-meringue' existe déjà
|
||||||
|
2025-04-09 10:20:12 - DEBUG - Produit contenant comme slug 'chope-citron-meringue' existe déjà
|
||||||
|
2025-04-09 10:20:16 - DEBUG - Produit contenant comme slug 'chope-citron-meringue' existe déjà
|
||||||
|
2025-04-09 10:20:19 - DEBUG - Produit contenant comme slug 'chope-citron-meringue' existe déjà
|
||||||
|
2025-04-09 10:20:22 - DEBUG - Produit contenant comme slug 'chope-citron-meringue' existe déjà
|
||||||
|
2025-04-09 10:20:26 - DEBUG - Produit contenant comme slug 'chope-citron-meringue' existe déjà
|
||||||
|
2025-04-09 10:20:29 - DEBUG - Produit contenant comme slug 'chope-citron-meringue' existe déjà
|
||||||
|
2025-04-09 10:20:32 - DEBUG - Produit contenant comme slug 'chope-citron-meringue' existe déjà
|
||||||
|
2025-04-09 10:20:36 - DEBUG - Produit contenant comme slug 'chope-citron-meringue' existe déjà
|
||||||
|
2025-04-09 10:20:39 - DEBUG - Produit contenant comme slug 'chope-citron-meringue' existe déjà
|
||||||
|
2025-04-09 10:20:43 - DEBUG - Produit contenant comme slug 'chope-citron-meringue' existe déjà
|
||||||
|
2025-04-09 10:20:46 - DEBUG - Produit contenant comme slug 'chope-citron-meringue' existe déjà
|
||||||
|
2025-04-09 10:20:49 - DEBUG - Produit contenant comme slug 'chope-citron-meringue' existe déjà
|
||||||
|
2025-04-09 10:20:52 - DEBUG - Produit contenant comme slug 'chope-citron-meringue' existe déjà
|
||||||
|
2025-04-09 10:20:55 - DEBUG - Produit contenant comme slug 'chope-citron-meringue' existe déjà
|
||||||
|
2025-04-09 10:20:58 - DEBUG - Produit contenant comme slug 'chope-citron-meringue' existe déjà
|
||||||
929
final_api_woocommerce/logs/woocommerce.log.2025-04-23
Normal file
929
final_api_woocommerce/logs/woocommerce.log.2025-04-23
Normal file
@ -0,0 +1,929 @@
|
|||||||
|
2025-04-23 11:59:38 - INFO - ↪️ Image déjà existante (non uploadée) : chope-sapin-noel-profil.jpg
|
||||||
|
2025-04-23 11:59:40 - INFO - ↪️ Image déjà existante (non uploadée) : chope-adoucissant-face.jpg
|
||||||
|
2025-04-23 11:59:42 - INFO - ↪️ Image déjà existante (non uploadée) : chope-adoucissant-haut.jpg
|
||||||
|
2025-04-23 11:59:44 - INFO - ↪️ Image déjà existante (non uploadée) : chope-adoucissant-profil.jpg
|
||||||
|
2025-04-23 11:59:46 - INFO - ↪️ Image déjà existante (non uploadée) : chope-citron-meringue-face.jpg
|
||||||
|
2025-04-23 11:59:47 - INFO - ↪️ Image déjà existante (non uploadée) : chope-citron-meringue-haut.jpg
|
||||||
|
2025-04-23 12:02:55 - INFO - ↪️ Image déjà existante (non uploadée) : chope-sapin-noel-profil.jpg
|
||||||
|
2025-04-23 12:02:57 - INFO - ↪️ Image déjà existante (non uploadée) : chope-adoucissant-face.jpg
|
||||||
|
2025-04-23 12:02:59 - INFO - ↪️ Image déjà existante (non uploadée) : chope-adoucissant-haut.jpg
|
||||||
|
2025-04-23 12:03:00 - INFO - ↪️ Image déjà existante (non uploadée) : chope-adoucissant-profil.jpg
|
||||||
|
2025-04-23 12:03:03 - INFO - ↪️ Image déjà existante (non uploadée) : chope-citron-meringue-face.jpg
|
||||||
|
2025-04-23 12:03:05 - INFO - ↪️ Image déjà existante (non uploadée) : chope-citron-meringue-haut.jpg
|
||||||
|
2025-04-23 12:04:44 - INFO - ✅ Image uploadée : chope-sapin-noel-profil.jpg
|
||||||
|
2025-04-23 12:04:46 - INFO - ↪️ Image déjà existante (non uploadée) : chope-adoucissant-face.jpg
|
||||||
|
2025-04-23 12:04:48 - INFO - ↪️ Image déjà existante (non uploadée) : chope-adoucissant-haut.jpg
|
||||||
|
2025-04-23 12:04:50 - INFO - ↪️ Image déjà existante (non uploadée) : chope-adoucissant-profil.jpg
|
||||||
|
2025-04-23 12:04:52 - INFO - ↪️ Image déjà existante (non uploadée) : chope-citron-meringue-face.jpg
|
||||||
|
2025-04-23 12:04:54 - INFO - ↪️ Image déjà existante (non uploadée) : chope-citron-meringue-haut.jpg
|
||||||
|
2025-04-23 12:07:03 - INFO - ↪️ Image déjà existante (non uploadée) : chope-sapin-noel-profil.jpg
|
||||||
|
2025-04-23 12:07:05 - INFO - ↪️ Image déjà existante (non uploadée) : chope-adoucissant-face.jpg
|
||||||
|
2025-04-23 12:07:07 - INFO - ↪️ Image déjà existante (non uploadée) : chope-adoucissant-haut.jpg
|
||||||
|
2025-04-23 12:07:09 - INFO - ↪️ Image déjà existante (non uploadée) : chope-adoucissant-profil.jpg
|
||||||
|
2025-04-23 12:07:11 - INFO - ↪️ Image déjà existante (non uploadée) : chope-citron-meringue-face.jpg
|
||||||
|
2025-04-23 12:07:13 - INFO - ↪️ Image déjà existante (non uploadée) : chope-citron-meringue-haut.jpg
|
||||||
|
2025-04-23 12:09:56 - INFO - ↪️ Image déjà existante (non uploadée) : chope-sapin-noel-profil.jpg
|
||||||
|
2025-04-23 12:09:58 - INFO - ↪️ Image déjà existante (non uploadée) : chope-adoucissant-face.jpg
|
||||||
|
2025-04-23 12:10:00 - INFO - ↪️ Image déjà existante (non uploadée) : chope-adoucissant-haut.jpg
|
||||||
|
2025-04-23 12:10:02 - INFO - ↪️ Image déjà existante (non uploadée) : chope-adoucissant-profil.jpg
|
||||||
|
2025-04-23 12:10:04 - INFO - ↪️ Image déjà existante (non uploadée) : chope-citron-meringue-face.jpg
|
||||||
|
2025-04-23 12:10:06 - INFO - ↪️ Image déjà existante (non uploadée) : chope-citron-meringue-haut.jpg
|
||||||
|
2025-04-23 12:15:11 - INFO - ↪️ Image déjà existante (non uploadée) : logo-lescreationsdemissbleue-fond-transparent.png
|
||||||
|
2025-04-23 12:15:18 - INFO - ✅ Image uploadée : chope-sapin-noel-face.jpg
|
||||||
|
2025-04-23 12:15:25 - INFO - ✅ Image uploadée : chope-sapin-noel-haut.jpg
|
||||||
|
2025-04-23 12:15:32 - INFO - ✅ Image uploadée : chope-sapin-noel-profil.jpg
|
||||||
|
2025-04-23 12:21:10 - INFO - ↪️ Image déjà existante (non uploadée) : logo-lescreationsdemissbleue-fond-transparent.png
|
||||||
|
2025-04-23 12:21:17 - INFO - ✅ Image uploadée : chope-sapin-noel-face.jpg
|
||||||
|
2025-04-23 12:21:24 - INFO - ✅ Image uploadée : chope-sapin-noel-haut.jpg
|
||||||
|
2025-04-23 12:21:30 - INFO - ✅ Image uploadée : chope-sapin-noel-profil.jpg
|
||||||
|
2025-04-23 12:23:45 - INFO - ↪️ Image déjà existante (non uploadée) : logo-lescreationsdemissbleue-fond-transparent.png
|
||||||
|
2025-04-23 12:23:47 - INFO - ↪️ Image déjà existante (non uploadée) : chope-sapin-noel-face.jpg
|
||||||
|
2025-04-23 12:23:49 - INFO - ↪️ Image déjà existante (non uploadée) : chope-sapin-noel-haut.jpg
|
||||||
|
2025-04-23 12:23:51 - INFO - ↪️ Image déjà existante (non uploadée) : chope-sapin-noel-profil.jpg
|
||||||
|
2025-04-23 12:24:23 - INFO - ↪️ Image déjà existante (non uploadée) : logo-lescreationsdemissbleue-fond-transparent.png
|
||||||
|
2025-04-23 12:24:25 - INFO - ↪️ Image déjà existante (non uploadée) : chope-sapin-noel-face.jpg
|
||||||
|
2025-04-23 12:24:27 - INFO - ↪️ Image déjà existante (non uploadée) : chope-sapin-noel-haut.jpg
|
||||||
|
2025-04-23 12:24:29 - INFO - ↪️ Image déjà existante (non uploadée) : chope-sapin-noel-profil.jpg
|
||||||
|
2025-04-23 14:11:25 - INFO - ✅ Image uploadée : logo-lescreationsdemissbleue.jpg
|
||||||
|
2025-04-23 14:11:28 - INFO - ✅ Image uploadée : logo-lescreationsdemissbleue-fond-transparent.png
|
||||||
|
2025-04-23 14:13:18 - INFO - ↪️ Image déjà existante (non uploadée) : logo-lescreationsdemissbleue.jpg
|
||||||
|
2025-04-23 14:13:19 - INFO - ↪️ Image déjà existante (non uploadée) : logo-lescreationsdemissbleue-fond-transparent.png
|
||||||
|
2025-04-23 14:13:21 - INFO - ✅ Image uploadée : logo-lescreationsdemissbleue-resize.png
|
||||||
|
2025-04-23 14:14:21 - INFO - ↪️ Image déjà existante (non uploadée) : logo-lescreationsdemissbleue.jpg
|
||||||
|
2025-04-23 14:14:21 - INFO - ↪️ Image déjà existante (non uploadée) : logo-lescreationsdemissbleue-fond-transparent.png
|
||||||
|
2025-04-23 14:14:22 - INFO - ↪️ Image déjà existante (non uploadée) : logo-lescreationsdemissbleue-resize.png
|
||||||
|
2025-04-23 14:15:56 - INFO - ✅ Image uploadée : logo-lescreationsdemissbleue.jpg
|
||||||
|
2025-04-23 14:15:59 - INFO - ✅ Image uploadée : logo-lescreationsdemissbleue-fond-transparent.png
|
||||||
|
2025-04-23 14:15:59 - INFO - ↪️ Image déjà existante (non uploadée) : logo-lescreationsdemissbleue-resize.png
|
||||||
|
2025-04-23 14:15:59 - ERROR - 🚫 Fichier introuvable : logo-lescreationsdemissbleue-fond-transparent-resize.png (C:\Users\beren\OneDrive\Documents\nextcloud\beren\site_missbleue\photos\photos_site\Photos_site\Logo\logo-lescreationsdemissbleue-fond-transparent-resize.png)
|
||||||
|
Traceback (most recent call last):
|
||||||
|
File "C:\Users\beren\OneDrive\Documents\nextcloud\beren\site_missbleue\api_woocommerce\final_api_woocommerce\api_woocommerce.py", line 311, in upload_media_from_to
|
||||||
|
watermarked_path = Path(create_watermark_image(str(path)))
|
||||||
|
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||||
|
File "C:\Users\beren\OneDrive\Documents\nextcloud\beren\site_missbleue\api_woocommerce\final_api_woocommerce\watermark.py", line 11, in create_watermark_image
|
||||||
|
image = ImageOps.exif_transpose(Image.open(image_path)).convert("RGBA")
|
||||||
|
^^^^^^^^^^^^^^^^^^^^^^
|
||||||
|
File "C:\Users\beren\OneDrive\Documents\nextcloud\beren\site_missbleue\api_woocommerce\.venv\Lib\site-packages\PIL\Image.py", line 3465, in open
|
||||||
|
fp = builtins.open(filename, "rb")
|
||||||
|
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||||
|
FileNotFoundError: [Errno 2] No such file or directory: 'C:\\Users\\beren\\OneDrive\\Documents\\nextcloud\\beren\\site_missbleue\\photos\\photos_site\\Photos_site\\Logo\\logo-lescreationsdemissbleue-fond-transparent-resize.png'
|
||||||
|
2025-04-23 14:16:51 - INFO - ↪️ Image déjà existante (non uploadée) : logo-lescreationsdemissbleue.jpg
|
||||||
|
2025-04-23 14:16:52 - INFO - ↪️ Image déjà existante (non uploadée) : logo-lescreationsdemissbleue-fond-transparent.png
|
||||||
|
2025-04-23 14:16:53 - INFO - ↪️ Image déjà existante (non uploadée) : logo-lescreationsdemissbleue-resize.png
|
||||||
|
2025-04-23 14:16:53 - ERROR - 🚫 Fichier introuvable : logo-lescreationsdemissbleue-fond-transparent-resize.png (C:\Users\beren\OneDrive\Documents\nextcloud\beren\site_missbleue\photos\photos_site\Photos_site\Logo\logo-lescreationsdemissbleue-fond-transparent-resize.png)
|
||||||
|
Traceback (most recent call last):
|
||||||
|
File "C:\Users\beren\OneDrive\Documents\nextcloud\beren\site_missbleue\api_woocommerce\final_api_woocommerce\api_woocommerce.py", line 311, in upload_media_from_to
|
||||||
|
watermarked_path = Path(create_watermark_image(str(path)))
|
||||||
|
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||||
|
File "C:\Users\beren\OneDrive\Documents\nextcloud\beren\site_missbleue\api_woocommerce\final_api_woocommerce\watermark.py", line 11, in create_watermark_image
|
||||||
|
image = ImageOps.exif_transpose(Image.open(image_path)).convert("RGBA")
|
||||||
|
^^^^^^^^^^^^^^^^^^^^^^
|
||||||
|
File "C:\Users\beren\OneDrive\Documents\nextcloud\beren\site_missbleue\api_woocommerce\.venv\Lib\site-packages\PIL\Image.py", line 3465, in open
|
||||||
|
fp = builtins.open(filename, "rb")
|
||||||
|
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||||
|
FileNotFoundError: [Errno 2] No such file or directory: 'C:\\Users\\beren\\OneDrive\\Documents\\nextcloud\\beren\\site_missbleue\\photos\\photos_site\\Photos_site\\Logo\\logo-lescreationsdemissbleue-fond-transparent-resize.png'
|
||||||
|
2025-04-23 14:18:45 - ERROR - 🚫 Fichier introuvable : logo-lescreationsdemissbleue-fond-transparent-resize.png (C:\Users\beren\OneDrive\Documents\nextcloud\beren\site_missbleue\photos\photos_site\Photos_site\Logo\logo-lescreationsdemissbleue-fond-transparent-resize.png)
|
||||||
|
Traceback (most recent call last):
|
||||||
|
File "C:\Users\beren\OneDrive\Documents\nextcloud\beren\site_missbleue\api_woocommerce\final_api_woocommerce\api_woocommerce.py", line 290, in upload_media_from_to
|
||||||
|
with open(image_path, "rb") as image_file:
|
||||||
|
^^^^^^^^^^^^^^^^^^^^^^
|
||||||
|
FileNotFoundError: [Errno 2] No such file or directory: 'C:\\Users\\beren\\OneDrive\\Documents\\nextcloud\\beren\\site_missbleue\\photos\\photos_site\\Photos_site\\Logo\\logo-lescreationsdemissbleue-fond-transparent-resize.png'
|
||||||
|
2025-04-23 14:19:16 - ERROR - 🚫 Fichier introuvable : logo-lescreationsdemissbleue-fond-transparent-resize.png (C:\Users\beren\OneDrive\Documents\nextcloud\beren\site_missbleue\photos\photos_site\Photos_site\Logo\logo-lescreationsdemissbleue-fond-transparent-resize.png)
|
||||||
|
Traceback (most recent call last):
|
||||||
|
File "C:\Users\beren\OneDrive\Documents\nextcloud\beren\site_missbleue\api_woocommerce\final_api_woocommerce\api_woocommerce.py", line 290, in upload_media_from_to
|
||||||
|
with open(image_path, "rb") as image_file:
|
||||||
|
^^^^^^^^^^^^^^^^^^^^^^
|
||||||
|
FileNotFoundError: [Errno 2] No such file or directory: 'C:\\Users\\beren\\OneDrive\\Documents\\nextcloud\\beren\\site_missbleue\\photos\\photos_site\\Photos_site\\Logo\\logo-lescreationsdemissbleue-fond-transparent-resize.png'
|
||||||
|
2025-04-23 14:20:24 - INFO - ✅ Image uploadée : logo-lescreationsdemissbleue.jpg
|
||||||
|
2025-04-23 14:20:28 - INFO - ✅ Image uploadée : logo-lescreationsdemissbleue-fond-transparent.png
|
||||||
|
2025-04-23 14:20:29 - INFO - ✅ Image uploadée : logo-lescreationsdemissbleue-resize.png
|
||||||
|
2025-04-23 14:20:30 - ERROR - 🚫 Fichier introuvable : logo-lescreationsdemissbleue-fond-transparent-resize.png (C:\Users\beren\OneDrive\Documents\nextcloud\beren\site_missbleue\photos\photos_site\Photos_site\Logo\logo-lescreationsdemissbleue-fond-transparent-resize.png)
|
||||||
|
Traceback (most recent call last):
|
||||||
|
File "C:\Users\beren\OneDrive\Documents\nextcloud\beren\site_missbleue\api_woocommerce\final_api_woocommerce\api_woocommerce.py", line 290, in upload_media_from_to
|
||||||
|
with open(image_path, "rb") as image_file:
|
||||||
|
^^^^^^^^^^^^^^^^^^^^^^
|
||||||
|
FileNotFoundError: [Errno 2] No such file or directory: 'C:\\Users\\beren\\OneDrive\\Documents\\nextcloud\\beren\\site_missbleue\\photos\\photos_site\\Photos_site\\Logo\\logo-lescreationsdemissbleue-fond-transparent-resize.png'
|
||||||
|
2025-04-23 14:20:37 - INFO - ✅ Image uploadée : chope-sapin-noel-face.jpg
|
||||||
|
2025-04-23 14:20:43 - INFO - ✅ Image uploadée : chope-sapin-noel-haut.jpg
|
||||||
|
2025-04-23 14:20:49 - INFO - ✅ Image uploadée : chope-sapin-noel-profil.jpg
|
||||||
|
2025-04-23 14:20:56 - INFO - ✅ Image uploadée : chope-adoucissant-face.jpg
|
||||||
|
2025-04-23 14:21:03 - INFO - ✅ Image uploadée : chope-adoucissant-haut.jpg
|
||||||
|
2025-04-23 14:21:10 - INFO - ✅ Image uploadée : chope-adoucissant-profil.jpg
|
||||||
|
2025-04-23 14:21:16 - INFO - ✅ Image uploadée : chope-citron-meringue-face.jpg
|
||||||
|
2025-04-23 14:21:23 - INFO - ✅ Image uploadée : chope-citron-meringue-haut.jpg
|
||||||
|
2025-04-23 14:21:30 - INFO - ✅ Image uploadée : chope-citron-meringue-profil.jpg
|
||||||
|
2025-04-23 14:21:37 - INFO - ✅ Image uploadée : chope-lavande-face.jpg
|
||||||
|
2025-04-23 14:21:44 - INFO - ✅ Image uploadée : chope-lavande-haut.jpg
|
||||||
|
2025-04-23 14:22:01 - INFO - ✅ Image uploadée : chope-lavande-profil.jpg
|
||||||
|
2025-04-23 14:22:09 - INFO - ✅ Image uploadée : chope-framboise-face.jpg
|
||||||
|
2025-04-23 14:22:16 - INFO - ✅ Image uploadée : chope-framboise-haut.jpg
|
||||||
|
2025-04-23 14:22:23 - INFO - ✅ Image uploadée : chope-framboise-profil.jpg
|
||||||
|
2025-04-23 14:22:30 - INFO - ✅ Image uploadée : chope-baie-givree-face.jpg
|
||||||
|
2025-04-23 14:22:39 - INFO - ✅ Image uploadée : chope-baie-givree-haut.jpg
|
||||||
|
2025-04-23 14:22:46 - INFO - ✅ Image uploadée : chope-baie-givree-profil.jpg
|
||||||
|
2025-04-23 14:22:56 - INFO - ✅ Image uploadée : chope-chocolat-noisette-face.jpg
|
||||||
|
2025-04-23 14:23:06 - INFO - ✅ Image uploadée : chope-chocolat-noisette-haut.jpg
|
||||||
|
2025-04-23 14:23:14 - INFO - ✅ Image uploadée : chope-chocolat-noisette-profil.jpg
|
||||||
|
2025-04-23 14:23:22 - INFO - ✅ Image uploadée : chope-fraise-menthe-face.jpg
|
||||||
|
2025-04-23 14:23:29 - INFO - ✅ Image uploadée : chope-fraise-menthe-haut.jpg
|
||||||
|
2025-04-23 14:23:36 - INFO - ✅ Image uploadée : chope-fraise-menthe-profil.jpg
|
||||||
|
2025-04-23 14:23:43 - INFO - ✅ Image uploadée : chope-hiver-scandinave-face.jpg
|
||||||
|
2025-04-23 14:23:51 - INFO - ✅ Image uploadée : chope-hiver-scandinave-haut.jpg
|
||||||
|
2025-04-23 14:23:58 - INFO - ✅ Image uploadée : chope-hiver-scandinave-profil.jpg
|
||||||
|
2025-04-23 14:24:05 - INFO - ✅ Image uploadée : chope-melon-face.jpg
|
||||||
|
2025-04-23 14:24:12 - INFO - ✅ Image uploadée : chope-melon-haut.jpg
|
||||||
|
2025-04-23 14:24:20 - INFO - ✅ Image uploadée : chope-melon-profil.jpg
|
||||||
|
2025-04-23 14:24:27 - INFO - ✅ Image uploadée : verre-ambre-bois-santal-face.jpg
|
||||||
|
2025-04-23 14:24:34 - INFO - ✅ Image uploadée : verre-ambre-bois-santal-haut.jpg
|
||||||
|
2025-04-23 14:24:42 - INFO - ✅ Image uploadée : verre-ambre-cafe-bresilien-face.jpg
|
||||||
|
2025-04-23 14:24:49 - INFO - ✅ Image uploadée : verre-ambre-cafe-bresilien-haut.jpg
|
||||||
|
2025-04-23 14:24:56 - INFO - ✅ Image uploadée : verre-ambre-caramel-beurre-sale-face.jpg
|
||||||
|
2025-04-23 14:25:04 - INFO - ✅ Image uploadée : verre-ambre-caramel-beurre-sale-haut.jpg
|
||||||
|
2025-04-23 14:25:11 - INFO - ✅ Image uploadée : verre-ambre-citron-meringue-face.jpg
|
||||||
|
2025-04-23 14:25:18 - INFO - ✅ Image uploadée : verre-ambre-citron-meringue-haut.jpg
|
||||||
|
2025-04-23 14:25:25 - INFO - ✅ Image uploadée : verre-ambre-dark-flowers-face.jpg
|
||||||
|
2025-04-23 14:25:32 - INFO - ✅ Image uploadée : verre-ambre-dark-flowers-haut.jpg
|
||||||
|
2025-04-23 14:25:39 - INFO - ✅ Image uploadée : verre-ambre-figue-pain-epices-face.jpg
|
||||||
|
2025-04-23 14:25:46 - INFO - ✅ Image uploadée : verre-ambre-figue-pain-epices-haut.jpg
|
||||||
|
2025-04-23 14:25:54 - INFO - ✅ Image uploadée : verre-ambre-frangipanier-face.jpg
|
||||||
|
2025-04-23 14:26:00 - INFO - ✅ Image uploadée : verre-ambre-frangipanier-haut.jpg
|
||||||
|
2025-04-23 14:26:07 - INFO - ✅ Image uploadée : verre-ambre-melon-face.jpg
|
||||||
|
2025-04-23 14:26:15 - INFO - ✅ Image uploadée : verre-ambre-melon-haut.jpg
|
||||||
|
2025-04-23 14:27:01 - INFO - ✅ Image uploadée : bougie-chauffe-plat-citron-meringue-lot-2.jpg
|
||||||
|
2025-04-23 14:27:16 - INFO - ✅ Image uploadée : bougie-chauffe-plat-lavande-lot-2.jpg
|
||||||
|
2025-04-23 14:27:26 - INFO - ✅ Image uploadée : bougie-chauffe-plat-sapin-lot-2.jpg
|
||||||
|
2025-04-23 14:27:34 - INFO - ✅ Image uploadée : verre-irise-cerise-noire-explosive-face.jpg
|
||||||
|
2025-04-23 14:27:44 - INFO - ✅ Image uploadée : verre-irise-cerise-noire-explosive-face-couvercle.jpg
|
||||||
|
2025-04-23 14:27:52 - INFO - ✅ Image uploadée : verre-irise-cerise-noire-explosive-haut.jpg
|
||||||
|
2025-04-23 14:28:00 - INFO - ✅ Image uploadée : verre-irise-escale-cassis-face.jpg
|
||||||
|
2025-04-23 14:28:08 - INFO - ✅ Image uploadée : verre-irise-escale-cassis-face-couvercle.jpg
|
||||||
|
2025-04-23 14:28:16 - INFO - ✅ Image uploadée : verre-irise-escale-cassis-haut.jpg
|
||||||
|
2025-04-23 14:28:22 - INFO - ✅ Image uploadée : verre-bois-santal-face.jpg
|
||||||
|
2025-04-23 14:28:29 - INFO - ✅ Image uploadée : verre-bois-santal-haut.jpg
|
||||||
|
2025-04-23 14:28:37 - INFO - ✅ Image uploadée : verre-cocodream-face.jpg
|
||||||
|
2025-04-23 14:28:45 - INFO - ✅ Image uploadée : verre-cocodream-haut.jpg
|
||||||
|
2025-04-23 14:28:52 - INFO - ✅ Image uploadée : verre-cocodream-sans-couvercle.jpg
|
||||||
|
2025-04-23 14:28:59 - INFO - ✅ Image uploadée : verre-dark-flowers-face.jpg
|
||||||
|
2025-04-23 14:29:08 - INFO - ✅ Image uploadée : verre-dark-flowers-haut.jpg
|
||||||
|
2025-04-23 14:29:16 - INFO - ✅ Image uploadée : verre-framboise-face.jpg
|
||||||
|
2025-04-23 14:29:24 - INFO - ✅ Image uploadée : verre-framboise-haut.jpg
|
||||||
|
2025-04-23 14:29:31 - INFO - ✅ Image uploadée : verre-frangipanier-face.jpg
|
||||||
|
2025-04-23 14:29:39 - INFO - ✅ Image uploadée : verre-frangipanier-haut.jpg
|
||||||
|
2025-04-23 14:29:47 - INFO - ✅ Image uploadée : verre-petale-oranger-face.jpg
|
||||||
|
2025-04-23 14:29:54 - INFO - ✅ Image uploadée : verre-petale-oranger-haut.jpg
|
||||||
|
2025-04-23 14:30:01 - INFO - ✅ Image uploadée : verre-pink-lover-face.jpg
|
||||||
|
2025-04-23 14:30:09 - INFO - ✅ Image uploadée : verre-pink-lover-haut.jpg
|
||||||
|
2025-04-23 14:30:17 - INFO - ✅ Image uploadée : diffuseur-voiture-argent-accroche.jpg
|
||||||
|
2025-04-23 14:30:24 - INFO - ✅ Image uploadée : diffuseur-voiture-argent-pose.jpg
|
||||||
|
2025-04-23 14:30:31 - INFO - ✅ Image uploadée : diffuseur-voiture-or-accroche.jpg
|
||||||
|
2025-04-23 14:30:40 - INFO - ✅ Image uploadée : diffuseur-voiture-or-pose.jpg
|
||||||
|
2025-04-23 14:30:48 - INFO - ✅ Image uploadée : diffuseur-voiture-noir-accroche.jpg
|
||||||
|
2025-04-23 14:30:55 - INFO - ✅ Image uploadée : diffuseur-voiture-noir-pose.jpg
|
||||||
|
2025-04-23 14:31:04 - INFO - ✅ Image uploadée : nettoyant-multi-usage-1l.jpg
|
||||||
|
2025-04-23 14:31:12 - INFO - ✅ Image uploadée : fondtzel-perlimpinpin.jpg
|
||||||
|
2025-04-23 14:31:20 - INFO - ✅ Image uploadée : fondtzel-perlimpinpin-paquet.jpg
|
||||||
|
2025-04-23 14:31:27 - INFO - ✅ Image uploadée : fondtzel-adoucissant.jpg
|
||||||
|
2025-04-23 14:31:35 - INFO - ✅ Image uploadée : fondtzel-adoucissant-paquet.jpg
|
||||||
|
2025-04-23 14:31:43 - INFO - ✅ Image uploadée : fondtzel-fruits-rouges.jpg
|
||||||
|
2025-04-23 14:31:51 - INFO - ✅ Image uploadée : fondtzel-fruits-rouges-paquet.jpg
|
||||||
|
2025-04-23 14:31:58 - INFO - ✅ Image uploadée : fondtzel-peche.jpg
|
||||||
|
2025-04-23 14:32:06 - INFO - ✅ Image uploadée : fondtzel-peche-paquet.jpg
|
||||||
|
2025-04-23 14:32:14 - INFO - ✅ Image uploadée : fondtzel-fleur-tiare.jpg
|
||||||
|
2025-04-23 14:32:21 - INFO - ✅ Image uploadée : fondtzel-fleur-tiare-paquet.jpg
|
||||||
|
2025-04-23 14:32:29 - INFO - ✅ Image uploadée : fondtzel-hiver-scandinave.jpg
|
||||||
|
2025-04-23 14:32:38 - INFO - ✅ Image uploadée : fondtzel-hiver-scandinave-paquet.jpg
|
||||||
|
2025-04-23 14:32:46 - INFO - ✅ Image uploadée : fondtzel-mocaccino-noel.jpg
|
||||||
|
2025-04-23 14:33:00 - INFO - ✅ Image uploadée : fondtzel-mocaccino-noel-paquet.jpg
|
||||||
|
2025-04-23 14:33:08 - INFO - ✅ Image uploadée : fondtzel-monoi-passion.jpg
|
||||||
|
2025-04-23 14:33:17 - INFO - ✅ Image uploadée : fondtzel-monoi-passion-paquet.jpg
|
||||||
|
2025-04-23 14:33:24 - INFO - ✅ Image uploadée : fondtzel-mojito.jpg
|
||||||
|
2025-04-23 14:33:31 - INFO - ✅ Image uploadée : fondtzel-mojito-paquet.jpg
|
||||||
|
2025-04-23 14:33:39 - INFO - ✅ Image uploadée : fondtzel-sapin.jpg
|
||||||
|
2025-04-23 14:37:15 - INFO - ✅ Image uploadée : fondtzel-sapin-paquet-filigrane.jpg
|
||||||
|
2025-04-23 14:37:22 - INFO - ✅ Image uploadée : fondant-parfume-tablette-femme-bleue-face-filigrane.jpg
|
||||||
|
2025-04-23 14:37:30 - INFO - ✅ Image uploadée : fondant-parfume-tablette-femme-bleue-profil-filigrane.jpg
|
||||||
|
2025-04-23 14:37:38 - INFO - ✅ Image uploadée : fondant-parfume-tablette-violet-ambre-face-filigrane.jpg
|
||||||
|
2025-04-23 14:37:46 - INFO - ✅ Image uploadée : fondant-parfume-tablette-violet-ambre-profil-filigrane.jpg
|
||||||
|
2025-04-23 14:37:54 - INFO - ✅ Image uploadée : fondant-parfume-tablette-little-dark-face-filigrane.jpg
|
||||||
|
2025-04-23 14:38:02 - INFO - ✅ Image uploadée : fondant-parfume-tablette-little-dark-profil-filigrane.jpg
|
||||||
|
2025-04-23 14:38:12 - INFO - ✅ Image uploadée : fondant-parfume-tablette-fruit-defendu-face-filigrane.jpg
|
||||||
|
2025-04-23 14:38:21 - INFO - ✅ Image uploadée : fondant-parfume-tablette-fruit-defendu-profil-filigrane.jpg
|
||||||
|
2025-04-23 14:38:31 - INFO - ✅ Image uploadée : fondant-parfume-tablette-glorieuse-face-filigrane.jpg
|
||||||
|
2025-04-23 14:38:40 - INFO - ✅ Image uploadée : fondant-parfume-tablette-glorieuse-profil-filigrane.jpg
|
||||||
|
2025-04-23 14:38:48 - INFO - ✅ Image uploadée : fondant-parfume-tablette-millionnaire-face-filigrane.jpg
|
||||||
|
2025-04-23 14:38:56 - INFO - ✅ Image uploadée : fondant-parfume-tablette-millionnaire-profil-filigrane.jpg
|
||||||
|
2025-04-23 14:38:59 - INFO - ✅ Image uploadée : allergenes-chope-citron-meringue-filigrane.jpg
|
||||||
|
2025-04-23 14:39:02 - INFO - ✅ Image uploadée : allergenes-chope-lavande-filigrane.jpg
|
||||||
|
2025-04-23 14:39:05 - INFO - ✅ Image uploadée : allergenes-chope-framboise-filigrane.jpg
|
||||||
|
2025-04-23 14:39:11 - INFO - ✅ Image uploadée : allergenes-chope-baie-givree-filigrane.jpg
|
||||||
|
2025-04-23 14:39:14 - INFO - ✅ Image uploadée : allergenes-chope-chocolat-noisettes-filigrane.jpg
|
||||||
|
2025-04-23 14:39:18 - INFO - ✅ Image uploadée : allergenes-chope-fraise-menthe-filigrane.jpg
|
||||||
|
2025-04-23 14:39:21 - INFO - ✅ Image uploadée : allergenes-chope-hiver-scandinave-filigrane.jpg
|
||||||
|
2025-04-23 14:39:24 - INFO - ✅ Image uploadée : allergenes-chope-melon-filigrane.jpg
|
||||||
|
2025-04-23 14:39:27 - INFO - ✅ Image uploadée : allergenes-verre-ambre-bois-santal-filigrane.jpg
|
||||||
|
2025-04-23 14:39:30 - INFO - ✅ Image uploadée : allergenes-verre-ambre-cafe-bresilien-filigrane.jpg
|
||||||
|
2025-04-23 14:39:33 - INFO - ✅ Image uploadée : allergenes-verre-ambre-caramel-beurre-sale-filigrane.jpg
|
||||||
|
2025-04-23 14:39:36 - INFO - ✅ Image uploadée : allergenes-verre-ambre-citron-meringue-filigrane.jpg
|
||||||
|
2025-04-23 14:39:39 - INFO - ✅ Image uploadée : allergenes-verre-ambre-dark-flowers-filigrane.jpg
|
||||||
|
2025-04-23 14:39:43 - INFO - ✅ Image uploadée : allergenes-verre-ambre-figue-pain-epices-filigrane.jpg
|
||||||
|
2025-04-23 14:39:46 - INFO - ✅ Image uploadée : allergenes-verre-ambre-frangipanier-filigrane.jpg
|
||||||
|
2025-04-23 14:39:49 - INFO - ✅ Image uploadée : allergenes-verre-ambre-melon-filigrane.jpg
|
||||||
|
2025-04-23 14:39:51 - INFO - ✅ Image uploadée : allergenes-bougie-chauffe-plat-citron-meringue-filigrane.jpg
|
||||||
|
2025-04-23 14:39:54 - INFO - ✅ Image uploadée : allergenes-bougie-chauffe-plat-lavande-filigrane.jpg
|
||||||
|
2025-04-23 14:39:57 - INFO - ✅ Image uploadée : allergenes-bougie-chauffe-plat-sapin-filigrane.jpg
|
||||||
|
2025-04-23 14:40:01 - INFO - ✅ Image uploadée : allergenes-verre-irise-cerise-noire-explosive-filigrane.jpg
|
||||||
|
2025-04-23 14:40:04 - INFO - ✅ Image uploadée : allergenes-verre-irise-escale-cassis-filigrane.jpg
|
||||||
|
2025-04-23 14:40:07 - INFO - ✅ Image uploadée : allergenes-verre-bois-santal-filigrane.jpg
|
||||||
|
2025-04-23 14:40:10 - INFO - ✅ Image uploadée : allergenes-verre-cocodream-filigrane.jpg
|
||||||
|
2025-04-23 14:40:14 - INFO - ✅ Image uploadée : allergenes-verre-dark-flowers-filigrane.jpg
|
||||||
|
2025-04-23 14:40:17 - INFO - ✅ Image uploadée : allergenes-verre-frangipanier-filigrane.jpg
|
||||||
|
2025-04-23 14:40:20 - INFO - ✅ Image uploadée : allergenes-verre-petales-oranger-filigrane.jpg
|
||||||
|
2025-04-23 14:40:24 - INFO - ✅ Image uploadée : allergenes-verre-pink-lover-filigrane.jpg
|
||||||
|
2025-04-23 14:40:27 - INFO - ✅ Image uploadée : allergenes-fondant-adoucissant-filigrane.jpg
|
||||||
|
2025-04-23 14:40:31 - INFO - ✅ Image uploadée : allergenes-fondant-fruits-rouges-filigrane.jpg
|
||||||
|
2025-04-23 14:40:39 - INFO - ✅ Image uploadée : allergenes-fondant-hiver-scandinave-filigrane.jpg
|
||||||
|
2025-04-23 14:40:43 - INFO - ✅ Image uploadée : allergenes-fondant-mocaccino-noel-filigrane.jpg
|
||||||
|
2025-04-23 14:40:49 - INFO - ✅ Image uploadée : allergenes-fondant-mojito-filigrane.jpg
|
||||||
|
2025-04-23 14:40:54 - INFO - ✅ Image uploadée : allergenes-fondant-peche-filigrane.jpg
|
||||||
|
2025-04-23 14:40:57 - INFO - ✅ Image uploadée : allergenes-fondant-perlimpinpin-filigrane.jpg
|
||||||
|
2025-04-23 14:41:01 - INFO - ✅ Image uploadée : allergenes-fondant-sapin-filigrane.jpg
|
||||||
|
2025-04-23 14:47:12 - INFO - ✅ Image uploadée : allergenes-fondant-tablette-femme-bleue-filigrane.jpg
|
||||||
|
2025-04-23 14:47:15 - INFO - ✅ Image uploadée : allergenes-fondant-tablette-fruit-defendu-filigrane.jpg
|
||||||
|
2025-04-23 14:47:18 - INFO - ✅ Image uploadée : allergenes-fondant-tablette-glorieuse-filigrane.jpg
|
||||||
|
2025-04-23 14:47:22 - INFO - ✅ Image uploadée : allergenes-fondant-tablette-little-dark-filigrane.jpg
|
||||||
|
2025-04-23 14:47:25 - INFO - ✅ Image uploadée : allergenes-fondant-tablette-millionnaire-filigrane.jpg
|
||||||
|
2025-04-23 14:47:29 - INFO - ✅ Image uploadée : allergenes-fondant-tablette-violet-ambre-filigrane.jpg
|
||||||
|
2025-04-23 14:47:34 - INFO - ✅ Image uploadée : pyramide-olfactive-poudre-perlimpinpin-filigrane.jpg
|
||||||
|
2025-04-23 14:47:39 - INFO - ✅ Image uploadée : pyramide-olfactive-relaxation-tahiti-filigrane.jpg
|
||||||
|
2025-04-23 14:47:43 - INFO - ✅ Image uploadée : pyramide-olfactive-rose-jardins-filigrane.jpg
|
||||||
|
2025-04-23 14:47:49 - INFO - ✅ Image uploadée : pyramide-olfactive-vanille-iles-filigrane.jpg
|
||||||
|
2025-04-23 14:47:54 - INFO - ✅ Image uploadée : pyramide-olfactive-frangipanier-filigrane.jpg
|
||||||
|
2025-04-23 14:47:59 - INFO - ✅ Image uploadée : pyramide-olfactive-sapin-noel-filigrane.jpg
|
||||||
|
2025-04-23 14:48:04 - INFO - ✅ Image uploadée : pyramide-olfactive-lavande-filigrane.jpg
|
||||||
|
2025-04-23 14:48:09 - INFO - ✅ Image uploadée : pyramide-olfactive-framboise-filigrane.jpg
|
||||||
|
2025-04-23 14:48:14 - INFO - ✅ Image uploadée : pyramide-olfactive-baie-givree-filigrane.jpg
|
||||||
|
2025-04-23 14:48:21 - INFO - ✅ Image uploadée : pyramide-olfactive-chocolat-noisettes-filigrane.jpg
|
||||||
|
2025-04-23 14:48:25 - INFO - ✅ Image uploadée : pyramide-olfactive-fraise-menthe-filigrane.jpg
|
||||||
|
2025-04-23 14:48:30 - INFO - ✅ Image uploadée : pyramide-olfactive-hiver-scandinave-filigrane.jpg
|
||||||
|
2025-04-23 14:48:34 - INFO - ✅ Image uploadée : pyramide-olfactive-melon-filigrane.jpg
|
||||||
|
2025-04-23 14:48:38 - INFO - ✅ Image uploadée : pyramide-olfactive-bois-santal-filigrane.jpg
|
||||||
|
2025-04-23 14:48:43 - INFO - ✅ Image uploadée : pyramide-olfactive-cafe-bresilien-filigrane.jpg
|
||||||
|
2025-04-23 14:48:48 - INFO - ✅ Image uploadée : pyramide-olfactive-caramel-beurre-sale-filigrane.jpg
|
||||||
|
2025-04-23 14:48:52 - INFO - ✅ Image uploadée : pyramide-olfactive-figue-pain-epices-filigrane.jpg
|
||||||
|
2025-04-23 14:48:57 - INFO - ✅ Image uploadée : pyramide-olfactive-cerise-noire-explosive-filigrane.jpg
|
||||||
|
2025-04-23 14:49:04 - INFO - ✅ Image uploadée : pyramide-olfactive-calanque-cassis-filigrane.jpg
|
||||||
|
2025-04-23 14:49:09 - INFO - ✅ Image uploadée : pyramide-olfactive-petales-oranger-filigrane.jpg
|
||||||
|
2025-04-23 14:49:14 - INFO - ✅ Image uploadée : pyramide-olfactive-little-dark-filigrane.jpg
|
||||||
|
2025-04-23 14:49:19 - INFO - ✅ Image uploadée : pyramide-olfactive-femme-bleue-filigrane.jpg
|
||||||
|
2025-04-23 14:49:23 - INFO - ✅ Image uploadée : pyramide-olfactive-violet-ambre-filigrane.jpg
|
||||||
|
2025-04-23 14:51:15 - INFO - ✅ Image uploadée : fond-neutre-logo-filigrane.jpg
|
||||||
|
2025-04-23 14:51:54 - INFO - ✅ Image uploadée : fond-neutre-filigrane.jpg
|
||||||
|
2025-04-23 14:54:21 - INFO - ✅ Image uploadée : fond-neutre-logo-filigrane.jpg
|
||||||
|
2025-04-23 14:54:28 - INFO - ✅ Image uploadée : fond-neutre-filigrane.jpg
|
||||||
|
2025-04-23 14:58:15 - INFO - ✅ Image uploadée : fond-neutre-logo-filigrane.jpg
|
||||||
|
2025-04-23 14:58:22 - INFO - ✅ Image uploadée : fond-neutre-filigrane.jpg
|
||||||
|
2025-04-23 15:00:29 - INFO - ✅ Image uploadée : fondtzel-sapin-paquet-filigrane.jpg
|
||||||
|
2025-04-23 15:00:35 - INFO - ✅ Image uploadée : fondant-parfume-tablette-femme-bleue-face-filigrane.jpg
|
||||||
|
2025-04-23 15:00:44 - INFO - ✅ Image uploadée : fondant-parfume-tablette-femme-bleue-profil-filigrane.jpg
|
||||||
|
2025-04-23 15:00:51 - INFO - ✅ Image uploadée : fondant-parfume-tablette-violet-ambre-face-filigrane.jpg
|
||||||
|
2025-04-23 15:00:57 - INFO - ✅ Image uploadée : fondant-parfume-tablette-violet-ambre-profil-filigrane.jpg
|
||||||
|
2025-04-23 15:01:04 - INFO - ✅ Image uploadée : fondant-parfume-tablette-little-dark-face-filigrane.jpg
|
||||||
|
2025-04-23 15:01:11 - INFO - ✅ Image uploadée : fondant-parfume-tablette-little-dark-profil-filigrane.jpg
|
||||||
|
2025-04-23 15:01:18 - INFO - ✅ Image uploadée : fondant-parfume-tablette-fruit-defendu-face-filigrane.jpg
|
||||||
|
2025-04-23 15:01:25 - INFO - ✅ Image uploadée : fondant-parfume-tablette-fruit-defendu-profil-filigrane.jpg
|
||||||
|
2025-04-23 15:01:31 - INFO - ✅ Image uploadée : fondant-parfume-tablette-glorieuse-face-filigrane.jpg
|
||||||
|
2025-04-23 15:01:38 - INFO - ✅ Image uploadée : fondant-parfume-tablette-glorieuse-profil-filigrane.jpg
|
||||||
|
2025-04-23 15:01:45 - INFO - ✅ Image uploadée : fondant-parfume-tablette-millionnaire-face-filigrane.jpg
|
||||||
|
2025-04-23 15:01:52 - INFO - ✅ Image uploadée : fondant-parfume-tablette-millionnaire-profil-filigrane.jpg
|
||||||
|
2025-04-23 15:01:55 - INFO - ✅ Image uploadée : allergenes-chope-citron-meringue-filigrane.jpg
|
||||||
|
2025-04-23 15:01:57 - INFO - ✅ Image uploadée : allergenes-chope-lavande-filigrane.jpg
|
||||||
|
2025-04-23 15:02:00 - INFO - ✅ Image uploadée : allergenes-chope-framboise-filigrane.jpg
|
||||||
|
2025-04-23 15:02:02 - INFO - ✅ Image uploadée : allergenes-chope-baie-givree-filigrane.jpg
|
||||||
|
2025-04-23 15:02:05 - INFO - ✅ Image uploadée : allergenes-chope-chocolat-noisettes-filigrane.jpg
|
||||||
|
2025-04-23 15:02:07 - INFO - ✅ Image uploadée : allergenes-chope-fraise-menthe-filigrane.jpg
|
||||||
|
2025-04-23 15:02:10 - INFO - ✅ Image uploadée : allergenes-chope-hiver-scandinave-filigrane.jpg
|
||||||
|
2025-04-23 15:02:13 - INFO - ✅ Image uploadée : allergenes-chope-melon-filigrane.jpg
|
||||||
|
2025-04-23 15:02:15 - INFO - ✅ Image uploadée : allergenes-verre-ambre-bois-santal-filigrane.jpg
|
||||||
|
2025-04-23 15:02:18 - INFO - ✅ Image uploadée : allergenes-verre-ambre-cafe-bresilien-filigrane.jpg
|
||||||
|
2025-04-23 15:02:21 - INFO - ✅ Image uploadée : allergenes-verre-ambre-caramel-beurre-sale-filigrane.jpg
|
||||||
|
2025-04-23 15:02:23 - INFO - ✅ Image uploadée : allergenes-verre-ambre-citron-meringue-filigrane.jpg
|
||||||
|
2025-04-23 15:02:26 - INFO - ✅ Image uploadée : allergenes-verre-ambre-dark-flowers-filigrane.jpg
|
||||||
|
2025-04-23 15:02:28 - INFO - ✅ Image uploadée : allergenes-verre-ambre-figue-pain-epices-filigrane.jpg
|
||||||
|
2025-04-23 15:02:31 - INFO - ✅ Image uploadée : allergenes-verre-ambre-frangipanier-filigrane.jpg
|
||||||
|
2025-04-23 15:02:34 - INFO - ✅ Image uploadée : allergenes-verre-ambre-melon-filigrane.jpg
|
||||||
|
2025-04-23 15:02:36 - INFO - ✅ Image uploadée : allergenes-bougie-chauffe-plat-citron-meringue-filigrane.jpg
|
||||||
|
2025-04-23 15:02:39 - INFO - ✅ Image uploadée : allergenes-bougie-chauffe-plat-lavande-filigrane.jpg
|
||||||
|
2025-04-23 15:02:41 - INFO - ✅ Image uploadée : allergenes-bougie-chauffe-plat-sapin-filigrane.jpg
|
||||||
|
2025-04-23 15:02:44 - INFO - ✅ Image uploadée : allergenes-verre-irise-cerise-noire-explosive-filigrane.jpg
|
||||||
|
2025-04-23 15:02:46 - INFO - ✅ Image uploadée : allergenes-verre-irise-escale-cassis-filigrane.jpg
|
||||||
|
2025-04-23 15:02:49 - INFO - ✅ Image uploadée : allergenes-verre-bois-santal-filigrane.jpg
|
||||||
|
2025-04-23 15:02:52 - INFO - ✅ Image uploadée : allergenes-verre-cocodream-filigrane.jpg
|
||||||
|
2025-04-23 15:02:54 - INFO - ✅ Image uploadée : allergenes-verre-dark-flowers-filigrane.jpg
|
||||||
|
2025-04-23 15:02:57 - INFO - ✅ Image uploadée : allergenes-verre-frangipanier-filigrane.jpg
|
||||||
|
2025-04-23 15:02:59 - INFO - ✅ Image uploadée : allergenes-verre-petales-oranger-filigrane.jpg
|
||||||
|
2025-04-23 15:03:02 - INFO - ✅ Image uploadée : allergenes-verre-pink-lover-filigrane.jpg
|
||||||
|
2025-04-23 15:03:05 - INFO - ✅ Image uploadée : allergenes-fondant-adoucissant-filigrane.jpg
|
||||||
|
2025-04-23 15:03:08 - INFO - ✅ Image uploadée : allergenes-fondant-fruits-rouges-filigrane.jpg
|
||||||
|
2025-04-23 15:03:11 - INFO - ✅ Image uploadée : allergenes-fondant-hiver-scandinave-filigrane.jpg
|
||||||
|
2025-04-23 15:03:13 - INFO - ✅ Image uploadée : allergenes-fondant-mocaccino-noel-filigrane.jpg
|
||||||
|
2025-04-23 15:03:16 - INFO - ✅ Image uploadée : allergenes-fondant-mojito-filigrane.jpg
|
||||||
|
2025-04-23 15:03:19 - INFO - ✅ Image uploadée : allergenes-fondant-peche-filigrane.jpg
|
||||||
|
2025-04-23 15:03:24 - INFO - ✅ Image uploadée : allergenes-fondant-perlimpinpin-filigrane.jpg
|
||||||
|
2025-04-23 15:03:26 - INFO - ✅ Image uploadée : allergenes-fondant-sapin-filigrane.jpg
|
||||||
|
2025-04-23 15:03:30 - INFO - ✅ Image uploadée : allergenes-fondant-tablette-femme-bleue-filigrane.jpg
|
||||||
|
2025-04-23 15:03:32 - INFO - ✅ Image uploadée : allergenes-fondant-tablette-fruit-defendu-filigrane.jpg
|
||||||
|
2025-04-23 15:03:35 - INFO - ✅ Image uploadée : allergenes-fondant-tablette-glorieuse-filigrane.jpg
|
||||||
|
2025-04-23 15:03:38 - INFO - ✅ Image uploadée : allergenes-fondant-tablette-little-dark-filigrane.jpg
|
||||||
|
2025-04-23 15:03:41 - INFO - ✅ Image uploadée : allergenes-fondant-tablette-millionnaire-filigrane.jpg
|
||||||
|
2025-04-23 15:03:44 - INFO - ✅ Image uploadée : allergenes-fondant-tablette-violet-ambre-filigrane.jpg
|
||||||
|
2025-04-23 15:03:47 - INFO - ✅ Image uploadée : pyramide-olfactive-poudre-perlimpinpin-filigrane.jpg
|
||||||
|
2025-04-23 15:03:50 - INFO - ✅ Image uploadée : pyramide-olfactive-relaxation-tahiti-filigrane.jpg
|
||||||
|
2025-04-23 15:03:53 - INFO - ✅ Image uploadée : pyramide-olfactive-rose-jardins-filigrane.jpg
|
||||||
|
2025-04-23 15:03:57 - INFO - ✅ Image uploadée : pyramide-olfactive-vanille-iles-filigrane.jpg
|
||||||
|
2025-04-23 15:04:01 - INFO - ✅ Image uploadée : pyramide-olfactive-frangipanier-filigrane.jpg
|
||||||
|
2025-04-23 15:04:05 - INFO - ✅ Image uploadée : pyramide-olfactive-sapin-noel-filigrane.jpg
|
||||||
|
2025-04-23 15:04:08 - INFO - ✅ Image uploadée : pyramide-olfactive-lavande-filigrane.jpg
|
||||||
|
2025-04-23 15:04:12 - INFO - ✅ Image uploadée : pyramide-olfactive-framboise-filigrane.jpg
|
||||||
|
2025-04-23 15:04:16 - INFO - ✅ Image uploadée : pyramide-olfactive-baie-givree-filigrane.jpg
|
||||||
|
2025-04-23 15:04:19 - INFO - ✅ Image uploadée : pyramide-olfactive-chocolat-noisettes-filigrane.jpg
|
||||||
|
2025-04-23 15:04:23 - INFO - ✅ Image uploadée : pyramide-olfactive-fraise-menthe-filigrane.jpg
|
||||||
|
2025-04-23 15:04:26 - INFO - ✅ Image uploadée : pyramide-olfactive-hiver-scandinave-filigrane.jpg
|
||||||
|
2025-04-23 15:04:30 - INFO - ✅ Image uploadée : pyramide-olfactive-melon-filigrane.jpg
|
||||||
|
2025-04-23 15:04:33 - INFO - ✅ Image uploadée : pyramide-olfactive-bois-santal-filigrane.jpg
|
||||||
|
2025-04-23 15:04:36 - INFO - ✅ Image uploadée : pyramide-olfactive-cafe-bresilien-filigrane.jpg
|
||||||
|
2025-04-23 15:04:40 - INFO - ✅ Image uploadée : pyramide-olfactive-caramel-beurre-sale-filigrane.jpg
|
||||||
|
2025-04-23 15:04:44 - INFO - ✅ Image uploadée : pyramide-olfactive-figue-pain-epices-filigrane.jpg
|
||||||
|
2025-04-23 15:04:47 - INFO - ✅ Image uploadée : pyramide-olfactive-cerise-noire-explosive-filigrane.jpg
|
||||||
|
2025-04-23 15:04:51 - INFO - ✅ Image uploadée : pyramide-olfactive-calanque-cassis-filigrane.jpg
|
||||||
|
2025-04-23 15:04:55 - INFO - ✅ Image uploadée : pyramide-olfactive-petales-oranger-filigrane.jpg
|
||||||
|
2025-04-23 15:05:00 - INFO - ✅ Image uploadée : pyramide-olfactive-little-dark-filigrane.jpg
|
||||||
|
2025-04-23 15:05:05 - INFO - ✅ Image uploadée : pyramide-olfactive-femme-bleue-filigrane.jpg
|
||||||
|
2025-04-23 15:05:09 - INFO - ✅ Image uploadée : pyramide-olfactive-violet-ambre-filigrane.jpg
|
||||||
|
2025-04-23 15:05:12 - INFO - ✅ Image uploadée : fond-neutre-logo-filigrane.jpg
|
||||||
|
2025-04-23 15:05:20 - INFO - ✅ Image uploadée : fond-neutre-filigrane.jpg
|
||||||
|
2025-04-23 15:13:06 - INFO - ✅ Image uploadée : fond-neutre-logo.png
|
||||||
|
2025-04-23 15:13:13 - INFO - ✅ Image uploadée : fond-neutre.jpg
|
||||||
|
2025-04-23 15:14:04 - DEBUG - Catégorie contenant comme slug 'bougies' existe déjà
|
||||||
|
2025-04-23 15:14:06 - INFO - Catégorie créé avec succès. ID: 650
|
||||||
|
2025-04-23 15:14:09 - INFO - Catégorie créé avec succès. ID: 651
|
||||||
|
2025-04-23 15:14:12 - INFO - Catégorie créé avec succès. ID: 652
|
||||||
|
2025-04-23 15:14:16 - INFO - Catégorie créé avec succès. ID: 653
|
||||||
|
2025-04-23 15:14:20 - INFO - Catégorie créé avec succès. ID: 654
|
||||||
|
2025-04-23 15:14:24 - INFO - Catégorie créé avec succès. ID: 655
|
||||||
|
2025-04-23 15:14:29 - INFO - Catégorie créé avec succès. ID: 656
|
||||||
|
2025-04-23 15:14:33 - INFO - Catégorie créé avec succès. ID: 657
|
||||||
|
2025-04-23 15:14:39 - INFO - Catégorie créé avec succès. ID: 658
|
||||||
|
2025-04-23 15:14:45 - INFO - Catégorie créé avec succès. ID: 659
|
||||||
|
2025-04-23 15:14:54 - INFO - Catégorie créé avec succès. ID: 660
|
||||||
|
2025-04-23 15:15:00 - INFO - Catégorie créé avec succès. ID: 661
|
||||||
|
2025-04-23 15:15:07 - INFO - Catégorie créé avec succès. ID: 662
|
||||||
|
2025-04-23 15:15:15 - INFO - Catégorie créé avec succès. ID: 663
|
||||||
|
2025-04-23 15:15:22 - INFO - Catégorie créé avec succès. ID: 664
|
||||||
|
2025-04-23 15:15:31 - INFO - Catégorie créé avec succès. ID: 665
|
||||||
|
2025-04-23 15:15:40 - INFO - Catégorie créé avec succès. ID: 666
|
||||||
|
2025-04-23 15:15:49 - INFO - Catégorie créé avec succès. ID: 667
|
||||||
|
2025-04-23 15:15:59 - INFO - Catégorie créé avec succès. ID: 668
|
||||||
|
2025-04-23 15:16:10 - INFO - Catégorie créé avec succès. ID: 669
|
||||||
|
2025-04-23 15:24:46 - INFO - ✅ Image uploadée : logo-lescreationsdemissbleue-fond-transparent-resize.png
|
||||||
|
2025-04-23 15:26:23 - INFO - Produit créé avec succès. ID: 7114
|
||||||
|
2025-04-23 15:26:25 - DEBUG - Produit contenant comme slug 'chope-citron-meringue' existe déjà
|
||||||
|
2025-04-23 15:26:26 - DEBUG - Produit contenant comme slug 'chope-citron-meringue' existe déjà
|
||||||
|
2025-04-23 15:26:29 - DEBUG - Produit contenant comme slug 'chope-citron-meringue' existe déjà
|
||||||
|
2025-04-23 15:26:35 - DEBUG - Produit contenant comme slug 'chope-citron-meringue' existe déjà
|
||||||
|
2025-04-23 15:26:37 - DEBUG - Produit contenant comme slug 'chope-citron-meringue' existe déjà
|
||||||
|
2025-04-23 15:26:38 - DEBUG - Produit contenant comme slug 'chope-citron-meringue' existe déjà
|
||||||
|
2025-04-23 15:26:40 - DEBUG - Produit contenant comme slug 'chope-citron-meringue' existe déjà
|
||||||
|
2025-04-23 15:26:41 - DEBUG - Produit contenant comme slug 'chope-citron-meringue' existe déjà
|
||||||
|
2025-04-23 15:26:43 - DEBUG - Produit contenant comme slug 'chope-citron-meringue' existe déjà
|
||||||
|
2025-04-23 15:26:45 - DEBUG - Produit contenant comme slug 'chope-citron-meringue' existe déjà
|
||||||
|
2025-04-23 15:26:46 - DEBUG - Produit contenant comme slug 'chope-citron-meringue' existe déjà
|
||||||
|
2025-04-23 15:26:48 - DEBUG - Produit contenant comme slug 'chope-citron-meringue' existe déjà
|
||||||
|
2025-04-23 15:26:50 - DEBUG - Produit contenant comme slug 'chope-citron-meringue' existe déjà
|
||||||
|
2025-04-23 15:26:51 - DEBUG - Produit contenant comme slug 'chope-citron-meringue' existe déjà
|
||||||
|
2025-04-23 15:26:53 - DEBUG - Produit contenant comme slug 'chope-citron-meringue' existe déjà
|
||||||
|
2025-04-23 15:26:54 - DEBUG - Produit contenant comme slug 'chope-citron-meringue' existe déjà
|
||||||
|
2025-04-23 15:26:56 - DEBUG - Produit contenant comme slug 'chope-citron-meringue' existe déjà
|
||||||
|
2025-04-23 15:26:57 - DEBUG - Produit contenant comme slug 'chope-citron-meringue' existe déjà
|
||||||
|
2025-04-23 15:26:59 - DEBUG - Produit contenant comme slug 'chope-citron-meringue' existe déjà
|
||||||
|
2025-04-23 15:27:00 - DEBUG - Produit contenant comme slug 'chope-citron-meringue' existe déjà
|
||||||
|
2025-04-23 15:27:02 - DEBUG - Produit contenant comme slug 'chope-citron-meringue' existe déjà
|
||||||
|
2025-04-23 15:27:04 - DEBUG - Produit contenant comme slug 'chope-citron-meringue' existe déjà
|
||||||
|
2025-04-23 15:27:05 - DEBUG - Produit contenant comme slug 'chope-citron-meringue' existe déjà
|
||||||
|
2025-04-23 15:27:07 - DEBUG - Produit contenant comme slug 'chope-citron-meringue' existe déjà
|
||||||
|
2025-04-23 15:27:08 - DEBUG - Produit contenant comme slug 'chope-citron-meringue' existe déjà
|
||||||
|
2025-04-23 15:27:10 - DEBUG - Produit contenant comme slug 'chope-citron-meringue' existe déjà
|
||||||
|
2025-04-23 15:27:11 - DEBUG - Produit contenant comme slug 'chope-citron-meringue' existe déjà
|
||||||
|
2025-04-23 15:27:13 - DEBUG - Produit contenant comme slug 'chope-citron-meringue' existe déjà
|
||||||
|
2025-04-23 15:27:14 - DEBUG - Produit contenant comme slug 'chope-citron-meringue' existe déjà
|
||||||
|
2025-04-23 15:27:16 - DEBUG - Produit contenant comme slug 'chope-citron-meringue' existe déjà
|
||||||
|
2025-04-23 15:27:17 - DEBUG - Produit contenant comme slug 'chope-citron-meringue' existe déjà
|
||||||
|
2025-04-23 15:27:19 - DEBUG - Produit contenant comme slug 'chope-citron-meringue' existe déjà
|
||||||
|
2025-04-23 15:27:21 - DEBUG - Produit contenant comme slug 'chope-citron-meringue' existe déjà
|
||||||
|
2025-04-23 15:27:22 - DEBUG - Produit contenant comme slug 'chope-citron-meringue' existe déjà
|
||||||
|
2025-04-23 15:27:24 - DEBUG - Produit contenant comme slug 'chope-citron-meringue' existe déjà
|
||||||
|
2025-04-23 15:27:25 - DEBUG - Produit contenant comme slug 'chope-citron-meringue' existe déjà
|
||||||
|
2025-04-23 15:27:27 - DEBUG - Produit contenant comme slug 'chope-citron-meringue' existe déjà
|
||||||
|
2025-04-23 15:27:29 - DEBUG - Produit contenant comme slug 'chope-citron-meringue' existe déjà
|
||||||
|
2025-04-23 15:27:30 - DEBUG - Produit contenant comme slug 'chope-citron-meringue' existe déjà
|
||||||
|
2025-04-23 15:27:32 - DEBUG - Produit contenant comme slug 'chope-citron-meringue' existe déjà
|
||||||
|
2025-04-23 15:27:34 - DEBUG - Produit contenant comme slug 'chope-citron-meringue' existe déjà
|
||||||
|
2025-04-23 15:27:36 - DEBUG - Produit contenant comme slug 'chope-citron-meringue' existe déjà
|
||||||
|
2025-04-23 15:27:38 - DEBUG - Produit contenant comme slug 'chope-citron-meringue' existe déjà
|
||||||
|
2025-04-23 15:27:40 - DEBUG - Produit contenant comme slug 'chope-citron-meringue' existe déjà
|
||||||
|
2025-04-23 15:27:43 - DEBUG - Produit contenant comme slug 'chope-citron-meringue' existe déjà
|
||||||
|
2025-04-23 15:27:56 - INFO - Produit créé avec succès. ID: 7118
|
||||||
|
2025-04-23 15:27:58 - DEBUG - Produit contenant comme slug 'chope-lavande' existe déjà
|
||||||
|
2025-04-23 15:27:59 - DEBUG - Produit contenant comme slug 'chope-lavande' existe déjà
|
||||||
|
2025-04-23 15:28:01 - DEBUG - Produit contenant comme slug 'chope-lavande' existe déjà
|
||||||
|
2025-04-23 15:28:04 - DEBUG - Produit contenant comme slug 'chope-lavande' existe déjà
|
||||||
|
2025-04-23 15:28:06 - DEBUG - Produit contenant comme slug 'chope-lavande' existe déjà
|
||||||
|
2025-04-23 15:28:07 - DEBUG - Produit contenant comme slug 'chope-lavande' existe déjà
|
||||||
|
2025-04-23 15:28:09 - DEBUG - Produit contenant comme slug 'chope-lavande' existe déjà
|
||||||
|
2025-04-23 15:28:10 - DEBUG - Produit contenant comme slug 'chope-lavande' existe déjà
|
||||||
|
2025-04-23 15:28:12 - DEBUG - Produit contenant comme slug 'chope-lavande' existe déjà
|
||||||
|
2025-04-23 15:28:13 - DEBUG - Produit contenant comme slug 'chope-lavande' existe déjà
|
||||||
|
2025-04-23 15:28:15 - DEBUG - Produit contenant comme slug 'chope-lavande' existe déjà
|
||||||
|
2025-04-23 15:28:16 - DEBUG - Produit contenant comme slug 'chope-lavande' existe déjà
|
||||||
|
2025-04-23 15:28:18 - DEBUG - Produit contenant comme slug 'chope-lavande' existe déjà
|
||||||
|
2025-04-23 15:28:20 - DEBUG - Produit contenant comme slug 'chope-lavande' existe déjà
|
||||||
|
2025-04-23 15:28:21 - DEBUG - Produit contenant comme slug 'chope-lavande' existe déjà
|
||||||
|
2025-04-23 15:28:23 - DEBUG - Produit contenant comme slug 'chope-lavande' existe déjà
|
||||||
|
2025-04-23 15:28:24 - DEBUG - Produit contenant comme slug 'chope-lavande' existe déjà
|
||||||
|
2025-04-23 15:28:26 - DEBUG - Produit contenant comme slug 'chope-lavande' existe déjà
|
||||||
|
2025-04-23 15:28:28 - DEBUG - Produit contenant comme slug 'chope-lavande' existe déjà
|
||||||
|
2025-04-23 15:28:29 - DEBUG - Produit contenant comme slug 'chope-lavande' existe déjà
|
||||||
|
2025-04-23 15:28:31 - DEBUG - Produit contenant comme slug 'chope-lavande' existe déjà
|
||||||
|
2025-04-23 15:28:32 - DEBUG - Produit contenant comme slug 'chope-lavande' existe déjà
|
||||||
|
2025-04-23 15:28:34 - DEBUG - Produit contenant comme slug 'chope-lavande' existe déjà
|
||||||
|
2025-04-23 15:28:35 - DEBUG - Produit contenant comme slug 'chope-lavande' existe déjà
|
||||||
|
2025-04-23 15:28:37 - DEBUG - Produit contenant comme slug 'chope-lavande' existe déjà
|
||||||
|
2025-04-23 15:28:39 - DEBUG - Produit contenant comme slug 'chope-lavande' existe déjà
|
||||||
|
2025-04-23 15:28:40 - DEBUG - Produit contenant comme slug 'chope-lavande' existe déjà
|
||||||
|
2025-04-23 15:28:42 - DEBUG - Produit contenant comme slug 'chope-lavande' existe déjà
|
||||||
|
2025-04-23 15:28:43 - DEBUG - Produit contenant comme slug 'chope-lavande' existe déjà
|
||||||
|
2025-04-23 15:28:45 - DEBUG - Produit contenant comme slug 'chope-lavande' existe déjà
|
||||||
|
2025-04-23 15:28:46 - DEBUG - Produit contenant comme slug 'chope-lavande' existe déjà
|
||||||
|
2025-04-23 15:28:48 - DEBUG - Produit contenant comme slug 'chope-lavande' existe déjà
|
||||||
|
2025-04-23 15:28:50 - DEBUG - Produit contenant comme slug 'chope-lavande' existe déjà
|
||||||
|
2025-04-23 15:28:51 - DEBUG - Produit contenant comme slug 'chope-lavande' existe déjà
|
||||||
|
2025-04-23 15:28:53 - DEBUG - Produit contenant comme slug 'chope-lavande' existe déjà
|
||||||
|
2025-04-23 15:28:55 - DEBUG - Produit contenant comme slug 'chope-lavande' existe déjà
|
||||||
|
2025-04-23 15:28:56 - DEBUG - Produit contenant comme slug 'chope-lavande' existe déjà
|
||||||
|
2025-04-23 15:28:58 - DEBUG - Produit contenant comme slug 'chope-lavande' existe déjà
|
||||||
|
2025-04-23 15:28:59 - DEBUG - Produit contenant comme slug 'chope-lavande' existe déjà
|
||||||
|
2025-04-23 15:29:01 - DEBUG - Produit contenant comme slug 'chope-lavande' existe déjà
|
||||||
|
2025-04-23 15:29:03 - DEBUG - Produit contenant comme slug 'chope-lavande' existe déjà
|
||||||
|
2025-04-23 15:29:04 - DEBUG - Produit contenant comme slug 'chope-lavande' existe déjà
|
||||||
|
2025-04-23 15:29:06 - DEBUG - Produit contenant comme slug 'chope-lavande' existe déjà
|
||||||
|
2025-04-23 15:29:07 - DEBUG - Produit contenant comme slug 'chope-lavande' existe déjà
|
||||||
|
2025-04-23 15:29:09 - DEBUG - Produit contenant comme slug 'chope-lavande' existe déjà
|
||||||
|
2025-04-23 15:29:19 - INFO - Produit créé avec succès. ID: 7120
|
||||||
|
2025-04-23 15:29:21 - DEBUG - Produit contenant comme slug 'chope-framboise' existe déjà
|
||||||
|
2025-04-23 15:29:22 - DEBUG - Produit contenant comme slug 'chope-framboise' existe déjà
|
||||||
|
2025-04-23 15:29:24 - DEBUG - Produit contenant comme slug 'chope-framboise' existe déjà
|
||||||
|
2025-04-23 15:29:26 - DEBUG - Produit contenant comme slug 'chope-framboise' existe déjà
|
||||||
|
2025-04-23 15:29:27 - DEBUG - Produit contenant comme slug 'chope-framboise' existe déjà
|
||||||
|
2025-04-23 15:29:29 - DEBUG - Produit contenant comme slug 'chope-framboise' existe déjà
|
||||||
|
2025-04-23 15:29:31 - DEBUG - Produit contenant comme slug 'chope-framboise' existe déjà
|
||||||
|
2025-04-23 15:29:32 - DEBUG - Produit contenant comme slug 'chope-framboise' existe déjà
|
||||||
|
2025-04-23 15:29:34 - DEBUG - Produit contenant comme slug 'chope-framboise' existe déjà
|
||||||
|
2025-04-23 15:29:35 - DEBUG - Produit contenant comme slug 'chope-framboise' existe déjà
|
||||||
|
2025-04-23 15:29:37 - DEBUG - Produit contenant comme slug 'chope-framboise' existe déjà
|
||||||
|
2025-04-23 15:29:39 - DEBUG - Produit contenant comme slug 'chope-framboise' existe déjà
|
||||||
|
2025-04-23 15:29:41 - DEBUG - Produit contenant comme slug 'chope-framboise' existe déjà
|
||||||
|
2025-04-23 15:29:42 - DEBUG - Produit contenant comme slug 'chope-framboise' existe déjà
|
||||||
|
2025-04-23 15:29:44 - DEBUG - Produit contenant comme slug 'chope-framboise' existe déjà
|
||||||
|
2025-04-23 15:29:46 - DEBUG - Produit contenant comme slug 'chope-framboise' existe déjà
|
||||||
|
2025-04-23 15:29:47 - DEBUG - Produit contenant comme slug 'chope-framboise' existe déjà
|
||||||
|
2025-04-23 15:29:49 - DEBUG - Produit contenant comme slug 'chope-framboise' existe déjà
|
||||||
|
2025-04-23 15:29:53 - DEBUG - Produit contenant comme slug 'chope-framboise' existe déjà
|
||||||
|
2025-04-23 15:29:58 - DEBUG - Produit contenant comme slug 'chope-framboise' existe déjà
|
||||||
|
2025-04-23 15:30:00 - DEBUG - Produit contenant comme slug 'chope-framboise' existe déjà
|
||||||
|
2025-04-23 15:30:02 - DEBUG - Produit contenant comme slug 'chope-framboise' existe déjà
|
||||||
|
2025-04-23 15:30:04 - DEBUG - Produit contenant comme slug 'chope-framboise' existe déjà
|
||||||
|
2025-04-23 15:30:06 - DEBUG - Produit contenant comme slug 'chope-framboise' existe déjà
|
||||||
|
2025-04-23 15:30:07 - DEBUG - Produit contenant comme slug 'chope-framboise' existe déjà
|
||||||
|
2025-04-23 15:30:09 - DEBUG - Produit contenant comme slug 'chope-framboise' existe déjà
|
||||||
|
2025-04-23 15:30:11 - DEBUG - Produit contenant comme slug 'chope-framboise' existe déjà
|
||||||
|
2025-04-23 15:30:13 - DEBUG - Produit contenant comme slug 'chope-framboise' existe déjà
|
||||||
|
2025-04-23 15:30:14 - DEBUG - Produit contenant comme slug 'chope-framboise' existe déjà
|
||||||
|
2025-04-23 15:30:16 - DEBUG - Produit contenant comme slug 'chope-framboise' existe déjà
|
||||||
|
2025-04-23 15:30:17 - DEBUG - Produit contenant comme slug 'chope-framboise' existe déjà
|
||||||
|
2025-04-23 15:30:19 - DEBUG - Produit contenant comme slug 'chope-framboise' existe déjà
|
||||||
|
2025-04-23 15:30:21 - DEBUG - Produit contenant comme slug 'chope-framboise' existe déjà
|
||||||
|
2025-04-23 15:30:23 - DEBUG - Produit contenant comme slug 'chope-framboise' existe déjà
|
||||||
|
2025-04-23 15:30:26 - DEBUG - Produit contenant comme slug 'chope-framboise' existe déjà
|
||||||
|
2025-04-23 15:30:28 - DEBUG - Produit contenant comme slug 'chope-framboise' existe déjà
|
||||||
|
2025-04-23 15:30:30 - DEBUG - Produit contenant comme slug 'chope-framboise' existe déjà
|
||||||
|
2025-04-23 15:30:31 - DEBUG - Produit contenant comme slug 'chope-framboise' existe déjà
|
||||||
|
2025-04-23 15:30:33 - DEBUG - Produit contenant comme slug 'chope-framboise' existe déjà
|
||||||
|
2025-04-23 15:30:35 - DEBUG - Produit contenant comme slug 'chope-framboise' existe déjà
|
||||||
|
2025-04-23 15:30:36 - DEBUG - Produit contenant comme slug 'chope-framboise' existe déjà
|
||||||
|
2025-04-23 15:30:38 - DEBUG - Produit contenant comme slug 'chope-framboise' existe déjà
|
||||||
|
2025-04-23 15:30:39 - DEBUG - Produit contenant comme slug 'chope-framboise' existe déjà
|
||||||
|
2025-04-23 15:30:41 - DEBUG - Produit contenant comme slug 'chope-framboise' existe déjà
|
||||||
|
2025-04-23 15:30:42 - DEBUG - Produit contenant comme slug 'chope-framboise' existe déjà
|
||||||
|
2025-04-23 15:30:52 - INFO - Produit créé avec succès. ID: 7121
|
||||||
|
2025-04-23 15:31:00 - DEBUG - Produit contenant comme slug 'chope-melon' existe déjà
|
||||||
|
2025-04-23 15:31:02 - DEBUG - Produit contenant comme slug 'chope-melon' existe déjà
|
||||||
|
2025-04-23 15:31:03 - DEBUG - Produit contenant comme slug 'chope-melon' existe déjà
|
||||||
|
2025-04-23 15:31:05 - DEBUG - Produit contenant comme slug 'chope-melon' existe déjà
|
||||||
|
2025-04-23 15:31:07 - DEBUG - Produit contenant comme slug 'chope-melon' existe déjà
|
||||||
|
2025-04-23 15:31:08 - DEBUG - Produit contenant comme slug 'chope-melon' existe déjà
|
||||||
|
2025-04-23 15:31:10 - DEBUG - Produit contenant comme slug 'chope-melon' existe déjà
|
||||||
|
2025-04-23 15:31:11 - DEBUG - Produit contenant comme slug 'chope-melon' existe déjà
|
||||||
|
2025-04-23 15:31:13 - DEBUG - Produit contenant comme slug 'chope-melon' existe déjà
|
||||||
|
2025-04-23 15:31:15 - DEBUG - Produit contenant comme slug 'chope-melon' existe déjà
|
||||||
|
2025-04-23 15:31:17 - DEBUG - Produit contenant comme slug 'chope-melon' existe déjà
|
||||||
|
2025-04-23 15:31:19 - DEBUG - Produit contenant comme slug 'chope-melon' existe déjà
|
||||||
|
2025-04-23 15:31:20 - DEBUG - Produit contenant comme slug 'chope-melon' existe déjà
|
||||||
|
2025-04-23 15:31:22 - DEBUG - Produit contenant comme slug 'chope-melon' existe déjà
|
||||||
|
2025-04-23 15:31:24 - DEBUG - Produit contenant comme slug 'chope-melon' existe déjà
|
||||||
|
2025-04-23 15:31:26 - DEBUG - Produit contenant comme slug 'chope-melon' existe déjà
|
||||||
|
2025-04-23 15:31:27 - DEBUG - Produit contenant comme slug 'chope-melon' existe déjà
|
||||||
|
2025-04-23 15:31:29 - DEBUG - Produit contenant comme slug 'chope-melon' existe déjà
|
||||||
|
2025-04-23 15:31:30 - DEBUG - Produit contenant comme slug 'chope-melon' existe déjà
|
||||||
|
2025-04-23 15:31:32 - DEBUG - Produit contenant comme slug 'chope-melon' existe déjà
|
||||||
|
2025-04-23 15:31:34 - DEBUG - Produit contenant comme slug 'chope-melon' existe déjà
|
||||||
|
2025-04-23 15:31:35 - DEBUG - Produit contenant comme slug 'chope-melon' existe déjà
|
||||||
|
2025-04-23 15:31:37 - DEBUG - Produit contenant comme slug 'chope-melon' existe déjà
|
||||||
|
2025-04-23 15:31:38 - DEBUG - Produit contenant comme slug 'chope-melon' existe déjà
|
||||||
|
2025-04-23 15:31:40 - DEBUG - Produit contenant comme slug 'chope-melon' existe déjà
|
||||||
|
2025-04-23 15:31:42 - DEBUG - Produit contenant comme slug 'chope-melon' existe déjà
|
||||||
|
2025-04-23 15:31:43 - DEBUG - Produit contenant comme slug 'chope-melon' existe déjà
|
||||||
|
2025-04-23 15:31:45 - DEBUG - Produit contenant comme slug 'chope-melon' existe déjà
|
||||||
|
2025-04-23 15:31:47 - DEBUG - Produit contenant comme slug 'chope-melon' existe déjà
|
||||||
|
2025-04-23 15:31:48 - DEBUG - Produit contenant comme slug 'chope-melon' existe déjà
|
||||||
|
2025-04-23 15:31:50 - DEBUG - Produit contenant comme slug 'chope-melon' existe déjà
|
||||||
|
2025-04-23 15:31:51 - DEBUG - Produit contenant comme slug 'chope-melon' existe déjà
|
||||||
|
2025-04-23 15:31:53 - DEBUG - Produit contenant comme slug 'chope-melon' existe déjà
|
||||||
|
2025-04-23 15:31:55 - DEBUG - Produit contenant comme slug 'chope-melon' existe déjà
|
||||||
|
2025-04-23 15:31:56 - DEBUG - Produit contenant comme slug 'chope-melon' existe déjà
|
||||||
|
2025-04-23 15:31:58 - DEBUG - Produit contenant comme slug 'chope-melon' existe déjà
|
||||||
|
2025-04-23 15:32:00 - DEBUG - Produit contenant comme slug 'chope-melon' existe déjà
|
||||||
|
2025-04-23 15:32:02 - DEBUG - Produit contenant comme slug 'chope-melon' existe déjà
|
||||||
|
2025-04-23 15:32:03 - DEBUG - Produit contenant comme slug 'chope-melon' existe déjà
|
||||||
|
2025-04-23 15:32:05 - DEBUG - Produit contenant comme slug 'chope-melon' existe déjà
|
||||||
|
2025-04-23 15:32:07 - DEBUG - Produit contenant comme slug 'chope-melon' existe déjà
|
||||||
|
2025-04-23 15:32:08 - DEBUG - Produit contenant comme slug 'chope-melon' existe déjà
|
||||||
|
2025-04-23 15:32:10 - DEBUG - Produit contenant comme slug 'chope-melon' existe déjà
|
||||||
|
2025-04-23 15:32:12 - DEBUG - Produit contenant comme slug 'chope-melon' existe déjà
|
||||||
|
2025-04-23 15:32:14 - DEBUG - Produit contenant comme slug 'chope-melon' existe déjà
|
||||||
|
2025-04-23 15:32:31 - INFO - Produit créé avec succès. ID: 7124
|
||||||
|
2025-04-23 15:32:34 - DEBUG - Produit contenant comme slug 'chope-fraise-menthe' existe déjà
|
||||||
|
2025-04-23 15:32:36 - DEBUG - Produit contenant comme slug 'chope-fraise-menthe' existe déjà
|
||||||
|
2025-04-23 15:32:38 - DEBUG - Produit contenant comme slug 'chope-fraise-menthe' existe déjà
|
||||||
|
2025-04-23 15:32:39 - DEBUG - Produit contenant comme slug 'chope-fraise-menthe' existe déjà
|
||||||
|
2025-04-23 15:32:41 - DEBUG - Produit contenant comme slug 'chope-fraise-menthe' existe déjà
|
||||||
|
2025-04-23 15:32:43 - DEBUG - Produit contenant comme slug 'chope-fraise-menthe' existe déjà
|
||||||
|
2025-04-23 15:32:45 - DEBUG - Produit contenant comme slug 'chope-fraise-menthe' existe déjà
|
||||||
|
2025-04-23 15:32:47 - DEBUG - Produit contenant comme slug 'chope-fraise-menthe' existe déjà
|
||||||
|
2025-04-23 15:32:48 - DEBUG - Produit contenant comme slug 'chope-fraise-menthe' existe déjà
|
||||||
|
2025-04-23 15:32:50 - DEBUG - Produit contenant comme slug 'chope-fraise-menthe' existe déjà
|
||||||
|
2025-04-23 15:32:53 - DEBUG - Produit contenant comme slug 'chope-fraise-menthe' existe déjà
|
||||||
|
2025-04-23 15:32:56 - DEBUG - Produit contenant comme slug 'chope-fraise-menthe' existe déjà
|
||||||
|
2025-04-23 15:32:57 - DEBUG - Produit contenant comme slug 'chope-fraise-menthe' existe déjà
|
||||||
|
2025-04-23 15:32:59 - DEBUG - Produit contenant comme slug 'chope-fraise-menthe' existe déjà
|
||||||
|
2025-04-23 15:33:01 - DEBUG - Produit contenant comme slug 'chope-fraise-menthe' existe déjà
|
||||||
|
2025-04-23 15:33:03 - DEBUG - Produit contenant comme slug 'chope-fraise-menthe' existe déjà
|
||||||
|
2025-04-23 15:33:05 - DEBUG - Produit contenant comme slug 'chope-fraise-menthe' existe déjà
|
||||||
|
2025-04-23 15:33:06 - DEBUG - Produit contenant comme slug 'chope-fraise-menthe' existe déjà
|
||||||
|
2025-04-23 15:33:08 - DEBUG - Produit contenant comme slug 'chope-fraise-menthe' existe déjà
|
||||||
|
2025-04-23 15:33:10 - DEBUG - Produit contenant comme slug 'chope-fraise-menthe' existe déjà
|
||||||
|
2025-04-23 15:33:11 - DEBUG - Produit contenant comme slug 'chope-fraise-menthe' existe déjà
|
||||||
|
2025-04-23 15:33:13 - DEBUG - Produit contenant comme slug 'chope-fraise-menthe' existe déjà
|
||||||
|
2025-04-23 15:33:15 - DEBUG - Produit contenant comme slug 'chope-fraise-menthe' existe déjà
|
||||||
|
2025-04-23 15:33:17 - DEBUG - Produit contenant comme slug 'chope-fraise-menthe' existe déjà
|
||||||
|
2025-04-23 15:33:19 - DEBUG - Produit contenant comme slug 'chope-fraise-menthe' existe déjà
|
||||||
|
2025-04-23 15:33:20 - DEBUG - Produit contenant comme slug 'chope-fraise-menthe' existe déjà
|
||||||
|
2025-04-23 15:33:22 - DEBUG - Produit contenant comme slug 'chope-fraise-menthe' existe déjà
|
||||||
|
2025-04-23 15:33:24 - DEBUG - Produit contenant comme slug 'chope-fraise-menthe' existe déjà
|
||||||
|
2025-04-23 15:33:25 - DEBUG - Produit contenant comme slug 'chope-fraise-menthe' existe déjà
|
||||||
|
2025-04-23 15:33:27 - DEBUG - Produit contenant comme slug 'chope-fraise-menthe' existe déjà
|
||||||
|
2025-04-23 15:33:29 - DEBUG - Produit contenant comme slug 'chope-fraise-menthe' existe déjà
|
||||||
|
2025-04-23 15:33:30 - DEBUG - Produit contenant comme slug 'chope-fraise-menthe' existe déjà
|
||||||
|
2025-04-23 15:33:32 - DEBUG - Produit contenant comme slug 'chope-fraise-menthe' existe déjà
|
||||||
|
2025-04-23 15:33:34 - DEBUG - Produit contenant comme slug 'chope-fraise-menthe' existe déjà
|
||||||
|
2025-04-23 15:33:36 - DEBUG - Produit contenant comme slug 'chope-fraise-menthe' existe déjà
|
||||||
|
2025-04-23 15:33:38 - DEBUG - Produit contenant comme slug 'chope-fraise-menthe' existe déjà
|
||||||
|
2025-04-23 15:33:39 - DEBUG - Produit contenant comme slug 'chope-fraise-menthe' existe déjà
|
||||||
|
2025-04-23 15:33:41 - DEBUG - Produit contenant comme slug 'chope-fraise-menthe' existe déjà
|
||||||
|
2025-04-23 15:33:43 - DEBUG - Produit contenant comme slug 'chope-fraise-menthe' existe déjà
|
||||||
|
2025-04-23 15:33:46 - DEBUG - Produit contenant comme slug 'chope-fraise-menthe' existe déjà
|
||||||
|
2025-04-23 15:33:48 - DEBUG - Produit contenant comme slug 'chope-fraise-menthe' existe déjà
|
||||||
|
2025-04-23 15:33:49 - DEBUG - Produit contenant comme slug 'chope-fraise-menthe' existe déjà
|
||||||
|
2025-04-23 15:33:51 - DEBUG - Produit contenant comme slug 'chope-fraise-menthe' existe déjà
|
||||||
|
2025-04-23 15:33:53 - DEBUG - Produit contenant comme slug 'chope-fraise-menthe' existe déjà
|
||||||
|
2025-04-23 15:33:54 - DEBUG - Produit contenant comme slug 'chope-fraise-menthe' existe déjà
|
||||||
|
2025-04-23 15:34:30 - INFO - Produit créé avec succès. ID: 7125
|
||||||
|
2025-04-23 15:34:32 - DEBUG - Produit contenant comme slug 'chope-baie-givree' existe déjà
|
||||||
|
2025-04-23 15:34:34 - DEBUG - Produit contenant comme slug 'chope-baie-givree' existe déjà
|
||||||
|
2025-04-23 15:34:35 - DEBUG - Produit contenant comme slug 'chope-baie-givree' existe déjà
|
||||||
|
2025-04-23 15:34:37 - DEBUG - Produit contenant comme slug 'chope-baie-givree' existe déjà
|
||||||
|
2025-04-23 15:34:38 - DEBUG - Produit contenant comme slug 'chope-baie-givree' existe déjà
|
||||||
|
2025-04-23 15:34:40 - DEBUG - Produit contenant comme slug 'chope-baie-givree' existe déjà
|
||||||
|
2025-04-23 15:34:42 - DEBUG - Produit contenant comme slug 'chope-baie-givree' existe déjà
|
||||||
|
2025-04-23 15:34:43 - DEBUG - Produit contenant comme slug 'chope-baie-givree' existe déjà
|
||||||
|
2025-04-23 15:34:45 - DEBUG - Produit contenant comme slug 'chope-baie-givree' existe déjà
|
||||||
|
2025-04-23 15:34:46 - DEBUG - Produit contenant comme slug 'chope-baie-givree' existe déjà
|
||||||
|
2025-04-23 15:34:48 - DEBUG - Produit contenant comme slug 'chope-baie-givree' existe déjà
|
||||||
|
2025-04-23 15:34:49 - DEBUG - Produit contenant comme slug 'chope-baie-givree' existe déjà
|
||||||
|
2025-04-23 15:34:51 - DEBUG - Produit contenant comme slug 'chope-baie-givree' existe déjà
|
||||||
|
2025-04-23 15:34:53 - DEBUG - Produit contenant comme slug 'chope-baie-givree' existe déjà
|
||||||
|
2025-04-23 15:34:54 - DEBUG - Produit contenant comme slug 'chope-baie-givree' existe déjà
|
||||||
|
2025-04-23 15:34:56 - DEBUG - Produit contenant comme slug 'chope-baie-givree' existe déjà
|
||||||
|
2025-04-23 15:34:57 - DEBUG - Produit contenant comme slug 'chope-baie-givree' existe déjà
|
||||||
|
2025-04-23 15:34:59 - DEBUG - Produit contenant comme slug 'chope-baie-givree' existe déjà
|
||||||
|
2025-04-23 15:35:00 - DEBUG - Produit contenant comme slug 'chope-baie-givree' existe déjà
|
||||||
|
2025-04-23 15:35:03 - DEBUG - Produit contenant comme slug 'chope-baie-givree' existe déjà
|
||||||
|
2025-04-23 15:35:04 - DEBUG - Produit contenant comme slug 'chope-baie-givree' existe déjà
|
||||||
|
2025-04-23 15:35:06 - DEBUG - Produit contenant comme slug 'chope-baie-givree' existe déjà
|
||||||
|
2025-04-23 15:35:07 - DEBUG - Produit contenant comme slug 'chope-baie-givree' existe déjà
|
||||||
|
2025-04-23 15:35:09 - DEBUG - Produit contenant comme slug 'chope-baie-givree' existe déjà
|
||||||
|
2025-04-23 15:35:10 - DEBUG - Produit contenant comme slug 'chope-baie-givree' existe déjà
|
||||||
|
2025-04-23 15:35:12 - DEBUG - Produit contenant comme slug 'chope-baie-givree' existe déjà
|
||||||
|
2025-04-23 15:35:14 - DEBUG - Produit contenant comme slug 'chope-baie-givree' existe déjà
|
||||||
|
2025-04-23 15:35:15 - DEBUG - Produit contenant comme slug 'chope-baie-givree' existe déjà
|
||||||
|
2025-04-23 15:35:17 - DEBUG - Produit contenant comme slug 'chope-baie-givree' existe déjà
|
||||||
|
2025-04-23 15:35:19 - DEBUG - Produit contenant comme slug 'chope-baie-givree' existe déjà
|
||||||
|
2025-04-23 15:35:20 - DEBUG - Produit contenant comme slug 'chope-baie-givree' existe déjà
|
||||||
|
2025-04-23 15:35:22 - DEBUG - Produit contenant comme slug 'chope-baie-givree' existe déjà
|
||||||
|
2025-04-23 15:35:23 - DEBUG - Produit contenant comme slug 'chope-baie-givree' existe déjà
|
||||||
|
2025-04-23 15:35:25 - DEBUG - Produit contenant comme slug 'chope-baie-givree' existe déjà
|
||||||
|
2025-04-23 15:35:27 - DEBUG - Produit contenant comme slug 'chope-baie-givree' existe déjà
|
||||||
|
2025-04-23 15:35:28 - DEBUG - Produit contenant comme slug 'chope-baie-givree' existe déjà
|
||||||
|
2025-04-23 15:35:30 - DEBUG - Produit contenant comme slug 'chope-baie-givree' existe déjà
|
||||||
|
2025-04-23 15:35:31 - DEBUG - Produit contenant comme slug 'chope-baie-givree' existe déjà
|
||||||
|
2025-04-23 15:35:33 - DEBUG - Produit contenant comme slug 'chope-baie-givree' existe déjà
|
||||||
|
2025-04-23 15:35:35 - DEBUG - Produit contenant comme slug 'chope-baie-givree' existe déjà
|
||||||
|
2025-04-23 15:35:36 - DEBUG - Produit contenant comme slug 'chope-baie-givree' existe déjà
|
||||||
|
2025-04-23 15:35:38 - DEBUG - Produit contenant comme slug 'chope-baie-givree' existe déjà
|
||||||
|
2025-04-23 15:35:39 - DEBUG - Produit contenant comme slug 'chope-baie-givree' existe déjà
|
||||||
|
2025-04-23 15:35:41 - DEBUG - Produit contenant comme slug 'chope-baie-givree' existe déjà
|
||||||
|
2025-04-23 15:35:42 - DEBUG - Produit contenant comme slug 'chope-baie-givree' existe déjà
|
||||||
|
2025-04-23 15:35:53 - INFO - Produit créé avec succès. ID: 7126
|
||||||
|
2025-04-23 15:35:55 - DEBUG - Produit contenant comme slug 'chope-adoucissant' existe déjà
|
||||||
|
2025-04-23 15:35:56 - DEBUG - Produit contenant comme slug 'chope-adoucissant' existe déjà
|
||||||
|
2025-04-23 15:35:58 - DEBUG - Produit contenant comme slug 'chope-adoucissant' existe déjà
|
||||||
|
2025-04-23 15:36:00 - DEBUG - Produit contenant comme slug 'chope-adoucissant' existe déjà
|
||||||
|
2025-04-23 15:36:01 - DEBUG - Produit contenant comme slug 'chope-adoucissant' existe déjà
|
||||||
|
2025-04-23 15:36:03 - DEBUG - Produit contenant comme slug 'chope-adoucissant' existe déjà
|
||||||
|
2025-04-23 15:36:05 - DEBUG - Produit contenant comme slug 'chope-adoucissant' existe déjà
|
||||||
|
2025-04-23 15:36:06 - DEBUG - Produit contenant comme slug 'chope-adoucissant' existe déjà
|
||||||
|
2025-04-23 15:36:08 - DEBUG - Produit contenant comme slug 'chope-adoucissant' existe déjà
|
||||||
|
2025-04-23 15:36:10 - DEBUG - Produit contenant comme slug 'chope-adoucissant' existe déjà
|
||||||
|
2025-04-23 15:36:12 - DEBUG - Produit contenant comme slug 'chope-adoucissant' existe déjà
|
||||||
|
2025-04-23 15:36:13 - DEBUG - Produit contenant comme slug 'chope-adoucissant' existe déjà
|
||||||
|
2025-04-23 15:36:15 - DEBUG - Produit contenant comme slug 'chope-adoucissant' existe déjà
|
||||||
|
2025-04-23 15:36:17 - DEBUG - Produit contenant comme slug 'chope-adoucissant' existe déjà
|
||||||
|
2025-04-23 15:36:19 - DEBUG - Produit contenant comme slug 'chope-adoucissant' existe déjà
|
||||||
|
2025-04-23 15:36:20 - DEBUG - Produit contenant comme slug 'chope-adoucissant' existe déjà
|
||||||
|
2025-04-23 15:36:22 - DEBUG - Produit contenant comme slug 'chope-adoucissant' existe déjà
|
||||||
|
2025-04-23 15:36:24 - DEBUG - Produit contenant comme slug 'chope-adoucissant' existe déjà
|
||||||
|
2025-04-23 15:36:26 - DEBUG - Produit contenant comme slug 'chope-adoucissant' existe déjà
|
||||||
|
2025-04-23 15:36:27 - DEBUG - Produit contenant comme slug 'chope-adoucissant' existe déjà
|
||||||
|
2025-04-23 15:36:29 - DEBUG - Produit contenant comme slug 'chope-adoucissant' existe déjà
|
||||||
|
2025-04-23 15:36:31 - DEBUG - Produit contenant comme slug 'chope-adoucissant' existe déjà
|
||||||
|
2025-04-23 15:36:36 - DEBUG - Produit contenant comme slug 'chope-adoucissant' existe déjà
|
||||||
|
2025-04-23 15:36:38 - DEBUG - Produit contenant comme slug 'chope-adoucissant' existe déjà
|
||||||
|
2025-04-23 15:36:40 - DEBUG - Produit contenant comme slug 'chope-adoucissant' existe déjà
|
||||||
|
2025-04-23 15:36:41 - DEBUG - Produit contenant comme slug 'chope-adoucissant' existe déjà
|
||||||
|
2025-04-23 15:36:43 - DEBUG - Produit contenant comme slug 'chope-adoucissant' existe déjà
|
||||||
|
2025-04-23 15:36:45 - DEBUG - Produit contenant comme slug 'chope-adoucissant' existe déjà
|
||||||
|
2025-04-23 15:36:47 - DEBUG - Produit contenant comme slug 'chope-adoucissant' existe déjà
|
||||||
|
2025-04-23 15:36:48 - DEBUG - Produit contenant comme slug 'chope-adoucissant' existe déjà
|
||||||
|
2025-04-23 15:36:50 - DEBUG - Produit contenant comme slug 'chope-adoucissant' existe déjà
|
||||||
|
2025-04-23 15:36:52 - DEBUG - Produit contenant comme slug 'chope-adoucissant' existe déjà
|
||||||
|
2025-04-23 15:36:53 - DEBUG - Produit contenant comme slug 'chope-adoucissant' existe déjà
|
||||||
|
2025-04-23 15:36:55 - DEBUG - Produit contenant comme slug 'chope-adoucissant' existe déjà
|
||||||
|
2025-04-23 15:36:57 - DEBUG - Produit contenant comme slug 'chope-adoucissant' existe déjà
|
||||||
|
2025-04-23 15:36:59 - DEBUG - Produit contenant comme slug 'chope-adoucissant' existe déjà
|
||||||
|
2025-04-23 15:37:01 - DEBUG - Produit contenant comme slug 'chope-adoucissant' existe déjà
|
||||||
|
2025-04-23 15:37:03 - DEBUG - Produit contenant comme slug 'chope-adoucissant' existe déjà
|
||||||
|
2025-04-23 15:37:05 - DEBUG - Produit contenant comme slug 'chope-adoucissant' existe déjà
|
||||||
|
2025-04-23 15:37:07 - DEBUG - Produit contenant comme slug 'chope-adoucissant' existe déjà
|
||||||
|
2025-04-23 15:37:09 - DEBUG - Produit contenant comme slug 'chope-adoucissant' existe déjà
|
||||||
|
2025-04-23 15:37:11 - DEBUG - Produit contenant comme slug 'chope-adoucissant' existe déjà
|
||||||
|
2025-04-23 15:37:12 - DEBUG - Produit contenant comme slug 'chope-adoucissant' existe déjà
|
||||||
|
2025-04-23 15:37:14 - DEBUG - Produit contenant comme slug 'chope-adoucissant' existe déjà
|
||||||
|
2025-04-23 15:37:16 - DEBUG - Produit contenant comme slug 'chope-adoucissant' existe déjà
|
||||||
|
2025-04-23 15:37:26 - INFO - Produit créé avec succès. ID: 7127
|
||||||
|
2025-04-23 15:37:28 - DEBUG - Produit contenant comme slug 'chope-chocolat-noisette' existe déjà
|
||||||
|
2025-04-23 15:37:29 - DEBUG - Produit contenant comme slug 'chope-chocolat-noisette' existe déjà
|
||||||
|
2025-04-23 15:37:31 - DEBUG - Produit contenant comme slug 'chope-chocolat-noisette' existe déjà
|
||||||
|
2025-04-23 15:37:33 - DEBUG - Produit contenant comme slug 'chope-chocolat-noisette' existe déjà
|
||||||
|
2025-04-23 15:37:34 - DEBUG - Produit contenant comme slug 'chope-chocolat-noisette' existe déjà
|
||||||
|
2025-04-23 15:37:36 - DEBUG - Produit contenant comme slug 'chope-chocolat-noisette' existe déjà
|
||||||
|
2025-04-23 15:37:38 - DEBUG - Produit contenant comme slug 'chope-chocolat-noisette' existe déjà
|
||||||
|
2025-04-23 15:37:40 - DEBUG - Produit contenant comme slug 'chope-chocolat-noisette' existe déjà
|
||||||
|
2025-04-23 15:37:41 - DEBUG - Produit contenant comme slug 'chope-chocolat-noisette' existe déjà
|
||||||
|
2025-04-23 15:37:43 - DEBUG - Produit contenant comme slug 'chope-chocolat-noisette' existe déjà
|
||||||
|
2025-04-23 15:37:45 - DEBUG - Produit contenant comme slug 'chope-chocolat-noisette' existe déjà
|
||||||
|
2025-04-23 15:37:47 - DEBUG - Produit contenant comme slug 'chope-chocolat-noisette' existe déjà
|
||||||
|
2025-04-23 15:37:48 - DEBUG - Produit contenant comme slug 'chope-chocolat-noisette' existe déjà
|
||||||
|
2025-04-23 15:37:50 - DEBUG - Produit contenant comme slug 'chope-chocolat-noisette' existe déjà
|
||||||
|
2025-04-23 15:37:52 - DEBUG - Produit contenant comme slug 'chope-chocolat-noisette' existe déjà
|
||||||
|
2025-04-23 15:37:53 - DEBUG - Produit contenant comme slug 'chope-chocolat-noisette' existe déjà
|
||||||
|
2025-04-23 15:37:55 - DEBUG - Produit contenant comme slug 'chope-chocolat-noisette' existe déjà
|
||||||
|
2025-04-23 15:37:57 - DEBUG - Produit contenant comme slug 'chope-chocolat-noisette' existe déjà
|
||||||
|
2025-04-23 15:37:58 - DEBUG - Produit contenant comme slug 'chope-chocolat-noisette' existe déjà
|
||||||
|
2025-04-23 15:38:00 - DEBUG - Produit contenant comme slug 'chope-chocolat-noisette' existe déjà
|
||||||
|
2025-04-23 15:38:02 - DEBUG - Produit contenant comme slug 'chope-chocolat-noisette' existe déjà
|
||||||
|
2025-04-23 15:38:04 - DEBUG - Produit contenant comme slug 'chope-chocolat-noisette' existe déjà
|
||||||
|
2025-04-23 15:38:06 - DEBUG - Produit contenant comme slug 'chope-chocolat-noisette' existe déjà
|
||||||
|
2025-04-23 15:38:07 - DEBUG - Produit contenant comme slug 'chope-chocolat-noisette' existe déjà
|
||||||
|
2025-04-23 15:38:09 - DEBUG - Produit contenant comme slug 'chope-chocolat-noisette' existe déjà
|
||||||
|
2025-04-23 15:38:11 - DEBUG - Produit contenant comme slug 'chope-chocolat-noisette' existe déjà
|
||||||
|
2025-04-23 15:38:12 - DEBUG - Produit contenant comme slug 'chope-chocolat-noisette' existe déjà
|
||||||
|
2025-04-23 15:38:14 - DEBUG - Produit contenant comme slug 'chope-chocolat-noisette' existe déjà
|
||||||
|
2025-04-23 15:38:16 - DEBUG - Produit contenant comme slug 'chope-chocolat-noisette' existe déjà
|
||||||
|
2025-04-23 15:38:18 - DEBUG - Produit contenant comme slug 'chope-chocolat-noisette' existe déjà
|
||||||
|
2025-04-23 15:38:19 - DEBUG - Produit contenant comme slug 'chope-chocolat-noisette' existe déjà
|
||||||
|
2025-04-23 15:38:21 - DEBUG - Produit contenant comme slug 'chope-chocolat-noisette' existe déjà
|
||||||
|
2025-04-23 15:38:23 - DEBUG - Produit contenant comme slug 'chope-chocolat-noisette' existe déjà
|
||||||
|
2025-04-23 15:38:24 - DEBUG - Produit contenant comme slug 'chope-chocolat-noisette' existe déjà
|
||||||
|
2025-04-23 15:38:26 - DEBUG - Produit contenant comme slug 'chope-chocolat-noisette' existe déjà
|
||||||
|
2025-04-23 15:38:28 - DEBUG - Produit contenant comme slug 'chope-chocolat-noisette' existe déjà
|
||||||
|
2025-04-23 15:38:30 - DEBUG - Produit contenant comme slug 'chope-chocolat-noisette' existe déjà
|
||||||
|
2025-04-23 15:38:31 - DEBUG - Produit contenant comme slug 'chope-chocolat-noisette' existe déjà
|
||||||
|
2025-04-23 15:38:33 - DEBUG - Produit contenant comme slug 'chope-chocolat-noisette' existe déjà
|
||||||
|
2025-04-23 15:38:35 - DEBUG - Produit contenant comme slug 'chope-chocolat-noisette' existe déjà
|
||||||
|
2025-04-23 15:38:37 - DEBUG - Produit contenant comme slug 'chope-chocolat-noisette' existe déjà
|
||||||
|
2025-04-23 15:38:38 - DEBUG - Produit contenant comme slug 'chope-chocolat-noisette' existe déjà
|
||||||
|
2025-04-23 15:38:40 - DEBUG - Produit contenant comme slug 'chope-chocolat-noisette' existe déjà
|
||||||
|
2025-04-23 15:38:42 - DEBUG - Produit contenant comme slug 'chope-chocolat-noisette' existe déjà
|
||||||
|
2025-04-23 15:38:44 - DEBUG - Produit contenant comme slug 'chope-chocolat-noisette' existe déjà
|
||||||
|
2025-04-23 15:38:54 - INFO - Produit créé avec succès. ID: 7128
|
||||||
|
2025-04-23 15:38:55 - DEBUG - Produit contenant comme slug 'chope-hiver-scandinave' existe déjà
|
||||||
|
2025-04-23 15:38:57 - DEBUG - Produit contenant comme slug 'chope-hiver-scandinave' existe déjà
|
||||||
|
2025-04-23 15:38:59 - DEBUG - Produit contenant comme slug 'chope-hiver-scandinave' existe déjà
|
||||||
|
2025-04-23 15:39:01 - DEBUG - Produit contenant comme slug 'chope-hiver-scandinave' existe déjà
|
||||||
|
2025-04-23 15:39:04 - DEBUG - Produit contenant comme slug 'chope-hiver-scandinave' existe déjà
|
||||||
|
2025-04-23 15:39:05 - DEBUG - Produit contenant comme slug 'chope-hiver-scandinave' existe déjà
|
||||||
|
2025-04-23 15:39:07 - DEBUG - Produit contenant comme slug 'chope-hiver-scandinave' existe déjà
|
||||||
|
2025-04-23 15:39:09 - DEBUG - Produit contenant comme slug 'chope-hiver-scandinave' existe déjà
|
||||||
|
2025-04-23 15:39:11 - DEBUG - Produit contenant comme slug 'chope-hiver-scandinave' existe déjà
|
||||||
|
2025-04-23 15:39:13 - DEBUG - Produit contenant comme slug 'chope-hiver-scandinave' existe déjà
|
||||||
|
2025-04-23 15:39:14 - DEBUG - Produit contenant comme slug 'chope-hiver-scandinave' existe déjà
|
||||||
|
2025-04-23 15:39:16 - DEBUG - Produit contenant comme slug 'chope-hiver-scandinave' existe déjà
|
||||||
|
2025-04-23 15:39:18 - DEBUG - Produit contenant comme slug 'chope-hiver-scandinave' existe déjà
|
||||||
|
2025-04-23 15:39:20 - DEBUG - Produit contenant comme slug 'chope-hiver-scandinave' existe déjà
|
||||||
|
2025-04-23 15:39:21 - DEBUG - Produit contenant comme slug 'chope-hiver-scandinave' existe déjà
|
||||||
|
2025-04-23 15:39:23 - DEBUG - Produit contenant comme slug 'chope-hiver-scandinave' existe déjà
|
||||||
|
2025-04-23 15:39:25 - DEBUG - Produit contenant comme slug 'chope-hiver-scandinave' existe déjà
|
||||||
|
2025-04-23 15:39:27 - DEBUG - Produit contenant comme slug 'chope-hiver-scandinave' existe déjà
|
||||||
|
2025-04-23 15:39:28 - DEBUG - Produit contenant comme slug 'chope-hiver-scandinave' existe déjà
|
||||||
|
2025-04-23 15:39:30 - DEBUG - Produit contenant comme slug 'chope-hiver-scandinave' existe déjà
|
||||||
|
2025-04-23 15:39:32 - DEBUG - Produit contenant comme slug 'chope-hiver-scandinave' existe déjà
|
||||||
|
2025-04-23 15:39:33 - DEBUG - Produit contenant comme slug 'chope-hiver-scandinave' existe déjà
|
||||||
|
2025-04-23 15:39:35 - DEBUG - Produit contenant comme slug 'chope-hiver-scandinave' existe déjà
|
||||||
|
2025-04-23 15:39:37 - DEBUG - Produit contenant comme slug 'chope-hiver-scandinave' existe déjà
|
||||||
|
2025-04-23 15:39:40 - DEBUG - Produit contenant comme slug 'chope-hiver-scandinave' existe déjà
|
||||||
|
2025-04-23 15:39:41 - DEBUG - Produit contenant comme slug 'chope-hiver-scandinave' existe déjà
|
||||||
|
2025-04-23 15:39:43 - DEBUG - Produit contenant comme slug 'chope-hiver-scandinave' existe déjà
|
||||||
|
2025-04-23 15:39:45 - DEBUG - Produit contenant comme slug 'chope-hiver-scandinave' existe déjà
|
||||||
|
2025-04-23 15:39:47 - DEBUG - Produit contenant comme slug 'chope-hiver-scandinave' existe déjà
|
||||||
|
2025-04-23 15:39:49 - DEBUG - Produit contenant comme slug 'chope-hiver-scandinave' existe déjà
|
||||||
|
2025-04-23 15:39:50 - DEBUG - Produit contenant comme slug 'chope-hiver-scandinave' existe déjà
|
||||||
|
2025-04-23 15:39:52 - DEBUG - Produit contenant comme slug 'chope-hiver-scandinave' existe déjà
|
||||||
|
2025-04-23 15:39:54 - DEBUG - Produit contenant comme slug 'chope-hiver-scandinave' existe déjà
|
||||||
|
2025-04-23 15:39:55 - DEBUG - Produit contenant comme slug 'chope-hiver-scandinave' existe déjà
|
||||||
|
2025-04-23 15:39:57 - DEBUG - Produit contenant comme slug 'chope-hiver-scandinave' existe déjà
|
||||||
|
2025-04-23 15:39:59 - DEBUG - Produit contenant comme slug 'chope-hiver-scandinave' existe déjà
|
||||||
|
2025-04-23 15:40:00 - DEBUG - Produit contenant comme slug 'chope-hiver-scandinave' existe déjà
|
||||||
|
2025-04-23 15:40:02 - DEBUG - Produit contenant comme slug 'chope-hiver-scandinave' existe déjà
|
||||||
|
2025-04-23 15:40:04 - DEBUG - Produit contenant comme slug 'chope-hiver-scandinave' existe déjà
|
||||||
|
2025-04-23 15:40:06 - DEBUG - Produit contenant comme slug 'chope-hiver-scandinave' existe déjà
|
||||||
|
2025-04-23 15:40:08 - DEBUG - Produit contenant comme slug 'chope-hiver-scandinave' existe déjà
|
||||||
|
2025-04-23 15:40:09 - DEBUG - Produit contenant comme slug 'chope-hiver-scandinave' existe déjà
|
||||||
|
2025-04-23 15:40:11 - DEBUG - Produit contenant comme slug 'chope-hiver-scandinave' existe déjà
|
||||||
|
2025-04-23 15:40:13 - DEBUG - Produit contenant comme slug 'chope-hiver-scandinave' existe déjà
|
||||||
|
2025-04-23 15:40:15 - DEBUG - Produit contenant comme slug 'chope-hiver-scandinave' existe déjà
|
||||||
|
2025-04-23 15:40:25 - INFO - Produit créé avec succès. ID: 7129
|
||||||
|
2025-04-23 15:40:27 - DEBUG - Produit contenant comme slug 'verre-petale-oranger' existe déjà
|
||||||
|
2025-04-23 15:40:28 - DEBUG - Produit contenant comme slug 'verre-petale-oranger' existe déjà
|
||||||
|
2025-04-23 15:40:30 - DEBUG - Produit contenant comme slug 'verre-petale-oranger' existe déjà
|
||||||
|
2025-04-23 15:40:37 - DEBUG - Produit contenant comme slug 'verre-petale-oranger' existe déjà
|
||||||
|
2025-04-23 15:40:39 - DEBUG - Produit contenant comme slug 'verre-petale-oranger' existe déjà
|
||||||
|
2025-04-23 15:40:41 - DEBUG - Produit contenant comme slug 'verre-petale-oranger' existe déjà
|
||||||
|
2025-04-23 15:40:43 - DEBUG - Produit contenant comme slug 'verre-petale-oranger' existe déjà
|
||||||
|
2025-04-23 15:40:45 - DEBUG - Produit contenant comme slug 'verre-petale-oranger' existe déjà
|
||||||
|
2025-04-23 15:40:47 - DEBUG - Produit contenant comme slug 'verre-petale-oranger' existe déjà
|
||||||
|
2025-04-23 15:40:48 - DEBUG - Produit contenant comme slug 'verre-petale-oranger' existe déjà
|
||||||
|
2025-04-23 15:40:50 - DEBUG - Produit contenant comme slug 'verre-petale-oranger' existe déjà
|
||||||
|
2025-04-23 15:40:52 - DEBUG - Produit contenant comme slug 'verre-petale-oranger' existe déjà
|
||||||
|
2025-04-23 15:40:54 - DEBUG - Produit contenant comme slug 'verre-petale-oranger' existe déjà
|
||||||
|
2025-04-23 15:40:56 - DEBUG - Produit contenant comme slug 'verre-petale-oranger' existe déjà
|
||||||
|
2025-04-23 15:40:59 - DEBUG - Produit contenant comme slug 'verre-petale-oranger' existe déjà
|
||||||
|
2025-04-23 15:41:02 - DEBUG - Produit contenant comme slug 'verre-petale-oranger' existe déjà
|
||||||
|
2025-04-23 15:41:04 - DEBUG - Produit contenant comme slug 'verre-petale-oranger' existe déjà
|
||||||
|
2025-04-23 15:41:06 - DEBUG - Produit contenant comme slug 'verre-petale-oranger' existe déjà
|
||||||
|
2025-04-23 15:41:08 - DEBUG - Produit contenant comme slug 'verre-petale-oranger' existe déjà
|
||||||
|
2025-04-23 15:41:10 - DEBUG - Produit contenant comme slug 'verre-petale-oranger' existe déjà
|
||||||
|
2025-04-23 15:41:12 - DEBUG - Produit contenant comme slug 'verre-petale-oranger' existe déjà
|
||||||
|
2025-04-23 15:41:14 - DEBUG - Produit contenant comme slug 'verre-petale-oranger' existe déjà
|
||||||
|
2025-04-23 15:41:16 - DEBUG - Produit contenant comme slug 'verre-petale-oranger' existe déjà
|
||||||
|
2025-04-23 15:41:18 - DEBUG - Produit contenant comme slug 'verre-petale-oranger' existe déjà
|
||||||
|
2025-04-23 15:41:20 - DEBUG - Produit contenant comme slug 'verre-petale-oranger' existe déjà
|
||||||
|
2025-04-23 15:41:22 - DEBUG - Produit contenant comme slug 'verre-petale-oranger' existe déjà
|
||||||
|
2025-04-23 15:41:23 - DEBUG - Produit contenant comme slug 'verre-petale-oranger' existe déjà
|
||||||
|
2025-04-23 15:41:25 - DEBUG - Produit contenant comme slug 'verre-petale-oranger' existe déjà
|
||||||
|
2025-04-23 15:41:27 - DEBUG - Produit contenant comme slug 'verre-petale-oranger' existe déjà
|
||||||
|
2025-04-23 15:41:29 - DEBUG - Produit contenant comme slug 'verre-petale-oranger' existe déjà
|
||||||
|
2025-04-23 15:41:31 - DEBUG - Produit contenant comme slug 'verre-petale-oranger' existe déjà
|
||||||
|
2025-04-23 15:41:32 - DEBUG - Produit contenant comme slug 'verre-petale-oranger' existe déjà
|
||||||
|
2025-04-23 15:41:34 - DEBUG - Produit contenant comme slug 'verre-petale-oranger' existe déjà
|
||||||
|
2025-04-23 15:41:36 - DEBUG - Produit contenant comme slug 'verre-petale-oranger' existe déjà
|
||||||
|
2025-04-23 15:41:38 - DEBUG - Produit contenant comme slug 'verre-petale-oranger' existe déjà
|
||||||
|
2025-04-23 15:41:40 - DEBUG - Produit contenant comme slug 'verre-petale-oranger' existe déjà
|
||||||
|
2025-04-23 15:41:41 - DEBUG - Produit contenant comme slug 'verre-petale-oranger' existe déjà
|
||||||
|
2025-04-23 15:41:43 - DEBUG - Produit contenant comme slug 'verre-petale-oranger' existe déjà
|
||||||
|
2025-04-23 15:41:45 - DEBUG - Produit contenant comme slug 'verre-petale-oranger' existe déjà
|
||||||
|
2025-04-23 15:41:47 - DEBUG - Produit contenant comme slug 'verre-petale-oranger' existe déjà
|
||||||
|
2025-04-23 15:41:49 - DEBUG - Produit contenant comme slug 'verre-petale-oranger' existe déjà
|
||||||
|
2025-04-23 15:41:51 - DEBUG - Produit contenant comme slug 'verre-petale-oranger' existe déjà
|
||||||
|
2025-04-23 15:41:53 - DEBUG - Produit contenant comme slug 'verre-petale-oranger' existe déjà
|
||||||
|
2025-04-23 15:41:54 - DEBUG - Produit contenant comme slug 'verre-petale-oranger' existe déjà
|
||||||
|
2025-04-23 15:41:56 - DEBUG - Produit contenant comme slug 'verre-petale-oranger' existe déjà
|
||||||
|
2025-04-23 15:42:07 - INFO - Produit créé avec succès. ID: 7131
|
||||||
|
2025-04-23 15:42:09 - DEBUG - Produit contenant comme slug 'verre-pink-lover' existe déjà
|
||||||
|
2025-04-23 15:42:11 - DEBUG - Produit contenant comme slug 'verre-pink-lover' existe déjà
|
||||||
|
2025-04-23 15:42:13 - DEBUG - Produit contenant comme slug 'verre-pink-lover' existe déjà
|
||||||
|
2025-04-23 15:42:15 - DEBUG - Produit contenant comme slug 'verre-pink-lover' existe déjà
|
||||||
|
2025-04-23 15:42:16 - DEBUG - Produit contenant comme slug 'verre-pink-lover' existe déjà
|
||||||
|
2025-04-23 15:42:18 - DEBUG - Produit contenant comme slug 'verre-pink-lover' existe déjà
|
||||||
|
2025-04-23 15:42:20 - DEBUG - Produit contenant comme slug 'verre-pink-lover' existe déjà
|
||||||
|
2025-04-23 15:42:22 - DEBUG - Produit contenant comme slug 'verre-pink-lover' existe déjà
|
||||||
|
2025-04-23 15:42:24 - DEBUG - Produit contenant comme slug 'verre-pink-lover' existe déjà
|
||||||
|
2025-04-23 15:42:26 - DEBUG - Produit contenant comme slug 'verre-pink-lover' existe déjà
|
||||||
|
2025-04-23 15:42:28 - DEBUG - Produit contenant comme slug 'verre-pink-lover' existe déjà
|
||||||
|
2025-04-23 15:42:29 - DEBUG - Produit contenant comme slug 'verre-pink-lover' existe déjà
|
||||||
|
2025-04-23 15:42:31 - DEBUG - Produit contenant comme slug 'verre-pink-lover' existe déjà
|
||||||
|
2025-04-23 15:42:33 - DEBUG - Produit contenant comme slug 'verre-pink-lover' existe déjà
|
||||||
|
2025-04-23 15:42:35 - DEBUG - Produit contenant comme slug 'verre-pink-lover' existe déjà
|
||||||
|
2025-04-23 15:42:36 - DEBUG - Produit contenant comme slug 'verre-pink-lover' existe déjà
|
||||||
|
2025-04-23 15:42:38 - DEBUG - Produit contenant comme slug 'verre-pink-lover' existe déjà
|
||||||
|
2025-04-23 15:42:40 - DEBUG - Produit contenant comme slug 'verre-pink-lover' existe déjà
|
||||||
|
2025-04-23 15:42:42 - DEBUG - Produit contenant comme slug 'verre-pink-lover' existe déjà
|
||||||
|
2025-04-23 15:42:43 - DEBUG - Produit contenant comme slug 'verre-pink-lover' existe déjà
|
||||||
|
2025-04-23 15:42:45 - DEBUG - Produit contenant comme slug 'verre-pink-lover' existe déjà
|
||||||
|
2025-04-23 15:42:47 - DEBUG - Produit contenant comme slug 'verre-pink-lover' existe déjà
|
||||||
|
2025-04-23 15:42:49 - DEBUG - Produit contenant comme slug 'verre-pink-lover' existe déjà
|
||||||
|
2025-04-23 15:42:50 - DEBUG - Produit contenant comme slug 'verre-pink-lover' existe déjà
|
||||||
|
2025-04-23 15:42:58 - DEBUG - Produit contenant comme slug 'verre-pink-lover' existe déjà
|
||||||
|
2025-04-23 15:43:00 - DEBUG - Produit contenant comme slug 'verre-pink-lover' existe déjà
|
||||||
|
2025-04-23 15:43:02 - DEBUG - Produit contenant comme slug 'verre-pink-lover' existe déjà
|
||||||
|
2025-04-23 15:43:04 - DEBUG - Produit contenant comme slug 'verre-pink-lover' existe déjà
|
||||||
|
2025-04-23 15:43:06 - DEBUG - Produit contenant comme slug 'verre-pink-lover' existe déjà
|
||||||
|
2025-04-23 15:43:08 - DEBUG - Produit contenant comme slug 'verre-pink-lover' existe déjà
|
||||||
|
2025-04-23 15:43:09 - DEBUG - Produit contenant comme slug 'verre-pink-lover' existe déjà
|
||||||
|
2025-04-23 15:43:11 - DEBUG - Produit contenant comme slug 'verre-pink-lover' existe déjà
|
||||||
|
2025-04-23 15:43:13 - DEBUG - Produit contenant comme slug 'verre-pink-lover' existe déjà
|
||||||
|
2025-04-23 15:43:15 - DEBUG - Produit contenant comme slug 'verre-pink-lover' existe déjà
|
||||||
|
2025-04-23 15:43:17 - DEBUG - Produit contenant comme slug 'verre-pink-lover' existe déjà
|
||||||
|
2025-04-23 15:43:18 - DEBUG - Produit contenant comme slug 'verre-pink-lover' existe déjà
|
||||||
|
2025-04-23 15:43:20 - DEBUG - Produit contenant comme slug 'verre-pink-lover' existe déjà
|
||||||
|
2025-04-23 15:43:22 - DEBUG - Produit contenant comme slug 'verre-pink-lover' existe déjà
|
||||||
|
2025-04-23 15:43:24 - DEBUG - Produit contenant comme slug 'verre-pink-lover' existe déjà
|
||||||
|
2025-04-23 15:43:26 - DEBUG - Produit contenant comme slug 'verre-pink-lover' existe déjà
|
||||||
|
2025-04-23 15:43:28 - DEBUG - Produit contenant comme slug 'verre-pink-lover' existe déjà
|
||||||
|
2025-04-23 15:43:30 - DEBUG - Produit contenant comme slug 'verre-pink-lover' existe déjà
|
||||||
|
2025-04-23 15:43:31 - DEBUG - Produit contenant comme slug 'verre-pink-lover' existe déjà
|
||||||
|
2025-04-23 15:43:33 - DEBUG - Produit contenant comme slug 'verre-pink-lover' existe déjà
|
||||||
|
2025-04-23 15:43:35 - DEBUG - Produit contenant comme slug 'verre-pink-lover' existe déjà
|
||||||
|
2025-04-23 15:43:47 - INFO - Produit créé avec succès. ID: 7133
|
||||||
|
2025-04-23 15:43:49 - DEBUG - Produit contenant comme slug 'verre-bois-santal' existe déjà
|
||||||
|
2025-04-23 15:43:51 - DEBUG - Produit contenant comme slug 'verre-bois-santal' existe déjà
|
||||||
|
2025-04-23 15:43:58 - DEBUG - Produit contenant comme slug 'verre-bois-santal' existe déjà
|
||||||
|
2025-04-23 15:44:00 - DEBUG - Produit contenant comme slug 'verre-bois-santal' existe déjà
|
||||||
|
2025-04-23 15:44:03 - DEBUG - Produit contenant comme slug 'verre-bois-santal' existe déjà
|
||||||
|
2025-04-23 15:44:06 - DEBUG - Produit contenant comme slug 'verre-bois-santal' existe déjà
|
||||||
|
2025-04-23 15:44:09 - DEBUG - Produit contenant comme slug 'verre-bois-santal' existe déjà
|
||||||
|
2025-04-23 15:44:11 - DEBUG - Produit contenant comme slug 'verre-bois-santal' existe déjà
|
||||||
|
2025-04-23 15:44:13 - DEBUG - Produit contenant comme slug 'verre-bois-santal' existe déjà
|
||||||
|
2025-04-23 15:44:14 - DEBUG - Produit contenant comme slug 'verre-bois-santal' existe déjà
|
||||||
|
2025-04-23 15:44:16 - DEBUG - Produit contenant comme slug 'verre-bois-santal' existe déjà
|
||||||
|
2025-04-23 15:44:18 - DEBUG - Produit contenant comme slug 'verre-bois-santal' existe déjà
|
||||||
|
2025-04-23 15:44:22 - DEBUG - Produit contenant comme slug 'verre-bois-santal' existe déjà
|
||||||
|
2025-04-23 15:44:23 - DEBUG - Produit contenant comme slug 'verre-bois-santal' existe déjà
|
||||||
|
2025-04-23 15:44:25 - DEBUG - Produit contenant comme slug 'verre-bois-santal' existe déjà
|
||||||
|
2025-04-23 15:44:27 - DEBUG - Produit contenant comme slug 'verre-bois-santal' existe déjà
|
||||||
|
2025-04-23 15:44:28 - DEBUG - Produit contenant comme slug 'verre-bois-santal' existe déjà
|
||||||
|
2025-04-23 15:44:30 - DEBUG - Produit contenant comme slug 'verre-bois-santal' existe déjà
|
||||||
|
2025-04-23 15:44:32 - DEBUG - Produit contenant comme slug 'verre-bois-santal' existe déjà
|
||||||
|
2025-04-23 15:44:34 - DEBUG - Produit contenant comme slug 'verre-bois-santal' existe déjà
|
||||||
|
2025-04-23 15:44:39 - DEBUG - Produit contenant comme slug 'verre-bois-santal' existe déjà
|
||||||
|
2025-04-23 15:44:49 - DEBUG - Produit contenant comme slug 'verre-bois-santal' existe déjà
|
||||||
|
2025-04-23 15:44:51 - DEBUG - Produit contenant comme slug 'verre-bois-santal' existe déjà
|
||||||
|
2025-04-23 15:44:53 - DEBUG - Produit contenant comme slug 'verre-bois-santal' existe déjà
|
||||||
|
2025-04-23 15:44:55 - DEBUG - Produit contenant comme slug 'verre-bois-santal' existe déjà
|
||||||
|
2025-04-23 15:45:05 - DEBUG - Produit contenant comme slug 'verre-bois-santal' existe déjà
|
||||||
|
2025-04-23 15:45:09 - DEBUG - Produit contenant comme slug 'verre-bois-santal' existe déjà
|
||||||
|
2025-04-23 15:45:12 - DEBUG - Produit contenant comme slug 'verre-bois-santal' existe déjà
|
||||||
|
2025-04-23 15:45:14 - DEBUG - Produit contenant comme slug 'verre-bois-santal' existe déjà
|
||||||
|
2025-04-23 15:45:25 - DEBUG - Produit contenant comme slug 'verre-bois-santal' existe déjà
|
||||||
|
2025-04-23 15:45:32 - DEBUG - Produit contenant comme slug 'verre-bois-santal' existe déjà
|
||||||
|
2025-04-23 15:45:45 - DEBUG - Produit contenant comme slug 'verre-bois-santal' existe déjà
|
||||||
|
2025-04-23 15:45:57 - DEBUG - Produit contenant comme slug 'verre-bois-santal' existe déjà
|
||||||
|
2025-04-23 15:46:05 - DEBUG - Produit contenant comme slug 'verre-bois-santal' existe déjà
|
||||||
|
2025-04-23 15:46:16 - DEBUG - Produit contenant comme slug 'verre-bois-santal' existe déjà
|
||||||
1607
final_api_woocommerce/new_api_woocommerce.py
Normal file
1607
final_api_woocommerce/new_api_woocommerce.py
Normal file
File diff suppressed because it is too large
Load Diff
45
final_api_woocommerce/watermark.py
Normal file
45
final_api_woocommerce/watermark.py
Normal file
@ -0,0 +1,45 @@
|
|||||||
|
from PIL import Image, ImageOps
|
||||||
|
import os
|
||||||
|
from pathlib import Path# main.py
|
||||||
|
import logging
|
||||||
|
|
||||||
|
logger = logging.getLogger(__name__)
|
||||||
|
logger.info("Logger from watermark")
|
||||||
|
|
||||||
|
def create_watermark_image(image_path, filigrane_path="logo-lescreationsdemissbleue-fond-transparent.png"):
|
||||||
|
#image = Image.open(image_path).convert("RGBA")
|
||||||
|
image = ImageOps.exif_transpose(Image.open(image_path)).convert("RGBA")
|
||||||
|
filigrane = Image.open(filigrane_path).convert("RGBA")
|
||||||
|
|
||||||
|
# Resize the watermak (ex: 25% of widht from principal image)
|
||||||
|
"""ratio = 0.25
|
||||||
|
"""
|
||||||
|
ratio = 0.15 # instead of 0.25
|
||||||
|
new_width = int(image.width * ratio)
|
||||||
|
new_height = int(filigrane.height * (new_width / filigrane.width))
|
||||||
|
filigrane = filigrane.resize((new_width, new_height), Image.Resampling.LANCZOS)
|
||||||
|
|
||||||
|
# Change the color in grey and handle the transparency
|
||||||
|
"""filigrane = filigrane.convert("L").convert("RGBA") # Gris
|
||||||
|
alpha = filigrane.getchannel("A").point(lambda p: int(p * 0.3)) # ~30% opacité
|
||||||
|
filigrane.putalpha(alpha)"""
|
||||||
|
|
||||||
|
x = image.width - filigrane.width - 30 # 10px from right edge
|
||||||
|
y = image.height - filigrane.height - 30 # 10px from bottom edge
|
||||||
|
|
||||||
|
# Paste watermark (with alpha mask)
|
||||||
|
image.paste(filigrane, (x, y), filigrane)
|
||||||
|
|
||||||
|
# Save the result
|
||||||
|
output_path = image_path.rsplit('.', 1)
|
||||||
|
output_path = f"{output_path[0]}-filigrane.jpg"
|
||||||
|
try:
|
||||||
|
if not os.path.exists(output_path):
|
||||||
|
image.convert("RGB").save(output_path, "JPEG")
|
||||||
|
except Exception as e:
|
||||||
|
logger.exception(f"🔥 Image avec filigrane existe déjà : {e} - {Path(output_path).name}")
|
||||||
|
|
||||||
|
print(f"outpath = {output_path}")
|
||||||
|
return output_path
|
||||||
|
#print(f"✅ Image enregistrée : {output_path}")
|
||||||
|
|
||||||
167
final_api_woocommerce/wcctl.py
Normal file
167
final_api_woocommerce/wcctl.py
Normal file
@ -0,0 +1,167 @@
|
|||||||
|
print(f"📦 Script lancé : __name__ = {__name__}")
|
||||||
|
import argparse
|
||||||
|
from woocommerce import API as WoocommerceApi
|
||||||
|
#from api_woocommerce import AuthentificationWpApi, MediaManager, CategoryManager, ProductManager, AttributeManager, VariationsManager, TabManager, WooCommerceManager
|
||||||
|
from new_api_woocommerce import AuthentificationWpApi, MediaManager, CategoryManager, ProductManager, AttributeManager, VariationsManager, TabManager, WooCommerceManager
|
||||||
|
import pprint
|
||||||
|
import base64
|
||||||
|
|
||||||
|
|
||||||
|
def import_medias_ods(args, media_manager):
|
||||||
|
if args.media:
|
||||||
|
if args.media_regex:
|
||||||
|
try:
|
||||||
|
media_manager.upload_media(args.media_regex)
|
||||||
|
except ValueError:
|
||||||
|
print("error name product_regex")
|
||||||
|
elif args.media_range:
|
||||||
|
try:
|
||||||
|
parts = args.media_range.split(':')
|
||||||
|
start = int(parts[0]) -1 if parts[0] else 0
|
||||||
|
end = int(parts[1]) if len(parts) > 1 and parts[1] else None
|
||||||
|
print(f"start = {start}, end = {end or 'fin'}")
|
||||||
|
media_manager.upload_media_from_to(start, end)
|
||||||
|
except ValueError:
|
||||||
|
print("❌ Mauvais format pour --media-range. Utilisez par exemple --media-range=1:40")
|
||||||
|
else:
|
||||||
|
start, end = 0, None
|
||||||
|
print("ℹ️ --media activé, mais aucune plage spécifiée.")
|
||||||
|
|
||||||
|
def import_products_ods(args, woocommerce_manager):
|
||||||
|
if args.product:
|
||||||
|
if args.product_regex:
|
||||||
|
try:
|
||||||
|
woocommerce_manager.process_file(args.product_regex)
|
||||||
|
except ValueError:
|
||||||
|
print("error name product_regex")
|
||||||
|
elif args.product_range:
|
||||||
|
try:
|
||||||
|
parts = args.product_range.split(':')
|
||||||
|
start = int(parts[0]) -1 if parts[0] else 0
|
||||||
|
end = int(parts[1]) if len(parts) > 1 and parts[1] else None
|
||||||
|
print(f"start = {start}, end = {end or 'fin'}")
|
||||||
|
woocommerce_manager.process_file_from_to(start, end)
|
||||||
|
except ValueError:
|
||||||
|
print("❌ Mauvais format pour --product-range. Utilisez par exemple --product-range=1:40")
|
||||||
|
else:
|
||||||
|
start, end = 0, None
|
||||||
|
print("ℹ️ --product activé, mais aucune plage spécifiée.")
|
||||||
|
|
||||||
|
def main():
|
||||||
|
#ath = AuthentificationWpApi()
|
||||||
|
|
||||||
|
parser = argparse.ArgumentParser(prog='wcctl', description='WooCommerce CLI controller')
|
||||||
|
|
||||||
|
# 🌐 Options globales
|
||||||
|
parser.add_argument('--wc-url', required=True, help='WooCommerce site URL')
|
||||||
|
parser.add_argument('--wc-key', required=True, help='WooCommerce API consumer key')
|
||||||
|
parser.add_argument('--wc-secret', required=True, help='WooCommerce API consumer secret')
|
||||||
|
|
||||||
|
#parser.add_argument('--media', action='store_true', help='Process media items')
|
||||||
|
#parser.add_argument('--media-range', type=str, help='Range of media rows to process (e.g., 10:30)')
|
||||||
|
|
||||||
|
# 🧱 Sous-commandes
|
||||||
|
subparsers = parser.add_subparsers(dest='command', required=True)
|
||||||
|
|
||||||
|
# 📥 Commande : import-ods
|
||||||
|
import_parser = subparsers.add_parser('import-ods', help='Import ODS file data')
|
||||||
|
|
||||||
|
import_parser.add_argument('--ods-path', required=True, help='Path to the ODS file')
|
||||||
|
|
||||||
|
# media
|
||||||
|
import_parser.add_argument('--media', action='store_true', help='Process media items')
|
||||||
|
import_parser.add_argument('--media-range', type=str, help='Range of media rows to process (e.g., 10:30)')
|
||||||
|
import_parser.add_argument('--media-regex', type=str, help='Regex to filter and import media by name')
|
||||||
|
import_parser.add_argument('--logo', action='store_true', help='Process logo')
|
||||||
|
|
||||||
|
# category
|
||||||
|
import_parser.add_argument('--category', action='store_true', help='import all categories')
|
||||||
|
import_parser.add_argument('--category-regex', type=str, help='Regex to filter and import categories by name')
|
||||||
|
|
||||||
|
# attribute
|
||||||
|
import_parser.add_argument('--attribute', action='store_true', help='import all attributes and terms')
|
||||||
|
import_parser.add_argument('--attribute-regex', type=str, help='Regex to filter and import attribute by name')
|
||||||
|
|
||||||
|
# tab
|
||||||
|
#import_parser.add_argument('--tab', action='store_true', help='import all tabs')
|
||||||
|
#import_parser.add_argument('--tab-regex', type=str, help='Regex to filter and import tab by name')
|
||||||
|
|
||||||
|
# product
|
||||||
|
import_parser.add_argument('--product', action='store_true', help='import all products')
|
||||||
|
import_parser.add_argument('--product-regex', type=str, help='Regex to filter and import product by name')
|
||||||
|
import_parser.add_argument('--product-range', type=str, help='Range of product rows to process (e.g., 10:30)')
|
||||||
|
|
||||||
|
|
||||||
|
# delete all informations
|
||||||
|
import_parser.add_argument('--delete-all', action='store_true', help='Delete media, categories, products, attributes, tabs')
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
# Analyse des arguments
|
||||||
|
args = parser.parse_args()
|
||||||
|
|
||||||
|
wcapi = WoocommerceApi(
|
||||||
|
url=args.wc_url,
|
||||||
|
consumer_key=args.wc_key,
|
||||||
|
consumer_secret=args.wc_secret,
|
||||||
|
wp_api=True,
|
||||||
|
version="wc/v3",
|
||||||
|
verify_ssl=False, # Désactive la vérification SSL pour le développement
|
||||||
|
timeout=30
|
||||||
|
)
|
||||||
|
ath = AuthentificationWpApi()
|
||||||
|
media_manager = MediaManager(ath, filename_ods=args.ods_path)
|
||||||
|
category_manager = CategoryManager(wcapi, ath, filename_ods=args.ods_path)
|
||||||
|
product_manager = ProductManager(wcapi, ath, filename_ods=args.ods_path)
|
||||||
|
attribute_manager = AttributeManager(wcapi, filename_ods=args.ods_path)
|
||||||
|
tab_manager = TabManager(wcapi, filename_ods=args.ods_path)
|
||||||
|
variation_manager = VariationsManager(wcapi, filename_ods=args.ods_path)
|
||||||
|
woocommerce_manager = WooCommerceManager(wcapi=wcapi,
|
||||||
|
media_manager=media_manager,
|
||||||
|
category_manager=category_manager,
|
||||||
|
product_manager=product_manager,
|
||||||
|
tab_manager=tab_manager,
|
||||||
|
attribute_manager=attribute_manager,
|
||||||
|
variation_manager=variation_manager,
|
||||||
|
filename_ods=args.ods_path)
|
||||||
|
|
||||||
|
# Dispatch en fonction de la commande
|
||||||
|
#if args.command == 'import-ods':
|
||||||
|
# import_medias_ods(args)
|
||||||
|
#print(f"🔍 args.media = {args.media}")
|
||||||
|
#print(f"🔍 args.media_range = {args.media_range}")
|
||||||
|
print(f"args = {args}")
|
||||||
|
if args.media:
|
||||||
|
import_medias_ods(args, media_manager)
|
||||||
|
|
||||||
|
if args.delete_all:
|
||||||
|
#woocommerce_manager.delete_all_informations()
|
||||||
|
media_manager.delete_all_images()
|
||||||
|
|
||||||
|
if args.category:
|
||||||
|
medias = media_manager.get_all_as_slug_dict()
|
||||||
|
category_manager.medias = medias
|
||||||
|
regex = args.category_regex if args.category_regex else None
|
||||||
|
category_manager.update_data_categories(regex)
|
||||||
|
|
||||||
|
if args.attribute:
|
||||||
|
regex = args.attribute_regex if args.attribute_regex else None
|
||||||
|
attribute_manager.create(regex)
|
||||||
|
attribute_manager.configure_term()
|
||||||
|
|
||||||
|
if args.product:
|
||||||
|
import_products_ods(args, woocommerce_manager)
|
||||||
|
|
||||||
|
if args.logo:
|
||||||
|
media_manager.assign_image_logo()
|
||||||
|
|
||||||
|
if __name__ == "__main__":
|
||||||
|
main()
|
||||||
|
|
||||||
|
# wcctl --wc-url=https://lescreationsdemissbleue.local --wc-key=<consumer_key> --wc-secret=<consumer_secret> import-ods --ods-path=fichier.ods
|
||||||
|
# ods_file = donnees_site_internet_missbleue_corrige.ods
|
||||||
|
|
||||||
|
|
||||||
|
#python wcctl.py --wc-url="https://lescreationsdemissbleue.local" --wc-key="ck_604e9b7b5d290cce72346efade6b31cb9a1ff28e" --wc-secret="cs_563974c7e59532c1ae1d0f8bbf61f0500d6bc768" import-ods --ods-path="donnees_site_internet_missbleue_corrige.ods"
|
||||||
|
|
||||||
|
#python wcctl.py --wc-url="https://les-creations-de-missbleue.local" --wc-key="ck_604e9b7b5d290cce72346efade6b31cb9a1ff28e" --wc-secret="cs_563974c7e59532c1ae1d0f8bbf61f0500d6bc768" import-ods --ods-path="donnees_site_internet_missbleue_corrige.ods"
|
||||||
0
logs/woocommerce.log
Normal file
0
logs/woocommerce.log
Normal file
1178
woocommerce.log
1178
woocommerce.log
File diff suppressed because it is too large
Load Diff
Reference in New Issue
Block a user