File apply-patch-from-upstream-to-support-python-3.8.patch of Package salt

From 85464ec6c34fceee3379d268745c3294d27e7fb4 Mon Sep 17 00:00:00 2001
From: Steve Kowalik <steven@wedontsleep.org>
Date: Mon, 17 Feb 2020 15:34:00 +1100
Subject: [PATCH] Apply patch from upstream to support Python 3.8

Apply saltstack/salt#56031 to support Python 3.8, which removed a
deprecated module and changed some behaviour. Add a {Build,}Requires on
python-distro, since it is now required.
---
 pkg/suse/salt.spec          |  2 ++
 salt/renderers/stateconf.py | 49 ++++++++++++++++---------------------
 2 files changed, 23 insertions(+), 28 deletions(-)

diff --git a/pkg/suse/salt.spec b/pkg/suse/salt.spec
index a17d2381ce..0df9d6c283 100644
--- a/pkg/suse/salt.spec
+++ b/pkg/suse/salt.spec
@@ -62,6 +62,7 @@ BuildRequires:  python-psutil
 BuildRequires:  python-requests >= 1.0.0
 BuildRequires:  python-tornado >= 4.2.1
 BuildRequires:  python-yaml
+BuildRequires:  python-distro
 # requirements/opt.txt (not all)
 # BuildRequires:  python-MySQL-python
 # BuildRequires:  python-timelib
@@ -112,6 +113,7 @@ Requires:       python-psutil
 Requires:       python-requests >= 1.0.0
 Requires:       python-tornado >= 4.2.1
 Requires:       python-yaml
+Requires:       python-distro
 %if 0%{?suse_version}
 # requirements/opt.txt (not all)
 Recommends:     python-MySQL-python
diff --git a/salt/renderers/stateconf.py b/salt/renderers/stateconf.py
index 298ae28338..f0527d51d7 100644
--- a/salt/renderers/stateconf.py
+++ b/salt/renderers/stateconf.py
@@ -1,4 +1,3 @@
-# -*- coding: utf-8 -*-
 """
 A flexible renderer that takes a templating engine and a data format
 
@@ -26,8 +25,6 @@ A flexible renderer that takes a templating engine and a data format
 #         - apache: >= 0.1.0
 #
 
-# Import python libs
-from __future__ import absolute_import, print_function, unicode_literals
 
 import copy
 import getopt
@@ -36,12 +33,9 @@ import os
 import re
 from itertools import chain
 
-# Import salt libs
 import salt.utils.files
 import salt.utils.stringutils
 from salt.exceptions import SaltRenderError
-
-# Import 3rd-party libs
 from salt.ext import six
 from salt.ext.six.moves import StringIO  # pylint: disable=import-error
 
@@ -135,7 +129,7 @@ def render(input, saltenv="base", sls="", argline="", **kws):
                 sid = has_names_decls(data)
                 if sid:
                     raise SaltRenderError(
-                        "'names' declaration(found in state id: {0}) is "
+                        "'names' declaration(found in state id: {}) is "
                         "not supported with implicitly ordered states! You "
                         "should generate the states in a template for-loop "
                         "instead.".format(sid)
@@ -203,11 +197,11 @@ def render(input, saltenv="base", sls="", argline="", **kws):
             name, rt_argline = (args[1] + " ").split(" ", 1)
             render_template = renderers[name]  # e.g., the mako renderer
         except KeyError as err:
-            raise SaltRenderError("Renderer: {0} is not available!".format(err))
+            raise SaltRenderError("Renderer: {} is not available!".format(err))
         except IndexError:
             raise INVALID_USAGE_ERROR
 
-        if isinstance(input, six.string_types):
+        if isinstance(input, str):
             with salt.utils.files.fopen(input, "r") as ifile:
                 sls_templ = salt.utils.stringutils.to_unicode(ifile.read())
         else:  # assume file-like
@@ -227,7 +221,7 @@ def render(input, saltenv="base", sls="", argline="", **kws):
                 prefix = sls + "::"
                 tmplctx = {
                     k[len(prefix) :] if k.startswith(prefix) else k: v
-                    for k, v in six.iteritems(tmplctx)
+                    for k, v in tmplctx.items()
                 }
         else:
             tmplctx = {}
@@ -262,8 +256,8 @@ def rewrite_single_shorthand_state_decl(data):  # pylint: disable=C0103
       state_id_decl:
         state.func: []
     """
-    for sid, states in six.iteritems(data):
-        if isinstance(states, six.string_types):
+    for sid, states in data.items():
+        if isinstance(states, str):
             data[sid] = {states: []}
 
 
@@ -328,7 +322,7 @@ def nvlist(thelist, names=None):
     for nvitem in thelist:
         if isinstance(nvitem, dict):
             # then nvitem is a name-value item(a dict) of the list.
-            name, value = next(six.iteritems(nvitem))
+            name, value = next(iter(nvitem.items()))
             if names is None or name in names:
                 yield nvitem, name, value
 
