Skip to content

Instantly share code, notes, and snippets.

@GaretJax
Last active August 29, 2015 14:08
Show Gist options
  • Save GaretJax/e16fb785d625dac8d449 to your computer and use it in GitHub Desktop.
Save GaretJax/e16fb785d625dac8d449 to your computer and use it in GitHub Desktop.
class StudentImportUploadForm(forms.Form):
import_file = forms.FileField(required=True)
importer = lo.Importer(
lo.SkippingIterator(3),
lo.HeadersMapper([
'first_name',
'last_name',
'email',
'birthday',
'phone',
'gender',
'grade',
'german_is_mother_tongue',
'has_individual_german',
'has_individual_math',
'has_individual_english',
'has_individual_french',
'has_individual_sciences',
]),
UploadedRecordForm,
)
@classmethod
def sniff_format(cls, fh):
for reader in (lo.XLSXReader, lo.CSVReader.reopen):
try:
row_iterator = reader(fh)
break
except Exception:
fh.seek(0)
else:
raise Exception('File format not supported')
return row_iterator
@classmethod
def parse_file(cls, fh):
reader = cls.sniff_format(fh)
return cls.importer(reader)
def clean_import_file(self):
import_file = self.cleaned_data['import_file']
try:
self.parse_file(import_file)
except lo.InvalidFileException as e:
raise forms.ValidationError(_('Invalid file. {0}'.format(e)))
else:
return import_file
finally:
import_file.seek(0)
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment