copanier/copanier/imports.py
2019-04-06 20:06:22 +02:00

38 lines
1.1 KiB
Python

import csv
from zipfile import BadZipFile
from openpyxl import load_workbook, Workbook
from .models import Product
PRODUCT_FIELDS = {"ref", "name", "price"}
def products_from_xlsx(delivery, data):
if not isinstance(data, Workbook):
try:
data = load_workbook(data)
except BadZipFile:
raise ValueError("Impossible de lire le fichier")
rows = list(data.active.values)
if not rows:
raise ValueError
headers = rows[0]
if not set(headers) >= PRODUCT_FIELDS:
raise ValueError("Colonnes obligatoires: name, ref, price")
delivery.products = []
for row in rows[1:]:
raw = {k: v for k, v in dict(zip(headers, row)).items() if v}
delivery.products.append(Product(**raw))
delivery.persist()
def products_from_csv(delivery, data):
reader = csv.DictReader(data.splitlines(), delimiter=";")
if not set(reader.fieldnames) >= PRODUCT_FIELDS:
raise ValueError("Colonnes obligatoires: name, ref, price")
delivery.products = []
for row in reader:
delivery.products.append(Product(**row))
delivery.persist()