commit:     2d7ed7a1fdac828dc5f6b26ec279b2d1e4ee83da
Author:     Brian Dolbec <dolsen <AT> gentoo <DOT> org>
AuthorDate: Wed Aug 16 23:23:09 2017 +0000
Commit:     Brian Dolbec <dolsen <AT> gentoo <DOT> org>
CommitDate: Wed Aug 16 23:25:27 2017 +0000
URL:        https://gitweb.gentoo.org/proj/portage.git/commit/?id=2d7ed7a1

repoman: config.py: Fix whitespace

 repoman/pym/repoman/config.py | 245 +++++++++++++++++++++---------------------
 1 file changed, 124 insertions(+), 121 deletions(-)

diff --git a/repoman/pym/repoman/config.py b/repoman/pym/repoman/config.py
index 2825aee04..f41945c13 100644
--- a/repoman/pym/repoman/config.py
+++ b/repoman/pym/repoman/config.py
@@ -11,133 +11,136 @@ import yaml
 
 class ConfigError(Exception):
 
-    """Raised when a config file fails to load"""
-    pass
+       """Raised when a config file fails to load"""
+       pass
 
 
 def merge_config(base, head):
-    """
-    Merge two JSON or YAML documents into a single object. Arrays are
-    merged by extension. If dissimilar types are encountered, then the
-    head value overwrites the base value.
-    """
-
-    if isinstance(head, dict):
-        if not isinstance(base, dict):
-            return copy.deepcopy(head)
-
-        result = {}
-        for k in itertools.chain(head, base):
-            try:
-                result[k] = merge_config(base[k], head[k])
-            except KeyError:
-                try:
-                    result[k] = copy.deepcopy(head[k])
-                except KeyError:
-                    result[k] = copy.deepcopy(base[k])
-
-    elif isinstance(head, list):
-        result = []
-        if not isinstance(base, list):
-            result.extend(copy.deepcopy(x) for x in head)
-        else:
-            if any(isinstance(x, (dict, list)) for x in itertools.chain(head, 
base)):
-                # merge items with identical indexes
-                for x, y in zip(base, head):
-                    if isinstance(x, (dict, list)):
-                        result.append(merge_config(x, y))
-                    else:
-                        # head overwrites base (preserving index)
-                        result.append(copy.deepcopy(y))
-                # copy remaining items from the longer list
-                if len(base) != len(head):
-                    if len(base) > len(head):
-                        result.extend(copy.deepcopy(x) for x in 
base[len(head):])
-                    else:
-                        result.extend(copy.deepcopy(x) for x in 
head[len(base):])
-            else:
-                result.extend(copy.deepcopy(x) for x in base)
-                result.extend(copy.deepcopy(x) for x in head)
-
-    else:
-        result = copy.deepcopy(head)
-
-    return result
+       """
+       Merge two JSON or YAML documents into a single object. Arrays are
+       merged by extension. If dissimilar types are encountered, then the
+       head value overwrites the base value.
+       """
+
+       if isinstance(head, dict):
+               if not isinstance(base, dict):
+                       return copy.deepcopy(head)
+
+               result = {}
+               for k in itertools.chain(head, base):
+                       try:
+                               result[k] = merge_config(base[k], head[k])
+                       except KeyError:
+                               try:
+                                       result[k] = copy.deepcopy(head[k])
+                               except KeyError:
+                                       result[k] = copy.deepcopy(base[k])
+
+       elif isinstance(head, list):
+               result = []
+               if not isinstance(base, list):
+                       result.extend(copy.deepcopy(x) for x in head)
+               else:
+                       if any(isinstance(x, (dict, list)) for x in 
itertools.chain(head, base)):
+                               # merge items with identical indexes
+                               for x, y in zip(base, head):
+                                       if isinstance(x, (dict, list)):
+                                               result.append(merge_config(x, 
y))
+                                       else:
+                                               # head overwrites base 
(preserving index)
+                                               result.append(copy.deepcopy(y))
+                               # copy remaining items from the longer list
+                               if len(base) != len(head):
+                                       if len(base) > len(head):
+                                               result.extend(copy.deepcopy(x) 
for x in base[len(head):])
+                                       else:
+                                               result.extend(copy.deepcopy(x) 
for x in head[len(base):])
+                       else:
+                               result.extend(copy.deepcopy(x) for x in base)
+                               result.extend(copy.deepcopy(x) for x in head)
+
+       else:
+               result = copy.deepcopy(head)
+
+       return result
 
 def _yaml_load(filename):
