def test_excel_csv_import_survives_japanes_utf8(self): some_kanji = u'\u65b0\u4e16\u7d00\u30a8\u30f4\u30a1\u30f3\u30b2\u30ea\u30aa\u30f3' japanese_file = StringIO() japanese_file.write(some_kanji.encode('utf-8')) japanese_file.name = 'filename' japanese_file.size = 10 japanese_file.seek(0) worksheet_from_csv(Worksheet(), japanese_file, 1, 1, True)
def test_should_put_data_into_existing_worksheet_with_offset_for_excel_and_auto( self): for excel_encoding in [True, False]: csv = StringIO() csv.write('abc,123\n') csv.write('def, \n') csv.size = 10 csv.seek(0) existing_worksheet = Worksheet() for row in range(1, 6): for col in range(1, 5): existing_worksheet[col, row].formula = 'old' worksheet = worksheet_from_csv(existing_worksheet, csv, 2, 3, excel_encoding) self.assertEquals(worksheet.A1.formula, 'old') self.assertEquals(worksheet.B1.formula, 'old') self.assertEquals(worksheet.A2.formula, 'old') self.assertEquals(worksheet.B3.formula, 'abc') self.assertEquals(worksheet.C3.formula, '123') self.assertEquals(worksheet.B4.formula, 'def') self.assertEquals(worksheet.C4.formula, ' ') self.assertEquals(worksheet.C5.formula, 'old') self.assertEquals(worksheet.D3.formula, 'old') self.assertEquals(worksheet.B5.formula, 'old')
def test_should_put_data_into_existing_worksheet_with_offset_for_excel_and_auto(self): for excel_encoding in [True, False]: csv = StringIO() csv.write('abc,123\n') csv.write('def, \n') csv.size = 10 csv.seek(0) existing_worksheet = Worksheet() for row in range(1, 6): for col in range(1, 5): existing_worksheet[col, row].formula = 'old' worksheet = worksheet_from_csv(existing_worksheet, csv, 2, 3, excel_encoding) self.assertEquals(worksheet.A1.formula, 'old') self.assertEquals(worksheet.B1.formula, 'old') self.assertEquals(worksheet.A2.formula, 'old') self.assertEquals(worksheet.B3.formula, 'abc') self.assertEquals(worksheet.C3.formula, '123') self.assertEquals(worksheet.B4.formula, 'def') self.assertEquals(worksheet.C4.formula, ' ') self.assertEquals(worksheet.C5.formula, 'old') self.assertEquals(worksheet.D3.formula, 'old') self.assertEquals(worksheet.B5.formula, 'old')
def import_csv(request, sheet): def error_response(): return render_to_response( 'import_csv_error.html', {'sheet': sheet}, context_instance=RequestContext(request) ) form = ImportCSVForm(request.POST, request.FILES) if not form.is_valid(): return error_response() worksheet = sheet.unjsonify_worksheet() csv_file = request.FILES['file'] column = form.cleaned_data['column'] row = form.cleaned_data['row'] excel_file_encoding = request.POST['csv_encoding']=='excel' try: worksheet = worksheet_from_csv( worksheet, csv_file, column, row, excel_file_encoding ) except DirigibleImportError: return error_response() sheet.jsonify_worksheet(worksheet) if update_sheet_with_version_check(sheet, contents_json=sheet.contents_json): calculate(request, sheet.owner.username, sheet.id) return HttpResponseRedirect(reverse('sheet_page',kwargs={ 'username' : request.user.username, 'sheet_id' : sheet.id, })) else: return HttpResponse('FAILED')
def test_autodetect_import_csv_raises_on_null_bytes(self): bin_file = StringIO() bin_file.write("\xFF\x00\xFF") bin_file.name = 'filename' bin_file.size = 10 bin_file.seek(0) self.assertRaises( DirigibleImportError, lambda: worksheet_from_csv(Worksheet(), bin_file, 1, 1, False))
def test_autodetect_import_csv_raises_on_null_bytes(self): bin_file = StringIO() bin_file.write("\xFF\x00\xFF") bin_file.name = 'filename' bin_file.size = 10 bin_file.seek(0) self.assertRaises(DirigibleImportError, lambda : worksheet_from_csv(Worksheet(), bin_file, 1, 1, False) )
def test_autodetect_can_handle_japanese_utf8(self): some_kanji = u'\u65b0\u4e16\u7d00\u30a8\u30f4\u30a1\u30f3\u30b2\u30ea\u30aa\u30f3' japanese_file = StringIO() japanese_file.write(some_kanji.encode('utf-8')) japanese_file.name = 'filename' japanese_file.size = 10 japanese_file.seek(0) worksheet = worksheet_from_csv(Worksheet(), japanese_file, 1, 1, False) self.assertEquals(worksheet.A1.formula, some_kanji)
def test_autodetect_csv_import_handles_carriage_returns_in_cells(self): excel_csv = StringIO() excel_csv.write(u'"carriage\nreturn!"\r\n'.encode('utf-8')) excel_csv.write(u"normal line\r\n".encode('utf-8')) excel_csv.name = 'filename' excel_csv.size = 10 excel_csv.seek(0) worksheet = worksheet_from_csv(Worksheet(), excel_csv, 2, 3, False) self.assertEquals(worksheet.B3.formula, "carriage\nreturn!") self.assertEquals(worksheet.B4.formula, "normal line")
def test_excel_csv_import_recognises_accents_and_currency_symbols(self): excel_csv = StringIO() excel_csv.write(u"\xe9".encode('windows-1252')) excel_csv.write(u"\xa3".encode('windows-1252')) excel_csv.write(u"\u20ac".encode('windows-1252')) excel_csv.name = 'filename' excel_csv.size = 10 excel_csv.seek(0) worksheet = worksheet_from_csv(Worksheet(), excel_csv, 3, 4, True) self.assertEquals(worksheet.C4.formula, u"\xe9\xa3\u20ac")
def test_autodetect_import_csv_raises_on_failure_to_detect_encoding( self, mock_UniversalDetector): mock_detector = Mock() mock_UniversalDetector.return_value = mock_detector mock_detector.result = {'encoding': None} mock_file = StringIO() mock_file.write("\xFF\x00\xFF") mock_file.name = 'filename' mock_file.size = 10 self.assertRaises( DirigibleImportError, lambda: worksheet_from_csv(Worksheet(), mock_file, 1, 1, False))
def test_autodetect_import_csv_raises_on_failure_to_detect_encoding( self, mock_UniversalDetector ): mock_detector = Mock() mock_UniversalDetector.return_value = mock_detector mock_detector.result = {'encoding':None} mock_file = StringIO() mock_file.write("\xFF\x00\xFF") mock_file.name = 'filename' mock_file.size = 10 self.assertRaises(DirigibleImportError, lambda : worksheet_from_csv(Worksheet(), mock_file, 1, 1, False) )