summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAnthon van der Neut <anthon@mnt.org>2017-06-07 11:46:23 +0200
committerAnthon van der Neut <anthon@mnt.org>2017-06-07 11:46:23 +0200
commit90583069b7efd3744e46ba65499d7090e09d70c3 (patch)
treef8ab1d58fd1492d9c8a4510dadf78b6fbbc0117a
parent0cd057811100327978829dcef723d11e78c8efc2 (diff)
downloadruamel.yaml-0.15.2.tar.gz
fix issue # 123: type annotations0.15.2
mypy needed updating from 0.501 to 0.511, with may different warnings/errors then before
-rw-r--r--CHANGES3
-rw-r--r--Makefile4
-rw-r--r--README.rst3
-rw-r--r--__init__.py4
-rw-r--r--comments.py8
-rw-r--r--composer.py10
-rw-r--r--constructor.py49
-rw-r--r--emitter.py22
-rw-r--r--error.py17
-rw-r--r--main.py14
-rw-r--r--nodes.py7
-rw-r--r--representer.py6
-rw-r--r--resolver.py4
-rw-r--r--scanner.py4
-rw-r--r--serializer.py8
15 files changed, 92 insertions, 71 deletions
diff --git a/CHANGES b/CHANGES
index 778ac5e..15174b0 100644
--- a/CHANGES
+++ b/CHANGES
@@ -1,3 +1,6 @@
+[0, 15, 2]: 2017-06-07
+ - update to conform to mypy 0.511: mypy --strict
+
[0, 15, 1]: 2017-06-07
- `duplicate keys <http://yaml.readthedocs.io/en/latest/api.html#duplicate-keys>`_
in mappings generate an error (in the old API this change generates a warning until 0.16)
diff --git a/Makefile b/Makefile
index fb69498..e5b28f6 100644
--- a/Makefile
+++ b/Makefile
@@ -30,7 +30,9 @@ pytest:
MYPYSRC:=$(shell ls -1 *.py | grep -Ev "^(setup.py|.*_flymake.py)$$" | sed 's|^|ruamel/yaml/|')
MYPYOPT:=--py2 --strict
-mypy:
+mypy: mypy2single
+
+mypyold:
cd ..; mypy --strict --no-warn-unused-ignores yaml/*.py
# sleep to give time to flymake*.py to disappear
diff --git a/README.rst b/README.rst
index 838989e..9033251 100644
--- a/README.rst
+++ b/README.rst
@@ -32,6 +32,9 @@ ChangeLog
.. should insert NEXT: at the beginning of line for next key
+0.15.2 (2017-06-07):
+ - update to conform to mypy 0.511: mypy --strict
+
0.15.1 (2017-06-07):
- `duplicate keys <http://yaml.readthedocs.io/en/latest/api.html#duplicate-keys>`_
in mappings generate an error (in the old API this change generates a warning until 0.16)
diff --git a/__init__.py b/__init__.py
index bcec717..0e11aec 100644
--- a/__init__.py
+++ b/__init__.py
@@ -11,8 +11,8 @@ if False: # MYPY
_package_data = dict(
full_package_name='ruamel.yaml',
- version_info=(0, 15, 1),
- __version__='0.15.1',
+ version_info=(0, 15, 2),
+ __version__='0.15.2',
author='Anthon van der Neut',
author_email='a.van.der.neut@ruamel.eu',
description='ruamel.yaml is a YAML parser/emitter that supports roundtrip preservation of comments, seq/map flow style, and map key order', # NOQA
diff --git a/comments.py b/comments.py
index 93974d9..87b6629 100644
--- a/comments.py
+++ b/comments.py
@@ -259,7 +259,7 @@ class CommentedBase(object):
if c[3] is None:
c[3] = []
for com in after.split('\n'):
- c[3].append(comment_token(com, start_mark))
+ c[3].append(comment_token(com, start_mark)) # type: ignore
@property
def fa(self):
@@ -359,6 +359,10 @@ class CommentedBase(object):
# type: () -> Any
raise NotImplementedError
+ def _yaml_get_column(self, key):
+ # type: (Any) -> Any
+ raise NotImplementedError
+
class CommentedSeq(list, CommentedBase):
__slots__ = Comment.attrib,
@@ -389,7 +393,7 @@ class CommentedSeq(list, CommentedBase):
def pop(self, idx=None):
# type: (Any) -> Any
- res = list.pop(self, idx)
+ res = list.pop(self, idx) # type: ignore
self.ca.items.pop(idx, None) # might not be there -> default value
for list_index in sorted(self.ca.items):
if list_index < idx:
diff --git a/composer.py b/composer.py
index 2d84dd7..516a3ae 100644
--- a/composer.py
+++ b/composer.py
@@ -38,16 +38,16 @@ class Composer(object):
def parser(self):
# type: () -> Any
if hasattr(self.loader, 'typ'):
- self.loader.parser
- return self.loader._parser
+ self.loader.parser # type: ignore
+ return self.loader._parser # type: ignore
@property
def resolver(self):
# type: () -> Any
# assert self.loader._resolver is not None
if hasattr(self.loader, 'typ'):
- self.loader.resolver
- return self.loader._resolver
+ self.loader.resolver # type: ignore
+ return self.loader._resolver # type: ignore
def check_node(self):
# type: () -> Any
@@ -70,7 +70,7 @@ class Composer(object):
self.parser.get_event()
# Compose a document if the stream is not empty.
- document = None
+ document = None # type: Any
if not self.parser.check_event(StreamEndEvent):
document = self.compose_document()
diff --git a/constructor.py b/constructor.py
index 37a7a8f..83cbbec 100644
--- a/constructor.py
+++ b/constructor.py
@@ -67,12 +67,12 @@ class BaseConstructor(object):
def composer(self):
# type: () -> Any
if hasattr(self.loader, 'typ'):
- return self.loader.composer
+ return self.loader.composer # type: ignore
try:
- return self.loader._composer
+ return self.loader._composer # type: ignore
except AttributeError:
print('slt', type(self))
- print('slc', self.loader._composer)
+ print('slc', self.loader._composer) # type: ignore
print(dir(self))
raise
@@ -80,8 +80,8 @@ class BaseConstructor(object):
def resolver(self):
# type: () -> Any
if hasattr(self.loader, 'typ'):
- return self.loader.resolver
- return self.loader._resolver
+ return self.loader.resolver # type: ignore
+ return self.loader._resolver # type: ignore
def check_data(self):
# type: () -> Any
@@ -131,7 +131,7 @@ class BaseConstructor(object):
None, None,
"found unconstructable recursive node", node.start_mark)
self.recursive_objects[node] = None
- constructor = None
+ constructor = None # type: Any
tag_suffix = None
if node.tag in self.yaml_constructors:
constructor = self.yaml_constructors[node.tag]
@@ -204,17 +204,17 @@ class BaseConstructor(object):
"expected a mapping node, but found %s" % node.id,
node.start_mark)
total_mapping = {}
- if hasattr(node, 'merge'):
+ if getattr(node, 'merge', None) is not None:
todo = [(node.merge, False), (node.value, True)]
else:
todo = [(node.value, True)]
for values, check in todo:
- mapping = {}
+ mapping = {} # type: Dict[Any, Any]
for key_node, value_node in values:
# keys can be list -> deep
key = self.construct_object(key_node, deep=True)
# lists are not hashable, but tuples are
- if not isinstance(key, collections.Hashable): # type: ignore
+ if not isinstance(key, collections.Hashable):
if isinstance(key, list):
key = tuple(key)
if PY2:
@@ -239,6 +239,7 @@ class BaseConstructor(object):
return total_mapping
def check_mapping_key(self, node, key_node, mapping, key, value):
+ # type: (Any, Any, Any, Any, Any) -> None
if key in mapping:
if not self.allow_duplicate_keys:
args = [
@@ -506,7 +507,7 @@ class SafeConstructor(BaseConstructor):
delta = -delta
data = datetime.datetime(year, month, day, hour, minute, second,
fraction)
- if delta: # type: ignore
+ if delta:
data -= delta
return data
@@ -1058,7 +1059,7 @@ class RoundTripConstructor(SafeConstructor):
seqtyp._yaml_add_comment(node.comment[:2])
if len(node.comment) > 2:
seqtyp.yaml_end_comment_extend(node.comment[2], clear=True)
- if node.anchor: # type: ignore
+ if node.anchor:
from ruamel.yaml.serializer import templated_id
if not templated_id(node.anchor):
seqtyp.yaml_set_anchor(node.anchor)
@@ -1147,10 +1148,10 @@ class RoundTripConstructor(SafeConstructor):
merge_map = self.flatten_mapping(node)
# mapping = {}
if node.comment:
- maptyp._yaml_add_comment(node.comment[:2])
+ maptyp._yaml_add_comment(node.comment[:2]) # type: ignore
if len(node.comment) > 2:
- maptyp.yaml_end_comment_extend(node.comment[2], clear=True)
- if node.anchor: # type: ignore
+ maptyp.yaml_end_comment_extend(node.comment[2], clear=True) # type: ignore
+ if node.anchor:
from ruamel.yaml.serializer import templated_id
if not templated_id(node.anchor):
maptyp.yaml_set_anchor(node.anchor)
@@ -1159,7 +1160,7 @@ class RoundTripConstructor(SafeConstructor):
# keys can be list -> deep
key = self.construct_object(key_node, deep=True)
# lists are not hashable, but tuples are
- if not isinstance(key, collections.Hashable): # type: ignore
+ if not isinstance(key, collections.Hashable):
if isinstance(key, list):
key_a = CommentedKeySeq(key)
if key_node.flow_style is True:
@@ -1191,21 +1192,21 @@ class RoundTripConstructor(SafeConstructor):
maptyp._yaml_add_comment(key_node.comment, value=last_key)
else:
key_node.comment[2] = key_node.comment.pop(4)
- maptyp._yaml_add_comment(key_node.comment, key=key)
+ maptyp._yaml_add_comment(key_node.comment, key=key) # type: ignore
key_node.comment = None
if key_node.comment:
- maptyp._yaml_add_comment(key_node.comment, key=key)
+ maptyp._yaml_add_comment(key_node.comment, key=key) # type: ignore
if value_node.comment:
- maptyp._yaml_add_comment(value_node.comment, value=key)
- maptyp._yaml_set_kv_line_col(
+ maptyp._yaml_add_comment(value_node.comment, value=key) # type: ignore
+ maptyp._yaml_set_kv_line_col( # type: ignore
key, [key_node.start_mark.line, key_node.start_mark.column,
value_node.start_mark.line, value_node.start_mark.column])
- maptyp[key] = value
+ maptyp[key] = value # type: ignore
last_key, last_value = key, value # could use indexing
# do this last, or <<: before a key will prevent insertion in instances
# of collections.OrderedDict (as they have no __contains__
if merge_map:
- maptyp.add_yaml_merge(merge_map)
+ maptyp.add_yaml_merge(merge_map) # type: ignore
def construct_setting(self, node, typ, deep=False):
# type: (Any, Any, bool) -> Any
@@ -1218,7 +1219,7 @@ class RoundTripConstructor(SafeConstructor):
typ._yaml_add_comment(node.comment[:2])
if len(node.comment) > 2:
typ.yaml_end_comment_extend(node.comment[2], clear=True)
- if node.anchor: # type: ignore
+ if node.anchor:
from ruamel.yaml.serializer import templated_id
if not templated_id(node.anchor):
typ.yaml_set_anchor(node.anchor)
@@ -1226,7 +1227,7 @@ class RoundTripConstructor(SafeConstructor):
# keys can be list -> deep
key = self.construct_object(key_node, deep=True)
# lists are not hashable, but tuples are
- if not isinstance(key, collections.Hashable): # type: ignore
+ if not isinstance(key, collections.Hashable):
if isinstance(key, list):
key = tuple(key)
if PY2:
@@ -1375,7 +1376,7 @@ class RoundTripConstructor(SafeConstructor):
delta = datetime.timedelta(hours=tz_hour, minutes=tz_minute)
if values['tz_sign'] == '-':
delta = -delta
- if delta: # type: ignore
+ if delta:
dt = datetime.datetime(year, month, day, hour, minute)
dt -= delta
data = TimeStamp(dt.year, dt.month, dt.day, dt.hour, dt.minute,
diff --git a/emitter.py b/emitter.py
index 70407bd..f2a4ad3 100644
--- a/emitter.py
+++ b/emitter.py
@@ -106,17 +106,17 @@ class Emitter(object):
# Formatting details.
self.canonical = canonical
self.allow_unicode = allow_unicode
- self.block_seq_indent = block_seq_indent if block_seq_indent else 0 # type: ignore
+ self.block_seq_indent = block_seq_indent if block_seq_indent else 0
self.top_level_colon_align = top_level_colon_align
self.best_indent = 2
- if indent and 1 < indent < 10: # type: ignore
+ if indent and 1 < indent < 10:
self.best_indent = indent
# if self.best_indent < self.block_seq_indent + 1:
# self.best_indent = self.block_seq_indent + 1
self.best_width = 80
- if width and width > self.best_indent*2: # type: ignore
+ if width and width > self.best_indent*2:
self.best_width = width
- self.best_line_break = u'\n'
+ self.best_line_break = u'\n' # type: Any
if line_break in [u'\r', u'\n', u'\r\n']:
self.best_line_break = line_break
@@ -953,7 +953,7 @@ class Emitter(object):
def write_stream_start(self):
# type: () -> None
# Write BOM if needed.
- if self.encoding and self.encoding.startswith('utf-16'): # type: ignore
+ if self.encoding and self.encoding.startswith('utf-16'):
self.stream.write(u'\uFEFF'.encode(self.encoding))
def write_stream_end(self):
@@ -988,7 +988,7 @@ class Emitter(object):
self.whitespace = True
data = u' '*(indent-self.column)
self.column = indent
- if self.encoding: # type: ignore
+ if self.encoding:
data = data.encode(self.encoding)
self.stream.write(data)
@@ -1007,7 +1007,7 @@ class Emitter(object):
def write_version_directive(self, version_text):
# type: (Any) -> None
data = u'%%YAML %s' % version_text
- if self.encoding: # type: ignore
+ if self.encoding:
data = data.encode(self.encoding)
self.stream.write(data)
self.write_line_break()
@@ -1015,7 +1015,7 @@ class Emitter(object):
def write_tag_directive(self, handle_text, prefix_text):
# type: (Any, Any) -> None
data = u'%%TAG %s %s' % (handle_text, prefix_text)
- if self.encoding: # type: ignore
+ if self.encoding:
data = data.encode(self.encoding)
self.stream.write(data)
self.write_line_break()
@@ -1261,7 +1261,7 @@ class Emitter(object):
if not self.whitespace:
data = u' '
self.column += len(data)
- if self.encoding: # type: ignore
+ if self.encoding:
data = data.encode(self.encoding)
self.stream.write(data)
self.whitespace = False
@@ -1283,7 +1283,7 @@ class Emitter(object):
else:
data = text[start:end]
self.column += len(data)
- if self.encoding: # type: ignore
+ if self.encoding:
data = data.encode(self.encoding)
self.stream.write(data)
start = end
@@ -1304,7 +1304,7 @@ class Emitter(object):
if ch is None or ch in u' \n\x85\u2028\u2029':
data = text[start:end]
self.column += len(data)
- if self.encoding: # type: ignore
+ if self.encoding:
data = data.encode(self.encoding)
self.stream.write(data)
start = end
diff --git a/error.py b/error.py
index 6276ac2..9ecd7ed 100644
--- a/error.py
+++ b/error.py
@@ -101,7 +101,7 @@ class YAMLError(Exception):
class MarkedYAMLError(YAMLError):
def __init__(self, context=None, context_mark=None,
problem=None, problem_mark=None, note=None, warn=None):
- # type: (Any, Any, Any, Any, Any) -> None
+ # type: (Any, Any, Any, Any, Any, Any) -> None
self.context = context
self.context_mark = context_mark
self.problem = problem
@@ -125,7 +125,7 @@ class MarkedYAMLError(YAMLError):
if self.problem_mark is not None:
lines.append(str(self.problem_mark))
if self.note is not None and self.note:
- note = textwrap.dedent(self.note)
+ note = textwrap.dedent(self.note) # type: ignore
lines.append(note)
return '\n'.join(lines)
@@ -141,11 +141,12 @@ class YAMLWarning(Warning):
class MarkedYAMLWarning(YAMLWarning):
def __init__(self, context=None, context_mark=None,
problem=None, problem_mark=None, note=None, warn=None):
- # type: (Any, Any, Any, Any, Any) -> None
+ # type: (Any, Any, Any, Any, Any, Any) -> None
self.context = context
self.context_mark = context_mark
self.problem = problem
self.problem_mark = problem_mark
+ self.note = note
self.warn = warn
def __str__(self):
@@ -164,10 +165,10 @@ class MarkedYAMLWarning(YAMLWarning):
if self.problem_mark is not None:
lines.append(str(self.problem_mark))
if self.note is not None and self.note:
- note = textwrap.dedent(self.note)
+ note = textwrap.dedent(self.note) # type: ignore
lines.append(note)
if self.warn is not None and self.warn:
- warn = textwrap.dedent(self.warn)
+ warn = textwrap.dedent(self.warn) # type: ignore
lines.append(warn)
return '\n'.join(lines)
@@ -198,7 +199,7 @@ class YAMLFutureWarning(Warning):
class MarkedYAMLFutureWarning(YAMLFutureWarning):
def __init__(self, context=None, context_mark=None,
problem=None, problem_mark=None, note=None, warn=None):
- # type: (Any, Any, Any, Any, Any) -> None
+ # type: (Any, Any, Any, Any, Any, Any) -> None
self.context = context
self.context_mark = context_mark
self.problem = problem
@@ -223,9 +224,9 @@ class MarkedYAMLFutureWarning(YAMLFutureWarning):
if self.problem_mark is not None:
lines.append(str(self.problem_mark))
if self.note is not None and self.note:
- note = textwrap.dedent(self.note)
+ note = textwrap.dedent(self.note) # type: ignore
lines.append(note)
if self.warn is not None and self.warn:
- warn = textwrap.dedent(self.warn)
+ warn = textwrap.dedent(self.warn) # type: ignore
lines.append(warn)
return '\n'.join(lines)
diff --git a/main.py b/main.py
index 52ce601..51c9c95 100644
--- a/main.py
+++ b/main.py
@@ -55,7 +55,7 @@ class YAML(object):
"one was given ({!r})".format(self.__class__.__name__, _kw))
self.typ = 'rt' if typ is None else typ
- self.Resolver = ruamel.yaml.resolver.VersionedResolver
+ self.Resolver = ruamel.yaml.resolver.VersionedResolver # type: Any
self.allow_unicode = True
self.Reader = None # type: Any
self.Scanner = None # type: Any
@@ -139,7 +139,7 @@ class YAML(object):
# # pathlib.Path() instance
# setattr(self, attr, CParser(self._stream))
# else:
- setattr(self, attr, CParser(self._stream)) # type: ignore
+ setattr(self, attr, CParser(self._stream))
# self._parser = self._composer = self
# print('scanner', self.loader.scanner)
@@ -475,9 +475,9 @@ def load(stream, Loader=None, version=None, preserve_quotes=None):
Loader = UnsafeLoader
loader = Loader(stream, version, preserve_quotes=preserve_quotes)
try:
- return loader._constructor.get_single_data()
+ return loader._constructor.get_single_data() # type: ignore
finally:
- loader._parser.dispose()
+ loader._parser.dispose() # type: ignore
def load_all(stream, Loader=None, version=None, preserve_quotes=None):
@@ -491,10 +491,10 @@ def load_all(stream, Loader=None, version=None, preserve_quotes=None):
Loader = UnsafeLoader
loader = Loader(stream, version, preserve_quotes=preserve_quotes)
try:
- while loader._constructor.check_data():
- yield loader._constructor.get_data()
+ while loader._constructor.check_data(): # type: ignore
+ yield loader._constructor.get_data() # type: ignore
finally:
- loader._parser.dispose()
+ loader._parser.dispose() # type: ignore
def safe_load(stream, version=None):
diff --git a/nodes.py b/nodes.py
index 96f3190..8babbd7 100644
--- a/nodes.py
+++ b/nodes.py
@@ -99,3 +99,10 @@ class SequenceNode(CollectionNode):
class MappingNode(CollectionNode):
__slots__ = ('merge', )
id = 'mapping'
+
+ def __init__(self, tag, value, start_mark=None, end_mark=None,
+ flow_style=None, comment=None, anchor=None):
+ # type: (Any, Any, Any, Any, Any, Any, Any) -> None
+ CollectionNode.__init__(self, tag, value, start_mark, end_mark,
+ flow_style, comment, anchor)
+ self.merge = None
diff --git a/representer.py b/representer.py
index f6eef1b..38fc823 100644
--- a/representer.py
+++ b/representer.py
@@ -61,8 +61,8 @@ class BaseRepresenter(object):
# type: () -> Any
try:
if hasattr(self.dumper, 'typ'):
- return self.dumper.serializer
- return self.dumper._serializer
+ return self.dumper.serializer # type: ignore
+ return self.dumper._serializer # type: ignore
except AttributeError:
return self # cyaml
@@ -527,7 +527,7 @@ class Representer(SafeRepresenter):
value = {}
if bool(args):
value['args'] = args
- value['state'] = state
+ value['state'] = state # type: ignore
return self.represent_mapping(
u'tag:yaml.org,2002:python/object/new:'+class_name, value)
diff --git a/resolver.py b/resolver.py
index 83656d1..85125ac 100644
--- a/resolver.py
+++ b/resolver.py
@@ -434,9 +434,9 @@ class VersionedResolver(BaseResolver):
version = self.parser.yaml_version
except AttributeError:
if hasattr(self.loadumper, 'typ'):
- version = self.loadumper.version
+ version = self.loadumper.version # type: ignore
else:
- version = self.loadumper._serializer.use_version # dumping
+ version = self.loadumper._serializer.use_version # type: ignore # dumping
if version is None:
version = self._loader_version
if version is None:
diff --git a/scanner.py b/scanner.py
index de7a92a..fd13277 100644
--- a/scanner.py
+++ b/scanner.py
@@ -131,8 +131,8 @@ class Scanner(object):
def reader(self):
# type: () -> Any
if hasattr(self.loader, 'typ'):
- self.loader.reader
- return self.loader._reader
+ self.loader.reader # type: ignore
+ return self.loader._reader # type: ignore
# Public methods.
diff --git a/serializer.py b/serializer.py
index f224e96..c949c79 100644
--- a/serializer.py
+++ b/serializer.py
@@ -57,15 +57,15 @@ class Serializer(object):
def emitter(self):
# type: () -> Any
if hasattr(self.dumper, 'typ'):
- return self.dumper.emitter
- return self.dumper._emitter
+ return self.dumper.emitter # type: ignore
+ return self.dumper._emitter # type: ignore
@property
def resolver(self):
# type: () -> Any
if hasattr(self.dumper, 'typ'):
- self.dumper.resolver
- return self.dumper._resolver
+ self.dumper.resolver # type: ignore
+ return self.dumper._resolver # type: ignore
def open(self):
# type: () -> None