From 177a9e109885d69eb535c6c76efc9bbd23e8adc1 Mon Sep 17 00:00:00 2001 From: Daniel Alder <150253271+aldpuzz@users.noreply.github.com> Date: Thu, 11 Sep 2025 13:51:46 +0200 Subject: [PATCH 1/2] Proposal for solving issue #379 (Issue with explicit_end set to False having no impact on small dump) #379: Issue with explicit_end set to False having no impact on small dump --- lib/yaml/emitter.py | 2 +- lib/yaml/events.py | 3 ++- lib/yaml/serializer.py | 2 +- 3 files changed, 4 insertions(+), 3 deletions(-) diff --git a/lib/yaml/emitter.py b/lib/yaml/emitter.py index a664d0111..064468859 100644 --- a/lib/yaml/emitter.py +++ b/lib/yaml/emitter.py @@ -202,7 +202,7 @@ def expect_document_start(self, first=False): self.write_indent() self.state = self.expect_document_root elif isinstance(self.event, StreamEndEvent): - if self.open_ended: + if self.open_ended and self.event.explicit_end: self.write_indicator('...', True) self.write_indent() self.write_stream_end() diff --git a/lib/yaml/events.py b/lib/yaml/events.py index f79ad389c..086b02c4e 100644 --- a/lib/yaml/events.py +++ b/lib/yaml/events.py @@ -40,7 +40,8 @@ def __init__(self, start_mark=None, end_mark=None, encoding=None): self.encoding = encoding class StreamEndEvent(Event): - pass + def __init__(self, explicit_end=None): + self.explicit_end = explicit_end class DocumentStartEvent(Event): def __init__(self, start_mark=None, end_mark=None, diff --git a/lib/yaml/serializer.py b/lib/yaml/serializer.py index fe911e67a..903e36562 100644 --- a/lib/yaml/serializer.py +++ b/lib/yaml/serializer.py @@ -37,7 +37,7 @@ def close(self): if self.closed is None: raise SerializerError("serializer is not opened") elif not self.closed: - self.emit(StreamEndEvent()) + self.emit(StreamEndEvent(explicit_end=self.use_explicit_end)) self.closed = True #def __del__(self): From ae01a9bfc7378bbc81bd946e2d572a4144c41544 Mon Sep 17 00:00:00 2001 From: Daniel Alder <150253271+aldpuzz@users.noreply.github.com> Date: Thu, 11 Sep 2025 14:13:24 +0200 Subject: [PATCH 2/2] Add test case for #379 --- tests/legacy_tests/test_emitter.py | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/tests/legacy_tests/test_emitter.py b/tests/legacy_tests/test_emitter.py index 5eba0a37e..166d3c1a5 100644 --- a/tests/legacy_tests/test_emitter.py +++ b/tests/legacy_tests/test_emitter.py @@ -98,6 +98,14 @@ def test_emitter_events(events_filename, verbose=False): new_events = list(yaml.parse(output)) _compare_events(events, new_events) +def test_marks_on_primitives(): + assert yaml.dump(42, explicit_start=False) == '42' + assert yaml.dump(42, explicit_start=True) == '--- 42' + assert yaml.dump(42, explicit_end=False) == '42' + assert yaml.dump(42, explicit_end=True) == '42\n...\n' + assert yaml.dump(42, explicit_start=False, explicit_end=False) == '42' + assert yaml.dump(42, explicit_start=True, explicit_end=True) == '--- 42\n...\n' + if __name__ == '__main__': import test_appliance test_appliance.run(globals())