1
0
mirror of https://github.com/netbox-community/netbox.git synced 2024-05-10 07:54:54 +00:00

Fixes #2393: Fix Unicode support for CSV import under Python 2

This commit is contained in:
Jeremy Stretch
2018-10-05 15:33:29 -04:00
parent 841db3b0c2
commit 4c37628784
2 changed files with 13 additions and 1 deletions

View File

@ -7,6 +7,7 @@ v2.4.6 (FUTURE)
## Bug Fixes ## Bug Fixes
* [#2393](https://github.com/digitalocean/netbox/issues/2393) - Fix Unicode support for CSV import under Python 2
* [#2483](https://github.com/digitalocean/netbox/issues/2483) - Set max item count of API-populated form fields to MAX_PAGE_SIZE * [#2483](https://github.com/digitalocean/netbox/issues/2483) - Set max item count of API-populated form fields to MAX_PAGE_SIZE
* [#2484](https://github.com/digitalocean/netbox/issues/2484) - Local config context not available on the Virtual Machine Edit Form * [#2484](https://github.com/digitalocean/netbox/issues/2484) - Local config context not available on the Virtual Machine Edit Form
* [#2485](https://github.com/digitalocean/netbox/issues/2485) - Fix cancel button when assigning a service to a device/VM * [#2485](https://github.com/digitalocean/netbox/issues/2485) - Fix cancel button when assigning a service to a device/VM

View File

@ -4,6 +4,7 @@ import csv
from io import StringIO from io import StringIO
import json import json
import re import re
import sys
from django import forms from django import forms
from django.conf import settings from django.conf import settings
@ -150,6 +151,11 @@ def add_blank_choice(choices):
return ((None, '---------'),) + tuple(choices) return ((None, '---------'),) + tuple(choices)
def utf8_encoder(data):
for line in data:
yield line.encode('utf-8')
# #
# Widgets # Widgets
# #
@ -303,7 +309,12 @@ class CSVDataField(forms.CharField):
def to_python(self, value): def to_python(self, value):
records = [] records = []
reader = csv.reader(StringIO(value))
# Python 2 hack for Unicode support in the CSV reader
if sys.version_info[0] < 3:
reader = csv.reader(utf8_encoder(StringIO(value)))
else:
reader = csv.reader(StringIO(value))
# Consume and validate the first line of CSV data as column headers # Consume and validate the first line of CSV data as column headers
headers = next(reader) headers = next(reader)