forked from CGM_Public/pretix_original
Order import: Catch CSV parsing errors during iteration (PRETIXEU-9AW)
This commit is contained in:
@@ -32,6 +32,7 @@
|
|||||||
# distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
|
# distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
|
||||||
# License for the specific language governing permissions and limitations under the License.
|
# License for the specific language governing permissions and limitations under the License.
|
||||||
|
|
||||||
|
import csv
|
||||||
import logging
|
import logging
|
||||||
from datetime import timedelta
|
from datetime import timedelta
|
||||||
|
|
||||||
@@ -146,16 +147,24 @@ class ProcessView(EventPermissionRequiredMixin, AsyncAction, FormView):
|
|||||||
else:
|
else:
|
||||||
charset = None
|
charset = None
|
||||||
try:
|
try:
|
||||||
return parse_csv(self.file.file, 1024 * 1024, charset=charset)
|
try:
|
||||||
except UnicodeDecodeError:
|
c = parse_csv(self.file.file, 1024 * 1024, charset=charset)
|
||||||
messages.warning(
|
if c is not None:
|
||||||
self.request,
|
return list(c)
|
||||||
_(
|
except UnicodeDecodeError:
|
||||||
"We could not identify the character encoding of the CSV file. "
|
messages.warning(
|
||||||
"Some characters were replaced with a placeholder."
|
self.request,
|
||||||
|
_(
|
||||||
|
"We could not identify the character encoding of the CSV file. "
|
||||||
|
"Some characters were replaced with a placeholder."
|
||||||
|
)
|
||||||
)
|
)
|
||||||
)
|
c = parse_csv(self.file.file, 1024 * 1024, "replace", charset=charset)
|
||||||
return parse_csv(self.file.file, 1024 * 1024, "replace", charset=charset)
|
if c is not None:
|
||||||
|
return list(c)
|
||||||
|
except csv.Error:
|
||||||
|
logger.exception("Could not parse CSV file")
|
||||||
|
return None
|
||||||
|
|
||||||
def get(self, request, *args, **kwargs):
|
def get(self, request, *args, **kwargs):
|
||||||
if 'async_id' in request.GET and settings.HAS_CELERY:
|
if 'async_id' in request.GET and settings.HAS_CELERY:
|
||||||
@@ -193,5 +202,5 @@ class ProcessView(EventPermissionRequiredMixin, AsyncAction, FormView):
|
|||||||
ctx = super().get_context_data(**kwargs)
|
ctx = super().get_context_data(**kwargs)
|
||||||
ctx['file'] = self.file
|
ctx['file'] = self.file
|
||||||
ctx['parsed'] = self.parsed
|
ctx['parsed'] = self.parsed
|
||||||
ctx['sample_rows'] = list(self.parsed)[:3]
|
ctx['sample_rows'] = self.parsed[:3]
|
||||||
return ctx
|
return ctx
|
||||||
|
|||||||
Reference in New Issue
Block a user