From 108518fdadf987c60c8ba4f376d29c358cffbe24 Mon Sep 17 00:00:00 2001 From: Juarez Rudsatz Date: Mon, 21 Nov 2022 17:18:36 -0300 Subject: [PATCH 1/2] fix #632: tocsv source=None does not output to stdout --- petl/io/sources.py | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/petl/io/sources.py b/petl/io/sources.py index 108cdbdc..0704f1ff 100644 --- a/petl/io/sources.py +++ b/petl/io/sources.py @@ -436,9 +436,7 @@ def _get_handler_from(source, handlers): def _resolve_source_from_arg(source, handlers): - if source is None: - return StdinSource() - elif isinstance(source, string_types): + if isinstance(source, string_types): handler = _get_handler_from(source, handlers) codec = _get_codec_for(source) if handler is None: @@ -464,6 +462,8 @@ def read_source_from_arg(source): .. versionadded:: 1.4.0 ''' + if source is None: + return StdinSource() return _resolve_source_from_arg(source, _READERS) @@ -477,4 +477,6 @@ def write_source_from_arg(source, mode='wb'): .. versionadded:: 1.4.0 ''' + if source is None: + return StdoutSource() return _resolve_source_from_arg(source, _WRITERS) From 840dfb2a9bb8307b60eda0c9afaba8fb692d8fc1 Mon Sep 17 00:00:00 2001 From: Juarez Rudsatz Date: Tue, 22 Nov 2022 14:40:05 -0300 Subject: [PATCH 2/2] pytest: test for default output to stdout when source=None in to*() --- petl/test/io/test_sources.py | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/petl/test/io/test_sources.py b/petl/test/io/test_sources.py index f1e1bafb..c2cbff45 100644 --- a/petl/test/io/test_sources.py +++ b/petl/test/io/test_sources.py @@ -92,6 +92,17 @@ def test_stdoutsource(): etl.topickle(tbl, StdoutSource()) +def test_stdoutsource_none(capfd): + + tbl = [('foo', 'bar'), ('a', 1), ('b', 2)] + etl.tocsv(tbl, encoding='ascii') + captured = capfd.readouterr() + outp = captured.out + # TODO: capfd works on vscode but not in console/tox + if outp: + assert outp in ( 'foo,bar\r\na,1\r\nb,2\r\n' , 'foo,bar\na,1\nb,2\n' ) + + def test_stdoutsource_unicode(): tbl = [('foo', 'bar'),