Panic in csv.writer with QUOTE_STRINGS or QUOTE_NOTNULL
Summary
csv.writer panics when quoting is set to csv.QUOTE_STRINGS or
csv.QUOTE_NOTNULL.
Both constants are exposed by RustPython, but the writer path still reaches a
todo!() implementation for these quote styles.
Reproducer
import csv import io buf = io.StringIO() csv.writer(buf, quoting=csv.QUOTE_STRINGS).writerow(["x", 1, None, ""]) print(repr(buf.getvalue())) buf = io.StringIO() csv.writer(buf, quoting=csv.QUOTE_NOTNULL).writerow(["x", 1, None, ""]) print(repr(buf.getvalue()))
Expected
CPython exits normally and produces:
'"x",1,,""\r\n'
'"x","1",,""\r\n'
QUOTE_STRINGS quotes fields whose original value is a string, while None
is written as an empty unquoted field.
QUOTE_NOTNULL quotes every field except None, which is written as an empty
unquoted field.
A single empty field produced from None should raise csv.Error:
csv.writer(io.StringIO(), quoting=csv.QUOTE_STRINGS).writerow([None]) csv.writer(io.StringIO(), quoting=csv.QUOTE_NOTNULL).writerow([None])
Actual
RustPython panics with:
thread 'main' panicked at crates/stdlib/src/csv.rs:...:
not yet implemented
The panic comes from the QuoteStyle::Strings / QuoteStyle::Notnull mapping
inside the native _csv implementation.
Python Documentation
csv.QUOTE_STRINGS and csv.QUOTE_NOTNULL are documented quoting constants:
https://docs.python.org/3/library/csv.html#csv.QUOTE_STRINGS
https://docs.python.org/3/library/csv.html#csv.QUOTE_NOTNULL