Changeset 258
- Timestamp:
- 08/21/07 16:25:34 (1 year ago)
- Files:
-
- pyyaml/trunk/ext/_yaml.pyx (modified) (1 diff)
- pyyaml/trunk/lib/yaml/__init__.py (modified) (4 diffs)
- pyyaml/trunk/lib/yaml/composer.py (modified) (1 diff)
- pyyaml/trunk/lib/yaml/constructor.py (modified) (1 diff)
- pyyaml/trunk/tests/data/empty-documents.single-loader-error (added)
- pyyaml/trunk/tests/data/explicit-document.single-loader-error (added)
- pyyaml/trunk/tests/data/implicit-document.single-loader-error (added)
- pyyaml/trunk/tests/test_errors.py (modified) (2 diffs)
Legend:
- Unmodified
- Added
- Removed
- Modified
- Copied
- Moved
pyyaml/trunk/ext/_yaml.pyx
r257 r258 663 663 if self.parsed_event.type != YAML_STREAM_END_EVENT: 664 664 return self._compose_document() 665 666 def get_single_node(self): 667 self._parse_next_event() 668 yaml_event_delete(&self.parsed_event) 669 self._parse_next_event() 670 document = None 671 if self.parsed_event.type != YAML_STREAM_END_EVENT: 672 document = self._compose_document() 673 self._parse_next_event() 674 if self.parsed_event.type != YAML_STREAM_END_EVENT: 675 mark = Mark(self.stream_name, 676 self.parsed_event.start_mark.index, 677 self.parsed_event.start_mark.line, 678 self.parsed_event.start_mark.column, 679 None, None) 680 raise ComposerError("expected a single document in the stream", 681 document.start_mark, "but found another document", mark) 682 return document 665 683 666 684 cdef object _compose_document(self): pyyaml/trunk/lib/yaml/__init__.py
r252 r258 36 36 """ 37 37 loader = Loader(stream) 38 if loader.check_node(): 39 return loader.get_node() 38 return loader.get_single_node() 40 39 41 40 def compose_all(stream, Loader=Loader): … … 48 47 yield loader.get_node() 49 48 49 def load(stream, Loader=Loader): 50 """ 51 Parse the first YAML document in a stream 52 and produce the corresponding Python object. 53 """ 54 loader = Loader(stream) 55 return loader.get_single_data() 56 50 57 def load_all(stream, Loader=Loader): 51 58 """ … … 57 64 yield loader.get_data() 58 65 59 def load(stream, Loader=Loader):66 def safe_load(stream): 60 67 """ 61 68 Parse the first YAML document in a stream 62 69 and produce the corresponding Python object. 63 """ 64 loader = Loader(stream) 65 if loader.check_data(): 66 return loader.get_data() 70 Resolve only basic YAML tags. 71 """ 72 return load(stream, SafeLoader) 67 73 68 74 def safe_load_all(stream): … … 73 79 """ 74 80 return load_all(stream, SafeLoader) 75 76 def safe_load(stream):77 """78 Parse the first YAML document in a stream79 and produce the corresponding Python object.80 Resolve only basic YAML tags.81 """82 return load(stream, SafeLoader)83 81 84 82 def emit(events, stream=None, Dumper=Dumper, pyyaml/trunk/lib/yaml/composer.py
r233 r258 26 26 if not self.check_event(StreamEndEvent): 27 27 return self.compose_document() 28 29 def get_single_node(self): 30 # Drop the STREAM-START event. 31 self.get_event() 32 33 # Compose a document if the stream is not empty. 34 document = None 35 if not self.check_event(StreamEndEvent): 36 document = self.compose_document() 37 38 # Ensure that the stream contains no more documents. 39 if not self.check_event(StreamEndEvent): 40 event = self.get_event() 41 raise ComposerError("expected a single document in the stream", 42 document.start_mark, "but found another document", 43 event.start_mark) 44 45 # Drop the STREAM-END event. 46 self.get_event() 47 48 return document 28 49 29 50 def compose_document(self): pyyaml/trunk/lib/yaml/constructor.py
r251 r258 37 37 if self.check_node(): 38 38 return self.construct_document(self.get_node()) 39 40 def get_single_data(self): 41 # Ensure that the stream contains a single document and construct it. 42 node = self.get_single_node() 43 if node is not None: 44 return self.construct_document(node) 45 return None 39 46 40 47 def construct_document(self, node): pyyaml/trunk/tests/test_errors.py
r146 r258 16 16 #self._load_string(invalid_filename) 17 17 self.failUnlessRaises(YAMLError, lambda: self._load_string(invalid_filename)) 18 19 def _testLoaderSingleErrors(self, test_name, invalid_filename): 20 self._load_single(invalid_filename) 21 self.failUnlessRaises(YAMLError, lambda: self._load_single(invalid_filename)) 18 22 19 23 def _testEmitterErrors(self, test_name, invalid_filename): … … 67 71 raise 68 72 73 def _load_single(self, filename): 74 try: 75 return load(file(filename, 'rb').read()) 76 except YAMLError, exc: 77 #except ScannerError, exc: 78 #except ParserError, exc: 79 #except ComposerError, exc: 80 #except ConstructorError, exc: 81 #print '.'*70 82 #print "%s:" % filename 83 #print "%s:" % exc.__class__.__name__, exc 84 raise 85 69 86 TestErrors.add_tests('testLoaderErrors', '.loader-error') 70 87 TestErrors.add_tests('testLoaderStringErrors', '.loader-error') 88 TestErrors.add_tests('testLoaderSingleErrors', '.single-loader-error') 71 89 TestErrors.add_tests('testEmitterErrors', '.emitter-error') 72 90 TestErrors.add_tests('testDumperErrors', '.dumper-error')
