Hello community, here is the log from the commit of package python-ruamel.yaml for openSUSE:Factory checked in at 2019-09-11 10:23:01 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Comparing /work/SRC/openSUSE:Factory/python-ruamel.yaml (Old) and /work/SRC/openSUSE:Factory/.python-ruamel.yaml.new.7948 (New) ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Package is "python-ruamel.yaml" Wed Sep 11 10:23:01 2019 rev:20 rq:728692 version:0.16.5 Changes: -------- --- /work/SRC/openSUSE:Factory/python-ruamel.yaml/python-ruamel.yaml.changes 2019-08-14 11:37:18.512697544 +0200 +++ /work/SRC/openSUSE:Factory/.python-ruamel.yaml.new.7948/python-ruamel.yaml.changes 2019-09-11 10:23:01.755491139 +0200 @@ -1,0 +2,11 @@ +Fri Sep 6 06:54:38 UTC 2019 - Ondřej Súkup <mimi...@gmail.com> + +- update to 0.16.5 + * allow for YAML(typ=['unsafe', 'pytypes']) + * fix output of TAG directives with # + * move setting of version based on YAML directive to scanner, allowing to + check for file version during TAG directive scanning + * preserve YAML and TAG directives on roundtrip, correctly output # in URL + for YAML 1.2 + +------------------------------------------------------------------- Old: ---- ruamel.yaml-0.16.1.tar.gz New: ---- ruamel.yaml-0.16.5.tar.gz ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Other differences: ------------------ ++++++ python-ruamel.yaml.spec ++++++ --- /var/tmp/diff_new_pack.e6MXJf/_old 2019-09-11 10:23:02.867491000 +0200 +++ /var/tmp/diff_new_pack.e6MXJf/_new 2019-09-11 10:23:02.871491000 +0200 @@ -18,7 +18,7 @@ %{?!python_module:%define python_module() python-%{**} python3-%{**}} Name: python-ruamel.yaml -Version: 0.16.1 +Version: 0.16.5 Release: 0 Summary: Python YAML parser License: MIT ++++++ ruamel.yaml-0.16.1.tar.gz -> ruamel.yaml-0.16.5.tar.gz ++++++ diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/ruamel.yaml-0.16.1/CHANGES new/ruamel.yaml-0.16.5/CHANGES --- old/ruamel.yaml-0.16.1/CHANGES 2019-08-08 08:20:25.000000000 +0200 +++ new/ruamel.yaml-0.16.5/CHANGES 2019-08-18 20:23:30.000000000 +0200 @@ -1,3 +1,20 @@ +[0, 16, 5]: 2019-08-18 + - allow for ``YAML(typ=['unsafe', 'pytypes'])`` + +[0, 16, 4]: 2019-08-16 + - fix output of TAG directives with # (reported by `Thomas Smith + <https://bitbucket.org/%7Bd4c57a72-f041-4843-8217-b4d48b6ece2f%7D/>`__) + + +[0, 16, 3]: 2019-08-15 + - move setting of version based on YAML directive to scanner, allowing to + check for file version during TAG directive scanning + +[0, 16, 2]: 2019-08-15 + - preserve YAML and TAG directives on roundtrip, correctly output # + in URL for YAML 1.2 (both reported by `Thomas Smith + <https://bitbucket.org/%7Bd4c57a72-f041-4843-8217-b4d48b6ece2f%7D/>`__) + [0, 16, 1]: 2019-08-08 - Force the use of new version of ruamel.yaml.clib (reported by `Alex Joz <https://bitbucket.org/%7B9af55900-2534-4212-976c-61339b6ffe14%7D/>`__) diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/ruamel.yaml-0.16.1/PKG-INFO new/ruamel.yaml-0.16.5/PKG-INFO --- old/ruamel.yaml-0.16.1/PKG-INFO 2019-08-08 08:22:18.000000000 +0200 +++ new/ruamel.yaml-0.16.5/PKG-INFO 2019-08-18 20:27:45.000000000 +0200 @@ -1,6 +1,6 @@ Metadata-Version: 1.1 Name: ruamel.yaml -Version: 0.16.1 +Version: 0.16.5 Summary: ruamel.yaml is a YAML parser/emitter that supports roundtrip preservation of comments, seq/map flow style, and map key order Home-page: https://bitbucket.org/ruamel/yaml Author: Anthon van der Neut @@ -12,8 +12,8 @@ ``ruamel.yaml`` is a YAML 1.2 loader/dumper package for Python. - :version: 0.16.1 - :updated: 2019-08-08 + :version: 0.16.5 + :updated: 2019-08-18 :documentation: http://yaml.readthedocs.io :repository: https://bitbucket.org/ruamel/yaml :pypi: https://pypi.org/project/ruamel.yaml/ @@ -62,6 +62,25 @@ .. should insert NEXT: at the beginning of line for next key (with empty line) + 0.16.5 (2019-08-18): + - allow for ``YAML(typ=['unsafe', 'pytypes'])`` + + 0.16.4 (2019-08-16): + - fix output of TAG directives with # (reported by `Thomas Smith + <https://bitbucket.org/%7Bd4c57a72-f041-4843-8217-b4d48b6ece2f%7D/>`__) + + + 0.16.3 (2019-08-15): + - split construct_object + - change stuff back to keep mypy happy + - move setting of version based on YAML directive to scanner, allowing to + check for file version during TAG directive scanning + + 0.16.2 (2019-08-15): + - preserve YAML and TAG directives on roundtrip, correctly output # + in URL for YAML 1.2 (both reported by `Thomas Smith + <https://bitbucket.org/%7Bd4c57a72-f041-4843-8217-b4d48b6ece2f%7D/>`__) + 0.16.1 (2019-08-08): - Force the use of new version of ruamel.yaml.clib (reported by `Alex Joz <https://bitbucket.org/%7B9af55900-2534-4212-976c-61339b6ffe14%7D/>`__) diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/ruamel.yaml-0.16.1/README.rst new/ruamel.yaml-0.16.5/README.rst --- old/ruamel.yaml-0.16.1/README.rst 2019-08-08 08:20:25.000000000 +0200 +++ new/ruamel.yaml-0.16.5/README.rst 2019-08-18 20:23:30.000000000 +0200 @@ -4,8 +4,8 @@ ``ruamel.yaml`` is a YAML 1.2 loader/dumper package for Python. -:version: 0.16.1 -:updated: 2019-08-08 +:version: 0.16.5 +:updated: 2019-08-18 :documentation: http://yaml.readthedocs.io :repository: https://bitbucket.org/ruamel/yaml :pypi: https://pypi.org/project/ruamel.yaml/ @@ -54,6 +54,25 @@ .. should insert NEXT: at the beginning of line for next key (with empty line) +0.16.5 (2019-08-18): + - allow for ``YAML(typ=['unsafe', 'pytypes'])`` + +0.16.4 (2019-08-16): + - fix output of TAG directives with # (reported by `Thomas Smith + <https://bitbucket.org/%7Bd4c57a72-f041-4843-8217-b4d48b6ece2f%7D/>`__) + + +0.16.3 (2019-08-15): + - split construct_object + - change stuff back to keep mypy happy + - move setting of version based on YAML directive to scanner, allowing to + check for file version during TAG directive scanning + +0.16.2 (2019-08-15): + - preserve YAML and TAG directives on roundtrip, correctly output # + in URL for YAML 1.2 (both reported by `Thomas Smith + <https://bitbucket.org/%7Bd4c57a72-f041-4843-8217-b4d48b6ece2f%7D/>`__) + 0.16.1 (2019-08-08): - Force the use of new version of ruamel.yaml.clib (reported by `Alex Joz <https://bitbucket.org/%7B9af55900-2534-4212-976c-61339b6ffe14%7D/>`__) diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/ruamel.yaml-0.16.1/__init__.py new/ruamel.yaml-0.16.5/__init__.py --- old/ruamel.yaml-0.16.1/__init__.py 2019-08-08 08:21:56.000000000 +0200 +++ new/ruamel.yaml-0.16.5/__init__.py 2019-08-18 20:24:22.000000000 +0200 @@ -7,8 +7,8 @@ _package_data = dict( full_package_name='ruamel.yaml', - version_info=(0, 16, 1), - __version__='0.16.1', + version_info=(0, 16, 5), + __version__='0.16.5', author='Anthon van der Neut', author_email='a.van.der.n...@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 -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/ruamel.yaml-0.16.1/anchor.py new/ruamel.yaml-0.16.5/anchor.py --- old/ruamel.yaml-0.16.1/anchor.py 2018-11-15 15:46:06.000000000 +0100 +++ new/ruamel.yaml-0.16.5/anchor.py 2019-08-18 20:21:18.000000000 +0200 @@ -11,3 +11,7 @@ # type: () -> None self.value = None self.always_dump = False + + def __repr__(self): + ad = ", (always dump)" if self.always_dump else "" + return "Anchor({!r}{})".format(self.value, ad) diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/ruamel.yaml-0.16.1/comments.py new/ruamel.yaml-0.16.5/comments.py --- old/ruamel.yaml-0.16.1/comments.py 2019-07-09 12:58:32.000000000 +0200 +++ new/ruamel.yaml-0.16.5/comments.py 2019-08-15 22:21:45.000000000 +0200 @@ -12,7 +12,8 @@ import copy -from ruamel.yaml.compat import ordereddict, PY2, string_types, MutableSliceableSequence +from ruamel.yaml.compat import ordereddict # type: ignore +from ruamel.yaml.compat import PY2, string_types, MutableSliceableSequence from ruamel.yaml.scalarstring import ScalarString from ruamel.yaml.anchor import Anchor @@ -159,7 +160,7 @@ def add_idx_line_col(self, key, data): # type: (Any, Any) -> None if self.data is None: - self.data = {} # type: Dict[Any, Any] + self.data = {} self.data[key] = data @@ -351,7 +352,7 @@ self.tag.value = value def copy_attributes(self, t, memo=None): - # type: (Any, bool) -> None + # type: (Any, Any) -> None # fmt: off for a in [Comment.attrib, Format.attrib, LineCol.attrib, Anchor.attrib, Tag.attrib, merge_attrib]: @@ -629,7 +630,7 @@ yield self._mapping[key] -class CommentedMap(ordereddict, CommentedBase): +class CommentedMap(ordereddict, CommentedBase): # type: ignore __slots__ = (Comment.attrib, '_ok', '_ref') def __init__(self, *args, **kw): @@ -695,7 +696,7 @@ self.ca.comment[1] = pre_comments return pre_comments - def update(self, vals): # type: ignore + def update(self, vals): # type: (Any) -> None try: ordereddict.update(self, vals) @@ -828,7 +829,7 @@ def __len__(self): # type: () -> int - return ordereddict.__len__(self) + return int(ordereddict.__len__(self)) def __eq__(self, other): # type: (Any) -> bool diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/ruamel.yaml-0.16.1/compat.py new/ruamel.yaml-0.16.5/compat.py --- old/ruamel.yaml-0.16.1/compat.py 2019-07-25 21:45:21.000000000 +0200 +++ new/ruamel.yaml-0.16.5/compat.py 2019-08-15 22:17:06.000000000 +0200 @@ -13,7 +13,8 @@ # fmt: off if False: # MYPY - from typing import Any, Dict, Optional, List, Union, BinaryIO, IO, Text, Tuple, Optional # NOQA + from typing import Any, Dict, Optional, List, Union, BinaryIO, IO, Text, Tuple # NOQA + from typing import Optional # NOQA # fmt: on _DEFAULT_YAML_VERSION = (1, 2) @@ -106,7 +107,7 @@ binary_type = str # to allow importing - unichr = unichr # type: ignore + unichr = unichr from StringIO import StringIO as _StringIO StringIO = _StringIO @@ -122,7 +123,7 @@ # StreamType = Union[BinaryIO, IO[str], StringIO] # type: ignore StreamType = Any - StreamTextType = Union[Text, StreamType] + StreamTextType = StreamType # Union[Text, StreamType] VersionType = Union[List[int], str, Tuple[int, int]] if PY3: diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/ruamel.yaml-0.16.1/constructor.py new/ruamel.yaml-0.16.5/constructor.py --- old/ruamel.yaml-0.16.1/constructor.py 2019-04-21 17:26:25.000000000 +0200 +++ new/ruamel.yaml-0.16.5/constructor.py 2019-08-15 22:31:29.000000000 +0200 @@ -16,8 +16,10 @@ from ruamel.yaml.nodes import * # NOQA from ruamel.yaml.nodes import (SequenceNode, MappingNode, ScalarNode) from ruamel.yaml.compat import (utf8, builtins_module, to_str, PY2, PY3, # NOQA - ordereddict, text_type, nprint, nprintf, version_tnf, - Hashable, MutableSequence, MutableMapping) + text_type, nprint, nprintf, version_tnf) +from ruamel.yaml.compat import ordereddict, Hashable, MutableSequence # type: ignore +from ruamel.yaml.compat import MutableMapping # type: ignore + from ruamel.yaml.comments import * # NOQA from ruamel.yaml.comments import (CommentedMap, CommentedOrderedMap, CommentedSet, CommentedKeySeq, CommentedSeq, TaggedScalar, @@ -141,19 +143,31 @@ # None, None, 'found unconstructable recursive node', node.start_mark # ) self.recursive_objects[node] = None + data = self.construct_non_recursive_object(node) + + self.constructed_objects[node] = data + del self.recursive_objects[node] + if deep: + self.deep_construct = old_deep + return data + + def construct_non_recursive_object(self, node, tag=None): + # type: (Any, Optional[str]) -> Any constructor = None # type: Any tag_suffix = None - if node.tag in self.yaml_constructors: - constructor = self.yaml_constructors[node.tag] + if tag is None: + tag = node.tag + if tag in self.yaml_constructors: + constructor = self.yaml_constructors[tag] else: for tag_prefix in self.yaml_multi_constructors: - if node.tag.startswith(tag_prefix): - tag_suffix = node.tag[len(tag_prefix) :] + if tag.startswith(tag_prefix): + tag_suffix = tag[len(tag_prefix) :] constructor = self.yaml_multi_constructors[tag_prefix] break else: if None in self.yaml_multi_constructors: - tag_suffix = node.tag + tag_suffix = tag constructor = self.yaml_multi_constructors[None] elif None in self.yaml_constructors: constructor = self.yaml_constructors[None] @@ -175,10 +189,6 @@ pass else: self.state_generators.append(generator) - self.constructed_objects[node] = data - del self.recursive_objects[node] - if deep: - self.deep_construct = old_deep return data def construct_scalar(self, node): diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/ruamel.yaml-0.16.1/emitter.py new/ruamel.yaml-0.16.5/emitter.py --- old/ruamel.yaml-0.16.1/emitter.py 2019-07-20 12:24:07.000000000 +0200 +++ new/ruamel.yaml-0.16.5/emitter.py 2019-08-16 07:18:20.000000000 +0200 @@ -169,7 +169,7 @@ self.prefixed_colon = self.colon if prefix_colon is None else prefix_colon + self.colon # single entry mappings in flow sequence self.brace_single_entry_mapping_in_flow_sequence = ( - brace_single_entry_mapping_in_flow_sequence + brace_single_entry_mapping_in_flow_sequence ) # NOQA # Formatting details. @@ -204,6 +204,8 @@ self.analysis = None # type: Any self.style = None # type: Any + self.scalar_after_indicator = True # write a scalar on the same line as `---` + @property def stream(self): # type: () -> Any @@ -239,7 +241,7 @@ def dispose(self): # type: () -> None # Reset the state attributes (to clear self-references) - self.states = [] # type: List[Any] + self.states = [] self.state = None def emit(self, event): @@ -408,6 +410,12 @@ and self.sequence_context ): self.sequence_context = False + if ( + root + and isinstance(self.event, ScalarEvent) + and not self.scalar_after_indicator + ): + self.write_indent() self.process_tag() if isinstance(self.event, ScalarEvent): # nprint('@', self.indention, self.no_newline, self.column) @@ -912,14 +920,14 @@ start = end = 0 if prefix[0] == u'!': end = 1 + ch_set = u"-;/?:@&=+$,_.~*'()[]" + if self.dumper: + version = getattr(self.dumper, 'version', (1, 2)) + if version is None or version >= (1, 2): + ch_set += u'#' while end < len(prefix): ch = prefix[end] - if ( - u'0' <= ch <= u'9' - or u'A' <= ch <= u'Z' - or u'a' <= ch <= u'z' - or ch in u"-;/?!:@&=+$,_.~*'()[]" - ): + if u'0' <= ch <= u'9' or u'A' <= ch <= u'Z' or u'a' <= ch <= u'z' or ch in ch_set: end += 1 else: if start < end: @@ -947,13 +955,18 @@ suffix = tag[len(prefix) :] chunks = [] # type: List[Any] start = end = 0 + ch_set = u"-;/?:@&=+$,_.~*'()[]" + if self.dumper: + version = getattr(self.dumper, 'version', (1, 2)) + if version is None or version >= (1, 2): + ch_set += u'#' while end < len(suffix): ch = suffix[end] if ( u'0' <= ch <= u'9' or u'A' <= ch <= u'Z' or u'a' <= ch <= u'z' - or ch in u"-;/?:@&=+$,_.~*'()[]" + or ch in ch_set or (ch == u'!' and handle != u'!') ): end += 1 @@ -1581,7 +1594,7 @@ self.stream.write(data) start = end elif breaks: - if ch not in u'\n\x85\u2028\u2029': + if ch not in u'\n\x85\u2028\u2029': # type: ignore if text[start] == u'\n': self.write_line_break() for br in text[start:end]: diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/ruamel.yaml-0.16.1/error.py new/ruamel.yaml-0.16.5/error.py --- old/ruamel.yaml-0.16.1/error.py 2019-07-17 09:39:54.000000000 +0200 +++ new/ruamel.yaml-0.16.5/error.py 2019-08-15 22:11:35.000000000 +0200 @@ -40,6 +40,7 @@ return where def __eq__(self, other): + # type: (Any) -> bool if self.line != other.line or self.column != other.column: return False if self.name != other.name or self.index != other.index: @@ -47,6 +48,7 @@ return True def __ne__(self, other): + # type: (Any) -> bool return not self.__eq__(other) diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/ruamel.yaml-0.16.1/main.py new/ruamel.yaml-0.16.5/main.py --- old/ruamel.yaml-0.16.1/main.py 2019-04-15 20:39:59.000000000 +0200 +++ new/ruamel.yaml-0.16.5/main.py 2019-08-18 18:32:50.000000000 +0200 @@ -35,7 +35,7 @@ from ruamel.yaml.loader import Loader as UnsafeLoader if False: # MYPY - from typing import List, Set, Dict, Union, Any, Callable # NOQA + from typing import List, Set, Dict, Union, Any, Callable, Optional, Text # NOQA from ruamel.yaml.compat import StreamType, StreamTextType, VersionType # NOQA if PY3: @@ -78,7 +78,7 @@ 'one was given ({!r})'.format(self.__class__.__name__, _kw) ) - self.typ = 'rt' if typ is None else typ + self.typ = ['rt'] if typ is None else (typ if isinstance(typ, list) else [typ]) self.pure = pure # self._input = input @@ -95,18 +95,11 @@ self.Scanner = None # type: Any self.Serializer = None # type: Any self.default_flow_style = None # type: Any - if self.typ == 'rt': - self.default_flow_style = False - # no optimized rt-dumper yet - self.Emitter = ruamel.yaml.emitter.Emitter # type: Any - self.Serializer = ruamel.yaml.serializer.Serializer # type: Any - self.Representer = ruamel.yaml.representer.RoundTripRepresenter # type: Any - self.Scanner = ruamel.yaml.scanner.RoundTripScanner # type: Any - # no optimized rt-parser yet - self.Parser = ruamel.yaml.parser.RoundTripParser # type: Any - self.Composer = ruamel.yaml.composer.Composer # type: Any - self.Constructor = ruamel.yaml.constructor.RoundTripConstructor # type: Any - elif self.typ == 'safe': + typ_found = 1 + setup_rt = False + if 'rt' in self.typ: + setup_rt = True + elif 'safe' in self.typ: self.Emitter = ( ruamel.yaml.emitter.Emitter if pure or CEmitter is None else CEmitter ) @@ -114,13 +107,13 @@ self.Parser = ruamel.yaml.parser.Parser if pure or CParser is None else CParser self.Composer = ruamel.yaml.composer.Composer self.Constructor = ruamel.yaml.constructor.SafeConstructor - elif self.typ == 'base': + elif 'base' in self.typ: self.Emitter = ruamel.yaml.emitter.Emitter self.Representer = ruamel.yaml.representer.BaseRepresenter self.Parser = ruamel.yaml.parser.Parser if pure or CParser is None else CParser self.Composer = ruamel.yaml.composer.Composer self.Constructor = ruamel.yaml.constructor.BaseConstructor - elif self.typ == 'unsafe': + elif 'unsafe' in self.typ: self.Emitter = ( ruamel.yaml.emitter.Emitter if pure or CEmitter is None else CEmitter ) @@ -129,14 +122,20 @@ self.Composer = ruamel.yaml.composer.Composer self.Constructor = ruamel.yaml.constructor.Constructor else: - for module in self.plug_ins: - if getattr(module, 'typ', None) == self.typ: - module.init_typ(self) - break - else: - raise NotImplementedError( - 'typ "{}"not recognised (need to install plug-in?)'.format(self.typ) - ) + setup_rt = True + typ_found = 0 + if setup_rt: + self.default_flow_style = False + # no optimized rt-dumper yet + self.Emitter = ruamel.yaml.emitter.Emitter # type: Any + self.Serializer = ruamel.yaml.serializer.Serializer + self.Representer = ruamel.yaml.representer.RoundTripRepresenter # type: Any + self.Scanner = ruamel.yaml.scanner.RoundTripScanner + # no optimized rt-parser yet + self.Parser = ruamel.yaml.parser.RoundTripParser # type: Any + self.Composer = ruamel.yaml.composer.Composer # type: Any + self.Constructor = ruamel.yaml.constructor.RoundTripConstructor # type: Any + del setup_rt self.stream = None self.canonical = None self.old_indent = None @@ -161,8 +160,19 @@ self.tags = None self.default_style = None self.top_level_block_style_scalar_no_indent_error_1_1 = False + # directives end indicator with single scalar document + self.scalar_after_indicator = None # [a, b: 1, c: {d: 2}] vs. [a, {b: 1}, {c: {d: 2}}] self.brace_single_entry_mapping_in_flow_sequence = False + for module in self.plug_ins: + if getattr(module, 'typ', None) in self.typ: + typ_found += 1 + module.init_typ(self) + break + if typ_found == 0: + raise NotImplementedError( + 'typ "{}"not recognised (need to install plug-in?)'.format(self.typ) + ) @property def reader(self): @@ -324,7 +334,7 @@ """ if not hasattr(stream, 'read') and hasattr(stream, 'open'): # pathlib.Path() instance - with stream.open('rb') as fp: # type: ignore + with stream.open('rb') as fp: return self.load(fp) constructor, parser = self.get_constructor_parser(stream) try: @@ -349,7 +359,7 @@ ) if not hasattr(stream, 'read') and hasattr(stream, 'open'): # pathlib.Path() instance - with stream.open('r') as fp: # type: ignore + with stream.open('r') as fp: for d in self.load_all(fp, _kw=enforce): yield d return @@ -518,18 +528,22 @@ self.Serializer = ruamel.yaml.serializer.Serializer self.emitter.stream = stream self.emitter.top_level_colon_align = tlca + if self.scalar_after_indicator is not None: + self.emitter.scalar_after_indicator = self.scalar_after_indicator return self.serializer, self.representer, self.emitter if self.Serializer is not None: # cannot set serializer with CEmitter self.Emitter = ruamel.yaml.emitter.Emitter self.emitter.stream = stream self.emitter.top_level_colon_align = tlca + if self.scalar_after_indicator is not None: + self.emitter.scalar_after_indicator = self.scalar_after_indicator return self.serializer, self.representer, self.emitter # C routines rslvr = ( ruamel.yaml.resolver.BaseResolver - if self.typ == 'base' + if 'base' in self.typ else ruamel.yaml.resolver.Resolver ) @@ -595,7 +609,7 @@ # basic types def map(self, **kw): # type: (Any) -> Any - if self.typ == 'rt': + if 'rt' in self.typ: from ruamel.yaml.comments import CommentedMap return CommentedMap(**kw) @@ -604,7 +618,7 @@ def seq(self, *args): # type: (Any) -> Any - if self.typ == 'rt': + if 'rt' in self.typ: from ruamel.yaml.comments import CommentedSeq return CommentedSeq(*args) diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/ruamel.yaml-0.16.1/parser.py new/ruamel.yaml-0.16.5/parser.py --- old/ruamel.yaml-0.16.1/parser.py 2019-05-15 23:19:33.000000000 +0200 +++ new/ruamel.yaml-0.16.5/parser.py 2019-08-15 17:07:38.000000000 +0200 @@ -109,7 +109,6 @@ # 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] @@ -219,6 +218,9 @@ ) token = self.scanner.get_token() end_mark = token.end_mark + # if self.loader is not None and \ + # end_mark.line != self.scanner.peek_token().start_mark.line: + # self.loader.scalar_after_indicator = False event = DocumentStartEvent( start_mark, end_mark, explicit=True, version=version, tags=tags ) # type: Any @@ -266,12 +268,12 @@ 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 ) @@ -283,7 +285,7 @@ '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: @@ -292,9 +294,15 @@ ) 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 = yaml_version + if self.loader.tags is None: + self.loader.tags = {} + for k in self.tag_handles: + self.loader.tags[k] = self.tag_handles[k] for key in self.DEFAULT_TAGS: if key not in self.tag_handles: self.tag_handles[key] = self.DEFAULT_TAGS[key] diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/ruamel.yaml-0.16.1/representer.py new/ruamel.yaml-0.16.5/representer.py --- old/ruamel.yaml-0.16.1/representer.py 2019-07-17 09:19:33.000000000 +0200 +++ new/ruamel.yaml-0.16.5/representer.py 2019-08-15 22:28:42.000000000 +0200 @@ -5,7 +5,8 @@ from ruamel.yaml.error import * # NOQA from ruamel.yaml.nodes import * # NOQA -from ruamel.yaml.compat import text_type, binary_type, to_unicode, PY2, PY3, ordereddict +from ruamel.yaml.compat import text_type, binary_type, to_unicode, PY2, PY3 +from ruamel.yaml.compat import ordereddict # type: ignore from ruamel.yaml.compat import nprint, nprintf # NOQA from ruamel.yaml.scalarstring import ( LiteralScalarString, @@ -83,8 +84,8 @@ # type: (Any) -> None node = self.represent_data(data) self.serializer.serialize(node) - self.represented_objects = {} # type: Dict[Any, Any] - self.object_keeper = [] # type: List[Any] + self.represented_objects = {} + self.object_keeper = [] self.alias_key = None def represent_data(self, data): diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/ruamel.yaml-0.16.1/resolver.py new/ruamel.yaml-0.16.5/resolver.py --- old/ruamel.yaml-0.16.1/resolver.py 2019-04-21 17:24:04.000000000 +0200 +++ new/ruamel.yaml-0.16.5/resolver.py 2019-08-15 19:21:34.000000000 +0200 @@ -383,7 +383,7 @@ 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'): diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/ruamel.yaml-0.16.1/ruamel.yaml.egg-info/PKG-INFO new/ruamel.yaml-0.16.5/ruamel.yaml.egg-info/PKG-INFO --- old/ruamel.yaml-0.16.1/ruamel.yaml.egg-info/PKG-INFO 2019-08-08 08:22:17.000000000 +0200 +++ new/ruamel.yaml-0.16.5/ruamel.yaml.egg-info/PKG-INFO 2019-08-18 20:27:44.000000000 +0200 @@ -1,6 +1,6 @@ Metadata-Version: 1.1 Name: ruamel.yaml -Version: 0.16.1 +Version: 0.16.5 Summary: ruamel.yaml is a YAML parser/emitter that supports roundtrip preservation of comments, seq/map flow style, and map key order Home-page: https://bitbucket.org/ruamel/yaml Author: Anthon van der Neut @@ -12,8 +12,8 @@ ``ruamel.yaml`` is a YAML 1.2 loader/dumper package for Python. - :version: 0.16.1 - :updated: 2019-08-08 + :version: 0.16.5 + :updated: 2019-08-18 :documentation: http://yaml.readthedocs.io :repository: https://bitbucket.org/ruamel/yaml :pypi: https://pypi.org/project/ruamel.yaml/ @@ -62,6 +62,25 @@ .. should insert NEXT: at the beginning of line for next key (with empty line) + 0.16.5 (2019-08-18): + - allow for ``YAML(typ=['unsafe', 'pytypes'])`` + + 0.16.4 (2019-08-16): + - fix output of TAG directives with # (reported by `Thomas Smith + <https://bitbucket.org/%7Bd4c57a72-f041-4843-8217-b4d48b6ece2f%7D/>`__) + + + 0.16.3 (2019-08-15): + - split construct_object + - change stuff back to keep mypy happy + - move setting of version based on YAML directive to scanner, allowing to + check for file version during TAG directive scanning + + 0.16.2 (2019-08-15): + - preserve YAML and TAG directives on roundtrip, correctly output # + in URL for YAML 1.2 (both reported by `Thomas Smith + <https://bitbucket.org/%7Bd4c57a72-f041-4843-8217-b4d48b6ece2f%7D/>`__) + 0.16.1 (2019-08-08): - Force the use of new version of ruamel.yaml.clib (reported by `Alex Joz <https://bitbucket.org/%7B9af55900-2534-4212-976c-61339b6ffe14%7D/>`__) diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/ruamel.yaml-0.16.1/scalarstring.py new/ruamel.yaml-0.16.5/scalarstring.py --- old/ruamel.yaml-0.16.1/scalarstring.py 2018-12-27 22:57:56.000000000 +0100 +++ new/ruamel.yaml-0.16.5/scalarstring.py 2019-08-15 22:19:45.000000000 +0200 @@ -129,7 +129,8 @@ map[':'] = SingleQuotedScalarString walk_tree(data, map=map) """ - from ruamel.yaml.compat import string_types, MutableMapping, MutableSequence + from ruamel.yaml.compat import string_types + from ruamel.yaml.compat import MutableMapping, MutableSequence # type: ignore if map is None: map = {'\n': preserve_literal} diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/ruamel.yaml-0.16.1/scanner.py new/ruamel.yaml-0.16.5/scanner.py --- old/ruamel.yaml-0.16.1/scanner.py 2019-08-08 07:57:41.000000000 +0200 +++ new/ruamel.yaml-0.16.5/scanner.py 2019-08-16 07:17:21.000000000 +0200 @@ -81,6 +81,7 @@ self.loader._scanner = self self.reset_scanner() self.first_time = False + self.yaml_version = None # type: Any @property def flow_level(self): @@ -155,10 +156,10 @@ @property def scanner_processing_version(self): # prefix until un-composited - # type: () -> VersionType + # type: () -> Any if hasattr(self.loader, 'typ'): - return self.loader.resolver.processing_version # type: ignore - return self.loader.processing_version # type: ignore + return self.loader.resolver.processing_version + return self.loader.processing_version # Public methods. @@ -453,7 +454,7 @@ # Reset simple keys. self.remove_possible_simple_key() self.allow_simple_key = False - self.possible_simple_keys = {} # type: Dict[Any, Any] + self.possible_simple_keys = {} # Read the token. mark = self.reader.get_mark() # Add STREAM-END. @@ -955,7 +956,8 @@ "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 @@ -1675,7 +1677,7 @@ or 'A' <= ch <= 'Z' or 'a' <= ch <= 'z' or ch in "-;/?:@&=+$,_.!~*'()[]%" - or ((self.scanner_processing_version > (1, 1)) and ch == "#") + or ((self.scanner_processing_version > (1, 1)) and ch == '#') ): if ch == '%': chunks.append(self.reader.prefix(length)) diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/ruamel.yaml-0.16.1/setup.py new/ruamel.yaml-0.16.5/setup.py --- old/ruamel.yaml-0.16.1/setup.py 2019-08-08 08:20:19.000000000 +0200 +++ new/ruamel.yaml-0.16.5/setup.py 2019-08-18 20:23:24.000000000 +0200 @@ -1,6 +1,6 @@ # # header # coding: utf-8 -# dd: 20190807 +# dd: 20190815 from __future__ import print_function, absolute_import, division, unicode_literals @@ -20,8 +20,13 @@ from setuptools.command import install_lib # NOQA from setuptools.command.sdist import sdist as _sdist # NOQA -from setuptools.namespaces import Installer as NameSpaceInstaller # NOQA - +try: + from setuptools.namespaces import Installer as NameSpaceInstaller # NOQA +except ImportError: + msg = ('You should use the latest setuptools. The namespaces.py file that this setup.py' + ' uses was added in setuptools 28.7.0 (Oct 2016)') + print(msg) + sys.exit() if __name__ != '__main__': raise NotImplementedError('should never include setup.py') @@ -30,9 +35,6 @@ full_package_name = None -if __name__ != '__main__': - raise NotImplementedError('should never include setup.py') - if sys.version_info < (3,): string_type = basestring else: diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/ruamel.yaml-0.16.1/tokens.py new/ruamel.yaml-0.16.5/tokens.py --- old/ruamel.yaml-0.16.1/tokens.py 2019-07-17 09:27:51.000000000 +0200 +++ new/ruamel.yaml-0.16.5/tokens.py 2019-08-15 22:12:53.000000000 +0200 @@ -272,6 +272,7 @@ return 'CommentToken({})'.format(v) def __eq__(self, other): + # type: (Any) -> bool if self.start_mark != other.start_mark: return False if self.end_mark != other.end_mark: @@ -281,4 +282,5 @@ return True def __ne__(self, other): + # type: (Any) -> bool return not self.__eq__(other) diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/ruamel.yaml-0.16.1/util.py new/ruamel.yaml-0.16.5/util.py --- old/ruamel.yaml-0.16.1/util.py 2019-07-14 20:59:54.000000000 +0200 +++ new/ruamel.yaml-0.16.5/util.py 2019-08-15 22:08:26.000000000 +0200 @@ -77,9 +77,10 @@ return idx if isinstance(stream, text_type): - yaml_str = stream + yaml_str = stream # type: Any elif isinstance(stream, binary_type): - yaml_str = stream.decode('utf-8') # most likely, but the Reader checks BOM for this + # most likely, but the Reader checks BOM for this + yaml_str = stream.decode('utf-8') else: yaml_str = stream.read() map_indent = None