Skip to content

Commit

Permalink
Fix: salt 2018.3 + py2.7/3.x compatibility
Browse files Browse the repository at this point in the history
- Fixes 'Failed to load ext_pillar reclass: Item in from list not a string'
  (#27)
- Update python 2.7/3.6 compatibility
  • Loading branch information
epcim committed Jun 18, 2018
1 parent 2652216 commit 2e01223
Show file tree
Hide file tree
Showing 64 changed files with 344 additions and 48 deletions.
2 changes: 1 addition & 1 deletion .travis.yml
Expand Up @@ -44,7 +44,7 @@ script:
# To test example models with kitchen:
- export PYTHON_VERSION=$TRAVIS_PYTHON_VERSION
- kitchen list
- if [ "$PYTHON_VERSION" = "2.7" ]; then kitchen test; fi
- kitchen test

# NOTE: travis stage builds, below saved for future reference
#jobs:
Expand Down
4 changes: 4 additions & 0 deletions reclass.py
Expand Up @@ -6,6 +6,10 @@
# Copyright © 2007–13 martin f. krafft <madduck@madduck.net>
# Released under the terms of the Artistic Licence 2.0
#
from __future__ import absolute_import
from __future__ import division
from __future__ import print_function
from __future__ import unicode_literals

import reclass.cli
reclass.cli.main()
11 changes: 7 additions & 4 deletions reclass/__init__.py
Expand Up @@ -6,11 +6,14 @@
# Copyright © 2007–14 martin f. krafft <madduck@madduck.net>
# Released under the terms of the Artistic Licence 2.0
#
from __future__ import absolute_import
from __future__ import division
from __future__ import print_function
from __future__ import unicode_literals

from reclass.output import OutputLoader
from reclass.storage.loader import StorageBackendLoader
from reclass.storage.memcache_proxy import MemcacheProxy

from .output import OutputLoader
from .storage.loader import StorageBackendLoader
from .storage.memcache_proxy import MemcacheProxy

def get_storage(storage_type, nodes_uri, classes_uri, **kwargs):
storage_class = StorageBackendLoader(storage_type).load()
Expand Down
6 changes: 5 additions & 1 deletion reclass/adapters/__init__.py
Expand Up @@ -5,4 +5,8 @@
#
# Copyright © 2007–14 martin f. krafft <madduck@madduck.net>
# Released under the terms of the Artistic Licence 2.0
#

from __future__ import absolute_import
from __future__ import division
from __future__ import print_function
from __future__ import unicode_literals
9 changes: 7 additions & 2 deletions reclass/adapters/ansible.py
Expand Up @@ -14,6 +14,11 @@
# The ansible adapter has received little testing and may not work at all now.


from __future__ import absolute_import
from __future__ import division
from __future__ import print_function
from __future__ import unicode_literals

import os, sys, posix, optparse

from six import iteritems
Expand Down Expand Up @@ -89,9 +94,9 @@ def add_ansible_options_group(parser, defaults):

data = groups

print output(data, options.output, options.pretty_print, options.no_refs)
print(output(data, options.output, options.pretty_print, options.no_refs))

except ReclassException, e:
except ReclassException as e:
e.exit_with_message(sys.stderr)

sys.exit(posix.EX_OK)
Expand Down
8 changes: 6 additions & 2 deletions reclass/adapters/salt.py
Expand Up @@ -6,6 +6,10 @@
# Copyright © 2007–14 martin f. krafft <madduck@madduck.net>
# Released under the terms of the Artistic Licence 2.0
#
from __future__ import absolute_import
from __future__ import division
from __future__ import print_function
from __future__ import unicode_literals

import os, sys, posix

Expand Down Expand Up @@ -122,9 +126,9 @@ def cli():
class_mappings=class_mappings,
**defaults)

print output(data, options.output, options.pretty_print, options.no_refs)
print(output(data, options.output, options.pretty_print, options.no_refs))

except ReclassException, e:
except ReclassException as e:
e.exit_with_message(sys.stderr)

sys.exit(posix.EX_OK)
Expand Down
4 changes: 4 additions & 0 deletions reclass/cli.py
Expand Up @@ -6,6 +6,10 @@
# Copyright © 2007–14 martin f. krafft <madduck@madduck.net>
# Released under the terms of the Artistic Licence 2.0
#
from __future__ import absolute_import
from __future__ import division
from __future__ import print_function
from __future__ import unicode_literals

import sys, os, posix

Expand Down
18 changes: 11 additions & 7 deletions reclass/config.py
Expand Up @@ -6,13 +6,17 @@
# Copyright © 2007–14 martin f. krafft <madduck@madduck.net>
# Released under the terms of the Artistic Licence 2.0
#
from __future__ import absolute_import
from __future__ import division
from __future__ import print_function
from __future__ import unicode_literals

import yaml, os, optparse, posix, sys

import errors
from defaults import *
from constants import MODE_NODEINFO, MODE_INVENTORY
from reclass import get_path_mangler
from . import errors, get_path_mangler
from .defaults import *
from .constants import MODE_NODEINFO, MODE_INVENTORY


