From a0ff58af5242fddc39236168b18aafb7c8b324da Mon Sep 17 00:00:00 2001 From: Anthon van der Neut Date: Sun, 4 Jun 2017 14:27:02 +0200 Subject: initial version with YAML class Some new tests are still required --- reader.py | 42 +++++++++++++++++++++++++++--------------- 1 file changed, 27 insertions(+), 15 deletions(-) (limited to 'reader.py') diff --git a/reader.py b/reader.py index 4cc67b8..210470c 100644 --- a/reader.py +++ b/reader.py @@ -74,10 +74,9 @@ class Reader(object): def __init__(self, stream, loader=None): # type: (StreamTextType, Any) -> None self.loader = loader - if self.loader is not None: + if self.loader is not None and getattr(self.loader, '_reader', None) is None: self.loader._reader = self - self.name = None - self.stream = None # type: Any # as .read is called + self.name = None # type: Any self.stream_pointer = 0 self.eof = True self.buffer = u'' @@ -88,22 +87,35 @@ class Reader(object): self.index = 0 self.line = 0 self.column = 0 - if isinstance(stream, text_type): + self.stream = stream # type: Any # as .read is called + + @property + def stream(self): + # type: () -> Any + try: + return self._stream + except AttributeError: + raise YAMLStreamError('input stream needs to specified') + + @stream.setter + def stream(self, val): + # type: (Any) -> None + if val is None: + return + self._stream = None + if isinstance(val, text_type): self.name = "" - self.check_printable(stream) - self.buffer = stream+u'\0' - elif isinstance(stream, binary_type): + self.check_printable(val) + self.buffer = val + u'\0' + elif isinstance(val, binary_type): self.name = "" - self.raw_buffer = stream + self.raw_buffer = val self.determine_encoding() else: - if not hasattr(stream, 'read') and hasattr(stream, 'open'): - self.stream = stream.open('r') - else: - if not hasattr(stream, 'read'): - raise YAMLStreamError('stream argument needs to have a read() method') - self.stream = stream - self.name = getattr(stream, 'name', "") + if not hasattr(val, 'read'): + raise YAMLStreamError('stream argument needs to have a read() method') + self._stream = val + self.name = getattr(self.stream, 'name', "") self.eof = False self.raw_buffer = None self.determine_encoding() -- cgit v1.2.1