summaryrefslogtreecommitdiff
path: root/reader.py
diff options
context:
space:
mode:
authorAnthon van der Neut <anthon@mnt.org>2017-06-04 14:27:02 +0200
committerAnthon van der Neut <anthon@mnt.org>2017-06-04 14:27:02 +0200
commita0ff58af5242fddc39236168b18aafb7c8b324da (patch)
treeb7ba0da53b720dde7be6e3b32ad927456c6f5dcf /reader.py
parent6ba66a44af41d072f5ceddfcdf2c21611c2a7cd0 (diff)
downloadruamel.yaml-a0ff58af5242fddc39236168b18aafb7c8b324da.tar.gz
initial version with YAML class0.15.0
Some new tests are still required
Diffstat (limited to 'reader.py')
-rw-r--r--reader.py42
1 files changed, 27 insertions, 15 deletions
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 = "<unicode string>"
- 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 = "<byte string>"
- 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', "<file>")
+ if not hasattr(val, 'read'):
+ raise YAMLStreamError('stream argument needs to have a read() method')
+ self._stream = val
+ self.name = getattr(self.stream, 'name', "<file>")
self.eof = False
self.raw_buffer = None
self.determine_encoding()