def make_db_options_group(parser, defaults={}):
ret = optparse.OptionGroup(parser, 'Database options',
Expand Down Expand Up @@ -171,7 +175,7 @@ def get_options(name, version, description,


def vvv(msg):
#print >>sys.stderr, msg
#print(msg, file=sys.stderr)
pass


Expand All @@ -180,8 +184,8 @@ def find_and_read_configfile(filename=CONFIG_FILE_NAME,
for d in dirs:
f = os.path.join(d, filename)
if os.access(f, os.R_OK):
vvv('Using config file: {0}'.format(f))
return yaml.safe_load(file(f))
vvv('Using config file: {0}'.format(str(f)))
return yaml.safe_load(open(f))
elif os.path.isfile(f):
raise PermissionsError('cannot read %s' % f)
return {}
5 changes: 5 additions & 0 deletions reclass/constants.py
Expand Up @@ -6,6 +6,11 @@
# Copyright © 2007–14 martin f. krafft <madduck@madduck.net>
# Released under the terms of the Artistic Licence 2.0
#
from __future__ import absolute_import
from __future__ import division
from __future__ import print_function
from __future__ import unicode_literals


class _Constant(object):

Expand Down
12 changes: 6 additions & 6 deletions reclass/core.py
Expand Up @@ -6,6 +6,10 @@
# Copyright © 2007–14 martin f. krafft <madduck@madduck.net>
# Released under the terms of the Artistic Licence 2.0
#
from __future__ import absolute_import
from __future__ import division
from __future__ import print_function
from __future__ import unicode_literals

import copy
import time
Expand All @@ -24,10 +28,6 @@
from reclass.errors import MappingFormatError, ClassNameResolveError, ClassNotFound, InvQueryClassNameResolveError, InvQueryClassNotFound, InvQueryError, InterpolationError, ResolveError
from reclass.values.parser import Parser

try:
basestring
except NameError:
basestring = str

class Core(object):

Expand Down Expand Up @@ -130,7 +130,7 @@ def _recurse_entity(self, entity, merge_base=None, context=None, seen=None, node
if self._cnf_r.match(klass):
if self._settings.ignore_class_notfound_warning:
# TODO, add logging handler
print >>sys.stderr, "[WARNING] Reclass class not found: '%s'. Skipped!" % klass
print("[WARNING] Reclass class not found: '%s'. Skipped!" % klass, file=sys.stderr)
continue
e.nodename = nodename
e.uri = entity.uri
Expand All @@ -151,7 +151,7 @@ def _recurse_entity(self, entity, merge_base=None, context=None, seen=None, node

def _get_automatic_parameters(self, nodename, environment):
if self._settings.automatic_parameters:
return Parameters({ '_reclass_': { 'name': { 'full': nodename, 'short': str.split(nodename, '.')[0] },
return Parameters({ '_reclass_': { 'name': { 'full': nodename, 'short': nodename.split('.')[0] },
'environment': environment } }, self._settings, '__auto__')
else:
return Parameters({}, self._settings, '')
Expand Down
5 changes: 5 additions & 0 deletions reclass/datatypes/__init__.py
Expand Up @@ -6,6 +6,11 @@
# Copyright © 2007–14 martin f. krafft <madduck@madduck.net>
# Released under the terms of the Artistic Licence 2.0
#
from __future__ import absolute_import
from __future__ import division
from __future__ import print_function
from __future__ import unicode_literals

from .applications import Applications
from .classes import Classes
from .entity import Entity
Expand Down
7 changes: 6 additions & 1 deletion reclass/datatypes/applications.py
Expand Up @@ -6,6 +6,11 @@
# Copyright © 2007–14 martin f. krafft <madduck@madduck.net>
# Released under the terms of the Artistic Licence 2.0
#
from __future__ import absolute_import
from __future__ import division
from __future__ import print_function
from __future__ import unicode_literals


from .classes import Classes

Expand Down Expand Up @@ -61,4 +66,4 @@ def __repr__(self):
contents = self._items + \
['%s%s' % (self._negation_prefix, i) for i in self._negations]
return "%s(%r, %r)" % (self.__class__.__name__, contents,
self._negation_prefix)
str(self._negation_prefix))
10 changes: 10 additions & 0 deletions reclass/datatypes/classes.py
Expand Up @@ -6,6 +6,15 @@
# Copyright © 2007–14 martin f. krafft <madduck@madduck.net>
# Released under the terms of the Artistic Licence 2.0
#
from __future__ import absolute_import
from __future__ import division
from __future__ import print_function
from __future__ import unicode_literals

#try:
# from types import StringTypes
#except ImportError:
# StringTypes = (str, )

import six
import os
Expand Down Expand Up @@ -52,6 +61,7 @@ def merge_unique(self, iterable):
self.append_if_new(i)

def _assert_is_string(self, item):
#if not isinstance(item, StringTypes):
if not isinstance(item, six.string_types):
raise TypeError('%s instances can only contain strings, '\
'not %s' % (self.__class__.__name__, type(item)))
Expand Down
5 changes: 5 additions & 0 deletions reclass/datatypes/entity.py
Expand Up @@ -6,6 +6,11 @@
# Copyright © 2007–14 martin f. krafft <madduck@madduck.net>
# Released under the terms of the Artistic Licence 2.0
#
from __future__ import absolute_import
from __future__ import division
from __future__ import print_function
from __future__ import unicode_literals

from .classes import Classes
from .applications import Applications
from .exports import Exports
Expand Down
4 changes: 4 additions & 0 deletions reclass/datatypes/exports.py
Expand Up @@ -3,6 +3,10 @@
#
# This file is part of reclass (http://github.com/madduck/reclass)
#
from __future__ import absolute_import
from __future__ import division
from __future__ import print_function
from __future__ import unicode_literals

import copy

Expand Down
10 changes: 10 additions & 0 deletions reclass/datatypes/parameters.py
Expand Up @@ -7,6 +7,16 @@
# Released under the terms of the Artistic Licence 2.0
#

from __future__ import absolute_import
from __future__ import division
from __future__ import print_function
from __future__ import unicode_literals

#try:
# from types import StringTypes
#except ImportError:
# StringTypes = (str, )

import copy
import sys
import types
Expand Down
5 changes: 5 additions & 0 deletions reclass/datatypes/tests/__init__.py
@@ -0,0 +1,5 @@
# -*- coding: utf-8
from __future__ import absolute_import
from __future__ import division
from __future__ import print_function
from __future__ import unicode_literals
6 changes: 6 additions & 0 deletions reclass/datatypes/tests/test_applications.py
Expand Up @@ -6,8 +6,14 @@
# Copyright © 2007–14 martin f. krafft <madduck@madduck.net>
# Released under the terms of the Artistic Licence 2.0
#
from __future__ import absolute_import
from __future__ import division
from __future__ import print_function
from __future__ import unicode_literals

from reclass.datatypes import Applications, Classes
import unittest

try:
import unittest.mock as mock
except ImportError:
Expand Down
6 changes: 6 additions & 0 deletions reclass/datatypes/tests/test_classes.py
Expand Up @@ -6,9 +6,15 @@
# Copyright © 2007–14 martin f. krafft <madduck@madduck.net>
# Released under the terms of the Artistic Licence 2.0
#
from __future__ import absolute_import
from __future__ import division
from __future__ import print_function
from __future__ import unicode_literals

from reclass.datatypes import Classes
from reclass.datatypes.classes import INVALID_CHARACTERS_FOR_CLASSNAMES
import unittest

try:
import unittest.mock as mock
except ImportError:
Expand Down
5 changes: 5 additions & 0 deletions reclass/datatypes/tests/test_entity.py
Expand Up @@ -6,11 +6,16 @@
# Copyright © 2007–14 martin f. krafft <madduck@madduck.net>
# Released under the terms of the Artistic Licence 2.0
#
from __future__ import absolute_import
from __future__ import division
from __future__ import print_function
from __future__ import unicode_literals

from reclass.settings import Settings
from reclass.datatypes import Entity, Classes, Parameters, Applications, Exports
from reclass.errors import ResolveError
import unittest

try:
import unittest.mock as mock
except ImportError:
Expand Down
4 changes: 4 additions & 0 deletions reclass/datatypes/tests/test_exports.py
Expand Up @@ -3,6 +3,10 @@
#
# This file is part of reclass (http://github.com/madduck/reclass)
#
from __future__ import absolute_import
from __future__ import division
from __future__ import print_function
from __future__ import unicode_literals

from reclass.settings import Settings
from reclass.datatypes import Exports, Parameters
Expand Down
5 changes: 5 additions & 0 deletions reclass/datatypes/tests/test_parameters.py
Expand Up @@ -6,6 +6,10 @@
# Copyright © 2007–14 martin f. krafft <madduck@madduck.net>
# Released under the terms of the Artistic Licence 2.0
#
from __future__ import absolute_import
from __future__ import division
from __future__ import print_function
from __future__ import unicode_literals

import copy

Expand All @@ -15,6 +19,7 @@
from reclass.datatypes import Parameters
from reclass.errors import InfiniteRecursionError, InterpolationError, ResolveError, ResolveErrorList
import unittest

try:
import unittest.mock as mock
except ImportError:
Expand Down
5 changes: 5 additions & 0 deletions reclass/defaults.py
Expand Up @@ -6,6 +6,11 @@
# Copyright © 2007–14 martin f. krafft <madduck@madduck.net>
# Released under the terms of the Artistic Licence 2.0
#
from __future__ import absolute_import
from __future__ import division
from __future__ import print_function
from __future__ import unicode_literals

import os, sys
from .version import RECLASS_NAME

Expand Down

0 comments on commit 2e01223

Please sign in to comment.