@@ -349,17 +343,16 @@ def nvlist2(thelist, names=None):
 
     """
     for _, _, value in nvlist(thelist, names):
-        for each in nvlist(value):
-            yield each
+        yield from nvlist(value)
 
 
 def statelist(states_dict, sid_excludes=frozenset(["include", "exclude"])):
-    for sid, states in six.iteritems(states_dict):
+    for sid, states in states_dict.items():
         if sid.startswith("__"):
             continue
         if sid in sid_excludes:
             continue
-        for sname, args in six.iteritems(states):
+        for sname, args in states.items():
             if sname.startswith("__"):
                 continue
             yield sid, states, sname, args
@@ -401,11 +394,11 @@ def rename_state_ids(data, sls, is_extend=False):
             newsid = _local_to_abs_sid(sid, sls)
             if newsid in data:
                 raise SaltRenderError(
-                    "Can't rename state id({0}) into {1} because the later "
+                    "Can't rename state id({}) into {} because the later "
                     "already exists!".format(sid, newsid)
                 )
             # add a '- name: sid' to those states without '- name'.
-            for sname, args in six.iteritems(data[sid]):
+            for sname, args in data[sid].items():
                 if state_name(sname) == STATE_NAME:
                     continue
                 for arg in args:
@@ -430,7 +423,7 @@ EXTENDED_REQUIRE_IN = {}
 #   explicit require_in/watch_in/listen_in/onchanges_in/onfail_in can only contain states after it
 def add_implicit_requires(data):
     def T(sid, state):  # pylint: disable=C0103
-        return "{0}:{1}".format(sid, state_name(state))
+        return "{}:{}".format(sid, state_name(state))
 
     states_before = set()
     states_after = set()
@@ -462,7 +455,7 @@ def add_implicit_requires(data):
         for _, rstate, rsid in reqs:
             if T(rsid, rstate) in states_after:
                 raise SaltRenderError(
-                    "State({0}) can't require/watch/listen/onchanges/onfail a state({1}) defined "
+                    "State({}) can't require/watch/listen/onchanges/onfail a state({}) defined "
                     "after it!".format(tag, T(rsid, rstate))
                 )
 
@@ -472,7 +465,7 @@ def add_implicit_requires(data):
         for _, rstate, rsid in reqs:
             if T(rsid, rstate) in states_before:
                 raise SaltRenderError(
-                    "State({0}) can't require_in/watch_in/listen_in/onchanges_in/onfail_in a state({1}) "
+                    "State({}) can't require_in/watch_in/listen_in/onchanges_in/onfail_in a state({}) "
                     "defined before it!".format(tag, T(rsid, rstate))
                 )
 
@@ -492,7 +485,7 @@ def add_start_state(data, sls):
     start_sid = __opts__["stateconf_start_state"]
     if start_sid in data:
         raise SaltRenderError(
-            "Can't generate start state({0})! The same state id already "
+            "Can't generate start state({})! The same state id already "
             "exists!".format(start_sid)
         )
     if not data:
@@ -502,14 +495,14 @@ def add_start_state(data, sls):
     # no __sls__, or it's the first state whose id declaration has a
     # __sls__ == sls.
     non_sids = ("include", "exclude", "extend")
-    for sid, states in six.iteritems(data):
+    for sid, states in data.items():
         if sid in non_sids or sid.startswith("__"):
             continue
         if "__sls__" not in states or states["__sls__"] == sls:
             break
     else:
         raise SaltRenderError("Can't determine the first state in the sls file!")
-    reqin = {state_name(next(six.iterkeys(data[sid]))): sid}
+    reqin = {state_name(next(iter(data[sid].keys()))): sid}
     data[start_sid] = {STATE_FUNC: [{"require_in": [reqin]}]}
 
 
@@ -517,7 +510,7 @@ def add_goal_state(data):
     goal_sid = __opts__["stateconf_goal_state"]
     if goal_sid in data:
         raise SaltRenderError(
-            "Can't generate goal state({0})! The same state id already "
+            "Can't generate goal state({})! The same state id already "
             "exists!".format(goal_sid)
         )
     else:
@@ -561,7 +554,7 @@ STATE_CONF_EXT = {}  # stateconf.set under extend: ...
 
 
 def extract_state_confs(data, is_extend=False):
-    for state_id, state_dict in six.iteritems(data):
+    for state_id, state_dict in data.items():
         if state_id == "extend" and not is_extend:
             extract_state_confs(state_dict, True)
             continue
@@ -578,7 +571,7 @@ def extract_state_confs(data, is_extend=False):
         for sdk in state_dict[key]:
             if not isinstance(sdk, dict):
                 continue
-            key, val = next(six.iteritems(sdk))
+            key, val = next(iter(sdk.items()))
             conf[key] = val
 
         if not is_extend and state_id in STATE_CONF_EXT:
-- 
2.29.2
openSUSE Build Service is sponsored by