mirror of
https://github.com/pretix/pretix.git
synced 2025-12-13 12:42:26 +00:00
Compare commits
1 Commits
cart-valid
...
csv-duplic
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
6d49b350f0 |
@@ -47,6 +47,19 @@ class DataImportError(LazyLocaleException):
|
|||||||
super().__init__(msg)
|
super().__init__(msg)
|
||||||
|
|
||||||
|
|
||||||
|
def rename_duplicates(values):
|
||||||
|
used = set()
|
||||||
|
had_duplicates = False
|
||||||
|
for i, value in enumerate(values):
|
||||||
|
c = 0
|
||||||
|
while values[i] in used:
|
||||||
|
c += 1
|
||||||
|
values[i] = f'{value}__{c}'
|
||||||
|
had_duplicates = True
|
||||||
|
used.add(values[i])
|
||||||
|
return had_duplicates
|
||||||
|
|
||||||
|
|
||||||
def parse_csv(file, length=None, mode="strict", charset=None):
|
def parse_csv(file, length=None, mode="strict", charset=None):
|
||||||
file.seek(0)
|
file.seek(0)
|
||||||
data = file.read(length)
|
data = file.read(length)
|
||||||
@@ -70,6 +83,7 @@ def parse_csv(file, length=None, mode="strict", charset=None):
|
|||||||
return None
|
return None
|
||||||
|
|
||||||
reader = csv.DictReader(io.StringIO(data), dialect=dialect)
|
reader = csv.DictReader(io.StringIO(data), dialect=dialect)
|
||||||
|
reader._had_duplicates = rename_duplicates(reader.fieldnames)
|
||||||
return reader
|
return reader
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@@ -146,7 +146,7 @@ class BaseProcessView(AsyncAction, FormView):
|
|||||||
else:
|
else:
|
||||||
charset = None
|
charset = None
|
||||||
try:
|
try:
|
||||||
return parse_csv(self.file.file, 1024 * 1024, charset=charset)
|
reader = parse_csv(self.file.file, 1024 * 1024, charset=charset)
|
||||||
except UnicodeDecodeError:
|
except UnicodeDecodeError:
|
||||||
messages.warning(
|
messages.warning(
|
||||||
self.request,
|
self.request,
|
||||||
@@ -155,7 +155,16 @@ class BaseProcessView(AsyncAction, FormView):
|
|||||||
"Some characters were replaced with a placeholder."
|
"Some characters were replaced with a placeholder."
|
||||||
)
|
)
|
||||||
)
|
)
|
||||||
return parse_csv(self.file.file, 1024 * 1024, "replace", charset=charset)
|
reader = parse_csv(self.file.file, 1024 * 1024, "replace", charset=charset)
|
||||||
|
if reader._had_duplicates:
|
||||||
|
messages.warning(
|
||||||
|
self.request,
|
||||||
|
_(
|
||||||
|
"Multiple columns of the CSV file have the same name and were renamed automatically. We "
|
||||||
|
"recommend that you rename these in your source file to avoid problems during import."
|
||||||
|
)
|
||||||
|
)
|
||||||
|
return reader
|
||||||
|
|
||||||
@cached_property
|
@cached_property
|
||||||
def parsed_list(self):
|
def parsed_list(self):
|
||||||
|
|||||||
Reference in New Issue
Block a user