summaryrefslogtreecommitdiff
path: root/resolver.py
diff options
context:
space:
mode:
Diffstat (limited to 'resolver.py')
-rw-r--r--resolver.py102
1 files changed, 54 insertions, 48 deletions
diff --git a/resolver.py b/resolver.py
index 6379943..eab6163 100644
--- a/resolver.py
+++ b/resolver.py
@@ -1,14 +1,12 @@
# coding: utf-8
-from __future__ import absolute_import
-
import re
if False: # MYPY
from typing import Any, Dict, List, Union, Text, Optional # NOQA
from ruamel.yaml.compat import VersionType # NOQA
-from ruamel.yaml.compat import string_types, _DEFAULT_YAML_VERSION # NOQA
+from ruamel.yaml.compat import _DEFAULT_YAML_VERSION, _F # NOQA
from ruamel.yaml.error import * # NOQA
from ruamel.yaml.nodes import MappingNode, ScalarNode, SequenceNode # NOQA
from ruamel.yaml.util import RegExp # NOQA
@@ -24,77 +22,77 @@ __all__ = ['BaseResolver', 'Resolver', 'VersionedResolver']
# - a list of first characters to match
implicit_resolvers = [
([(1, 2)],
- u'tag:yaml.org,2002:bool',
- RegExp(u'''^(?:true|True|TRUE|false|False|FALSE)$''', re.X),
- list(u'tTfF')),
+ 'tag:yaml.org,2002:bool',
+ RegExp('''^(?:true|True|TRUE|false|False|FALSE)$''', re.X),
+ list('tTfF')),
([(1, 1)],
- u'tag:yaml.org,2002:bool',
- RegExp(u'''^(?:y|Y|yes|Yes|YES|n|N|no|No|NO
+ 'tag:yaml.org,2002:bool',
+ RegExp('''^(?:y|Y|yes|Yes|YES|n|N|no|No|NO
|true|True|TRUE|false|False|FALSE
|on|On|ON|off|Off|OFF)$''', re.X),
- list(u'yYnNtTfFoO')),
+ list('yYnNtTfFoO')),
([(1, 2)],
- u'tag:yaml.org,2002:float',
- RegExp(u'''^(?:
+ 'tag:yaml.org,2002:float',
+ RegExp('''^(?:
[-+]?(?:[0-9][0-9_]*)\\.[0-9_]*(?:[eE][-+]?[0-9]+)?
|[-+]?(?:[0-9][0-9_]*)(?:[eE][-+]?[0-9]+)
|[-+]?\\.[0-9_]+(?:[eE][-+][0-9]+)?
|[-+]?\\.(?:inf|Inf|INF)
|\\.(?:nan|NaN|NAN))$''', re.X),
- list(u'-+0123456789.')),
+ list('-+0123456789.')),
([(1, 1)],
- u'tag:yaml.org,2002:float',
- RegExp(u'''^(?:
+ 'tag:yaml.org,2002:float',
+ RegExp('''^(?:
[-+]?(?:[0-9][0-9_]*)\\.[0-9_]*(?:[eE][-+]?[0-9]+)?
|[-+]?(?:[0-9][0-9_]*)(?:[eE][-+]?[0-9]+)
|\\.[0-9_]+(?:[eE][-+][0-9]+)?
|[-+]?[0-9][0-9_]*(?::[0-5]?[0-9])+\\.[0-9_]* # sexagesimal float
|[-+]?\\.(?:inf|Inf|INF)
|\\.(?:nan|NaN|NAN))$''', re.X),
- list(u'-+0123456789.')),
+ list('-+0123456789.')),
([(1, 2)],
- u'tag:yaml.org,2002:int',
- RegExp(u'''^(?:[-+]?0b[0-1_]+
+ 'tag:yaml.org,2002:int',
+ RegExp('''^(?:[-+]?0b[0-1_]+
|[-+]?0o?[0-7_]+
|[-+]?[0-9_]+
|[-+]?0x[0-9a-fA-F_]+)$''', re.X),
- list(u'-+0123456789')),
+ list('-+0123456789')),
([(1, 1)],
- u'tag:yaml.org,2002:int',
- RegExp(u'''^(?:[-+]?0b[0-1_]+
+ 'tag:yaml.org,2002:int',
+ RegExp('''^(?:[-+]?0b[0-1_]+
|[-+]?0?[0-7_]+
|[-+]?(?:0|[1-9][0-9_]*)
|[-+]?0x[0-9a-fA-F_]+
|[-+]?[1-9][0-9_]*(?::[0-5]?[0-9])+)$''', re.X), # sexagesimal int
- list(u'-+0123456789')),
+ list('-+0123456789')),
([(1, 2), (1, 1)],
- u'tag:yaml.org,2002:merge',
- RegExp(u'^(?:<<)$'),
- [u'<']),
+ 'tag:yaml.org,2002:merge',
+ RegExp('^(?:<<)$'),
+ ['<']),
([(1, 2), (1, 1)],
- u'tag:yaml.org,2002:null',
- RegExp(u'''^(?: ~
+ 'tag:yaml.org,2002:null',
+ RegExp('''^(?: ~
|null|Null|NULL
| )$''', re.X),
- [u'~', u'n', u'N', u'']),
+ ['~', 'n', 'N', '']),
([(1, 2), (1, 1)],
- u'tag:yaml.org,2002:timestamp',
- RegExp(u'''^(?:[0-9][0-9][0-9][0-9]-[0-9][0-9]-[0-9][0-9]
+ 'tag:yaml.org,2002:timestamp',
+ RegExp('''^(?:[0-9][0-9][0-9][0-9]-[0-9][0-9]-[0-9][0-9]
|[0-9][0-9][0-9][0-9] -[0-9][0-9]? -[0-9][0-9]?
(?:[Tt]|[ \\t]+)[0-9][0-9]?
:[0-9][0-9] :[0-9][0-9] (?:\\.[0-9]*)?
(?:[ \\t]*(?:Z|[-+][0-9][0-9]?(?::[0-9][0-9])?))?)$''', re.X),
- list(u'0123456789')),
+ list('0123456789')),
([(1, 2), (1, 1)],
- u'tag:yaml.org,2002:value',
- RegExp(u'^(?:=)$'),
- [u'=']),
+ 'tag:yaml.org,2002:value',
+ RegExp('^(?:=)$'),
+ ['=']),
# The following resolver is only for documentation purposes. It cannot work
# because plain scalars cannot start with '!', '&', or '*'.
([(1, 2), (1, 1)],
- u'tag:yaml.org,2002:yaml',
- RegExp(u'^(?:!|&|\\*)$'),
- list(u'!&*')),
+ 'tag:yaml.org,2002:yaml',
+ RegExp('^(?:!|&|\\*)$'),
+ list('!&*')),
]
# fmt: on
@@ -105,9 +103,9 @@ class ResolverError(YAMLError):
class BaseResolver(object):
- DEFAULT_SCALAR_TAG = u'tag:yaml.org,2002:str'
- DEFAULT_SEQUENCE_TAG = u'tag:yaml.org,2002:seq'
- DEFAULT_MAPPING_TAG = u'tag:yaml.org,2002:map'
+ DEFAULT_SCALAR_TAG = 'tag:yaml.org,2002:str'
+ DEFAULT_SEQUENCE_TAG = 'tag:yaml.org,2002:seq'
+ DEFAULT_MAPPING_TAG = 'tag:yaml.org,2002:map'
yaml_implicit_resolvers = {} # type: Dict[Any, Any]
yaml_path_resolvers = {} # type: Dict[Any, Any]
@@ -186,7 +184,9 @@ class BaseResolver(object):
node_check = element[0]
index_check = True
else:
- raise ResolverError('Invalid path element: %s' % (element,))
+ raise ResolverError(
+ _F('Invalid path element: {element!s}', element=element)
+ )
else:
node_check = None
index_check = element
@@ -198,12 +198,16 @@ class BaseResolver(object):
node_check = MappingNode
elif (
node_check not in [ScalarNode, SequenceNode, MappingNode]
- and not isinstance(node_check, string_types)
+ and not isinstance(node_check, str)
and node_check is not None
):
- raise ResolverError('Invalid node checker: %s' % (node_check,))
- if not isinstance(index_check, (string_types, int)) and index_check is not None:
- raise ResolverError('Invalid index checker: %s' % (index_check,))
+ raise ResolverError(
+ _F('Invalid node checker: {node_check!s}', node_check=node_check)
+ )
+ if not isinstance(index_check, (str, int)) and index_check is not None:
+ raise ResolverError(
+ _F('Invalid index checker: {index_check!s}', index_check=index_check)
+ )
new_path.append((node_check, index_check))
if kind is str:
kind = ScalarNode
@@ -212,7 +216,7 @@ class BaseResolver(object):
elif kind is dict:
kind = MappingNode
elif kind not in [ScalarNode, SequenceNode, MappingNode] and kind is not None:
- raise ResolverError('Invalid node kind: %s' % (kind,))
+ raise ResolverError(_F('Invalid node kind: {kind!s}', kind=kind))
cls.yaml_path_resolvers[tuple(new_path), kind] = tag
def descend_resolver(self, current_node, current_index):
@@ -248,7 +252,7 @@ class BaseResolver(object):
def check_resolver_prefix(self, depth, path, kind, current_node, current_index):
# type: (int, Text, Any, Any, Any) -> bool
node_check, index_check = path[depth - 1]
- if isinstance(node_check, string_types):
+ if isinstance(node_check, str):
if current_node.tag != node_check:
return False
elif node_check is not None:
@@ -258,7 +262,7 @@ class BaseResolver(object):
return False
if (index_check is False or index_check is None) and current_index is None:
return False
- if isinstance(index_check, string_types):
+ if isinstance(index_check, str):
if not (
isinstance(current_index, ScalarNode) and index_check == current_index.value
):
@@ -339,7 +343,7 @@ class VersionedResolver(BaseResolver):
if isinstance(version, list):
return tuple(version)
# assume string
- return tuple(map(int, version.split(u'.')))
+ return tuple(map(int, version.split('.')))
@property
def versioned_resolver(self):
@@ -348,6 +352,8 @@ class VersionedResolver(BaseResolver):
select the resolver based on the version we are parsing
"""
version = self.processing_version
+ if isinstance(version, str):
+ version = tuple(map(int, version.split('.')))
if version not in self._version_implicit_resolver:
for x in implicit_resolvers:
if version in x[0]: