test_odswriter.py 1.5 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849
  1. import re
  2. import pytest
  3. import pandas._testing as tm
  4. from pandas.io.excel import ExcelWriter
  5. odf = pytest.importorskip("odf")
  6. pytestmark = pytest.mark.parametrize("ext", [".ods"])
  7. def test_write_append_mode_raises(ext):
  8. msg = "Append mode is not supported with odf!"
  9. with tm.ensure_clean(ext) as f:
  10. with pytest.raises(ValueError, match=msg):
  11. ExcelWriter(f, engine="odf", mode="a")
  12. @pytest.mark.parametrize("engine_kwargs", [None, {"kwarg": 1}])
  13. def test_engine_kwargs(ext, engine_kwargs):
  14. # GH 42286
  15. # GH 43445
  16. # test for error: OpenDocumentSpreadsheet does not accept any arguments
  17. with tm.ensure_clean(ext) as f:
  18. if engine_kwargs is not None:
  19. error = re.escape(
  20. "OpenDocumentSpreadsheet() got an unexpected keyword argument 'kwarg'"
  21. )
  22. with pytest.raises(
  23. TypeError,
  24. match=error,
  25. ):
  26. ExcelWriter(f, engine="odf", engine_kwargs=engine_kwargs)
  27. else:
  28. with ExcelWriter(f, engine="odf", engine_kwargs=engine_kwargs) as _:
  29. pass
  30. def test_book_and_sheets_consistent(ext):
  31. # GH#45687 - Ensure sheets is updated if user modifies book
  32. with tm.ensure_clean(ext) as f:
  33. with ExcelWriter(f) as writer:
  34. assert writer.sheets == {}
  35. table = odf.table.Table(name="test_name")
  36. writer.book.spreadsheet.addElement(table)
  37. assert writer.sheets == {"test_name": table}