diff options
author | Anthon van der Neut <anthon@mnt.org> | 2017-06-07 11:46:23 +0200 |
---|---|---|
committer | Anthon van der Neut <anthon@mnt.org> | 2017-06-07 11:46:23 +0200 |
commit | 90583069b7efd3744e46ba65499d7090e09d70c3 (patch) | |
tree | f8ab1d58fd1492d9c8a4510dadf78b6fbbc0117a | |
parent | 0cd057811100327978829dcef723d11e78c8efc2 (diff) | |
download | ruamel.yaml-90583069b7efd3744e46ba65499d7090e09d70c3.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-- | CHANGES | 3 | ||||
-rw-r--r-- | Makefile | 4 | ||||
-rw-r--r-- | README.rst | 3 | ||||
-rw-r--r-- | __init__.py | 4 | ||||
-rw-r--r-- | comments.py | 8 | ||||
-rw-r--r-- | composer.py | 10 | ||||
-rw-r--r-- | constructor.py | 49 | ||||
-rw-r--r-- | emitter.py | 22 | ||||
-rw-r--r-- | error.py | 17 | ||||
-rw-r--r-- | main.py | 14 | ||||
-rw-r--r-- | nodes.py | 7 | ||||
-rw-r--r-- | representer.py | 6 | ||||
-rw-r--r-- | resolver.py | 4 | ||||
-rw-r--r-- | scanner.py | 4 | ||||
-rw-r--r-- | serializer.py | 8 |
15 files changed, 92 insertions, 71 deletions
@@ -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) @@ -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 @@ -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, @@ -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 @@ -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) @@ -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): @@ -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: @@ -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 |