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): 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())