-    """
-    Load filename as YAML and return a dict. Raise ConfigError if
-    it fails to load.
-    """
-    with open(filename, 'rt') as f:
-        try:
-            return yaml.safe_load(f)
-        except yaml.parser.ParserError as e:
-            raise ConfigError("{}: {}".format(filename, e))
+       """
+       Load filename as YAML and return a dict. Raise ConfigError if
+       it fails to load.
+       """
+       with open(filename, 'rt') as f:
+               try:
+                       return yaml.safe_load(f)
+               except yaml.parser.ParserError as e:
+                       raise ConfigError("{}: {}".format(filename, e))
 
 def _json_load(filename):
-    """
-    Load filename as JSON and return a dict. Raise ConfigError if
-    it fails to load.
-    """
-    with open(filename, 'rt') as f:
-        try:
-            return json.load(f) #nosec
-        except ValueError as e:
-            raise ConfigError("{}: {}".format(filename, e))
+       """
+       Load filename as JSON and return a dict. Raise ConfigError if
+       it fails to load.
+       """
+       with open(filename, 'rt') as f:
+               try:
+                       return json.load(f) #nosec
+               except ValueError as e:
+                       raise ConfigError("{}: {}".format(filename, e))
 
 def iter_files(files_dirs):
-    """
-    Iterate over nested file paths in lexical order.
-    """
-    stack = list(reversed(files_dirs))
-    while stack:
-        location = stack.pop()
-        try:
-            st = os.stat(location)
-        except FileNotFoundError:
-            continue
-
-        if stat.S_ISDIR(st.st_mode):
-            stack.extend(os.path.join(location, x)
-                for x in sorted(os.listdir(location), reverse=True))
-
-        elif stat.S_ISREG(st.st_mode):
-            yield location
-
-def load_config(conf_dirs, file_extensions=None):
-    """
-    Load JSON and/or YAML files from a directories, and merge them together
-    into a single object.
-    """
-
-    result = {}
-    for filename in iter_files(conf_dirs):
-        if file_extensions is not None and not 
filename.endswith(file_extensions):
-            continue
-
-        loaders = []
-        if filename.endswith('.json'):
-            loaders.append(_json_load)
-        elif filename.endswith('.yaml'):
-            loaders.append(_yaml_load)
-        else:
-            loaders.append(_yaml_load)
-            loaders.append(_json_load)
-
-        config = None
-        for loader in loaders:
-            try:
-                config = loader(filename) or {}
-            except ConfigError as e:
-                exception = e
-            else:
-                break
-
-        if config is None:
-            raise exception
-
-        if config:
-            result = merge_config(result, config)
-
-    return result
+       """
+       Iterate over nested file paths in lexical order.
+       """
+       stack = list(reversed(files_dirs))
+       while stack:
+               location = stack.pop()
+               try:
+                       st = os.stat(location)
+               except FileNotFoundError:
+                       continue
+
+               if stat.S_ISDIR(st.st_mode):
+                       stack.extend(os.path.join(location, x)
+                               for x in sorted(os.listdir(location), 
reverse=True))
+
+               elif stat.S_ISREG(st.st_mode):
+                       yield location
+
+def load_config(conf_dirs, file_extensions=None, valid_versions=None):
+       """
+       Load JSON and/or YAML files from a directories, and merge them together
+       into a single object.
+       """
+
+       result = {}
+       for filename in iter_files(conf_dirs):
+               if file_extensions is not None and not 
filename.endswith(file_extensions):
+                       continue
+
+               loaders = []
+               if filename.endswith('.json'):
+                       loaders.append(_json_load)
+               elif filename.endswith('.yaml'):
+                       loaders.append(_yaml_load)
+               else:
+                       loaders.append(_yaml_load)
+                       loaders.append(_json_load)
+
+               config = None
+               for loader in loaders:
+                       try:
+                               config = loader(filename) or {}
+                       except ConfigError as e:
+                               exception = e
+                       else:
+                               break
+
+               if config is None:
+                       raise exception
+
+               if config:
+                       if config['version'] not in valid_versions:
+                               raise ConfigError("Invalid file version: %s in: 
%s\nPlease upgrade repoman: current valid versions: %s"
+                                       % (config['version'], filename, 
valid_versions))
+                       result = merge_config(result, config)
+
+       return result

Reply via email to