feat: add script to re-upload catalogue images and force resize
This commit is contained in:
99
scripts/reupload_catalogue_images.py
Executable file
99
scripts/reupload_catalogue_images.py
Executable file
@@ -0,0 +1,99 @@
|
|||||||
|
#!/usr/bin/env python3
|
||||||
|
import argparse
|
||||||
|
import getpass
|
||||||
|
import sys
|
||||||
|
|
||||||
|
import requests
|
||||||
|
|
||||||
|
|
||||||
|
TOKEN_URL = "/api/token/"
|
||||||
|
CATALOGUE_IMAGES_URL = "/don_confiao/api/catalogue_images/"
|
||||||
|
|
||||||
|
|
||||||
|
def get_credentials():
|
||||||
|
username = input("Usuario: ")
|
||||||
|
password = getpass.getpass("Contraseña: ")
|
||||||
|
return username, password
|
||||||
|
|
||||||
|
|
||||||
|
def get_token(domain, username, password):
|
||||||
|
url = domain.rstrip("/") + TOKEN_URL
|
||||||
|
response = requests.post(url, json={"username": username, "password": password})
|
||||||
|
if response.status_code != 200:
|
||||||
|
print(f"Error al obtener token: {response.status_code} {response.text}", file=sys.stderr)
|
||||||
|
sys.exit(1)
|
||||||
|
data = response.json()
|
||||||
|
return data["access"]
|
||||||
|
|
||||||
|
|
||||||
|
def get_catalogue_images(domain, token):
|
||||||
|
url = domain.rstrip("/") + CATALOGUE_IMAGES_URL
|
||||||
|
headers = {"Authorization": f"Bearer {token}"}
|
||||||
|
response = requests.get(url, headers=headers)
|
||||||
|
if response.status_code != 200:
|
||||||
|
print(f"Error al obtener imágenes de catálogo: {response.status_code} {response.text}", file=sys.stderr)
|
||||||
|
sys.exit(1)
|
||||||
|
return response.json()
|
||||||
|
|
||||||
|
|
||||||
|
def download_image(image_url):
|
||||||
|
response = requests.get(image_url)
|
||||||
|
if response.status_code != 200:
|
||||||
|
print(f" [ERR] No se pudo descargar imagen: {response.status_code}", file=sys.stderr)
|
||||||
|
return None
|
||||||
|
return response.content
|
||||||
|
|
||||||
|
|
||||||
|
def main():
|
||||||
|
parser = argparse.ArgumentParser(
|
||||||
|
description="Vuelve a subir cada imagen de catálogo existente para forzar el redimensionado."
|
||||||
|
)
|
||||||
|
parser.add_argument("domain", help="Dominio del backend (ej: http://localhost:8000)")
|
||||||
|
args = parser.parse_args()
|
||||||
|
|
||||||
|
username, password = get_credentials()
|
||||||
|
token = get_token(args.domain, username, password)
|
||||||
|
print("Token obtenido correctamente.")
|
||||||
|
|
||||||
|
images = get_catalogue_images(args.domain, token)
|
||||||
|
if not images:
|
||||||
|
print("No hay imágenes de catálogo para procesar.")
|
||||||
|
return
|
||||||
|
|
||||||
|
headers = {"Authorization": f"Bearer {token}"}
|
||||||
|
updated = 0
|
||||||
|
errors = 0
|
||||||
|
|
||||||
|
for img in images:
|
||||||
|
ci_id = img["id"]
|
||||||
|
product_id = img["product"]
|
||||||
|
image_url = img["image"]
|
||||||
|
|
||||||
|
print(f" [{ci_id}] Descargando {image_url} ...")
|
||||||
|
content = download_image(image_url)
|
||||||
|
if content is None:
|
||||||
|
errors += 1
|
||||||
|
continue
|
||||||
|
|
||||||
|
# Determine content type from URL extension
|
||||||
|
ext = image_url.rsplit(".", 1)[-1].lower() if "." in image_url else "jpg"
|
||||||
|
mime = {"jpg": "image/jpeg", "jpeg": "image/jpeg", "png": "image/png"}.get(ext, "application/octet-stream")
|
||||||
|
filename = f"image.{ext}"
|
||||||
|
|
||||||
|
update_url = args.domain.rstrip("/") + CATALOGUE_IMAGES_URL.rstrip("/") + f"/{ci_id}/"
|
||||||
|
files = {"image": (filename, content, mime)}
|
||||||
|
data = {"product": product_id}
|
||||||
|
response = requests.put(update_url, headers=headers, files=files, data=data)
|
||||||
|
|
||||||
|
if response.status_code == 200:
|
||||||
|
print(f" [OK] Imagen {ci_id} (producto {product_id}) actualizada.")
|
||||||
|
updated += 1
|
||||||
|
else:
|
||||||
|
print(f" [ERR] Imagen {ci_id}: {response.status_code} {response.text}")
|
||||||
|
errors += 1
|
||||||
|
|
||||||
|
print(f"\nResumen: {updated} actualizadas, {errors} errores")
|
||||||
|
|
||||||
|
|
||||||
|
if __name__ == "__main__":
|
||||||
|
main()
|
||||||
Reference in New Issue
Block a user