diff options
-rw-r--r-- | README.rst | 6 | ||||
-rw-r--r-- | __init__.py | 20 | ||||
-rw-r--r-- | comments.py | 13 | ||||
-rw-r--r-- | compat.py | 14 | ||||
-rw-r--r-- | composer.py | 8 | ||||
-rw-r--r-- | constructor.py | 25 | ||||
-rw-r--r-- | cyaml.py | 27 | ||||
-rw-r--r-- | dumper.py | 17 | ||||
-rw-r--r-- | emitter.py | 13 | ||||
-rw-r--r-- | error.py | 7 | ||||
-rw-r--r-- | loader.py | 23 | ||||
-rw-r--r-- | main.py | 19 | ||||
-rw-r--r-- | parser.py | 8 | ||||
-rw-r--r-- | reader.py | 8 | ||||
-rw-r--r-- | representer.py | 31 | ||||
-rw-r--r-- | resolver.py | 17 | ||||
-rw-r--r-- | scalarstring.py | 7 | ||||
-rw-r--r-- | scanner.py | 12 | ||||
-rw-r--r-- | serializer.py | 8 | ||||
-rw-r--r-- | setup.py | 18 | ||||
-rw-r--r-- | tox.ini | 2 |
21 files changed, 131 insertions, 172 deletions
@@ -18,7 +18,11 @@ ChangeLog :: - 0.11.15 (2016-XX-XX): + 0.12.0 (2016-08-16): + - drop support for Python 2.6 + - include initial Type information (inspired by M. Crusoe) + + 0.11.15 (2016-08-07): - Change to prevent FutureWarning in NumPy, as reported by tgehring ("comparison to None will result in an elementwise object comparison in the future") diff --git a/__init__.py b/__init__.py index b77032f..e37b3b2 100644 --- a/__init__.py +++ b/__init__.py @@ -9,15 +9,17 @@ from __future__ import absolute_import _package_data = dict( full_package_name="ruamel.yaml", - version_info=(0, 11, 15), + version_info=(0, 12, 0), 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 entry_points=None, install_requires=dict( any=[], - py26=["ruamel.ordereddict"], - py27=["ruamel.ordereddict"] + py33=["typing"], + py34=["typing"], + py27=["ruamel.ordereddict", "typing"], + pypy=["typing"], ), ext_modules=[dict( name="_ruamel_yaml", @@ -29,7 +31,6 @@ _package_data = dict( ) ], classifiers=[ - "Programming Language :: Python :: 2.6", "Programming Language :: Python :: 2.7", "Programming Language :: Python :: 3.3", "Programming Language :: Python :: 3.4", @@ -43,6 +44,7 @@ _package_data = dict( windows_wheels=True, read_the_docs='yaml', many_linux='libyaml-devel', + supported=[(2, 7), (3, 3)], # minimum ) @@ -64,7 +66,6 @@ def _convert_version(tup): ret_val += '.post' if first_letter == 'p' else '.dev' return ret_val - # < version_info = _package_data['version_info'] __version__ = _convert_version(version_info) @@ -72,14 +73,9 @@ __version__ = _convert_version(version_info) del _convert_version try: - from .cyaml import * # NOQA + from .cyaml import * # NOQA __with_libyaml__ = True except (ImportError, ValueError): # for Jython __with_libyaml__ = False - -# body extracted to main.py -try: - from .main import * # NOQA -except ImportError: - from ruamel.yaml.main import * # NOQA +from ruamel.yaml.main import * # NOQA diff --git a/comments.py b/comments.py index 4a99931..c4bffce 100644 --- a/comments.py +++ b/comments.py @@ -1,7 +1,6 @@ # coding: utf-8 -from __future__ import absolute_import -from __future__ import print_function +from __future__ import absolute_import, print_function """ stuff to deal with comments and formatting on dict/list/ordereddict/set @@ -9,17 +8,13 @@ these are not really related, formatting could be factored out as a separate base """ -from collections import MutableSet +from collections import MutableSet # type: ignore + +from ruamel.yaml.compat import ordereddict __all__ = ["CommentedSeq", "CommentedMap", "CommentedOrderedMap", "CommentedSet", 'comment_attrib', 'merge_attrib'] - -try: - from .compat import ordereddict -except ImportError: - from ruamel.yaml.compat import ordereddict - comment_attrib = '_yaml_comment' format_attrib = '_yaml_format' line_col_attrib = '_yaml_line_col' @@ -9,15 +9,15 @@ import os import types try: - from ruamel.ordereddict import ordereddict + from ruamel.ordereddict import ordereddict # type: ignore except: try: from collections import OrderedDict except ImportError: - from orderddict import OrderedDict + from orderddict import OrderedDict # type: ignore # to get the right name import ... as ordereddict doesn't do that - class ordereddict(OrderedDict): + class ordereddict(OrderedDict): # type: ignore if not hasattr(OrderedDict, 'insert'): def insert(self, pos, key, value): if pos >= len(self): @@ -64,7 +64,7 @@ if PY3: binary_type = bytes MAXSIZE = sys.maxsize - unichr = chr + unichr = chr # type: ignore import io StringIO = io.StringIO BytesIO = io.BytesIO @@ -76,9 +76,9 @@ else: text_type = unicode binary_type = str - unichr = unichr # to allow importing - import StringIO - StringIO = StringIO.StringIO + unichr = unichr # type: ignore to allow importing + from StringIO import StringIO as _StringIO + StringIO = _StringIO import cStringIO BytesIO = cStringIO.StringIO diff --git a/composer.py b/composer.py index e193fdb..320fb22 100644 --- a/composer.py +++ b/composer.py @@ -4,12 +4,8 @@ from __future__ import absolute_import from __future__ import print_function -try: - from .error import MarkedYAMLError - from .compat import utf8 -except (ImportError, ValueError): # for Jython - from ruamel.yaml.error import MarkedYAMLError - from ruamel.yaml.compat import utf8 +from ruamel.yaml.error import MarkedYAMLError +from ruamel.yaml.compat import utf8 from ruamel.yaml.events import ( StreamStartEvent, StreamEndEvent, MappingStartEvent, MappingEndEvent, diff --git a/constructor.py b/constructor.py index f809df4..acf6341 100644 --- a/constructor.py +++ b/constructor.py @@ -11,19 +11,14 @@ import re import sys import types -try: - from .error import * # NOQA - from .nodes import * # NOQA - from .compat import utf8, builtins_module, to_str, PY2, PY3, ordereddict, text_type - from .comments import * # NOQA - from .scalarstring import * # NOQA -except (ImportError, ValueError): # for Jython - from ruamel.yaml.error import * # NOQA - from ruamel.yaml.nodes import * # NOQA - from ruamel.yaml.compat import (utf8, builtins_module, to_str, PY2, PY3, - ordereddict, text_type) - from ruamel.yaml.comments import * # NOQA - from ruamel.yaml.scalarstring import * # NOQA +from typing import Any, Dict # NOQA + +from ruamel.yaml.error import * # NOQA +from ruamel.yaml.nodes import * # NOQA +from ruamel.yaml.compat import (utf8, builtins_module, to_str, PY2, PY3, + ordereddict, text_type) +from ruamel.yaml.comments import * # NOQA +from ruamel.yaml.scalarstring import * # NOQA __all__ = ['BaseConstructor', 'SafeConstructor', 'Constructor', @@ -36,8 +31,8 @@ class ConstructorError(MarkedYAMLError): class BaseConstructor(object): - yaml_constructors = {} - yaml_multi_constructors = {} + yaml_constructors = {} # type: Dict[Any, Any] + yaml_multi_constructors = {} # type: Dict[Any, Any] def __init__(self, preserve_quotes=None): self.constructed_objects = {} @@ -2,18 +2,12 @@ from __future__ import absolute_import -from _ruamel_yaml import CParser, CEmitter - -try: - from .constructor import * # NOQA - from .serializer import * # NOQA - from .representer import * # NOQA - from .resolver import * # NOQA -except (ImportError, ValueError): # for Jython - from ruamel.yaml.constructor import * # NOQA - from ruamel.yaml.serializer import * # NOQA - from ruamel.yaml.representer import * # NOQA - from ruamel.yaml.resolver import * # NOQA +from _ruamel_yaml import CParser, CEmitter # type: ignore + +from ruamel.yaml.constructor import Constructor, BaseConstructor, SafeConstructor +from ruamel.yaml.serializer import Serializer +from ruamel.yaml.representer import Representer, SafeRepresenter, BaseRepresenter +from ruamel.yaml.resolver import Resolver, BaseResolver __all__ = ['CBaseLoader', 'CSafeLoader', 'CLoader', 'CBaseDumper', 'CSafeDumper', 'CDumper'] @@ -46,7 +40,8 @@ class CBaseDumper(CEmitter, BaseRepresenter, BaseResolver): canonical=None, indent=None, width=None, allow_unicode=None, line_break=None, encoding=None, explicit_start=None, explicit_end=None, - version=None, tags=None): + version=None, tags=None, block_seq_indent=None, + top_level_colon_align=None, prefix_colon=None): CEmitter.__init__(self, stream, canonical=canonical, indent=indent, width=width, encoding=encoding, allow_unicode=allow_unicode, line_break=line_break, @@ -64,7 +59,8 @@ class CSafeDumper(CEmitter, SafeRepresenter, Resolver): canonical=None, indent=None, width=None, allow_unicode=None, line_break=None, encoding=None, explicit_start=None, explicit_end=None, - version=None, tags=None): + version=None, tags=None, block_seq_indent=None, + top_level_colon_align=None, prefix_colon=None): CEmitter.__init__(self, stream, canonical=canonical, indent=indent, width=width, encoding=encoding, allow_unicode=allow_unicode, line_break=line_break, @@ -82,7 +78,8 @@ class CDumper(CEmitter, Serializer, Representer, Resolver): canonical=None, indent=None, width=None, allow_unicode=None, line_break=None, encoding=None, explicit_start=None, explicit_end=None, - version=None, tags=None): + version=None, tags=None, block_seq_indent=None, + top_level_colon_align=None, prefix_colon=None): CEmitter.__init__(self, stream, canonical=canonical, indent=indent, width=width, encoding=encoding, allow_unicode=allow_unicode, line_break=line_break, @@ -2,18 +2,13 @@ from __future__ import absolute_import -__all__ = ['BaseDumper', 'SafeDumper', 'Dumper', 'RoundTripDumper'] +from ruamel.yaml.emitter import Emitter +from ruamel.yaml.serializer import Serializer +from ruamel.yaml.representer import Representer, SafeRepresenter, BaseRepresenter, \ + RoundTripRepresenter +from ruamel.yaml.resolver import Resolver, BaseResolver, VersionedResolver -try: - from .emitter import * # NOQA - from .serializer import * # NOQA - from .representer import * # NOQA - from .resolver import * # NOQA -except (ImportError, ValueError): # for Jython - from ruamel.yaml.emitter import * # NOQA - from ruamel.yaml.serializer import * # NOQA - from ruamel.yaml.representer import * # NOQA - from ruamel.yaml.resolver import * # NOQA +__all__ = ['BaseDumper', 'SafeDumper', 'Dumper', 'RoundTripDumper'] class BaseDumper(Emitter, Serializer, BaseRepresenter, BaseResolver): @@ -10,16 +10,11 @@ from __future__ import print_function # sequence ::= SEQUENCE-START node* SEQUENCE-END # mapping ::= MAPPING-START (node node)* MAPPING-END -__all__ = ['Emitter', 'EmitterError'] +from ruamel.yaml.error import YAMLError +from ruamel.yaml.events import * # NOQA +from ruamel.yaml.compat import utf8, text_type, PY2, nprint, dbg, DBG_EVENT -try: - from .error import YAMLError - from .events import * # NOQA - from .compat import utf8, text_type, PY2, nprint, dbg, DBG_EVENT -except (ImportError, ValueError): # for Jython - from ruamel.yaml.error import YAMLError - from ruamel.yaml.events import * # NOQA - from ruamel.yaml.compat import utf8, text_type, PY2, nprint, dbg, DBG_EVENT +__all__ = ['Emitter', 'EmitterError'] class EmitterError(YAMLError): @@ -2,12 +2,9 @@ from __future__ import absolute_import -__all__ = ['Mark', 'YAMLError', 'MarkedYAMLError'] +from ruamel.yaml.compat import utf8 -try: - from .compat import utf8 -except (ImportError, ValueError): # for Jython - from ruamel.yaml.compat import utf8 +__all__ = ['Mark', 'YAMLError', 'MarkedYAMLError'] class Mark(object): @@ -2,22 +2,15 @@ from __future__ import absolute_import -__all__ = ['BaseLoader', 'SafeLoader', 'Loader', 'RoundTripLoader'] +from ruamel.yaml.reader import Reader +from ruamel.yaml.scanner import Scanner, RoundTripScanner +from ruamel.yaml.parser import Parser, RoundTripParser +from ruamel.yaml.composer import Composer +from ruamel.yaml.constructor import BaseConstructor, SafeConstructor, Constructor, \ + RoundTripConstructor +from ruamel.yaml.resolver import Resolver, BaseResolver, VersionedResolver -try: - from .reader import * # NOQA - from .scanner import * # NOQA - from .parser import * # NOQA - from .composer import * # NOQA - from .constructor import * # NOQA - from .resolver import * # NOQA -except (ImportError, ValueError): # for Jython - from ruamel.yaml.reader import * # NOQA - from ruamel.yaml.scanner import * # NOQA - from ruamel.yaml.parser import * # NOQA - from ruamel.yaml.composer import * # NOQA - from ruamel.yaml.constructor import * # NOQA - from ruamel.yaml.resolver import * # NOQA +__all__ = ['BaseLoader', 'SafeLoader', 'Loader', 'RoundTripLoader'] class BaseLoader(Reader, Scanner, Parser, Composer, BaseConstructor, BaseResolver): @@ -1,20 +1,25 @@ # coding: utf-8 -from __future__ import absolute_import +from __future__ import absolute_import, unicode_literals +from typing import List, Set, Dict, Tuple, Optional, Union, BinaryIO, IO, Any # NOQA + from ruamel.yaml.error import * # NOQA from ruamel.yaml.tokens import * # NOQA from ruamel.yaml.events import * # NOQA from ruamel.yaml.nodes import * # NOQA -from ruamel.yaml.loader import * # NOQA -from ruamel.yaml.dumper import * # NOQA +from ruamel.yaml.loader import BaseLoader, SafeLoader, Loader, RoundTripLoader # NOQA +from ruamel.yaml.dumper import BaseDumper, SafeDumper, Dumper, RoundTripDumper # NOQA from ruamel.yaml.compat import StringIO, BytesIO, with_metaclass, PY3 # import io +VersionType = Union[List[int], str, Tuple[int, int]] +StreamType = Union[BinaryIO, IO[str], StringIO] + def scan(stream, Loader=Loader): """ @@ -66,6 +71,7 @@ def compose_all(stream, Loader=Loader): def load(stream, Loader=Loader, version=None, preserve_quotes=None): + # type: (StreamType, Any, VersionType, Any) -> Any """ Parse the first YAML document in a stream and produce the corresponding Python object. @@ -366,7 +372,8 @@ class YAMLObjectMetaclass(type): cls.yaml_dumper.add_representer(cls, cls.to_yaml) -class YAMLObject(with_metaclass(YAMLObjectMetaclass)): +class YAMLObject(with_metaclass(YAMLObjectMetaclass)): # type: ignore + # type: ignore """ An object that can dump itself to a YAML stream and load itself from a YAML stream. @@ -376,8 +383,8 @@ class YAMLObject(with_metaclass(YAMLObjectMetaclass)): yaml_loader = Loader yaml_dumper = Dumper - yaml_tag = None - yaml_flow_style = None + yaml_tag = None # type: Any + yaml_flow_style = None # type: Any @classmethod def from_yaml(cls, loader, node): @@ -71,17 +71,17 @@ from __future__ import absolute_import # flow_mapping_entry: { ALIAS ANCHOR TAG SCALAR FLOW-SEQUENCE-START # FLOW-MAPPING-START KEY } -__all__ = ['Parser', 'RoundTripParser', 'ParserError'] - # need to have full path, as pkg_resources tries to load parser.py in __init__.py # only to not do anything with the package afterwards # and for Jython too -from ruamel.yaml.error import MarkedYAMLError # NOQA +from ruamel.yaml.error import MarkedYAMLError # type: ignore from ruamel.yaml.tokens import * # NOQA from ruamel.yaml.events import * # NOQA -from ruamel.yaml.scanner import * # NOQA +from ruamel.yaml.scanner import Scanner, RoundTripScanner, ScannerError # NOQA from ruamel.yaml.compat import utf8 # NOQA +__all__ = ['Parser', 'RoundTripParser', 'ParserError'] + class ParserError(MarkedYAMLError): pass @@ -23,12 +23,8 @@ from __future__ import absolute_import import codecs import re -try: - from .error import YAMLError, Mark - from .compat import text_type, binary_type, PY3 -except (ImportError, ValueError): # for Jython - from ruamel.yaml.error import YAMLError, Mark - from ruamel.yaml.compat import text_type, binary_type, PY3 +from ruamel.yaml.error import YAMLError, Mark +from ruamel.yaml.compat import text_type, binary_type, PY3 __all__ = ['Reader', 'ReaderError'] diff --git a/representer.py b/representer.py index b4625bf..0071152 100644 --- a/representer.py +++ b/representer.py @@ -3,26 +3,21 @@ from __future__ import absolute_import from __future__ import print_function -try: - from .error import * # NOQA - from .nodes import * # NOQA - from .compat import text_type, binary_type, to_unicode, PY2, PY3, ordereddict - from .scalarstring import * # NOQA -except (ImportError, ValueError): # for Jython - 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.scalarstring import * # NOQA +from typing import Dict, Any # NOQA +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.scalarstring import * # NOQA import datetime import sys import types if PY3: - import copyreg + import copyreg # type: ignore import base64 else: - import copy_reg as copyreg + import copy_reg as copyreg # type: ignore __all__ = ['BaseRepresenter', 'SafeRepresenter', 'Representer', @@ -35,8 +30,8 @@ class RepresenterError(YAMLError): class BaseRepresenter(object): - yaml_representers = {} - yaml_multi_representers = {} + yaml_representers = {} # type: Dict[Any, Any] + yaml_multi_representers = {} # type: Dict[Any, Any] def __init__(self, default_style=None, default_flow_style=None): self.default_style = default_style @@ -578,12 +573,8 @@ Representer.add_multi_representer(object, Representer.represent_object) -try: - from .comments import CommentedMap, CommentedOrderedMap, CommentedSeq, \ - CommentedSet, comment_attrib, merge_attrib -except ImportError: # for Jython - from ruamel.yaml.comments import CommentedMap, CommentedOrderedMap, \ - CommentedSeq, CommentedSet, comment_attrib, merge_attrib +from ruamel.yaml.comments import CommentedMap, CommentedOrderedMap, \ + CommentedSeq, CommentedSet, comment_attrib, merge_attrib # NOQA class RoundTripRepresenter(SafeRepresenter): diff --git a/resolver.py b/resolver.py index 8422707..5c59377 100644 --- a/resolver.py +++ b/resolver.py @@ -4,14 +4,11 @@ from __future__ import absolute_import import re -try: - from .error import * # NOQA - from .nodes import * # NOQA - from .compat import string_types -except (ImportError, ValueError): # for Jython - from ruamel.yaml.error import * # NOQA - from ruamel.yaml.nodes import * # NOQA - from ruamel.yaml.compat import string_types +from typing import Any, Dict # NOQA + +from ruamel.yaml.error import * # NOQA +from ruamel.yaml.nodes import * # NOQA +from ruamel.yaml.compat import string_types __all__ = ['BaseResolver', 'Resolver', 'VersionedResolver'] @@ -29,8 +26,8 @@ class BaseResolver(object): DEFAULT_SEQUENCE_TAG = u'tag:yaml.org,2002:seq' DEFAULT_MAPPING_TAG = u'tag:yaml.org,2002:map' - yaml_implicit_resolvers = {} - yaml_path_resolvers = {} + yaml_implicit_resolvers = {} # type: Dict[Any, Any] + yaml_path_resolvers = {} # type: Dict[Any, Any] def __init__(self): self._loader_version = None diff --git a/scalarstring.py b/scalarstring.py index d3abaff..eb10910 100644 --- a/scalarstring.py +++ b/scalarstring.py @@ -3,14 +3,11 @@ from __future__ import absolute_import from __future__ import print_function +from ruamel.yaml.compat import text_type + __all__ = ["ScalarString", "PreservedScalarString", "SingleQuotedScalarString", "DoubleQuotedScalarString"] -try: - from .compat import text_type -except (ImportError, ValueError): # for Jython - from ruamel.yaml.compat import text_type - class ScalarString(text_type): def __new__(cls, *args, **kw): @@ -30,18 +30,12 @@ from __future__ import print_function # # Read comments in the Scanner code for more details. # +from ruamel.yaml.error import MarkedYAMLError +from ruamel.yaml.tokens import * # NOQA +from ruamel.yaml.compat import utf8, unichr, PY3 __all__ = ['Scanner', 'RoundTripScanner', 'ScannerError'] -try: - from .error import MarkedYAMLError - from .tokens import * # NOQA - from .compat import utf8, unichr, PY3 -except (ImportError, ValueError): # for Jython - from ruamel.yaml.error import MarkedYAMLError - from ruamel.yaml.tokens import * # NOQA - from ruamel.yaml.compat import utf8, unichr, PY3 - class ScannerError(MarkedYAMLError): pass diff --git a/serializer.py b/serializer.py index 60dd517..d769b9c 100644 --- a/serializer.py +++ b/serializer.py @@ -4,12 +4,8 @@ from __future__ import absolute_import import re -try: - from .error import YAMLError - from .compat import nprint, DBG_NODE, dbg, string_types -except (ImportError, ValueError): # for Jython - from ruamel.yaml.error import YAMLError - from ruamel.yaml.compat import nprint, DBG_NODE, dbg, string_types +from ruamel.yaml.error import YAMLError +from ruamel.yaml.compat import nprint, DBG_NODE, dbg, string_types from ruamel.yaml.events import ( StreamStartEvent, StreamEndEvent, MappingStartEvent, MappingEndEvent, @@ -233,6 +233,7 @@ class NameSpacePackager(object): self._split = None self.depth = self.full_package_name.count('.') self.command = None + self.python_version() self._pkg = [None, None] # required and pre-installable packages if sys.argv[0] == 'setup.py' and sys.argv[1] == 'install' and \ '--single-version-externally-managed' not in sys.argv: @@ -328,6 +329,23 @@ class NameSpacePackager(object): fp.write('import pkg_resources\n' 'pkg_resources.declare_namespace(__name__)\n') + def python_version(self): + supported = self._pkg_data.get('supported') + if supported is None: + return + if len(supported) == 1: + minimum = supported[0] + else: + for x in supported: + if x[0] == sys.version_info[0]: + minimum = x + break + else: + return + if sys.version_info < minimum: + print('minimum python version(s): ' + str(supported)) + sys.exit(1) + def check(self): try: from pip.exceptions import InstallationError @@ -1,7 +1,7 @@ [tox] # envlist = pep8,py35,py27,py34,py33,py26,pypy,jython #envlist = py35,py27,py34,py33,py26,pypy,jython -envlist = pep8,py35,py27,py34,py33,py26,pypy +envlist = pep8,py35,py27,py34,py33,pypy [testenv] commands = |