diff options
author | Anthon van der Neut <anthon@mnt.org> | 2019-08-15 21:45:20 +0200 |
---|---|---|
committer | Anthon van der Neut <anthon@mnt.org> | 2019-08-15 21:45:20 +0200 |
commit | 1c628953c71f2e2f0cd01d643ca239e23c2e15cc (patch) | |
tree | 5023362ff0ebc313833d5c84bc358eb6f6d58110 | |
parent | 64185b909c7107f1bc11644aa60bd901f8ec1bdc (diff) | |
download | ruamel.yaml-1c628953c71f2e2f0cd01d643ca239e23c2e15cc.tar.gz |
move YAML directive info to scanner for TAG parsing of 1.2 URI
1.2 URI can contain the "#" character, but parsing for nodes didn't necessarily make the 1.2 version
available in time
fixes issue #301
*When this change indeed resolves your problem, please **Close** this issue*.
*(You can do so using the WorkFlow pull-down (close to the top right of this page))*
-rw-r--r-- | _test/test_issues.py | 1 | ||||
-rw-r--r-- | parser.py | 13 | ||||
-rw-r--r-- | resolver.py | 2 | ||||
-rw-r--r-- | scanner.py | 4 |
4 files changed, 10 insertions, 10 deletions
diff --git a/_test/test_issues.py b/_test/test_issues.py index 5606122..f2b5d74 100644 --- a/_test/test_issues.py +++ b/_test/test_issues.py @@ -846,7 +846,6 @@ class TestIssues: null """) yaml = YAML() - yaml.version = (1, 1) # This should not be necessary -> issue 301 with pytest.raises(ruamel.yaml.scanner.ScannerError, match='while scanning a directive'): yaml.load(inp) @@ -109,7 +109,6 @@ class Parser(object): # type: () -> None # Reset the state attributes (to clear self-references) self.current_event = None - self.yaml_version = None self.tag_handles = {} # type: Dict[Any, Any] self.states = [] # type: List[Any] self.marks = [] # type: List[Any] @@ -269,12 +268,12 @@ class Parser(object): def process_directives(self): # type: () -> Any - self.yaml_version = None + yaml_version = None self.tag_handles = {} while self.scanner.check_token(DirectiveToken): token = self.scanner.get_token() if token.name == u'YAML': - if self.yaml_version is not None: + if yaml_version is not None: raise ParserError( None, None, 'found duplicate YAML directive', token.start_mark ) @@ -286,7 +285,7 @@ class Parser(object): 'found incompatible YAML document (version 1.* is ' 'required)', token.start_mark, ) - self.yaml_version = token.value + yaml_version = token.value elif token.name == u'TAG': handle, prefix = token.value if handle in self.tag_handles: @@ -295,11 +294,11 @@ class Parser(object): ) self.tag_handles[handle] = prefix if bool(self.tag_handles): - value = self.yaml_version, self.tag_handles.copy() # type: Any + value = yaml_version, self.tag_handles.copy() # type: Any else: - value = self.yaml_version, None + value = yaml_version, None if self.loader is not None and hasattr(self.loader, 'tags'): - self.loader.version = self.yaml_version + self.loader.version = yaml_version if self.loader.tags is None: self.loader.tags = {} for k in self.tag_handles: diff --git a/resolver.py b/resolver.py index 9bcbd37..6379943 100644 --- a/resolver.py +++ b/resolver.py @@ -383,7 +383,7 @@ class VersionedResolver(BaseResolver): def processing_version(self): # type: () -> Any try: - version = self.parser.yaml_version + version = self.loadumper._scanner.yaml_version except AttributeError: try: if hasattr(self.loadumper, 'typ'): @@ -81,6 +81,7 @@ class Scanner(object): self.loader._scanner = self self.reset_scanner() self.first_time = False + self.yaml_version = None @property def flow_level(self): @@ -955,7 +956,8 @@ class Scanner(object): "expected a digit or ' ', but found %r" % utf8(srp()), self.reader.get_mark(), ) - return (major, minor) + self.yaml_version = (major, minor) + return self.yaml_version def scan_yaml_directive_number(self, start_mark): # type: (Any) -> Any |