summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--README.rst6
-rw-r--r--__init__.py20
-rw-r--r--comments.py13
-rw-r--r--compat.py14
-rw-r--r--composer.py8
-rw-r--r--constructor.py25
-rw-r--r--cyaml.py27
-rw-r--r--dumper.py17
-rw-r--r--emitter.py13
-rw-r--r--error.py7
-rw-r--r--loader.py23
-rw-r--r--main.py19
-rw-r--r--parser.py8
-rw-r--r--reader.py8
-rw-r--r--representer.py31
-rw-r--r--resolver.py17
-rw-r--r--scalarstring.py7
-rw-r--r--scanner.py12
-rw-r--r--serializer.py8
-rw-r--r--setup.py18
-rw-r--r--tox.ini2
21 files changed, 131 insertions, 172 deletions
diff --git a/README.rst b/README.rst
index 993cf35..e59e94a 100644
--- a/README.rst
+++ b/README.rst
@@ -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'
diff --git a/compat.py b/compat.py
index abd10ac..e4b30ab 100644
--- a/compat.py
+++ b/compat.py
@@ -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 = {}
diff --git a/cyaml.py b/cyaml.py
index 05dccd6..3df94f9 100644
--- a/cyaml.py
+++ b/cyaml.py
@@ -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,
diff --git a/dumper.py b/dumper.py
index 90e2ca9..4d997ea 100644
--- a/dumper.py
+++ b/dumper.py
@@ -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):
diff --git a/emitter.py b/emitter.py
index b754bc0..ac88dc6 100644
--- a/emitter.py
+++ b/emitter.py
@@ -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):
diff --git a/error.py b/error.py
index 1ec77e6..fb5e78c 100644
--- a/error.py
+++ b/error.py
@@ -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):
diff --git a/loader.py b/loader.py
index b5ba20a..93f0a16 100644
--- a/loader.py
+++ b/loader.py
@@ -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):
diff --git a/main.py b/main.py
index 797bdcd..8138ac4 100644
--- a/main.py
+++ b/main.py
@@ -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):
diff --git a/parser.py b/parser.py
index 543cca9..bb9c96c 100644
--- a/parser.py
+++ b/parser.py
@@ -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
diff --git a/reader.py b/reader.py
index 376c6de..bbd58a9 100644
--- a/reader.py
+++ b/reader.py
@@ -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):
diff --git a/scanner.py b/scanner.py
index 61feb34..b95d3b7 100644
--- a/scanner.py
+++ b/scanner.py
@@ -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,
diff --git a/setup.py b/setup.py
index e844a81..1807402 100644
--- a/setup.py
+++ b/setup.py
@@ -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
diff --git a/tox.ini b/tox.ini
index 18f789f..3d5b9f8 100644
--- a/tox.ini
+++ b/tox.ini
@@ -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 =