Openembedded Core Discussions
 help / color / mirror / Atom feed
* [PATCH 1/3] python: don't sort the manifest in create_manifest
@ 2018-09-14 21:33 Andrew Geissler
  2018-09-14 21:33 ` [PATCH 2/3] python: respect package order in manifest Andrew Geissler
                   ` (3 more replies)
  0 siblings, 4 replies; 7+ messages in thread
From: Andrew Geissler @ 2018-09-14 21:33 UTC (permalink / raw)
  To: openembedded-core; +Cc: Andrew Geissler, alejandro.enedino.hernandez-samaniego

Instead of sorting the entire manifest when it is updated, use
OrderedDict to preserve the order of fields.This means that
packages can be ordered in the manifest to allow non-trivial
FILES assignments (such as a package that picks up pieces of
other packages)

The manifest has been regenerated with the new stable ordering, and
distutils-staticdev moved above distutils so the packaging rules work as
expected.

This is a backport of the same changes done by Ross Burton for python3

Signed-off-by: Andrew Geissler <geissonator@gmail.com>
---
 .../python/python/create_manifest2.py              |   16 +-
 .../python/python/python2-manifest.json            | 1658 ++++++++++----------
 2 files changed, 839 insertions(+), 835 deletions(-)

diff --git a/meta/recipes-devtools/python/python/create_manifest2.py b/meta/recipes-devtools/python/python/create_manifest2.py
index e745045..1af1443 100644
--- a/meta/recipes-devtools/python/python/create_manifest2.py
+++ b/meta/recipes-devtools/python/python/create_manifest2.py
@@ -37,6 +37,7 @@ import sys
 import subprocess
 import json
 import os
+import collections
 
 # Hack to get native python search path (for folders), not fond of it but it works for now
 pivot='recipe-sysroot-native'
@@ -45,7 +46,7 @@ for p in sys.path:
     nativelibfolder=p[:p.find(pivot)+len(pivot)]
 
 # Empty dict to hold the whole manifest
-new_manifest = {}
+new_manifest = collections.OrderedDict()
 
 # Check for repeated files, folders and wildcards
 allfiles=[]
@@ -63,7 +64,7 @@ def isFolder(value):
 
 # Read existing JSON manifest
 with open('python2-manifest.json') as manifest:
-  old_manifest=json.load(manifest)
+  old_manifest = json.load(manifest, object_pairs_hook=collections.OrderedDict)
 
 
 # First pass to get core-package functionality, because we base everything on the fact that core is actually working
@@ -124,13 +125,14 @@ for key in old_manifest:
 
 for key in old_manifest:
     # Use an empty dict as data structure to hold data for each package and fill it up
-    new_manifest[key]={}
-    new_manifest[key]['files']=[]
+    new_manifest[key] = collections.OrderedDict()
+    new_manifest[key]['summary'] = old_manifest[key]['summary']
     new_manifest[key]['rdepends']=[]
+    new_manifest[key]['files'] = []
+
     # All packages should depend on core
     if key != 'core':
-         new_manifest[key]['rdepends'].append('core')
-    new_manifest[key]['summary']=old_manifest[key]['summary']
+        new_manifest[key]['rdepends'].append('core')
 
     # Handle special cases, we assume that when they were manually added 
     # to the manifest we knew what we were doing.
@@ -274,4 +276,4 @@ for key in new_manifest:
 
 # Create the manifest from the data structure that was built
 with open('python2-manifest.json.new','w') as outfile:
-    json.dump(new_manifest,outfile,sort_keys=True, indent=4, separators=(',', ': '))
+    json.dump(new_manifest,outfile, indent=4)
diff --git a/meta/recipes-devtools/python/python/python2-manifest.json b/meta/recipes-devtools/python/python/python2-manifest.json
index 723e513..cacba5b 100644
--- a/meta/recipes-devtools/python/python/python2-manifest.json
+++ b/meta/recipes-devtools/python/python/python2-manifest.json
@@ -1,1047 +1,1049 @@
 {
     "2to3": {
-        "files": [
-            "${bindir}/2to3",
-            "${libdir}/python2.7/lib2to3"
-        ],
+        "summary": "Python automated Python 2 to 3 code translator", 
         "rdepends": [
             "core"
-        ],
-        "summary": "Python automated Python 2 to 3 code translator"
-    },
-    "argparse": {
+        ], 
         "files": [
-            "${libdir}/python2.7/argparse.py"
-        ],
+            "${bindir}/2to3", 
+            "${libdir}/python2.7/lib2to3"
+        ]
+    }, 
+    "argparse": {
+        "summary": "Python command line argument parser", 
         "rdepends": [
-            "codecs",
-            "core",
-            "lang",
+            "codecs", 
+            "core", 
+            "lang", 
             "textutils"
-        ],
-        "summary": "Python command line argument parser"
-    },
-    "audio": {
+        ], 
         "files": [
-            "${libdir}/python2.7/audiodev.py",
-            "${libdir}/python2.7/chunk.py",
-            "${libdir}/python2.7/lib-dynload/audioop.so",
-            "${libdir}/python2.7/lib-dynload/ossaudiodev.so",
-            "${libdir}/python2.7/sndhdr.py",
-            "${libdir}/python2.7/sunau.py",
-            "${libdir}/python2.7/sunaudio.py",
-            "${libdir}/python2.7/toaiff.py",
-            "${libdir}/python2.7/wave.py"
-        ],
+            "${libdir}/python2.7/argparse.py"
+        ]
+    }, 
+    "audio": {
+        "summary": "Python Audio Handling", 
         "rdepends": [
-            "core",
-            "crypt",
-            "fcntl",
-            "io",
+            "core", 
+            "crypt", 
+            "fcntl", 
+            "io", 
             "math"
-        ],
-        "summary": "Python Audio Handling"
-    },
+        ], 
+        "files": [
+            "${libdir}/python2.7/audiodev.py", 
+            "${libdir}/python2.7/chunk.py", 
+            "${libdir}/python2.7/lib-dynload/audioop.so", 
+            "${libdir}/python2.7/lib-dynload/ossaudiodev.so", 
+            "${libdir}/python2.7/sndhdr.py", 
+            "${libdir}/python2.7/sunau.py", 
+            "${libdir}/python2.7/sunaudio.py", 
+            "${libdir}/python2.7/toaiff.py", 
+            "${libdir}/python2.7/wave.py"
+        ]
+    }, 
     "bsddb": {
-        "files": [
-            "${libdir}/python2.7/bsddb",
-            "${libdir}/python2.7/lib-dynload/_bsddb.so"
-        ],
+        "summary": "Python bindings for the Berkeley Database", 
         "rdepends": [
             "core"
-        ],
-        "summary": "Python bindings for the Berkeley Database"
-    },
-    "codecs": {
+        ], 
         "files": [
-            "${libdir}/python2.7/gettext.py",
-            "${libdir}/python2.7/lib-dynload/_codecs_cn.so",
-            "${libdir}/python2.7/lib-dynload/_codecs_hk.so",
-            "${libdir}/python2.7/lib-dynload/_codecs_iso2022.so",
-            "${libdir}/python2.7/lib-dynload/_codecs_jp.so",
-            "${libdir}/python2.7/lib-dynload/_codecs_kr.so",
-            "${libdir}/python2.7/lib-dynload/_codecs_tw.so",
-            "${libdir}/python2.7/lib-dynload/_multibytecodec.so",
-            "${libdir}/python2.7/lib-dynload/unicodedata.so",
-            "${libdir}/python2.7/locale.py",
-            "${libdir}/python2.7/stringprep.py",
-            "${libdir}/python2.7/xdrlib.py"
-        ],
+            "${libdir}/python2.7/bsddb", 
+            "${libdir}/python2.7/lib-dynload/_bsddb.so"
+        ]
+    }, 
+    "codecs": {
+        "summary": "Python codec", 
         "rdepends": [
-            "core",
-            "io",
+            "core", 
+            "io", 
             "lang"
-        ],
-        "summary": "Python codec"
-    },
+        ], 
+        "files": [
+            "${libdir}/python2.7/gettext.py", 
+            "${libdir}/python2.7/lib-dynload/_codecs_cn.so", 
+            "${libdir}/python2.7/lib-dynload/_codecs_hk.so", 
+            "${libdir}/python2.7/lib-dynload/_codecs_iso2022.so", 
+            "${libdir}/python2.7/lib-dynload/_codecs_jp.so", 
+            "${libdir}/python2.7/lib-dynload/_codecs_kr.so", 
+            "${libdir}/python2.7/lib-dynload/_codecs_tw.so", 
+            "${libdir}/python2.7/lib-dynload/_multibytecodec.so", 
+            "${libdir}/python2.7/lib-dynload/unicodedata.so", 
+            "${libdir}/python2.7/locale.py", 
+            "${libdir}/python2.7/stringprep.py", 
+            "${libdir}/python2.7/xdrlib.py"
+        ]
+    }, 
     "compile": {
-        "files": [
-            "${libdir}/python2.7/compileall.py",
-            "${libdir}/python2.7/py_compile.py"
-        ],
+        "summary": "Python bytecode compilation support", 
         "rdepends": [
             "core"
-        ],
-        "summary": "Python bytecode compilation support"
-    },
-    "compiler": {
+        ], 
         "files": [
-            "${libdir}/python2.7/compiler"
-        ],
+            "${libdir}/python2.7/compileall.py", 
+            "${libdir}/python2.7/py_compile.py"
+        ]
+    }, 
+    "compiler": {
+        "summary": "Python compiler support", 
         "rdepends": [
-            "core",
-            "io",
+            "core", 
+            "io", 
             "lang"
-        ],
-        "summary": "Python compiler support"
-    },
-    "compression": {
+        ], 
         "files": [
-            "${libdir}/python2.7/gzip.py",
-            "${libdir}/python2.7/lib-dynload/bz2.so",
-            "${libdir}/python2.7/tarfile.py",
-            "${libdir}/python2.7/zipfile.py"
-        ],
+            "${libdir}/python2.7/compiler"
+        ]
+    }, 
+    "compression": {
+        "summary": "Python high-level compression support", 
         "rdepends": [
-            "core",
-            "io",
-            "shell",
-            "unixadmin",
+            "core", 
+            "io", 
+            "shell", 
+            "unixadmin", 
             "zlib"
-        ],
-        "summary": "Python high-level compression support"
-    },
-    "contextlib": {
+        ], 
         "files": [
-            "${libdir}/python2.7/contextlib.py"
-        ],
+            "${libdir}/python2.7/gzip.py", 
+            "${libdir}/python2.7/lib-dynload/bz2.so", 
+            "${libdir}/python2.7/tarfile.py", 
+            "${libdir}/python2.7/zipfile.py"
+        ]
+    }, 
+    "contextlib": {
+        "summary": "Python utilities for with-statementcontexts.", 
         "rdepends": [
-            "core",
+            "core", 
             "lang"
-        ],
-        "summary": "Python utilities for with-statementcontexts."
-    },
-    "core": {
+        ], 
         "files": [
-            "${bindir}/python*",
-            "${includedir}/python2.7/pyconfig*.h",
-            "${libdir}/python2.7/ConfigParser.py",
-            "${libdir}/python2.7/UserDict.py",
-            "${libdir}/python2.7/UserList.py",
-            "${libdir}/python2.7/UserString.py",
-            "${libdir}/python2.7/__future__.py",
-            "${libdir}/python2.7/_abcoll.py",
-            "${libdir}/python2.7/_sysconfigdata.py",
-            "${libdir}/python2.7/_weakrefset.py",
-            "${libdir}/python2.7/abc.py",
-            "${libdir}/python2.7/ast.py",
-            "${libdir}/python2.7/atexit.py",
-            "${libdir}/python2.7/codecs.py",
-            "${libdir}/python2.7/collections.py",
-            "${libdir}/python2.7/copy.py",
-            "${libdir}/python2.7/copy_reg.py",
-            "${libdir}/python2.7/encodings",
-            "${libdir}/python2.7/encodings/aliases.py",
-            "${libdir}/python2.7/encodings/utf_8.py",
-            "${libdir}/python2.7/genericpath.py",
-            "${libdir}/python2.7/getopt.py",
-            "${libdir}/python2.7/heapq.py",
-            "${libdir}/python2.7/importlib",
-            "${libdir}/python2.7/keyword.py",
-            "${libdir}/python2.7/lib-dynload/_collections.so",
-            "${libdir}/python2.7/lib-dynload/_heapq.so",
-            "${libdir}/python2.7/lib-dynload/_locale.so",
-            "${libdir}/python2.7/lib-dynload/_struct.so",
-            "${libdir}/python2.7/lib-dynload/binascii.so",
-            "${libdir}/python2.7/lib-dynload/itertools.so",
-            "${libdir}/python2.7/lib-dynload/operator.so",
-            "${libdir}/python2.7/lib-dynload/readline.so",
-            "${libdir}/python2.7/lib-dynload/strop.so",
-            "${libdir}/python2.7/lib-dynload/time.so",
-            "${libdir}/python2.7/lib-dynload/xreadlines.so",
-            "${libdir}/python2.7/linecache.py",
-            "${libdir}/python2.7/new.py",
-            "${libdir}/python2.7/os.py",
-            "${libdir}/python2.7/platform.py",
-            "${libdir}/python2.7/posixpath.py",
-            "${libdir}/python2.7/re.py",
-            "${libdir}/python2.7/rlcompleter.py",
-            "${libdir}/python2.7/site.py",
-            "${libdir}/python2.7/sitecustomize.py",
-            "${libdir}/python2.7/sre_compile.py",
-            "${libdir}/python2.7/sre_constants.py",
-            "${libdir}/python2.7/sre_parse.py",
-            "${libdir}/python2.7/stat.py",
-            "${libdir}/python2.7/string.py",
-            "${libdir}/python2.7/struct.py",
-            "${libdir}/python2.7/sysconfig.py",
-            "${libdir}/python2.7/traceback.py",
-            "${libdir}/python2.7/types.py",
-            "${libdir}/python2.7/warnings.py",
+            "${libdir}/python2.7/contextlib.py"
+        ]
+    }, 
+    "core": {
+        "summary": "Python interpreter and core modules", 
+        "rdepends": [], 
+        "files": [
+            "${bindir}/python*", 
+            "${includedir}/python2.7/pyconfig*.h", 
+            "${libdir}/python2.7/ConfigParser.py", 
+            "${libdir}/python2.7/UserDict.py", 
+            "${libdir}/python2.7/UserList.py", 
+            "${libdir}/python2.7/UserString.py", 
+            "${libdir}/python2.7/__future__.py", 
+            "${libdir}/python2.7/_abcoll.py", 
+            "${libdir}/python2.7/_sysconfigdata.py", 
+            "${libdir}/python2.7/_weakrefset.py", 
+            "${libdir}/python2.7/abc.py", 
+            "${libdir}/python2.7/ast.py", 
+            "${libdir}/python2.7/atexit.py", 
+            "${libdir}/python2.7/codecs.py", 
+            "${libdir}/python2.7/collections.py", 
+            "${libdir}/python2.7/copy.py", 
+            "${libdir}/python2.7/copy_reg.py", 
+            "${libdir}/python2.7/encodings", 
+            "${libdir}/python2.7/encodings/aliases.py", 
+            "${libdir}/python2.7/encodings/utf_8.py", 
+            "${libdir}/python2.7/genericpath.py", 
+            "${libdir}/python2.7/getopt.py", 
+            "${libdir}/python2.7/heapq.py", 
+            "${libdir}/python2.7/importlib", 
+            "${libdir}/python2.7/keyword.py", 
+            "${libdir}/python2.7/lib-dynload/_collections.so", 
+            "${libdir}/python2.7/lib-dynload/_heapq.so", 
+            "${libdir}/python2.7/lib-dynload/_locale.so", 
+            "${libdir}/python2.7/lib-dynload/_struct.so", 
+            "${libdir}/python2.7/lib-dynload/binascii.so", 
+            "${libdir}/python2.7/lib-dynload/itertools.so", 
+            "${libdir}/python2.7/lib-dynload/operator.so", 
+            "${libdir}/python2.7/lib-dynload/readline.so", 
+            "${libdir}/python2.7/lib-dynload/strop.so", 
+            "${libdir}/python2.7/lib-dynload/time.so", 
+            "${libdir}/python2.7/lib-dynload/xreadlines.so", 
+            "${libdir}/python2.7/linecache.py", 
+            "${libdir}/python2.7/new.py", 
+            "${libdir}/python2.7/os.py", 
+            "${libdir}/python2.7/platform.py", 
+            "${libdir}/python2.7/posixpath.py", 
+            "${libdir}/python2.7/re.py", 
+            "${libdir}/python2.7/rlcompleter.py", 
+            "${libdir}/python2.7/site.py", 
+            "${libdir}/python2.7/sitecustomize.py", 
+            "${libdir}/python2.7/sre_compile.py", 
+            "${libdir}/python2.7/sre_constants.py", 
+            "${libdir}/python2.7/sre_parse.py", 
+            "${libdir}/python2.7/stat.py", 
+            "${libdir}/python2.7/string.py", 
+            "${libdir}/python2.7/struct.py", 
+            "${libdir}/python2.7/sysconfig.py", 
+            "${libdir}/python2.7/traceback.py", 
+            "${libdir}/python2.7/types.py", 
+            "${libdir}/python2.7/warnings.py", 
             "${libdir}/python2.7/weakref.py"
-        ],
-        "rdepends": [],
-        "summary": "Python interpreter and core modules"
-    },
+        ]
+    }, 
     "crypt": {
+        "summary": "Python basic cryptographic and hashing support", 
+        "rdepends": [
+            "core"
+        ], 
         "files": [
-            "${libdir}/python2.7/hashlib.py",
-            "${libdir}/python2.7/lib-dynload/_hashlib.so",
-            "${libdir}/python2.7/lib-dynload/crypt.so",
-            "${libdir}/python2.7/md5.py",
+            "${libdir}/python2.7/hashlib.py", 
+            "${libdir}/python2.7/lib-dynload/_hashlib.so", 
+            "${libdir}/python2.7/lib-dynload/crypt.so", 
+            "${libdir}/python2.7/md5.py", 
             "${libdir}/python2.7/sha.py"
-        ],
+        ]
+    }, 
+    "ctypes": {
+        "summary": "Python C types support", 
         "rdepends": [
             "core"
-        ],
-        "summary": "Python basic cryptographic and hashing support"
-    },
-    "ctypes": {
+        ], 
         "files": [
-            "${libdir}/python2.7/ctypes",
-            "${libdir}/python2.7/lib-dynload/_ctypes.so",
+            "${libdir}/python2.7/ctypes", 
+            "${libdir}/python2.7/lib-dynload/_ctypes.so", 
             "${libdir}/python2.7/lib-dynload/_ctypes_test.so"
-        ],
+        ]
+    }, 
+    "curses": {
+        "summary": "Python curses support", 
         "rdepends": [
             "core"
-        ],
-        "summary": "Python C types support"
-    },
-    "curses": {
+        ], 
         "files": [
-            "${libdir}/python2.7/curses",
-            "${libdir}/python2.7/lib-dynload/_curses.so",
+            "${libdir}/python2.7/curses", 
+            "${libdir}/python2.7/lib-dynload/_curses.so", 
             "${libdir}/python2.7/lib-dynload/_curses_panel.so"
-        ],
-        "rdepends": [
-            "core"
-        ],
-        "summary": "Python curses support"
-    },
+        ]
+    }, 
     "datetime": {
-        "files": [
-            "${libdir}/python2.7/_strptime.py",
-            "${libdir}/python2.7/calendar.py",
-            "${libdir}/python2.7/lib-dynload/datetime.so"
-        ],
+        "summary": "Python calendar and time support", 
         "rdepends": [
-            "codecs",
-            "core",
+            "codecs", 
+            "core", 
             "lang"
-        ],
-        "summary": "Python calendar and time support"
-    },
-    "db": {
+        ], 
         "files": [
-            "${libdir}/python2.7/anydbm.py",
-            "${libdir}/python2.7/dbhash.py",
-            "${libdir}/python2.7/dumbdbm.py",
-            "${libdir}/python2.7/lib-dynload/dbm.so",
-            "${libdir}/python2.7/whichdb.py"
-        ],
+            "${libdir}/python2.7/_strptime.py", 
+            "${libdir}/python2.7/calendar.py", 
+            "${libdir}/python2.7/lib-dynload/datetime.so"
+        ]
+    }, 
+    "db": {
+        "summary": "Python file-based database support", 
         "rdepends": [
-            "bsddb",
-            "core",
+            "bsddb", 
+            "core", 
             "gdbm"
-        ],
-        "summary": "Python file-based database support"
-    },
-    "debugger": {
+        ], 
         "files": [
-            "${libdir}/python2.7/bdb.py",
-            "${libdir}/python2.7/pdb.py"
-        ],
+            "${libdir}/python2.7/anydbm.py", 
+            "${libdir}/python2.7/dbhash.py", 
+            "${libdir}/python2.7/dumbdbm.py", 
+            "${libdir}/python2.7/lib-dynload/dbm.so", 
+            "${libdir}/python2.7/whichdb.py"
+        ]
+    }, 
+    "debugger": {
+        "summary": "Python debugger", 
         "rdepends": [
-            "core",
-            "io",
-            "lang",
-            "pprint",
+            "core", 
+            "io", 
+            "lang", 
+            "pprint", 
             "shell"
-        ],
-        "summary": "Python debugger"
-    },
+        ], 
+        "files": [
+            "${libdir}/python2.7/bdb.py", 
+            "${libdir}/python2.7/pdb.py"
+        ]
+    }, 
     "dev": {
         "files": [
-            "${base_libdir}/*.a",
-            "${base_libdir}/*.o",
-            "${datadir}/aclocal",
-            "${datadir}/pkgconfig",
-            "${includedir}",
-            "${libdir}/*.a",
-            "${libdir}/*.la",
-            "${libdir}/*.o",
-            "${libdir}/lib*${SOLIBSDEV}",
-            "${libdir}/pkgconfig",
+            "${base_libdir}/*.a", 
+            "${base_libdir}/*.o", 
+            "${datadir}/aclocal", 
+            "${datadir}/pkgconfig", 
+            "${includedir}", 
+            "${libdir}/*.a", 
+            "${libdir}/*.la", 
+            "${libdir}/*.o", 
+            "${libdir}/lib*${SOLIBSDEV}", 
+            "${libdir}/pkgconfig", 
             "${libdir}/python2.7/config/Makefile"
-        ],
+        ], 
         "rdepends": [
             "core"
-        ],
+        ], 
         "summary": "Python development package"
-    },
+    }, 
     "difflib": {
-        "files": [
-            "${libdir}/python2.7/difflib.py"
-        ],
+        "summary": "Python helpers for computing deltas between objects", 
         "rdepends": [
-            "core",
+            "core", 
             "lang"
-        ],
-        "summary": "Python helpers for computing deltas between objects"
-    },
-    "distutils": {
+        ], 
         "files": [
-            "${libdir}/python2.7/config",
-            "${libdir}/python2.7/distutils"
-        ],
+            "${libdir}/python2.7/difflib.py"
+        ]
+    }, 
+    "distutils": {
+        "summary": "Python Distribution Utilities", 
         "rdepends": [
             "core"
-        ],
-        "summary": "Python Distribution Utilities"
-    },
+        ], 
+        "files": [
+            "${libdir}/python2.7/config", 
+            "${libdir}/python2.7/distutils"
+        ]
+    }, 
     "distutils-staticdev": {
         "files": [
             "${libdir}/python2.7/config/lib*.a"
-        ],
+        ], 
         "rdepends": [
             "distutils"
-        ],
+        ], 
         "summary": "Python distribution utilities (static libraries)"
-    },
+    }, 
     "doctest": {
+        "summary": "Python framework for running examples in docstrings", 
+        "rdepends": [
+            "core", 
+            "crypt", 
+            "debugger", 
+            "difflib", 
+            "fcntl", 
+            "io", 
+            "lang", 
+            "math", 
+            "pprint", 
+            "shell", 
+            "unittest"
+        ], 
         "files": [
             "${libdir}/python2.7/doctest.py"
-        ],
-        "rdepends": [
-            "core",
-            "crypt",
-            "debugger",
-            "difflib",
-            "fcntl",
-            "io",
-            "lang",
-            "math",
-            "pprint",
-            "shell",
-            "unittest"
-        ],
-        "summary": "Python framework for running examples in docstrings"
-    },
+        ]
+    }, 
     "email": {
+        "summary": "Python email support", 
+        "rdepends": [
+            "contextlib", 
+            "core", 
+            "crypt", 
+            "fcntl", 
+            "io", 
+            "lang", 
+            "math", 
+            "netclient", 
+            "pickle", 
+            "subprocess", 
+            "textutils", 
+            "threading"
+        ], 
         "files": [
-            "${libdir}/python2.7/email",
+            "${libdir}/python2.7/email", 
             "${libdir}/python2.7/imaplib.py"
-        ],
-        "rdepends": [
-            "contextlib",
-            "core",
-            "crypt",
-            "fcntl",
-            "io",
-            "lang",
-            "math",
-            "netclient",
-            "pickle",
-            "subprocess",
-            "textutils"
-        ],
-        "summary": "Python email support"
-    },
+        ]
+    }, 
     "fcntl": {
+        "summary": "Python's fcntl interface", 
+        "rdepends": [
+            "core"
+        ], 
         "files": [
             "${libdir}/python2.7/lib-dynload/fcntl.so"
-        ],
+        ]
+    }, 
+    "gdbm": {
+        "summary": "Python GNU database support", 
         "rdepends": [
             "core"
-        ],
-        "summary": "Python's fcntl interface"
-    },
-    "gdbm": {
+        ], 
         "files": [
             "${libdir}/python2.7/lib-dynload/gdbm.so"
-        ],
+        ]
+    }, 
+    "hotshot": {
+        "summary": "Python hotshot performance profiler", 
         "rdepends": [
             "core"
-        ],
-        "summary": "Python GNU database support"
-    },
-    "hotshot": {
+        ], 
         "files": [
-            "${libdir}/python2.7/hotshot",
+            "${libdir}/python2.7/hotshot", 
             "${libdir}/python2.7/lib-dynload/_hotshot.so"
-        ],
+        ]
+    }, 
+    "html": {
+        "summary": "Python HTML processing support", 
         "rdepends": [
             "core"
-        ],
-        "summary": "Python hotshot performance profiler"
-    },
-    "html": {
+        ], 
         "files": [
-            "${libdir}/python2.7/HTMLParser.py",
-            "${libdir}/python2.7/formatter.py",
-            "${libdir}/python2.7/htmlentitydefs.py",
-            "${libdir}/python2.7/htmllib.py",
-            "${libdir}/python2.7/markupbase.py",
+            "${libdir}/python2.7/HTMLParser.py", 
+            "${libdir}/python2.7/formatter.py", 
+            "${libdir}/python2.7/htmlentitydefs.py", 
+            "${libdir}/python2.7/htmllib.py", 
+            "${libdir}/python2.7/markupbase.py", 
             "${libdir}/python2.7/sgmllib.py"
-        ],
+        ]
+    }, 
+    "idle": {
+        "summary": "Python Integrated Development Environment", 
         "rdepends": [
             "core"
-        ],
-        "summary": "Python HTML processing support"
-    },
-    "idle": {
+        ], 
         "files": [
-            "${bindir}/idle",
+            "${bindir}/idle", 
             "${libdir}/python2.7/idlelib"
-        ],
+        ]
+    }, 
+    "image": {
+        "summary": "Python graphical image handling", 
         "rdepends": [
             "core"
-        ],
-        "summary": "Python Integrated Development Environment"
-    },
-    "image": {
+        ], 
         "files": [
-            "${libdir}/python2.7/colorsys.py",
+            "${libdir}/python2.7/colorsys.py", 
             "${libdir}/python2.7/imghdr.py"
-        ],
-        "rdepends": [
-            "core"
-        ],
-        "summary": "Python graphical image handling"
-    },
+        ]
+    }, 
     "io": {
-        "files": [
-            "${libdir}/python2.7/StringIO.py",
-            "${libdir}/python2.7/_pyio.py",
-            "${libdir}/python2.7/io.py",
-            "${libdir}/python2.7/lib-dynload/_io.so",
-            "${libdir}/python2.7/lib-dynload/_socket.so",
-            "${libdir}/python2.7/lib-dynload/_ssl.so",
-            "${libdir}/python2.7/lib-dynload/cStringIO.so",
-            "${libdir}/python2.7/lib-dynload/select.so",
-            "${libdir}/python2.7/lib-dynload/termios.so",
-            "${libdir}/python2.7/pipes.py",
-            "${libdir}/python2.7/socket.py",
-            "${libdir}/python2.7/ssl.py",
-            "${libdir}/python2.7/tempfile.py"
-        ],
-        "rdepends": [
-            "contextlib",
-            "core",
-            "crypt",
-            "fcntl",
-            "lang",
-            "math",
-            "netclient",
+        "summary": "Python low-level I/O", 
+        "rdepends": [
+            "contextlib", 
+            "core", 
+            "crypt", 
+            "fcntl", 
+            "lang", 
+            "math", 
+            "netclient", 
             "textutils"
-        ],
-        "summary": "Python low-level I/O"
-    },
+        ], 
+        "files": [
+            "${libdir}/python2.7/StringIO.py", 
+            "${libdir}/python2.7/_pyio.py", 
+            "${libdir}/python2.7/io.py", 
+            "${libdir}/python2.7/lib-dynload/_io.so", 
+            "${libdir}/python2.7/lib-dynload/_socket.so", 
+            "${libdir}/python2.7/lib-dynload/_ssl.so", 
+            "${libdir}/python2.7/lib-dynload/cStringIO.so", 
+            "${libdir}/python2.7/lib-dynload/select.so", 
+            "${libdir}/python2.7/lib-dynload/termios.so", 
+            "${libdir}/python2.7/pipes.py", 
+            "${libdir}/python2.7/socket.py", 
+            "${libdir}/python2.7/ssl.py", 
+            "${libdir}/python2.7/tempfile.py"
+        ]
+    }, 
     "json": {
-        "files": [
-            "${libdir}/python2.7/json",
-            "${libdir}/python2.7/lib-dynload/_json.so"
-        ],
+        "summary": "Python JSON support", 
         "rdepends": [
             "core"
-        ],
-        "summary": "Python JSON support"
-    },
-    "lang": {
+        ], 
         "files": [
-            "${libdir}/python2.7/bisect.py",
-            "${libdir}/python2.7/code.py",
-            "${libdir}/python2.7/codeop.py",
-            "${libdir}/python2.7/dis.py",
-            "${libdir}/python2.7/functools.py",
-            "${libdir}/python2.7/inspect.py",
-            "${libdir}/python2.7/lib-dynload/_bisect.so",
-            "${libdir}/python2.7/lib-dynload/_functools.so",
-            "${libdir}/python2.7/lib-dynload/array.so",
-            "${libdir}/python2.7/lib-dynload/parser.so",
-            "${libdir}/python2.7/opcode.py",
-            "${libdir}/python2.7/repr.py",
-            "${libdir}/python2.7/symbol.py",
-            "${libdir}/python2.7/token.py",
-            "${libdir}/python2.7/tokenize.py"
-        ],
+            "${libdir}/python2.7/json", 
+            "${libdir}/python2.7/lib-dynload/_json.so"
+        ]
+    }, 
+    "lang": {
+        "summary": "Python low-level language support", 
         "rdepends": [
             "core"
-        ],
-        "summary": "Python low-level language support"
-    },
+        ], 
+        "files": [
+            "${libdir}/python2.7/bisect.py", 
+            "${libdir}/python2.7/code.py", 
+            "${libdir}/python2.7/codeop.py", 
+            "${libdir}/python2.7/dis.py", 
+            "${libdir}/python2.7/functools.py", 
+            "${libdir}/python2.7/inspect.py", 
+            "${libdir}/python2.7/lib-dynload/_bisect.so", 
+            "${libdir}/python2.7/lib-dynload/_functools.so", 
+            "${libdir}/python2.7/lib-dynload/array.so", 
+            "${libdir}/python2.7/lib-dynload/parser.so", 
+            "${libdir}/python2.7/opcode.py", 
+            "${libdir}/python2.7/repr.py", 
+            "${libdir}/python2.7/symbol.py", 
+            "${libdir}/python2.7/token.py", 
+            "${libdir}/python2.7/tokenize.py"
+        ]
+    }, 
     "logging": {
-        "files": [
-            "${libdir}/python2.7/logging"
-        ],
+        "summary": "Python logging support", 
         "rdepends": [
-            "core",
-            "io",
+            "core", 
+            "io", 
             "threading"
-        ],
-        "summary": "Python logging support"
-    },
+        ], 
+        "files": [
+            "${libdir}/python2.7/logging"
+        ]
+    }, 
     "mailbox": {
+        "summary": "Python mailbox format support", 
+        "rdepends": [
+            "codecs", 
+            "contextlib", 
+            "core", 
+            "crypt", 
+            "datetime", 
+            "email", 
+            "fcntl", 
+            "io", 
+            "lang", 
+            "math", 
+            "mime", 
+            "netclient", 
+            "textutils"
+        ], 
         "files": [
             "${libdir}/python2.7/mailbox.py"
-        ],
-        "rdepends": [
-            "codecs",
-            "contextlib",
-            "core",
-            "crypt",
-            "datetime",
-            "email",
-            "fcntl",
-            "io",
-            "lang",
-            "math",
-            "mime",
-            "netclient",
-            "textutils"
-        ],
-        "summary": "Python mailbox format support"
-    },
+        ]
+    }, 
     "math": {
-        "files": [
-            "${libdir}/python2.7/lib-dynload/_random.so",
-            "${libdir}/python2.7/lib-dynload/cmath.so",
-            "${libdir}/python2.7/lib-dynload/math.so",
-            "${libdir}/python2.7/random.py",
-            "${libdir}/python2.7/sets.py"
-        ],
+        "summary": "Python math support", 
         "rdepends": [
-            "core",
+            "core", 
             "crypt"
-        ],
-        "summary": "Python math support"
-    },
+        ], 
+        "files": [
+            "${libdir}/python2.7/lib-dynload/_random.so", 
+            "${libdir}/python2.7/lib-dynload/cmath.so", 
+            "${libdir}/python2.7/lib-dynload/math.so", 
+            "${libdir}/python2.7/random.py", 
+            "${libdir}/python2.7/sets.py"
+        ]
+    }, 
     "mime": {
+        "summary": "Python MIME handling APIs", 
+        "rdepends": [
+            "contextlib", 
+            "core", 
+            "crypt", 
+            "fcntl", 
+            "io", 
+            "lang", 
+            "math", 
+            "netclient", 
+            "textutils"
+        ], 
         "files": [
-            "${libdir}/python2.7/MimeWriter.py",
-            "${libdir}/python2.7/mimetools.py",
-            "${libdir}/python2.7/mimetypes.py",
-            "${libdir}/python2.7/quopri.py",
-            "${libdir}/python2.7/rfc822.py",
+            "${libdir}/python2.7/MimeWriter.py", 
+            "${libdir}/python2.7/mimetools.py", 
+            "${libdir}/python2.7/mimetypes.py", 
+            "${libdir}/python2.7/quopri.py", 
+            "${libdir}/python2.7/rfc822.py", 
             "${libdir}/python2.7/uu.py"
-        ],
-        "rdepends": [
-            "contextlib",
-            "core",
-            "crypt",
-            "fcntl",
-            "io",
-            "lang",
-            "math",
-            "netclient",
-            "textutils"
-        ],
-        "summary": "Python MIME handling APIs"
-    },
+        ]
+    }, 
     "mmap": {
-        "files": [
-            "${libdir}/python2.7/lib-dynload/mmap.so"
-        ],
+        "summary": "Python memory-mapped file support", 
         "rdepends": [
             "core"
-        ],
-        "summary": "Python memory-mapped file support"
-    },
+        ], 
+        "files": [
+            "${libdir}/python2.7/lib-dynload/mmap.so"
+        ]
+    }, 
     "modules": {
-        "files": [],
-        "rdepends": [
-            "2to3",
-            "argparse",
-            "audio",
-            "bsddb",
-            "codecs",
-            "compile",
-            "compiler",
-            "compression",
-            "contextlib",
-            "core",
-            "crypt",
-            "ctypes",
-            "curses",
-            "datetime",
-            "db",
-            "debugger",
-            "difflib",
-            "distutils",
-            "doctest",
-            "email",
-            "fcntl",
-            "gdbm",
-            "hotshot",
-            "html",
-            "idle",
-            "image",
-            "io",
-            "json",
-            "lang",
-            "logging",
-            "mailbox",
-            "math",
-            "mime",
-            "mmap",
-            "multiprocessing",
-            "netclient",
-            "netserver",
-            "numbers",
-            "pickle",
-            "pkgutil",
-            "plistlib",
-            "pprint",
-            "profile",
-            "pydoc",
-            "re",
-            "resource",
-            "robotparser",
-            "runpy",
-            "shell",
-            "smtpd",
-            "sqlite3",
-            "sqlite3",
-            "stringold",
-            "subprocess",
-            "syslog",
-            "terminal",
-            "textutils",
-            "threading",
-            "tkinter",
-            "unittest",
-            "unixadmin",
-            "xml",
-            "xmlrpc",
+        "files": [], 
+        "rdepends": [
+            "2to3", 
+            "argparse", 
+            "audio", 
+            "bsddb", 
+            "codecs", 
+            "compile", 
+            "compiler", 
+            "compression", 
+            "contextlib", 
+            "core", 
+            "crypt", 
+            "ctypes", 
+            "curses", 
+            "datetime", 
+            "db", 
+            "debugger", 
+            "difflib", 
+            "distutils", 
+            "doctest", 
+            "email", 
+            "fcntl", 
+            "gdbm", 
+            "hotshot", 
+            "html", 
+            "idle", 
+            "image", 
+            "io", 
+            "json", 
+            "lang", 
+            "logging", 
+            "mailbox", 
+            "math", 
+            "mime", 
+            "mmap", 
+            "multiprocessing", 
+            "netclient", 
+            "netserver", 
+            "numbers", 
+            "pickle", 
+            "pkgutil", 
+            "plistlib", 
+            "pprint", 
+            "profile", 
+            "pydoc", 
+            "re", 
+            "resource", 
+            "robotparser", 
+            "runpy", 
+            "shell", 
+            "smtpd", 
+            "sqlite3", 
+            "sqlite3", 
+            "stringold", 
+            "subprocess", 
+            "syslog", 
+            "terminal", 
+            "textutils", 
+            "threading", 
+            "tkinter", 
+            "unittest", 
+            "unixadmin", 
+            "xml", 
+            "xmlrpc", 
             "zlib"
-        ],
+        ], 
         "summary": "All Python modules"
-    },
+    }, 
     "multiprocessing": {
-        "files": [
-            "${libdir}/python2.7/lib-dynload/_multiprocessing.so",
-            "${libdir}/python2.7/multiprocessing"
-        ],
+        "summary": "Python multiprocessing support", 
         "rdepends": [
-            "core",
-            "fcntl",
-            "io",
-            "pickle",
-            "subprocess",
+            "core", 
+            "fcntl", 
+            "io", 
+            "pickle", 
+            "subprocess", 
             "threading"
-        ],
-        "summary": "Python multiprocessing support"
-    },
-    "netclient": {
+        ], 
         "files": [
-            "${libdir}/python2.7/Cookie.py",
-            "${libdir}/python2.7/_LWPCookieJar.py",
-            "${libdir}/python2.7/_MozillaCookieJar.py",
-            "${libdir}/python2.7/base64.py",
-            "${libdir}/python2.7/cookielib.py",
-            "${libdir}/python2.7/ftplib.py",
-            "${libdir}/python2.7/hmac.py",
-            "${libdir}/python2.7/httplib.py",
-            "${libdir}/python2.7/nntplib.py",
-            "${libdir}/python2.7/poplib.py",
-            "${libdir}/python2.7/smtplib.py",
-            "${libdir}/python2.7/telnetlib.py",
-            "${libdir}/python2.7/urllib.py",
-            "${libdir}/python2.7/urllib2.py",
-            "${libdir}/python2.7/urlparse.py",
-            "${libdir}/python2.7/uuid.py"
-        ],
-        "rdepends": [
-            "codecs",
-            "contextlib",
-            "core",
-            "crypt",
-            "ctypes",
-            "datetime",
-            "email",
-            "fcntl",
-            "io",
-            "lang",
-            "math",
-            "mime",
-            "pickle",
-            "subprocess",
-            "textutils",
+            "${libdir}/python2.7/lib-dynload/_multiprocessing.so", 
+            "${libdir}/python2.7/multiprocessing"
+        ]
+    }, 
+    "netclient": {
+        "summary": "Python Internet Protocol clients", 
+        "rdepends": [
+            "codecs", 
+            "contextlib", 
+            "core", 
+            "crypt", 
+            "ctypes", 
+            "datetime", 
+            "email", 
+            "fcntl", 
+            "io", 
+            "lang", 
+            "math", 
+            "mime", 
+            "pickle", 
+            "subprocess", 
+            "textutils", 
             "threading"
-        ],
-        "summary": "Python Internet Protocol clients"
-    },
+        ], 
+        "files": [
+            "${libdir}/python2.7/Cookie.py", 
+            "${libdir}/python2.7/_LWPCookieJar.py", 
+            "${libdir}/python2.7/_MozillaCookieJar.py", 
+            "${libdir}/python2.7/base64.py", 
+            "${libdir}/python2.7/cookielib.py", 
+            "${libdir}/python2.7/ftplib.py", 
+            "${libdir}/python2.7/hmac.py", 
+            "${libdir}/python2.7/httplib.py", 
+            "${libdir}/python2.7/nntplib.py", 
+            "${libdir}/python2.7/poplib.py", 
+            "${libdir}/python2.7/smtplib.py", 
+            "${libdir}/python2.7/telnetlib.py", 
+            "${libdir}/python2.7/urllib.py", 
+            "${libdir}/python2.7/urllib2.py", 
+            "${libdir}/python2.7/urlparse.py", 
+            "${libdir}/python2.7/uuid.py"
+        ]
+    }, 
     "netserver": {
+        "summary": "Python Internet Protocol servers", 
+        "rdepends": [
+            "compression", 
+            "contextlib", 
+            "core", 
+            "crypt", 
+            "fcntl", 
+            "io", 
+            "lang", 
+            "math", 
+            "mime", 
+            "netclient", 
+            "shell", 
+            "textutils", 
+            "threading", 
+            "unixadmin", 
+            "zlib"
+        ], 
         "files": [
-            "${libdir}/python2.7/BaseHTTPServer.py",
-            "${libdir}/python2.7/CGIHTTPServer.py",
-            "${libdir}/python2.7/SimpleHTTPServer.py",
-            "${libdir}/python2.7/SocketServer.py",
+            "${libdir}/python2.7/BaseHTTPServer.py", 
+            "${libdir}/python2.7/CGIHTTPServer.py", 
+            "${libdir}/python2.7/SimpleHTTPServer.py", 
+            "${libdir}/python2.7/SocketServer.py", 
             "${libdir}/python2.7/cgi.py"
-        ],
-        "rdepends": [
-            "compression",
-            "contextlib",
-            "core",
-            "crypt",
-            "fcntl",
-            "io",
-            "lang",
-            "math",
-            "mime",
-            "netclient",
-            "shell",
-            "textutils",
-            "threading",
-            "unixadmin",
-            "zlib"
-        ],
-        "summary": "Python Internet Protocol servers"
-    },
+        ]
+    }, 
     "numbers": {
-        "files": [
-            "${libdir}/python2.7/decimal.py",
-            "${libdir}/python2.7/fractions.py",
-            "${libdir}/python2.7/numbers.py"
-        ],
+        "summary": "Python number APIs", 
         "rdepends": [
-            "codecs",
-            "core",
-            "lang",
-            "math",
+            "codecs", 
+            "core", 
+            "lang", 
+            "math", 
             "threading"
-        ],
-        "summary": "Python number APIs"
-    },
-    "pickle": {
+        ], 
         "files": [
-            "${libdir}/python2.7/lib-dynload/cPickle.so",
-            "${libdir}/python2.7/pickle.py",
-            "${libdir}/python2.7/pickletools.py",
-            "${libdir}/python2.7/shelve.py"
-        ],
+            "${libdir}/python2.7/decimal.py", 
+            "${libdir}/python2.7/fractions.py", 
+            "${libdir}/python2.7/numbers.py"
+        ]
+    }, 
+    "pickle": {
+        "summary": "Python serialisation/persistence support", 
         "rdepends": [
-            "core",
+            "core", 
             "io"
-        ],
-        "summary": "Python serialisation/persistence support"
-    },
-    "pkgutil": {
+        ], 
         "files": [
-            "${libdir}/python2.7/pkgutil.py"
-        ],
+            "${libdir}/python2.7/lib-dynload/cPickle.so", 
+            "${libdir}/python2.7/pickle.py", 
+            "${libdir}/python2.7/pickletools.py", 
+            "${libdir}/python2.7/shelve.py"
+        ]
+    }, 
+    "pkgutil": {
+        "summary": "Python package extension utility support", 
         "rdepends": [
             "core"
-        ],
-        "summary": "Python package extension utility support"
-    },
+        ], 
+        "files": [
+            "${libdir}/python2.7/pkgutil.py"
+        ]
+    }, 
     "plistlib": {
+        "summary": "Generate and parse Mac OS X .plist files", 
+        "rdepends": [
+            "core", 
+            "datetime", 
+            "io"
+        ], 
         "files": [
             "${libdir}/python2.7/plistlib.py"
-        ],
+        ]
+    }, 
+    "pprint": {
+        "summary": "Python pretty-print support", 
         "rdepends": [
-            "core",
-            "datetime",
+            "core", 
             "io"
-        ],
-        "summary": "Generate and parse Mac OS X .plist files"
-    },
-    "pprint": {
+        ], 
         "files": [
             "${libdir}/python2.7/pprint.py"
-        ],
-        "rdepends": [
-            "core",
-            "io"
-        ],
-        "summary": "Python pretty-print support"
-    },
+        ]
+    }, 
     "profile": {
-        "files": [
-            "${libdir}/python2.7/cProfile.py",
-            "${libdir}/python2.7/lib-dynload/_lsprof.so",
-            "${libdir}/python2.7/profile.py",
-            "${libdir}/python2.7/pstats.py"
-        ],
+        "summary": "Python basic performance profiling support", 
         "rdepends": [
-            "codecs",
-            "core",
-            "lang",
-            "resource",
+            "codecs", 
+            "core", 
+            "lang", 
+            "resource", 
             "textutils"
-        ],
-        "summary": "Python basic performance profiling support"
-    },
-    "pydoc": {
+        ], 
         "files": [
-            "${bindir}/pydoc",
-            "${libdir}/python2.7/pydoc.py",
-            "${libdir}/python2.7/pydoc_data"
-        ],
+            "${libdir}/python2.7/cProfile.py", 
+            "${libdir}/python2.7/lib-dynload/_lsprof.so", 
+            "${libdir}/python2.7/profile.py", 
+            "${libdir}/python2.7/pstats.py"
+        ]
+    }, 
+    "pydoc": {
+        "summary": "Python interactive help support", 
         "rdepends": [
-            "codecs",
-            "core",
-            "lang",
+            "codecs", 
+            "core", 
+            "lang", 
             "pkgutil"
-        ],
-        "summary": "Python interactive help support"
-    },
+        ], 
+        "files": [
+            "${bindir}/pydoc", 
+            "${libdir}/python2.7/pydoc.py", 
+            "${libdir}/python2.7/pydoc_data"
+        ]
+    }, 
     "re": {
+        "summary": "Python Regular Expression APIs", 
+        "rdepends": [
+            "core"
+        ], 
         "files": [
             "${libdir}/python2.7/sre.py"
-        ],
+        ]
+    }, 
+    "resource": {
+        "summary": "Python resource control interface", 
         "rdepends": [
             "core"
-        ],
-        "summary": "Python Regular Expression APIs"
-    },
-    "resource": {
+        ], 
         "files": [
             "${libdir}/python2.7/lib-dynload/resource.so"
-        ],
-        "rdepends": [
-            "core"
-        ],
-        "summary": "Python resource control interface"
-    },
+        ]
+    }, 
     "robotparser": {
-        "files": [
-            "${libdir}/python2.7/robotparser.py"
-        ],
+        "summary": "Python robots.txt parser", 
         "rdepends": [
-            "contextlib",
-            "core",
-            "io",
-            "lang",
-            "netclient",
+            "contextlib", 
+            "core", 
+            "io", 
+            "lang", 
+            "netclient", 
             "textutils"
-        ],
-        "summary": "Python robots.txt parser"
-    },
-    "runpy": {
+        ], 
         "files": [
-            "${libdir}/python2.7/runpy.py"
-        ],
+            "${libdir}/python2.7/robotparser.py"
+        ]
+    }, 
+    "runpy": {
+        "summary": "Python helper for locating/executing scripts in module namespace", 
         "rdepends": [
-            "core",
+            "core", 
             "pkgutil"
-        ],
-        "summary": "Python helper for locating/executing scripts in module namespace"
-    },
-    "shell": {
+        ], 
         "files": [
-            "${libdir}/python2.7/cmd.py",
-            "${libdir}/python2.7/commands.py",
-            "${libdir}/python2.7/dircache.py",
-            "${libdir}/python2.7/fnmatch.py",
-            "${libdir}/python2.7/glob.py",
-            "${libdir}/python2.7/popen2.py",
-            "${libdir}/python2.7/shlex.py",
-            "${libdir}/python2.7/shutil.py"
-        ],
+            "${libdir}/python2.7/runpy.py"
+        ]
+    }, 
+    "shell": {
+        "summary": "Python shell-like functionality", 
         "rdepends": [
-            "compression",
-            "core",
-            "io",
-            "unixadmin",
+            "compression", 
+            "core", 
+            "io", 
+            "unixadmin", 
             "zlib"
-        ],
-        "summary": "Python shell-like functionality"
-    },
+        ], 
+        "files": [
+            "${libdir}/python2.7/cmd.py", 
+            "${libdir}/python2.7/commands.py", 
+            "${libdir}/python2.7/dircache.py", 
+            "${libdir}/python2.7/fnmatch.py", 
+            "${libdir}/python2.7/glob.py", 
+            "${libdir}/python2.7/popen2.py", 
+            "${libdir}/python2.7/shlex.py", 
+            "${libdir}/python2.7/shutil.py"
+        ]
+    }, 
     "smtpd": {
-        "files": [
-            "${bindir}/smtpd.py",
-            "${libdir}/python2.7/asynchat.py",
-            "${libdir}/python2.7/asyncore.py",
-            "${libdir}/python2.7/smtpd.py"
-        ],
+        "summary": "Python Simple Mail Transport Daemon", 
         "rdepends": [
-            "core",
-            "fcntl",
-            "io",
+            "core", 
+            "fcntl", 
+            "io", 
             "lang"
-        ],
-        "summary": "Python Simple Mail Transport Daemon"
-    },
-    "sqlite3": {
+        ], 
         "files": [
-            "${libdir}/python2.7/lib-dynload/_sqlite3.so"
-        ],
+            "${bindir}/smtpd.py", 
+            "${libdir}/python2.7/asynchat.py", 
+            "${libdir}/python2.7/asyncore.py", 
+            "${libdir}/python2.7/smtpd.py"
+        ]
+    }, 
+    "sqlite3": {
+        "summary": "Python Sqlite3 database support", 
         "rdepends": [
             "core"
-        ],
-        "summary": "Python Sqlite3 database support"
-    },
-    "sqlite3-tests": {
+        ], 
         "files": [
-            "${libdir}/python2.7/sqlite3/test"
-        ],
+            "${libdir}/python2.7/lib-dynload/_sqlite3.so"
+        ]
+    }, 
+    "sqlite3-tests": {
+        "summary": "Python Sqlite3 database support tests", 
         "rdepends": [
-            "core",
+            "core", 
             "tests"
-        ],
-        "summary": "Python Sqlite3 database support tests"
-    },
-    "stringold": {
+        ], 
         "files": [
-            "${libdir}/python2.7/stringold.py"
-        ],
+            "${libdir}/python2.7/sqlite3/test"
+        ]
+    }, 
+    "stringold": {
+        "summary": "Python string APIs [deprecated]", 
         "rdepends": [
             "core"
-        ],
-        "summary": "Python string APIs [deprecated]"
-    },
+        ], 
+        "files": [
+            "${libdir}/python2.7/stringold.py"
+        ]
+    }, 
     "subprocess": {
+        "summary": "Python subprocess support", 
+        "rdepends": [
+            "core", 
+            "fcntl", 
+            "io", 
+            "pickle", 
+            "threading"
+        ], 
         "files": [
             "${libdir}/python2.7/subprocess.py"
-        ],
-        "rdepends": [
-            "core",
-            "fcntl",
-            "io",
-            "pickle"
-        ],
-        "summary": "Python subprocess support"
-    },
+        ]
+    }, 
     "syslog": {
-        "files": [
-            "${libdir}/python2.7/lib-dynload/syslog.so"
-        ],
+        "summary": "Python syslog interface", 
         "rdepends": [
             "core"
-        ],
-        "summary": "Python syslog interface"
-    },
-    "terminal": {
+        ], 
         "files": [
-            "${libdir}/python2.7/pty.py",
-            "${libdir}/python2.7/tty.py"
-        ],
+            "${libdir}/python2.7/lib-dynload/syslog.so"
+        ]
+    }, 
+    "terminal": {
+        "summary": "Python terminal controlling support", 
         "rdepends": [
-            "core",
+            "core", 
             "io"
-        ],
-        "summary": "Python terminal controlling support"
-    },
-    "tests": {
+        ], 
         "files": [
-            "${libdir}/python2.7/test"
-        ],
+            "${libdir}/python2.7/pty.py", 
+            "${libdir}/python2.7/tty.py"
+        ]
+    }, 
+    "tests": {
+        "summary": "Python tests", 
         "rdepends": [
             "core"
-        ],
-        "summary": "Python tests"
-    },
-    "textutils": {
+        ], 
         "files": [
-            "${libdir}/python2.7/csv.py",
-            "${libdir}/python2.7/lib-dynload/_csv.so",
-            "${libdir}/python2.7/optparse.py",
-            "${libdir}/python2.7/textwrap.py"
-        ],
+            "${libdir}/python2.7/test"
+        ]
+    }, 
+    "textutils": {
+        "summary": "Python option parsin", 
         "rdepends": [
-            "codecs",
-            "core",
-            "io",
+            "codecs", 
+            "core", 
+            "io", 
             "lang"
-        ],
-        "summary": "Python option parsin"
-    },
+        ], 
+        "files": [
+            "${libdir}/python2.7/csv.py", 
+            "${libdir}/python2.7/lib-dynload/_csv.so", 
+            "${libdir}/python2.7/optparse.py", 
+            "${libdir}/python2.7/textwrap.py"
+        ]
+    }, 
     "threading": {
+        "summary": "Python threading & synchronization support", 
+        "rdepends": [
+            "core"
+        ], 
         "files": [
-            "${libdir}/python2.7/Queue.py",
-            "${libdir}/python2.7/_threading_local.py",
-            "${libdir}/python2.7/dummy_thread.py",
-            "${libdir}/python2.7/dummy_threading.py",
-            "${libdir}/python2.7/mutex.py",
+            "${libdir}/python2.7/Queue.py", 
+            "${libdir}/python2.7/_threading_local.py", 
+            "${libdir}/python2.7/dummy_thread.py", 
+            "${libdir}/python2.7/dummy_threading.py", 
+            "${libdir}/python2.7/mutex.py", 
             "${libdir}/python2.7/threading.py"
-        ],
+        ]
+    }, 
+    "tkinter": {
+        "summary": "Python Tcl/Tk bindings", 
         "rdepends": [
             "core"
-        ],
-        "summary": "Python threading & synchronization support"
-    },
-    "tkinter": {
+        ], 
         "files": [
             "${libdir}/python2.7/lib-tk"
-        ],
-        "rdepends": [
-            "core"
-        ],
-        "summary": "Python Tcl/Tk bindings"
-    },
+        ]
+    }, 
     "unittest": {
-        "files": [
-            "${libdir}/python2.7/unittest"
-        ],
+        "summary": "Python unit testing framework", 
         "rdepends": [
-            "core",
-            "difflib",
-            "io",
-            "lang",
-            "pprint",
+            "core", 
+            "difflib", 
+            "io", 
+            "lang", 
+            "pprint", 
             "shell"
-        ],
-        "summary": "Python unit testing framework"
-    },
-    "unixadmin": {
+        ], 
         "files": [
-            "${libdir}/python2.7/getpass.py",
-            "${libdir}/python2.7/lib-dynload/grp.so",
-            "${libdir}/python2.7/lib-dynload/nis.so"
-        ],
+            "${libdir}/python2.7/unittest"
+        ]
+    }, 
+    "unixadmin": {
+        "summary": "Python Unix administration support", 
         "rdepends": [
-            "core",
+            "core", 
             "io"
-        ],
-        "summary": "Python Unix administration support"
-    },
-    "xml": {
+        ], 
         "files": [
-            "${libdir}/python2.7/lib-dynload/_elementtree.so",
-            "${libdir}/python2.7/lib-dynload/pyexpat.so",
-            "${libdir}/python2.7/xml"
-        ],
+            "${libdir}/python2.7/getpass.py", 
+            "${libdir}/python2.7/lib-dynload/grp.so", 
+            "${libdir}/python2.7/lib-dynload/nis.so"
+        ]
+    }, 
+    "xml": {
+        "summary": "Python basic XML support", 
         "rdepends": [
             "core"
-        ],
-        "summary": "Python basic XML support"
-    },
+        ], 
+        "files": [
+            "${libdir}/python2.7/lib-dynload/_elementtree.so", 
+            "${libdir}/python2.7/lib-dynload/pyexpat.so", 
+            "${libdir}/python2.7/xml"
+        ]
+    }, 
     "xmlrpc": {
+        "summary": "Python XML-RPC support", 
+        "rdepends": [
+            "codecs", 
+            "compression", 
+            "contextlib", 
+            "core", 
+            "crypt", 
+            "datetime", 
+            "fcntl", 
+            "io", 
+            "lang", 
+            "math", 
+            "mime", 
+            "netclient", 
+            "netserver", 
+            "pkgutil", 
+            "pydoc", 
+            "textutils", 
+            "threading", 
+            "xml", 
+            "zlib"
+        ], 
         "files": [
-            "${libdir}/python2.7/DocXMLRPCServer.py",
+            "${libdir}/python2.7/DocXMLRPCServer.py", 
             "${libdir}/python2.7/SimpleXMLRPCServer.py"
-        ],
-        "rdepends": [
-            "codecs",
-            "compression",
-            "contextlib",
-            "core",
-            "crypt",
-            "datetime",
-            "fcntl",
-            "io",
-            "lang",
-            "math",
-            "mime",
-            "netclient",
-            "netserver",
-            "pkgutil",
-            "pydoc",
-            "textutils",
-            "threading",
-            "xml",
-            "zlib"
-        ],
-        "summary": "Python XML-RPC support"
-    },
+        ]
+    }, 
     "zlib": {
-        "files": [
-            "${libdir}/python2.7/lib-dynload/zlib.so"
-        ],
+        "summary": "Python zlib compression support", 
         "rdepends": [
             "core"
-        ],
-        "summary": "Python zlib compression support"
+        ], 
+        "files": [
+            "${libdir}/python2.7/lib-dynload/zlib.so"
+        ]
     }
-}
+}
\ No newline at end of file
-- 
2.7.4



^ permalink raw reply related	[flat|nested] 7+ messages in thread

* [PATCH 2/3] python: respect package order in manifest
  2018-09-14 21:33 [PATCH 1/3] python: don't sort the manifest in create_manifest Andrew Geissler
@ 2018-09-14 21:33 ` Andrew Geissler
  2018-09-19 11:08   ` Burton, Ross
  2018-09-14 21:33 ` [PATCH 3/3] python: consolidate tests Andrew Geissler
                   ` (2 subsequent siblings)
  3 siblings, 1 reply; 7+ messages in thread
From: Andrew Geissler @ 2018-09-14 21:33 UTC (permalink / raw)
  To: openembedded-core; +Cc: Andrew Geissler, alejandro.enedino.hernandez-samaniego

Don't sort the manifest when using it to generate packaging rules, so
ordering can be used to have complex packaging rules.

This is a backport of the same changes done by Ross Burton for python3

Signed-off-by: Andrew Geissler <geissonator@gmail.com>
---
 meta/recipes-devtools/python/python_2.7.15.bb | 6 ++----
 1 file changed, 2 insertions(+), 4 deletions(-)

diff --git a/meta/recipes-devtools/python/python_2.7.15.bb b/meta/recipes-devtools/python/python_2.7.15.bb
index 43d9ff5..472c1da 100644
--- a/meta/recipes-devtools/python/python_2.7.15.bb
+++ b/meta/recipes-devtools/python/python_2.7.15.bb
@@ -207,7 +207,7 @@ RPROVIDES_${PN} += "${PN}-modules"
 INCLUDE_PYCS ?= "1"
 
 python(){
-    import json
+    import collections, json
 
     filename = os.path.join(d.getVar('THISDIR'), 'python', 'python2-manifest.json')
     # This python changes the datastore based on the contents of a file, so mark
@@ -215,7 +215,7 @@ python(){
     bb.parse.mark_dependency(d, filename)
 
     with open(filename) as manifest_file:
-        python_manifest=json.load(manifest_file)
+        python_manifest=json.load(manifest_file, object_pairs_hook=collections.OrderedDict)
 
     include_pycs = d.getVar('INCLUDE_PYCS')
 
@@ -248,8 +248,6 @@ python(){
             d.appendVar('RDEPENDS_' + pypackage, ' ' + pn + '-' + value)
         d.setVar('SUMMARY_' + pypackage, python_manifest[key]['summary'])
 
-    # We need to ensure staticdev packages match for files first so we sort in reverse
-    newpackages.sort(reverse=True)
     # Prepending so to avoid python-misc getting everything
     packages = newpackages + packages
     d.setVar('PACKAGES', ' '.join(packages))
-- 
2.7.4



^ permalink raw reply related	[flat|nested] 7+ messages in thread

* [PATCH 3/3] python: consolidate tests
  2018-09-14 21:33 [PATCH 1/3] python: don't sort the manifest in create_manifest Andrew Geissler
  2018-09-14 21:33 ` [PATCH 2/3] python: respect package order in manifest Andrew Geissler
@ 2018-09-14 21:33 ` Andrew Geissler
  2018-09-19 13:25 ` [PATCH 1/3] python: don't sort the manifest in create_manifest Andrew Geissler
  2018-09-19 13:37 ` ✗ patchtest: failure for "python: don't sort the manifes..." and 2 more (rev2) Patchwork
  3 siblings, 0 replies; 7+ messages in thread
From: Andrew Geissler @ 2018-09-14 21:33 UTC (permalink / raw)
  To: openembedded-core; +Cc: Andrew Geissler, alejandro.enedino.hernandez-samaniego

Currently the bulk of the tests in python-tests, some more in
python-sqlite3-tests, and others in their parent module (such as
python-ctypes).  This is pointless space usage if we're not planning on
running the tests, so consolidate all the tests into python-tests.

This is a backport of the same changes done by Ross Burton for python3

Signed-off-by: Andrew Geissler <geissonator@gmail.com>
---
 .../python/python/python2-manifest.json            | 35 ++++++++++------------
 1 file changed, 15 insertions(+), 20 deletions(-)

diff --git a/meta/recipes-devtools/python/python/python2-manifest.json b/meta/recipes-devtools/python/python/python2-manifest.json
index cacba5b..45fa371 100644
--- a/meta/recipes-devtools/python/python/python2-manifest.json
+++ b/meta/recipes-devtools/python/python/python2-manifest.json
@@ -1,4 +1,18 @@
 {
+    "tests": {
+        "summary": "Python test suite",
+        "rdepends": [
+            "core",
+            "modules"
+        ],
+        "files": [
+            "${libdir}/python2.7/*/test",
+            "${libdir}/python2.7/*/tests",
+            "${libdir}/python2.7/idlelib/idle_test/",
+            "${libdir}/python2.7/test"
+        ],
+        "cached": []
+    },
     "2to3": {
         "summary": "Python automated Python 2 to 3 code translator", 
         "rdepends": [
@@ -873,16 +887,6 @@
             "${libdir}/python2.7/lib-dynload/_sqlite3.so"
         ]
     }, 
-    "sqlite3-tests": {
-        "summary": "Python Sqlite3 database support tests", 
-        "rdepends": [
-            "core", 
-            "tests"
-        ], 
-        "files": [
-            "${libdir}/python2.7/sqlite3/test"
-        ]
-    }, 
     "stringold": {
         "summary": "Python string APIs [deprecated]", 
         "rdepends": [
@@ -925,15 +929,6 @@
             "${libdir}/python2.7/tty.py"
         ]
     }, 
-    "tests": {
-        "summary": "Python tests", 
-        "rdepends": [
-            "core"
-        ], 
-        "files": [
-            "${libdir}/python2.7/test"
-        ]
-    }, 
     "textutils": {
         "summary": "Python option parsin", 
         "rdepends": [
@@ -1046,4 +1041,4 @@
             "${libdir}/python2.7/lib-dynload/zlib.so"
         ]
     }
-}
\ No newline at end of file
+}
-- 
2.7.4



^ permalink raw reply related	[flat|nested] 7+ messages in thread

* Re: [PATCH 2/3] python: respect package order in manifest
  2018-09-14 21:33 ` [PATCH 2/3] python: respect package order in manifest Andrew Geissler
@ 2018-09-19 11:08   ` Burton, Ross
  2018-09-19 13:13     ` Andrew Geissler
  0 siblings, 1 reply; 7+ messages in thread
From: Burton, Ross @ 2018-09-19 11:08 UTC (permalink / raw)
  To: Andrew Geissler; +Cc: Alejandro Enedino Hernandez Samaniego, OE-core

Close, but:

ERROR: python-2.7.15-r1 do_package_qa: QA Issue: non -staticdev
package contains static .a library: python-distutils path
'/work/corei7-64-poky-linux/python/2.7.15-r1/packages-split/python-distutils/usr/lib/python2.7/config/libpython2.7.a'
[staticdev]

Ross
On Fri, 14 Sep 2018 at 22:33, Andrew Geissler <geissonator@gmail.com> wrote:
>
> Don't sort the manifest when using it to generate packaging rules, so
> ordering can be used to have complex packaging rules.
>
> This is a backport of the same changes done by Ross Burton for python3
>
> Signed-off-by: Andrew Geissler <geissonator@gmail.com>
> ---
>  meta/recipes-devtools/python/python_2.7.15.bb | 6 ++----
>  1 file changed, 2 insertions(+), 4 deletions(-)
>
> diff --git a/meta/recipes-devtools/python/python_2.7.15.bb b/meta/recipes-devtools/python/python_2.7.15.bb
> index 43d9ff5..472c1da 100644
> --- a/meta/recipes-devtools/python/python_2.7.15.bb
> +++ b/meta/recipes-devtools/python/python_2.7.15.bb
> @@ -207,7 +207,7 @@ RPROVIDES_${PN} += "${PN}-modules"
>  INCLUDE_PYCS ?= "1"
>
>  python(){
> -    import json
> +    import collections, json
>
>      filename = os.path.join(d.getVar('THISDIR'), 'python', 'python2-manifest.json')
>      # This python changes the datastore based on the contents of a file, so mark
> @@ -215,7 +215,7 @@ python(){
>      bb.parse.mark_dependency(d, filename)
>
>      with open(filename) as manifest_file:
> -        python_manifest=json.load(manifest_file)
> +        python_manifest=json.load(manifest_file, object_pairs_hook=collections.OrderedDict)
>
>      include_pycs = d.getVar('INCLUDE_PYCS')
>
> @@ -248,8 +248,6 @@ python(){
>              d.appendVar('RDEPENDS_' + pypackage, ' ' + pn + '-' + value)
>          d.setVar('SUMMARY_' + pypackage, python_manifest[key]['summary'])
>
> -    # We need to ensure staticdev packages match for files first so we sort in reverse
> -    newpackages.sort(reverse=True)
>      # Prepending so to avoid python-misc getting everything
>      packages = newpackages + packages
>      d.setVar('PACKAGES', ' '.join(packages))
> --
> 2.7.4
>


^ permalink raw reply	[flat|nested] 7+ messages in thread

* Re: [PATCH 2/3] python: respect package order in manifest
  2018-09-19 11:08   ` Burton, Ross
@ 2018-09-19 13:13     ` Andrew Geissler
  0 siblings, 0 replies; 7+ messages in thread
From: Andrew Geissler @ 2018-09-19 13:13 UTC (permalink / raw)
  To: ross.burton; +Cc: alejandro.enedino.hernandez-samaniego, openembedded-core

On Wed, Sep 19, 2018 at 6:08 AM Burton, Ross <ross.burton@intel.com> wrote:
>
> Close, but:
>
> ERROR: python-2.7.15-r1 do_package_qa: QA Issue: non -staticdev
> package contains static .a library: python-distutils path
> '/work/corei7-64-poky-linux/python/2.7.15-r1/packages-split/python-distutils/usr/lib/python2.7/config/libpython2.7.a'
> [staticdev]

Ahh shoot, I missed that reorder change in your patch set 1 changes.
I'll get an update up.

>
> Ross
> On Fri, 14 Sep 2018 at 22:33, Andrew Geissler <geissonator@gmail.com> wrote:
> >
> > Don't sort the manifest when using it to generate packaging rules, so
> > ordering can be used to have complex packaging rules.
> >
> > This is a backport of the same changes done by Ross Burton for python3
> >
> > Signed-off-by: Andrew Geissler <geissonator@gmail.com>
> > ---
> >  meta/recipes-devtools/python/python_2.7.15.bb | 6 ++----
> >  1 file changed, 2 insertions(+), 4 deletions(-)
> >
> > diff --git a/meta/recipes-devtools/python/python_2.7.15.bb b/meta/recipes-devtools/python/python_2.7.15.bb
> > index 43d9ff5..472c1da 100644
> > --- a/meta/recipes-devtools/python/python_2.7.15.bb
> > +++ b/meta/recipes-devtools/python/python_2.7.15.bb
> > @@ -207,7 +207,7 @@ RPROVIDES_${PN} += "${PN}-modules"
> >  INCLUDE_PYCS ?= "1"
> >
> >  python(){
> > -    import json
> > +    import collections, json
> >
> >      filename = os.path.join(d.getVar('THISDIR'), 'python', 'python2-manifest.json')
> >      # This python changes the datastore based on the contents of a file, so mark
> > @@ -215,7 +215,7 @@ python(){
> >      bb.parse.mark_dependency(d, filename)
> >
> >      with open(filename) as manifest_file:
> > -        python_manifest=json.load(manifest_file)
> > +        python_manifest=json.load(manifest_file, object_pairs_hook=collections.OrderedDict)
> >
> >      include_pycs = d.getVar('INCLUDE_PYCS')
> >
> > @@ -248,8 +248,6 @@ python(){
> >              d.appendVar('RDEPENDS_' + pypackage, ' ' + pn + '-' + value)
> >          d.setVar('SUMMARY_' + pypackage, python_manifest[key]['summary'])
> >
> > -    # We need to ensure staticdev packages match for files first so we sort in reverse
> > -    newpackages.sort(reverse=True)
> >      # Prepending so to avoid python-misc getting everything
> >      packages = newpackages + packages
> >      d.setVar('PACKAGES', ' '.join(packages))
> > --
> > 2.7.4
> >


^ permalink raw reply	[flat|nested] 7+ messages in thread

* [PATCH 1/3] python: don't sort the manifest in create_manifest
  2018-09-14 21:33 [PATCH 1/3] python: don't sort the manifest in create_manifest Andrew Geissler
  2018-09-14 21:33 ` [PATCH 2/3] python: respect package order in manifest Andrew Geissler
  2018-09-14 21:33 ` [PATCH 3/3] python: consolidate tests Andrew Geissler
@ 2018-09-19 13:25 ` Andrew Geissler
  2018-09-19 13:37 ` ✗ patchtest: failure for "python: don't sort the manifes..." and 2 more (rev2) Patchwork
  3 siblings, 0 replies; 7+ messages in thread
From: Andrew Geissler @ 2018-09-19 13:25 UTC (permalink / raw)
  To: openembedded-core; +Cc: Andrew Geissler, alejandro.enedino.hernandez-samaniego

Instead of sorting the entire manifest when it is updated, use
OrderedDict to preserve the order of fields.This means that
packages can be ordered in the manifest to allow non-trivial
FILES assignments (such as a package that picks up pieces of
other packages)

The manifest has been regenerated with the new stable ordering, and
distutils-staticdev moved above distutils so the packaging rules work as
expected.

This is a backport of the same changes done by Ross Burton for python3

Changes since v1:
- Moved distutils-staticdev above distutils so packaging rules work
as expected.

Signed-off-by: Andrew Geissler <geissonator@gmail.com>
---
 .../python/python/create_manifest2.py              |   16 +-
 .../python/python/python2-manifest.json            | 1660 ++++++++++----------
 2 files changed, 840 insertions(+), 836 deletions(-)

diff --git a/meta/recipes-devtools/python/python/create_manifest2.py b/meta/recipes-devtools/python/python/create_manifest2.py
index e745045..1af1443 100644
--- a/meta/recipes-devtools/python/python/create_manifest2.py
+++ b/meta/recipes-devtools/python/python/create_manifest2.py
@@ -37,6 +37,7 @@ import sys
 import subprocess
 import json
 import os
+import collections
 
 # Hack to get native python search path (for folders), not fond of it but it works for now
 pivot='recipe-sysroot-native'
@@ -45,7 +46,7 @@ for p in sys.path:
     nativelibfolder=p[:p.find(pivot)+len(pivot)]
 
 # Empty dict to hold the whole manifest
-new_manifest = {}
+new_manifest = collections.OrderedDict()
 
 # Check for repeated files, folders and wildcards
 allfiles=[]
@@ -63,7 +64,7 @@ def isFolder(value):
 
 # Read existing JSON manifest
 with open('python2-manifest.json') as manifest:
-  old_manifest=json.load(manifest)
+  old_manifest = json.load(manifest, object_pairs_hook=collections.OrderedDict)
 
 
 # First pass to get core-package functionality, because we base everything on the fact that core is actually working
@@ -124,13 +125,14 @@ for key in old_manifest:
 
 for key in old_manifest:
     # Use an empty dict as data structure to hold data for each package and fill it up
-    new_manifest[key]={}
-    new_manifest[key]['files']=[]
+    new_manifest[key] = collections.OrderedDict()
+    new_manifest[key]['summary'] = old_manifest[key]['summary']
     new_manifest[key]['rdepends']=[]
+    new_manifest[key]['files'] = []
+
     # All packages should depend on core
     if key != 'core':
-         new_manifest[key]['rdepends'].append('core')
-    new_manifest[key]['summary']=old_manifest[key]['summary']
+        new_manifest[key]['rdepends'].append('core')
 
     # Handle special cases, we assume that when they were manually added 
     # to the manifest we knew what we were doing.
@@ -274,4 +276,4 @@ for key in new_manifest:
 
 # Create the manifest from the data structure that was built
 with open('python2-manifest.json.new','w') as outfile:
-    json.dump(new_manifest,outfile,sort_keys=True, indent=4, separators=(',', ': '))
+    json.dump(new_manifest,outfile, indent=4)
diff --git a/meta/recipes-devtools/python/python/python2-manifest.json b/meta/recipes-devtools/python/python/python2-manifest.json
index 723e513..4a29c56 100644
--- a/meta/recipes-devtools/python/python/python2-manifest.json
+++ b/meta/recipes-devtools/python/python/python2-manifest.json
@@ -1,1047 +1,1049 @@
 {
     "2to3": {
-        "files": [
-            "${bindir}/2to3",
-            "${libdir}/python2.7/lib2to3"
-        ],
+        "summary": "Python automated Python 2 to 3 code translator", 
         "rdepends": [
             "core"
-        ],
-        "summary": "Python automated Python 2 to 3 code translator"
-    },
-    "argparse": {
+        ], 
         "files": [
-            "${libdir}/python2.7/argparse.py"
-        ],
+            "${bindir}/2to3", 
+            "${libdir}/python2.7/lib2to3"
+        ]
+    }, 
+    "argparse": {
+        "summary": "Python command line argument parser", 
         "rdepends": [
-            "codecs",
-            "core",
-            "lang",
+            "codecs", 
+            "core", 
+            "lang", 
             "textutils"
-        ],
-        "summary": "Python command line argument parser"
-    },
-    "audio": {
+        ], 
         "files": [
-            "${libdir}/python2.7/audiodev.py",
-            "${libdir}/python2.7/chunk.py",
-            "${libdir}/python2.7/lib-dynload/audioop.so",
-            "${libdir}/python2.7/lib-dynload/ossaudiodev.so",
-            "${libdir}/python2.7/sndhdr.py",
-            "${libdir}/python2.7/sunau.py",
-            "${libdir}/python2.7/sunaudio.py",
-            "${libdir}/python2.7/toaiff.py",
-            "${libdir}/python2.7/wave.py"
-        ],
+            "${libdir}/python2.7/argparse.py"
+        ]
+    }, 
+    "audio": {
+        "summary": "Python Audio Handling", 
         "rdepends": [
-            "core",
-            "crypt",
-            "fcntl",
-            "io",
+            "core", 
+            "crypt", 
+            "fcntl", 
+            "io", 
             "math"
-        ],
-        "summary": "Python Audio Handling"
-    },
+        ], 
+        "files": [
+            "${libdir}/python2.7/audiodev.py", 
+            "${libdir}/python2.7/chunk.py", 
+            "${libdir}/python2.7/lib-dynload/audioop.so", 
+            "${libdir}/python2.7/lib-dynload/ossaudiodev.so", 
+            "${libdir}/python2.7/sndhdr.py", 
+            "${libdir}/python2.7/sunau.py", 
+            "${libdir}/python2.7/sunaudio.py", 
+            "${libdir}/python2.7/toaiff.py", 
+            "${libdir}/python2.7/wave.py"
+        ]
+    }, 
     "bsddb": {
-        "files": [
-            "${libdir}/python2.7/bsddb",
-            "${libdir}/python2.7/lib-dynload/_bsddb.so"
-        ],
+        "summary": "Python bindings for the Berkeley Database", 
         "rdepends": [
             "core"
-        ],
-        "summary": "Python bindings for the Berkeley Database"
-    },
-    "codecs": {
+        ], 
         "files": [
-            "${libdir}/python2.7/gettext.py",
-            "${libdir}/python2.7/lib-dynload/_codecs_cn.so",
-            "${libdir}/python2.7/lib-dynload/_codecs_hk.so",
-            "${libdir}/python2.7/lib-dynload/_codecs_iso2022.so",
-            "${libdir}/python2.7/lib-dynload/_codecs_jp.so",
-            "${libdir}/python2.7/lib-dynload/_codecs_kr.so",
-            "${libdir}/python2.7/lib-dynload/_codecs_tw.so",
-            "${libdir}/python2.7/lib-dynload/_multibytecodec.so",
-            "${libdir}/python2.7/lib-dynload/unicodedata.so",
-            "${libdir}/python2.7/locale.py",
-            "${libdir}/python2.7/stringprep.py",
-            "${libdir}/python2.7/xdrlib.py"
-        ],
+            "${libdir}/python2.7/bsddb", 
+            "${libdir}/python2.7/lib-dynload/_bsddb.so"
+        ]
+    }, 
+    "codecs": {
+        "summary": "Python codec", 
         "rdepends": [
-            "core",
-            "io",
+            "core", 
+            "io", 
             "lang"
-        ],
-        "summary": "Python codec"
-    },
+        ], 
+        "files": [
+            "${libdir}/python2.7/gettext.py", 
+            "${libdir}/python2.7/lib-dynload/_codecs_cn.so", 
+            "${libdir}/python2.7/lib-dynload/_codecs_hk.so", 
+            "${libdir}/python2.7/lib-dynload/_codecs_iso2022.so", 
+            "${libdir}/python2.7/lib-dynload/_codecs_jp.so", 
+            "${libdir}/python2.7/lib-dynload/_codecs_kr.so", 
+            "${libdir}/python2.7/lib-dynload/_codecs_tw.so", 
+            "${libdir}/python2.7/lib-dynload/_multibytecodec.so", 
+            "${libdir}/python2.7/lib-dynload/unicodedata.so", 
+            "${libdir}/python2.7/locale.py", 
+            "${libdir}/python2.7/stringprep.py", 
+            "${libdir}/python2.7/xdrlib.py"
+        ]
+    }, 
     "compile": {
-        "files": [
-            "${libdir}/python2.7/compileall.py",
-            "${libdir}/python2.7/py_compile.py"
-        ],
+        "summary": "Python bytecode compilation support", 
         "rdepends": [
             "core"
-        ],
-        "summary": "Python bytecode compilation support"
-    },
-    "compiler": {
+        ], 
         "files": [
-            "${libdir}/python2.7/compiler"
-        ],
+            "${libdir}/python2.7/compileall.py", 
+            "${libdir}/python2.7/py_compile.py"
+        ]
+    }, 
+    "compiler": {
+        "summary": "Python compiler support", 
         "rdepends": [
-            "core",
-            "io",
+            "core", 
+            "io", 
             "lang"
-        ],
-        "summary": "Python compiler support"
-    },
-    "compression": {
+        ], 
         "files": [
-            "${libdir}/python2.7/gzip.py",
-            "${libdir}/python2.7/lib-dynload/bz2.so",
-            "${libdir}/python2.7/tarfile.py",
-            "${libdir}/python2.7/zipfile.py"
-        ],
+            "${libdir}/python2.7/compiler"
+        ]
+    }, 
+    "compression": {
+        "summary": "Python high-level compression support", 
         "rdepends": [
-            "core",
-            "io",
-            "shell",
-            "unixadmin",
+            "core", 
+            "io", 
+            "shell", 
+            "unixadmin", 
             "zlib"
-        ],
-        "summary": "Python high-level compression support"
-    },
-    "contextlib": {
+        ], 
         "files": [
-            "${libdir}/python2.7/contextlib.py"
-        ],
+            "${libdir}/python2.7/gzip.py", 
+            "${libdir}/python2.7/lib-dynload/bz2.so", 
+            "${libdir}/python2.7/tarfile.py", 
+            "${libdir}/python2.7/zipfile.py"
+        ]
+    }, 
+    "contextlib": {
+        "summary": "Python utilities for with-statementcontexts.", 
         "rdepends": [
-            "core",
+            "core", 
             "lang"
-        ],
-        "summary": "Python utilities for with-statementcontexts."
-    },
-    "core": {
+        ], 
         "files": [
-            "${bindir}/python*",
-            "${includedir}/python2.7/pyconfig*.h",
-            "${libdir}/python2.7/ConfigParser.py",
-            "${libdir}/python2.7/UserDict.py",
-            "${libdir}/python2.7/UserList.py",
-            "${libdir}/python2.7/UserString.py",
-            "${libdir}/python2.7/__future__.py",
-            "${libdir}/python2.7/_abcoll.py",
-            "${libdir}/python2.7/_sysconfigdata.py",
-            "${libdir}/python2.7/_weakrefset.py",
-            "${libdir}/python2.7/abc.py",
-            "${libdir}/python2.7/ast.py",
-            "${libdir}/python2.7/atexit.py",
-            "${libdir}/python2.7/codecs.py",
-            "${libdir}/python2.7/collections.py",
-            "${libdir}/python2.7/copy.py",
-            "${libdir}/python2.7/copy_reg.py",
-            "${libdir}/python2.7/encodings",
-            "${libdir}/python2.7/encodings/aliases.py",
-            "${libdir}/python2.7/encodings/utf_8.py",
-            "${libdir}/python2.7/genericpath.py",
-            "${libdir}/python2.7/getopt.py",
-            "${libdir}/python2.7/heapq.py",
-            "${libdir}/python2.7/importlib",
-            "${libdir}/python2.7/keyword.py",
-            "${libdir}/python2.7/lib-dynload/_collections.so",
-            "${libdir}/python2.7/lib-dynload/_heapq.so",
-            "${libdir}/python2.7/lib-dynload/_locale.so",
-            "${libdir}/python2.7/lib-dynload/_struct.so",
-            "${libdir}/python2.7/lib-dynload/binascii.so",
-            "${libdir}/python2.7/lib-dynload/itertools.so",
-            "${libdir}/python2.7/lib-dynload/operator.so",
-            "${libdir}/python2.7/lib-dynload/readline.so",
-            "${libdir}/python2.7/lib-dynload/strop.so",
-            "${libdir}/python2.7/lib-dynload/time.so",
-            "${libdir}/python2.7/lib-dynload/xreadlines.so",
-            "${libdir}/python2.7/linecache.py",
-            "${libdir}/python2.7/new.py",
-            "${libdir}/python2.7/os.py",
-            "${libdir}/python2.7/platform.py",
-            "${libdir}/python2.7/posixpath.py",
-            "${libdir}/python2.7/re.py",
-            "${libdir}/python2.7/rlcompleter.py",
-            "${libdir}/python2.7/site.py",
-            "${libdir}/python2.7/sitecustomize.py",
-            "${libdir}/python2.7/sre_compile.py",
-            "${libdir}/python2.7/sre_constants.py",
-            "${libdir}/python2.7/sre_parse.py",
-            "${libdir}/python2.7/stat.py",
-            "${libdir}/python2.7/string.py",
-            "${libdir}/python2.7/struct.py",
-            "${libdir}/python2.7/sysconfig.py",
-            "${libdir}/python2.7/traceback.py",
-            "${libdir}/python2.7/types.py",
-            "${libdir}/python2.7/warnings.py",
+            "${libdir}/python2.7/contextlib.py"
+        ]
+    }, 
+    "core": {
+        "summary": "Python interpreter and core modules", 
+        "rdepends": [], 
+        "files": [
+            "${bindir}/python*", 
+            "${includedir}/python2.7/pyconfig*.h", 
+            "${libdir}/python2.7/ConfigParser.py", 
+            "${libdir}/python2.7/UserDict.py", 
+            "${libdir}/python2.7/UserList.py", 
+            "${libdir}/python2.7/UserString.py", 
+            "${libdir}/python2.7/__future__.py", 
+            "${libdir}/python2.7/_abcoll.py", 
+            "${libdir}/python2.7/_sysconfigdata.py", 
+            "${libdir}/python2.7/_weakrefset.py", 
+            "${libdir}/python2.7/abc.py", 
+            "${libdir}/python2.7/ast.py", 
+            "${libdir}/python2.7/atexit.py", 
+            "${libdir}/python2.7/codecs.py", 
+            "${libdir}/python2.7/collections.py", 
+            "${libdir}/python2.7/copy.py", 
+            "${libdir}/python2.7/copy_reg.py", 
+            "${libdir}/python2.7/encodings", 
+            "${libdir}/python2.7/encodings/aliases.py", 
+            "${libdir}/python2.7/encodings/utf_8.py", 
+            "${libdir}/python2.7/genericpath.py", 
+            "${libdir}/python2.7/getopt.py", 
+            "${libdir}/python2.7/heapq.py", 
+            "${libdir}/python2.7/importlib", 
+            "${libdir}/python2.7/keyword.py", 
+            "${libdir}/python2.7/lib-dynload/_collections.so", 
+            "${libdir}/python2.7/lib-dynload/_heapq.so", 
+            "${libdir}/python2.7/lib-dynload/_locale.so", 
+            "${libdir}/python2.7/lib-dynload/_struct.so", 
+            "${libdir}/python2.7/lib-dynload/binascii.so", 
+            "${libdir}/python2.7/lib-dynload/itertools.so", 
+            "${libdir}/python2.7/lib-dynload/operator.so", 
+            "${libdir}/python2.7/lib-dynload/readline.so", 
+            "${libdir}/python2.7/lib-dynload/strop.so", 
+            "${libdir}/python2.7/lib-dynload/time.so", 
+            "${libdir}/python2.7/lib-dynload/xreadlines.so", 
+            "${libdir}/python2.7/linecache.py", 
+            "${libdir}/python2.7/new.py", 
+            "${libdir}/python2.7/os.py", 
+            "${libdir}/python2.7/platform.py", 
+            "${libdir}/python2.7/posixpath.py", 
+            "${libdir}/python2.7/re.py", 
+            "${libdir}/python2.7/rlcompleter.py", 
+            "${libdir}/python2.7/site.py", 
+            "${libdir}/python2.7/sitecustomize.py", 
+            "${libdir}/python2.7/sre_compile.py", 
+            "${libdir}/python2.7/sre_constants.py", 
+            "${libdir}/python2.7/sre_parse.py", 
+            "${libdir}/python2.7/stat.py", 
+            "${libdir}/python2.7/string.py", 
+            "${libdir}/python2.7/struct.py", 
+            "${libdir}/python2.7/sysconfig.py", 
+            "${libdir}/python2.7/traceback.py", 
+            "${libdir}/python2.7/types.py", 
+            "${libdir}/python2.7/warnings.py", 
             "${libdir}/python2.7/weakref.py"
-        ],
-        "rdepends": [],
-        "summary": "Python interpreter and core modules"
-    },
+        ]
+    }, 
     "crypt": {
+        "summary": "Python basic cryptographic and hashing support", 
+        "rdepends": [
+            "core"
+        ], 
         "files": [
-            "${libdir}/python2.7/hashlib.py",
-            "${libdir}/python2.7/lib-dynload/_hashlib.so",
-            "${libdir}/python2.7/lib-dynload/crypt.so",
-            "${libdir}/python2.7/md5.py",
+            "${libdir}/python2.7/hashlib.py", 
+            "${libdir}/python2.7/lib-dynload/_hashlib.so", 
+            "${libdir}/python2.7/lib-dynload/crypt.so", 
+            "${libdir}/python2.7/md5.py", 
             "${libdir}/python2.7/sha.py"
-        ],
+        ]
+    }, 
+    "ctypes": {
+        "summary": "Python C types support", 
         "rdepends": [
             "core"
-        ],
-        "summary": "Python basic cryptographic and hashing support"
-    },
-    "ctypes": {
+        ], 
         "files": [
-            "${libdir}/python2.7/ctypes",
-            "${libdir}/python2.7/lib-dynload/_ctypes.so",
+            "${libdir}/python2.7/ctypes", 
+            "${libdir}/python2.7/lib-dynload/_ctypes.so", 
             "${libdir}/python2.7/lib-dynload/_ctypes_test.so"
-        ],
+        ]
+    }, 
+    "curses": {
+        "summary": "Python curses support", 
         "rdepends": [
             "core"
-        ],
-        "summary": "Python C types support"
-    },
-    "curses": {
+        ], 
         "files": [
-            "${libdir}/python2.7/curses",
-            "${libdir}/python2.7/lib-dynload/_curses.so",
+            "${libdir}/python2.7/curses", 
+            "${libdir}/python2.7/lib-dynload/_curses.so", 
             "${libdir}/python2.7/lib-dynload/_curses_panel.so"
-        ],
-        "rdepends": [
-            "core"
-        ],
-        "summary": "Python curses support"
-    },
+        ]
+    }, 
     "datetime": {
-        "files": [
-            "${libdir}/python2.7/_strptime.py",
-            "${libdir}/python2.7/calendar.py",
-            "${libdir}/python2.7/lib-dynload/datetime.so"
-        ],
+        "summary": "Python calendar and time support", 
         "rdepends": [
-            "codecs",
-            "core",
+            "codecs", 
+            "core", 
             "lang"
-        ],
-        "summary": "Python calendar and time support"
-    },
-    "db": {
+        ], 
         "files": [
-            "${libdir}/python2.7/anydbm.py",
-            "${libdir}/python2.7/dbhash.py",
-            "${libdir}/python2.7/dumbdbm.py",
-            "${libdir}/python2.7/lib-dynload/dbm.so",
-            "${libdir}/python2.7/whichdb.py"
-        ],
+            "${libdir}/python2.7/_strptime.py", 
+            "${libdir}/python2.7/calendar.py", 
+            "${libdir}/python2.7/lib-dynload/datetime.so"
+        ]
+    }, 
+    "db": {
+        "summary": "Python file-based database support", 
         "rdepends": [
-            "bsddb",
-            "core",
+            "bsddb", 
+            "core", 
             "gdbm"
-        ],
-        "summary": "Python file-based database support"
-    },
-    "debugger": {
+        ], 
         "files": [
-            "${libdir}/python2.7/bdb.py",
-            "${libdir}/python2.7/pdb.py"
-        ],
+            "${libdir}/python2.7/anydbm.py", 
+            "${libdir}/python2.7/dbhash.py", 
+            "${libdir}/python2.7/dumbdbm.py", 
+            "${libdir}/python2.7/lib-dynload/dbm.so", 
+            "${libdir}/python2.7/whichdb.py"
+        ]
+    }, 
+    "debugger": {
+        "summary": "Python debugger", 
         "rdepends": [
-            "core",
-            "io",
-            "lang",
-            "pprint",
+            "core", 
+            "io", 
+            "lang", 
+            "pprint", 
             "shell"
-        ],
-        "summary": "Python debugger"
-    },
+        ], 
+        "files": [
+            "${libdir}/python2.7/bdb.py", 
+            "${libdir}/python2.7/pdb.py"
+        ]
+    }, 
     "dev": {
         "files": [
-            "${base_libdir}/*.a",
-            "${base_libdir}/*.o",
-            "${datadir}/aclocal",
-            "${datadir}/pkgconfig",
-            "${includedir}",
-            "${libdir}/*.a",
-            "${libdir}/*.la",
-            "${libdir}/*.o",
-            "${libdir}/lib*${SOLIBSDEV}",
-            "${libdir}/pkgconfig",
+            "${base_libdir}/*.a", 
+            "${base_libdir}/*.o", 
+            "${datadir}/aclocal", 
+            "${datadir}/pkgconfig", 
+            "${includedir}", 
+            "${libdir}/*.a", 
+            "${libdir}/*.la", 
+            "${libdir}/*.o", 
+            "${libdir}/lib*${SOLIBSDEV}", 
+            "${libdir}/pkgconfig", 
             "${libdir}/python2.7/config/Makefile"
-        ],
+        ], 
         "rdepends": [
             "core"
-        ],
+        ], 
         "summary": "Python development package"
-    },
+    }, 
     "difflib": {
-        "files": [
-            "${libdir}/python2.7/difflib.py"
-        ],
+        "summary": "Python helpers for computing deltas between objects", 
         "rdepends": [
-            "core",
+            "core", 
             "lang"
-        ],
-        "summary": "Python helpers for computing deltas between objects"
-    },
-    "distutils": {
+        ], 
         "files": [
-            "${libdir}/python2.7/config",
-            "${libdir}/python2.7/distutils"
-        ],
-        "rdepends": [
-            "core"
-        ],
-        "summary": "Python Distribution Utilities"
-    },
+            "${libdir}/python2.7/difflib.py"
+        ]
+    }, 
     "distutils-staticdev": {
         "files": [
             "${libdir}/python2.7/config/lib*.a"
-        ],
+        ], 
         "rdepends": [
             "distutils"
-        ],
+        ], 
         "summary": "Python distribution utilities (static libraries)"
-    },
+    }, 
+    "distutils": {
+        "summary": "Python Distribution Utilities", 
+        "rdepends": [
+            "core"
+        ], 
+        "files": [
+            "${libdir}/python2.7/config", 
+            "${libdir}/python2.7/distutils"
+        ]
+    }, 
     "doctest": {
+        "summary": "Python framework for running examples in docstrings", 
+        "rdepends": [
+            "core", 
+            "crypt", 
+            "debugger", 
+            "difflib", 
+            "fcntl", 
+            "io", 
+            "lang", 
+            "math", 
+            "pprint", 
+            "shell", 
+            "unittest"
+        ], 
         "files": [
             "${libdir}/python2.7/doctest.py"
-        ],
-        "rdepends": [
-            "core",
-            "crypt",
-            "debugger",
-            "difflib",
-            "fcntl",
-            "io",
-            "lang",
-            "math",
-            "pprint",
-            "shell",
-            "unittest"
-        ],
-        "summary": "Python framework for running examples in docstrings"
-    },
+        ]
+    }, 
     "email": {
+        "summary": "Python email support", 
+        "rdepends": [
+            "contextlib", 
+            "core", 
+            "crypt", 
+            "fcntl", 
+            "io", 
+            "lang", 
+            "math", 
+            "netclient", 
+            "pickle", 
+            "subprocess", 
+            "textutils", 
+            "threading"
+        ], 
         "files": [
-            "${libdir}/python2.7/email",
+            "${libdir}/python2.7/email", 
             "${libdir}/python2.7/imaplib.py"
-        ],
-        "rdepends": [
-            "contextlib",
-            "core",
-            "crypt",
-            "fcntl",
-            "io",
-            "lang",
-            "math",
-            "netclient",
-            "pickle",
-            "subprocess",
-            "textutils"
-        ],
-        "summary": "Python email support"
-    },
+        ]
+    }, 
     "fcntl": {
+        "summary": "Python's fcntl interface", 
+        "rdepends": [
+            "core"
+        ], 
         "files": [
             "${libdir}/python2.7/lib-dynload/fcntl.so"
-        ],
+        ]
+    }, 
+    "gdbm": {
+        "summary": "Python GNU database support", 
         "rdepends": [
             "core"
-        ],
-        "summary": "Python's fcntl interface"
-    },
-    "gdbm": {
+        ], 
         "files": [
             "${libdir}/python2.7/lib-dynload/gdbm.so"
-        ],
+        ]
+    }, 
+    "hotshot": {
+        "summary": "Python hotshot performance profiler", 
         "rdepends": [
             "core"
-        ],
-        "summary": "Python GNU database support"
-    },
-    "hotshot": {
+        ], 
         "files": [
-            "${libdir}/python2.7/hotshot",
+            "${libdir}/python2.7/hotshot", 
             "${libdir}/python2.7/lib-dynload/_hotshot.so"
-        ],
+        ]
+    }, 
+    "html": {
+        "summary": "Python HTML processing support", 
         "rdepends": [
             "core"
-        ],
-        "summary": "Python hotshot performance profiler"
-    },
-    "html": {
+        ], 
         "files": [
-            "${libdir}/python2.7/HTMLParser.py",
-            "${libdir}/python2.7/formatter.py",
-            "${libdir}/python2.7/htmlentitydefs.py",
-            "${libdir}/python2.7/htmllib.py",
-            "${libdir}/python2.7/markupbase.py",
+            "${libdir}/python2.7/HTMLParser.py", 
+            "${libdir}/python2.7/formatter.py", 
+            "${libdir}/python2.7/htmlentitydefs.py", 
+            "${libdir}/python2.7/htmllib.py", 
+            "${libdir}/python2.7/markupbase.py", 
             "${libdir}/python2.7/sgmllib.py"
-        ],
+        ]
+    }, 
+    "idle": {
+        "summary": "Python Integrated Development Environment", 
         "rdepends": [
             "core"
-        ],
-        "summary": "Python HTML processing support"
-    },
-    "idle": {
+        ], 
         "files": [
-            "${bindir}/idle",
+            "${bindir}/idle", 
             "${libdir}/python2.7/idlelib"
-        ],
+        ]
+    }, 
+    "image": {
+        "summary": "Python graphical image handling", 
         "rdepends": [
             "core"
-        ],
-        "summary": "Python Integrated Development Environment"
-    },
-    "image": {
+        ], 
         "files": [
-            "${libdir}/python2.7/colorsys.py",
+            "${libdir}/python2.7/colorsys.py", 
             "${libdir}/python2.7/imghdr.py"
-        ],
-        "rdepends": [
-            "core"
-        ],
-        "summary": "Python graphical image handling"
-    },
+        ]
+    }, 
     "io": {
-        "files": [
-            "${libdir}/python2.7/StringIO.py",
-            "${libdir}/python2.7/_pyio.py",
-            "${libdir}/python2.7/io.py",
-            "${libdir}/python2.7/lib-dynload/_io.so",
-            "${libdir}/python2.7/lib-dynload/_socket.so",
-            "${libdir}/python2.7/lib-dynload/_ssl.so",
-            "${libdir}/python2.7/lib-dynload/cStringIO.so",
-            "${libdir}/python2.7/lib-dynload/select.so",
-            "${libdir}/python2.7/lib-dynload/termios.so",
-            "${libdir}/python2.7/pipes.py",
-            "${libdir}/python2.7/socket.py",
-            "${libdir}/python2.7/ssl.py",
-            "${libdir}/python2.7/tempfile.py"
-        ],
-        "rdepends": [
-            "contextlib",
-            "core",
-            "crypt",
-            "fcntl",
-            "lang",
-            "math",
-            "netclient",
+        "summary": "Python low-level I/O", 
+        "rdepends": [
+            "contextlib", 
+            "core", 
+            "crypt", 
+            "fcntl", 
+            "lang", 
+            "math", 
+            "netclient", 
             "textutils"
-        ],
-        "summary": "Python low-level I/O"
-    },
+        ], 
+        "files": [
+            "${libdir}/python2.7/StringIO.py", 
+            "${libdir}/python2.7/_pyio.py", 
+            "${libdir}/python2.7/io.py", 
+            "${libdir}/python2.7/lib-dynload/_io.so", 
+            "${libdir}/python2.7/lib-dynload/_socket.so", 
+            "${libdir}/python2.7/lib-dynload/_ssl.so", 
+            "${libdir}/python2.7/lib-dynload/cStringIO.so", 
+            "${libdir}/python2.7/lib-dynload/select.so", 
+            "${libdir}/python2.7/lib-dynload/termios.so", 
+            "${libdir}/python2.7/pipes.py", 
+            "${libdir}/python2.7/socket.py", 
+            "${libdir}/python2.7/ssl.py", 
+            "${libdir}/python2.7/tempfile.py"
+        ]
+    }, 
     "json": {
-        "files": [
-            "${libdir}/python2.7/json",
-            "${libdir}/python2.7/lib-dynload/_json.so"
-        ],
+        "summary": "Python JSON support", 
         "rdepends": [
             "core"
-        ],
-        "summary": "Python JSON support"
-    },
-    "lang": {
+        ], 
         "files": [
-            "${libdir}/python2.7/bisect.py",
-            "${libdir}/python2.7/code.py",
-            "${libdir}/python2.7/codeop.py",
-            "${libdir}/python2.7/dis.py",
-            "${libdir}/python2.7/functools.py",
-            "${libdir}/python2.7/inspect.py",
-            "${libdir}/python2.7/lib-dynload/_bisect.so",
-            "${libdir}/python2.7/lib-dynload/_functools.so",
-            "${libdir}/python2.7/lib-dynload/array.so",
-            "${libdir}/python2.7/lib-dynload/parser.so",
-            "${libdir}/python2.7/opcode.py",
-            "${libdir}/python2.7/repr.py",
-            "${libdir}/python2.7/symbol.py",
-            "${libdir}/python2.7/token.py",
-            "${libdir}/python2.7/tokenize.py"
-        ],
+            "${libdir}/python2.7/json", 
+            "${libdir}/python2.7/lib-dynload/_json.so"
+        ]
+    }, 
+    "lang": {
+        "summary": "Python low-level language support", 
         "rdepends": [
             "core"
-        ],
-        "summary": "Python low-level language support"
-    },
+        ], 
+        "files": [
+            "${libdir}/python2.7/bisect.py", 
+            "${libdir}/python2.7/code.py", 
+            "${libdir}/python2.7/codeop.py", 
+            "${libdir}/python2.7/dis.py", 
+            "${libdir}/python2.7/functools.py", 
+            "${libdir}/python2.7/inspect.py", 
+            "${libdir}/python2.7/lib-dynload/_bisect.so", 
+            "${libdir}/python2.7/lib-dynload/_functools.so", 
+            "${libdir}/python2.7/lib-dynload/array.so", 
+            "${libdir}/python2.7/lib-dynload/parser.so", 
+            "${libdir}/python2.7/opcode.py", 
+            "${libdir}/python2.7/repr.py", 
+            "${libdir}/python2.7/symbol.py", 
+            "${libdir}/python2.7/token.py", 
+            "${libdir}/python2.7/tokenize.py"
+        ]
+    }, 
     "logging": {
-        "files": [
-            "${libdir}/python2.7/logging"
-        ],
+        "summary": "Python logging support", 
         "rdepends": [
-            "core",
-            "io",
+            "core", 
+            "io", 
             "threading"
-        ],
-        "summary": "Python logging support"
-    },
+        ], 
+        "files": [
+            "${libdir}/python2.7/logging"
+        ]
+    }, 
     "mailbox": {
+        "summary": "Python mailbox format support", 
+        "rdepends": [
+            "codecs", 
+            "contextlib", 
+            "core", 
+            "crypt", 
+            "datetime", 
+            "email", 
+            "fcntl", 
+            "io", 
+            "lang", 
+            "math", 
+            "mime", 
+            "netclient", 
+            "textutils"
+        ], 
         "files": [
             "${libdir}/python2.7/mailbox.py"
-        ],
-        "rdepends": [
-            "codecs",
-            "contextlib",
-            "core",
-            "crypt",
-            "datetime",
-            "email",
-            "fcntl",
-            "io",
-            "lang",
-            "math",
-            "mime",
-            "netclient",
-            "textutils"
-        ],
-        "summary": "Python mailbox format support"
-    },
+        ]
+    }, 
     "math": {
-        "files": [
-            "${libdir}/python2.7/lib-dynload/_random.so",
-            "${libdir}/python2.7/lib-dynload/cmath.so",
-            "${libdir}/python2.7/lib-dynload/math.so",
-            "${libdir}/python2.7/random.py",
-            "${libdir}/python2.7/sets.py"
-        ],
+        "summary": "Python math support", 
         "rdepends": [
-            "core",
+            "core", 
             "crypt"
-        ],
-        "summary": "Python math support"
-    },
+        ], 
+        "files": [
+            "${libdir}/python2.7/lib-dynload/_random.so", 
+            "${libdir}/python2.7/lib-dynload/cmath.so", 
+            "${libdir}/python2.7/lib-dynload/math.so", 
+            "${libdir}/python2.7/random.py", 
+            "${libdir}/python2.7/sets.py"
+        ]
+    }, 
     "mime": {
+        "summary": "Python MIME handling APIs", 
+        "rdepends": [
+            "contextlib", 
+            "core", 
+            "crypt", 
+            "fcntl", 
+            "io", 
+            "lang", 
+            "math", 
+            "netclient", 
+            "textutils"
+        ], 
         "files": [
-            "${libdir}/python2.7/MimeWriter.py",
-            "${libdir}/python2.7/mimetools.py",
-            "${libdir}/python2.7/mimetypes.py",
-            "${libdir}/python2.7/quopri.py",
-            "${libdir}/python2.7/rfc822.py",
+            "${libdir}/python2.7/MimeWriter.py", 
+            "${libdir}/python2.7/mimetools.py", 
+            "${libdir}/python2.7/mimetypes.py", 
+            "${libdir}/python2.7/quopri.py", 
+            "${libdir}/python2.7/rfc822.py", 
             "${libdir}/python2.7/uu.py"
-        ],
-        "rdepends": [
-            "contextlib",
-            "core",
-            "crypt",
-            "fcntl",
-            "io",
-            "lang",
-            "math",
-            "netclient",
-            "textutils"
-        ],
-        "summary": "Python MIME handling APIs"
-    },
+        ]
+    }, 
     "mmap": {
-        "files": [
-            "${libdir}/python2.7/lib-dynload/mmap.so"
-        ],
+        "summary": "Python memory-mapped file support", 
         "rdepends": [
             "core"
-        ],
-        "summary": "Python memory-mapped file support"
-    },
+        ], 
+        "files": [
+            "${libdir}/python2.7/lib-dynload/mmap.so"
+        ]
+    }, 
     "modules": {
-        "files": [],
-        "rdepends": [
-            "2to3",
-            "argparse",
-            "audio",
-            "bsddb",
-            "codecs",
-            "compile",
-            "compiler",
-            "compression",
-            "contextlib",
-            "core",
-            "crypt",
-            "ctypes",
-            "curses",
-            "datetime",
-            "db",
-            "debugger",
-            "difflib",
-            "distutils",
-            "doctest",
-            "email",
-            "fcntl",
-            "gdbm",
-            "hotshot",
-            "html",
-            "idle",
-            "image",
-            "io",
-            "json",
-            "lang",
-            "logging",
-            "mailbox",
-            "math",
-            "mime",
-            "mmap",
-            "multiprocessing",
-            "netclient",
-            "netserver",
-            "numbers",
-            "pickle",
-            "pkgutil",
-            "plistlib",
-            "pprint",
-            "profile",
-            "pydoc",
-            "re",
-            "resource",
-            "robotparser",
-            "runpy",
-            "shell",
-            "smtpd",
-            "sqlite3",
-            "sqlite3",
-            "stringold",
-            "subprocess",
-            "syslog",
-            "terminal",
-            "textutils",
-            "threading",
-            "tkinter",
-            "unittest",
-            "unixadmin",
-            "xml",
-            "xmlrpc",
+        "files": [], 
+        "rdepends": [
+            "2to3", 
+            "argparse", 
+            "audio", 
+            "bsddb", 
+            "codecs", 
+            "compile", 
+            "compiler", 
+            "compression", 
+            "contextlib", 
+            "core", 
+            "crypt", 
+            "ctypes", 
+            "curses", 
+            "datetime", 
+            "db", 
+            "debugger", 
+            "difflib", 
+            "distutils", 
+            "doctest", 
+            "email", 
+            "fcntl", 
+            "gdbm", 
+            "hotshot", 
+            "html", 
+            "idle", 
+            "image", 
+            "io", 
+            "json", 
+            "lang", 
+            "logging", 
+            "mailbox", 
+            "math", 
+            "mime", 
+            "mmap", 
+            "multiprocessing", 
+            "netclient", 
+            "netserver", 
+            "numbers", 
+            "pickle", 
+            "pkgutil", 
+            "plistlib", 
+            "pprint", 
+            "profile", 
+            "pydoc", 
+            "re", 
+            "resource", 
+            "robotparser", 
+            "runpy", 
+            "shell", 
+            "smtpd", 
+            "sqlite3", 
+            "sqlite3", 
+            "stringold", 
+            "subprocess", 
+            "syslog", 
+            "terminal", 
+            "textutils", 
+            "threading", 
+            "tkinter", 
+            "unittest", 
+            "unixadmin", 
+            "xml", 
+            "xmlrpc", 
             "zlib"
-        ],
+        ], 
         "summary": "All Python modules"
-    },
+    }, 
     "multiprocessing": {
-        "files": [
-            "${libdir}/python2.7/lib-dynload/_multiprocessing.so",
-            "${libdir}/python2.7/multiprocessing"
-        ],
+        "summary": "Python multiprocessing support", 
         "rdepends": [
-            "core",
-            "fcntl",
-            "io",
-            "pickle",
-            "subprocess",
+            "core", 
+            "fcntl", 
+            "io", 
+            "pickle", 
+            "subprocess", 
             "threading"
-        ],
-        "summary": "Python multiprocessing support"
-    },
-    "netclient": {
+        ], 
         "files": [
-            "${libdir}/python2.7/Cookie.py",
-            "${libdir}/python2.7/_LWPCookieJar.py",
-            "${libdir}/python2.7/_MozillaCookieJar.py",
-            "${libdir}/python2.7/base64.py",
-            "${libdir}/python2.7/cookielib.py",
-            "${libdir}/python2.7/ftplib.py",
-            "${libdir}/python2.7/hmac.py",
-            "${libdir}/python2.7/httplib.py",
-            "${libdir}/python2.7/nntplib.py",
-            "${libdir}/python2.7/poplib.py",
-            "${libdir}/python2.7/smtplib.py",
-            "${libdir}/python2.7/telnetlib.py",
-            "${libdir}/python2.7/urllib.py",
-            "${libdir}/python2.7/urllib2.py",
-            "${libdir}/python2.7/urlparse.py",
-            "${libdir}/python2.7/uuid.py"
-        ],
-        "rdepends": [
-            "codecs",
-            "contextlib",
-            "core",
-            "crypt",
-            "ctypes",
-            "datetime",
-            "email",
-            "fcntl",
-            "io",
-            "lang",
-            "math",
-            "mime",
-            "pickle",
-            "subprocess",
-            "textutils",
+            "${libdir}/python2.7/lib-dynload/_multiprocessing.so", 
+            "${libdir}/python2.7/multiprocessing"
+        ]
+    }, 
+    "netclient": {
+        "summary": "Python Internet Protocol clients", 
+        "rdepends": [
+            "codecs", 
+            "contextlib", 
+            "core", 
+            "crypt", 
+            "ctypes", 
+            "datetime", 
+            "email", 
+            "fcntl", 
+            "io", 
+            "lang", 
+            "math", 
+            "mime", 
+            "pickle", 
+            "subprocess", 
+            "textutils", 
             "threading"
-        ],
-        "summary": "Python Internet Protocol clients"
-    },
+        ], 
+        "files": [
+            "${libdir}/python2.7/Cookie.py", 
+            "${libdir}/python2.7/_LWPCookieJar.py", 
+            "${libdir}/python2.7/_MozillaCookieJar.py", 
+            "${libdir}/python2.7/base64.py", 
+            "${libdir}/python2.7/cookielib.py", 
+            "${libdir}/python2.7/ftplib.py", 
+            "${libdir}/python2.7/hmac.py", 
+            "${libdir}/python2.7/httplib.py", 
+            "${libdir}/python2.7/nntplib.py", 
+            "${libdir}/python2.7/poplib.py", 
+            "${libdir}/python2.7/smtplib.py", 
+            "${libdir}/python2.7/telnetlib.py", 
+            "${libdir}/python2.7/urllib.py", 
+            "${libdir}/python2.7/urllib2.py", 
+            "${libdir}/python2.7/urlparse.py", 
+            "${libdir}/python2.7/uuid.py"
+        ]
+    }, 
     "netserver": {
+        "summary": "Python Internet Protocol servers", 
+        "rdepends": [
+            "compression", 
+            "contextlib", 
+            "core", 
+            "crypt", 
+            "fcntl", 
+            "io", 
+            "lang", 
+            "math", 
+            "mime", 
+            "netclient", 
+            "shell", 
+            "textutils", 
+            "threading", 
+            "unixadmin", 
+            "zlib"
+        ], 
         "files": [
-            "${libdir}/python2.7/BaseHTTPServer.py",
-            "${libdir}/python2.7/CGIHTTPServer.py",
-            "${libdir}/python2.7/SimpleHTTPServer.py",
-            "${libdir}/python2.7/SocketServer.py",
+            "${libdir}/python2.7/BaseHTTPServer.py", 
+            "${libdir}/python2.7/CGIHTTPServer.py", 
+            "${libdir}/python2.7/SimpleHTTPServer.py", 
+            "${libdir}/python2.7/SocketServer.py", 
             "${libdir}/python2.7/cgi.py"
-        ],
-        "rdepends": [
-            "compression",
-            "contextlib",
-            "core",
-            "crypt",
-            "fcntl",
-            "io",
-            "lang",
-            "math",
-            "mime",
-            "netclient",
-            "shell",
-            "textutils",
-            "threading",
-            "unixadmin",
-            "zlib"
-        ],
-        "summary": "Python Internet Protocol servers"
-    },
+        ]
+    }, 
     "numbers": {
-        "files": [
-            "${libdir}/python2.7/decimal.py",
-            "${libdir}/python2.7/fractions.py",
-            "${libdir}/python2.7/numbers.py"
-        ],
+        "summary": "Python number APIs", 
         "rdepends": [
-            "codecs",
-            "core",
-            "lang",
-            "math",
+            "codecs", 
+            "core", 
+            "lang", 
+            "math", 
             "threading"
-        ],
-        "summary": "Python number APIs"
-    },
-    "pickle": {
+        ], 
         "files": [
-            "${libdir}/python2.7/lib-dynload/cPickle.so",
-            "${libdir}/python2.7/pickle.py",
-            "${libdir}/python2.7/pickletools.py",
-            "${libdir}/python2.7/shelve.py"
-        ],
+            "${libdir}/python2.7/decimal.py", 
+            "${libdir}/python2.7/fractions.py", 
+            "${libdir}/python2.7/numbers.py"
+        ]
+    }, 
+    "pickle": {
+        "summary": "Python serialisation/persistence support", 
         "rdepends": [
-            "core",
+            "core", 
             "io"
-        ],
-        "summary": "Python serialisation/persistence support"
-    },
-    "pkgutil": {
+        ], 
         "files": [
-            "${libdir}/python2.7/pkgutil.py"
-        ],
+            "${libdir}/python2.7/lib-dynload/cPickle.so", 
+            "${libdir}/python2.7/pickle.py", 
+            "${libdir}/python2.7/pickletools.py", 
+            "${libdir}/python2.7/shelve.py"
+        ]
+    }, 
+    "pkgutil": {
+        "summary": "Python package extension utility support", 
         "rdepends": [
             "core"
-        ],
-        "summary": "Python package extension utility support"
-    },
+        ], 
+        "files": [
+            "${libdir}/python2.7/pkgutil.py"
+        ]
+    }, 
     "plistlib": {
+        "summary": "Generate and parse Mac OS X .plist files", 
+        "rdepends": [
+            "core", 
+            "datetime", 
+            "io"
+        ], 
         "files": [
             "${libdir}/python2.7/plistlib.py"
-        ],
+        ]
+    }, 
+    "pprint": {
+        "summary": "Python pretty-print support", 
         "rdepends": [
-            "core",
-            "datetime",
+            "core", 
             "io"
-        ],
-        "summary": "Generate and parse Mac OS X .plist files"
-    },
-    "pprint": {
+        ], 
         "files": [
             "${libdir}/python2.7/pprint.py"
-        ],
-        "rdepends": [
-            "core",
-            "io"
-        ],
-        "summary": "Python pretty-print support"
-    },
+        ]
+    }, 
     "profile": {
-        "files": [
-            "${libdir}/python2.7/cProfile.py",
-            "${libdir}/python2.7/lib-dynload/_lsprof.so",
-            "${libdir}/python2.7/profile.py",
-            "${libdir}/python2.7/pstats.py"
-        ],
+        "summary": "Python basic performance profiling support", 
         "rdepends": [
-            "codecs",
-            "core",
-            "lang",
-            "resource",
+            "codecs", 
+            "core", 
+            "lang", 
+            "resource", 
             "textutils"
-        ],
-        "summary": "Python basic performance profiling support"
-    },
-    "pydoc": {
+        ], 
         "files": [
-            "${bindir}/pydoc",
-            "${libdir}/python2.7/pydoc.py",
-            "${libdir}/python2.7/pydoc_data"
-        ],
+            "${libdir}/python2.7/cProfile.py", 
+            "${libdir}/python2.7/lib-dynload/_lsprof.so", 
+            "${libdir}/python2.7/profile.py", 
+            "${libdir}/python2.7/pstats.py"
+        ]
+    }, 
+    "pydoc": {
+        "summary": "Python interactive help support", 
         "rdepends": [
-            "codecs",
-            "core",
-            "lang",
+            "codecs", 
+            "core", 
+            "lang", 
             "pkgutil"
-        ],
-        "summary": "Python interactive help support"
-    },
+        ], 
+        "files": [
+            "${bindir}/pydoc", 
+            "${libdir}/python2.7/pydoc.py", 
+            "${libdir}/python2.7/pydoc_data"
+        ]
+    }, 
     "re": {
+        "summary": "Python Regular Expression APIs", 
+        "rdepends": [
+            "core"
+        ], 
         "files": [
             "${libdir}/python2.7/sre.py"
-        ],
+        ]
+    }, 
+    "resource": {
+        "summary": "Python resource control interface", 
         "rdepends": [
             "core"
-        ],
-        "summary": "Python Regular Expression APIs"
-    },
-    "resource": {
+        ], 
         "files": [
             "${libdir}/python2.7/lib-dynload/resource.so"
-        ],
-        "rdepends": [
-            "core"
-        ],
-        "summary": "Python resource control interface"
-    },
+        ]
+    }, 
     "robotparser": {
-        "files": [
-            "${libdir}/python2.7/robotparser.py"
-        ],
+        "summary": "Python robots.txt parser", 
         "rdepends": [
-            "contextlib",
-            "core",
-            "io",
-            "lang",
-            "netclient",
+            "contextlib", 
+            "core", 
+            "io", 
+            "lang", 
+            "netclient", 
             "textutils"
-        ],
-        "summary": "Python robots.txt parser"
-    },
-    "runpy": {
+        ], 
         "files": [
-            "${libdir}/python2.7/runpy.py"
-        ],
+            "${libdir}/python2.7/robotparser.py"
+        ]
+    }, 
+    "runpy": {
+        "summary": "Python helper for locating/executing scripts in module namespace", 
         "rdepends": [
-            "core",
+            "core", 
             "pkgutil"
-        ],
-        "summary": "Python helper for locating/executing scripts in module namespace"
-    },
-    "shell": {
+        ], 
         "files": [
-            "${libdir}/python2.7/cmd.py",
-            "${libdir}/python2.7/commands.py",
-            "${libdir}/python2.7/dircache.py",
-            "${libdir}/python2.7/fnmatch.py",
-            "${libdir}/python2.7/glob.py",
-            "${libdir}/python2.7/popen2.py",
-            "${libdir}/python2.7/shlex.py",
-            "${libdir}/python2.7/shutil.py"
-        ],
+            "${libdir}/python2.7/runpy.py"
+        ]
+    }, 
+    "shell": {
+        "summary": "Python shell-like functionality", 
         "rdepends": [
-            "compression",
-            "core",
-            "io",
-            "unixadmin",
+            "compression", 
+            "core", 
+            "io", 
+            "unixadmin", 
             "zlib"
-        ],
-        "summary": "Python shell-like functionality"
-    },
+        ], 
+        "files": [
+            "${libdir}/python2.7/cmd.py", 
+            "${libdir}/python2.7/commands.py", 
+            "${libdir}/python2.7/dircache.py", 
+            "${libdir}/python2.7/fnmatch.py", 
+            "${libdir}/python2.7/glob.py", 
+            "${libdir}/python2.7/popen2.py", 
+            "${libdir}/python2.7/shlex.py", 
+            "${libdir}/python2.7/shutil.py"
+        ]
+    }, 
     "smtpd": {
-        "files": [
-            "${bindir}/smtpd.py",
-            "${libdir}/python2.7/asynchat.py",
-            "${libdir}/python2.7/asyncore.py",
-            "${libdir}/python2.7/smtpd.py"
-        ],
+        "summary": "Python Simple Mail Transport Daemon", 
         "rdepends": [
-            "core",
-            "fcntl",
-            "io",
+            "core", 
+            "fcntl", 
+            "io", 
             "lang"
-        ],
-        "summary": "Python Simple Mail Transport Daemon"
-    },
-    "sqlite3": {
+        ], 
         "files": [
-            "${libdir}/python2.7/lib-dynload/_sqlite3.so"
-        ],
+            "${bindir}/smtpd.py", 
+            "${libdir}/python2.7/asynchat.py", 
+            "${libdir}/python2.7/asyncore.py", 
+            "${libdir}/python2.7/smtpd.py"
+        ]
+    }, 
+    "sqlite3": {
+        "summary": "Python Sqlite3 database support", 
         "rdepends": [
             "core"
-        ],
-        "summary": "Python Sqlite3 database support"
-    },
-    "sqlite3-tests": {
+        ], 
         "files": [
-            "${libdir}/python2.7/sqlite3/test"
-        ],
+            "${libdir}/python2.7/lib-dynload/_sqlite3.so"
+        ]
+    }, 
+    "sqlite3-tests": {
+        "summary": "Python Sqlite3 database support tests", 
         "rdepends": [
-            "core",
+            "core", 
             "tests"
-        ],
-        "summary": "Python Sqlite3 database support tests"
-    },
-    "stringold": {
+        ], 
         "files": [
-            "${libdir}/python2.7/stringold.py"
-        ],
+            "${libdir}/python2.7/sqlite3/test"
+        ]
+    }, 
+    "stringold": {
+        "summary": "Python string APIs [deprecated]", 
         "rdepends": [
             "core"
-        ],
-        "summary": "Python string APIs [deprecated]"
-    },
+        ], 
+        "files": [
+            "${libdir}/python2.7/stringold.py"
+        ]
+    }, 
     "subprocess": {
+        "summary": "Python subprocess support", 
+        "rdepends": [
+            "core", 
+            "fcntl", 
+            "io", 
+            "pickle", 
+            "threading"
+        ], 
         "files": [
             "${libdir}/python2.7/subprocess.py"
-        ],
-        "rdepends": [
-            "core",
-            "fcntl",
-            "io",
-            "pickle"
-        ],
-        "summary": "Python subprocess support"
-    },
+        ]
+    }, 
     "syslog": {
-        "files": [
-            "${libdir}/python2.7/lib-dynload/syslog.so"
-        ],
+        "summary": "Python syslog interface", 
         "rdepends": [
             "core"
-        ],
-        "summary": "Python syslog interface"
-    },
-    "terminal": {
+        ], 
         "files": [
-            "${libdir}/python2.7/pty.py",
-            "${libdir}/python2.7/tty.py"
-        ],
+            "${libdir}/python2.7/lib-dynload/syslog.so"
+        ]
+    }, 
+    "terminal": {
+        "summary": "Python terminal controlling support", 
         "rdepends": [
-            "core",
+            "core", 
             "io"
-        ],
-        "summary": "Python terminal controlling support"
-    },
-    "tests": {
+        ], 
         "files": [
-            "${libdir}/python2.7/test"
-        ],
+            "${libdir}/python2.7/pty.py", 
+            "${libdir}/python2.7/tty.py"
+        ]
+    }, 
+    "tests": {
+        "summary": "Python tests", 
         "rdepends": [
             "core"
-        ],
-        "summary": "Python tests"
-    },
-    "textutils": {
+        ], 
         "files": [
-            "${libdir}/python2.7/csv.py",
-            "${libdir}/python2.7/lib-dynload/_csv.so",
-            "${libdir}/python2.7/optparse.py",
-            "${libdir}/python2.7/textwrap.py"
-        ],
+            "${libdir}/python2.7/test"
+        ]
+    }, 
+    "textutils": {
+        "summary": "Python option parsin", 
         "rdepends": [
-            "codecs",
-            "core",
-            "io",
+            "codecs", 
+            "core", 
+            "io", 
             "lang"
-        ],
-        "summary": "Python option parsin"
-    },
+        ], 
+        "files": [
+            "${libdir}/python2.7/csv.py", 
+            "${libdir}/python2.7/lib-dynload/_csv.so", 
+            "${libdir}/python2.7/optparse.py", 
+            "${libdir}/python2.7/textwrap.py"
+        ]
+    }, 
     "threading": {
+        "summary": "Python threading & synchronization support", 
+        "rdepends": [
+            "core"
+        ], 
         "files": [
-            "${libdir}/python2.7/Queue.py",
-            "${libdir}/python2.7/_threading_local.py",
-            "${libdir}/python2.7/dummy_thread.py",
-            "${libdir}/python2.7/dummy_threading.py",
-            "${libdir}/python2.7/mutex.py",
+            "${libdir}/python2.7/Queue.py", 
+            "${libdir}/python2.7/_threading_local.py", 
+            "${libdir}/python2.7/dummy_thread.py", 
+            "${libdir}/python2.7/dummy_threading.py", 
+            "${libdir}/python2.7/mutex.py", 
             "${libdir}/python2.7/threading.py"
-        ],
+        ]
+    }, 
+    "tkinter": {
+        "summary": "Python Tcl/Tk bindings", 
         "rdepends": [
             "core"
-        ],
-        "summary": "Python threading & synchronization support"
-    },
-    "tkinter": {
+        ], 
         "files": [
             "${libdir}/python2.7/lib-tk"
-        ],
-        "rdepends": [
-            "core"
-        ],
-        "summary": "Python Tcl/Tk bindings"
-    },
+        ]
+    }, 
     "unittest": {
-        "files": [
-            "${libdir}/python2.7/unittest"
-        ],
+        "summary": "Python unit testing framework", 
         "rdepends": [
-            "core",
-            "difflib",
-            "io",
-            "lang",
-            "pprint",
+            "core", 
+            "difflib", 
+            "io", 
+            "lang", 
+            "pprint", 
             "shell"
-        ],
-        "summary": "Python unit testing framework"
-    },
-    "unixadmin": {
+        ], 
         "files": [
-            "${libdir}/python2.7/getpass.py",
-            "${libdir}/python2.7/lib-dynload/grp.so",
-            "${libdir}/python2.7/lib-dynload/nis.so"
-        ],
+            "${libdir}/python2.7/unittest"
+        ]
+    }, 
+    "unixadmin": {
+        "summary": "Python Unix administration support", 
         "rdepends": [
-            "core",
+            "core", 
             "io"
-        ],
-        "summary": "Python Unix administration support"
-    },
-    "xml": {
+        ], 
         "files": [
-            "${libdir}/python2.7/lib-dynload/_elementtree.so",
-            "${libdir}/python2.7/lib-dynload/pyexpat.so",
-            "${libdir}/python2.7/xml"
-        ],
+            "${libdir}/python2.7/getpass.py", 
+            "${libdir}/python2.7/lib-dynload/grp.so", 
+            "${libdir}/python2.7/lib-dynload/nis.so"
+        ]
+    }, 
+    "xml": {
+        "summary": "Python basic XML support", 
         "rdepends": [
             "core"
-        ],
-        "summary": "Python basic XML support"
-    },
+        ], 
+        "files": [
+            "${libdir}/python2.7/lib-dynload/_elementtree.so", 
+            "${libdir}/python2.7/lib-dynload/pyexpat.so", 
+            "${libdir}/python2.7/xml"
+        ]
+    }, 
     "xmlrpc": {
+        "summary": "Python XML-RPC support", 
+        "rdepends": [
+            "codecs", 
+            "compression", 
+            "contextlib", 
+            "core", 
+            "crypt", 
+            "datetime", 
+            "fcntl", 
+            "io", 
+            "lang", 
+            "math", 
+            "mime", 
+            "netclient", 
+            "netserver", 
+            "pkgutil", 
+            "pydoc", 
+            "textutils", 
+            "threading", 
+            "xml", 
+            "zlib"
+        ], 
         "files": [
-            "${libdir}/python2.7/DocXMLRPCServer.py",
+            "${libdir}/python2.7/DocXMLRPCServer.py", 
             "${libdir}/python2.7/SimpleXMLRPCServer.py"
-        ],
-        "rdepends": [
-            "codecs",
-            "compression",
-            "contextlib",
-            "core",
-            "crypt",
-            "datetime",
-            "fcntl",
-            "io",
-            "lang",
-            "math",
-            "mime",
-            "netclient",
-            "netserver",
-            "pkgutil",
-            "pydoc",
-            "textutils",
-            "threading",
-            "xml",
-            "zlib"
-        ],
-        "summary": "Python XML-RPC support"
-    },
+        ]
+    }, 
     "zlib": {
-        "files": [
-            "${libdir}/python2.7/lib-dynload/zlib.so"
-        ],
+        "summary": "Python zlib compression support", 
         "rdepends": [
             "core"
-        ],
-        "summary": "Python zlib compression support"
+        ], 
+        "files": [
+            "${libdir}/python2.7/lib-dynload/zlib.so"
+        ]
     }
 }
-- 
2.7.4



^ permalink raw reply related	[flat|nested] 7+ messages in thread

* ✗ patchtest: failure for "python: don't sort the manifes..." and 2 more (rev2)
  2018-09-14 21:33 [PATCH 1/3] python: don't sort the manifest in create_manifest Andrew Geissler
                   ` (2 preceding siblings ...)
  2018-09-19 13:25 ` [PATCH 1/3] python: don't sort the manifest in create_manifest Andrew Geissler
@ 2018-09-19 13:37 ` Patchwork
  3 siblings, 0 replies; 7+ messages in thread
From: Patchwork @ 2018-09-19 13:37 UTC (permalink / raw)
  To: Andrew Geissler; +Cc: openembedded-core

== Series Details ==

Series: "python: don't sort the manifes..." and 2 more (rev2)
Revision: 2
URL   : https://patchwork.openembedded.org/series/14085/
State : failure

== Summary ==


Thank you for submitting this patch series to OpenEmbedded Core. This is
an automated response. Several tests have been executed on the proposed
series by patchtest resulting in the following failures:



* Issue             Series does not apply on top of target branch [test_series_merge_on_head] 
  Suggested fix    Rebase your series on top of targeted branch
  Targeted branch  master (currently at 6a1e550838)



If you believe any of these test results are incorrect, please reply to the
mailing list (openembedded-core@lists.openembedded.org) raising your concerns.
Otherwise we would appreciate you correcting the issues and submitting a new
version of the patchset if applicable. Please ensure you add/increment the
version number when sending the new version (i.e. [PATCH] -> [PATCH v2] ->
[PATCH v3] -> ...).

---
Guidelines:     https://www.openembedded.org/wiki/Commit_Patch_Message_Guidelines
Test framework: http://git.yoctoproject.org/cgit/cgit.cgi/patchtest
Test suite:     http://git.yoctoproject.org/cgit/cgit.cgi/patchtest-oe



^ permalink raw reply	[flat|nested] 7+ messages in thread

end of thread, other threads:[~2018-09-19 13:37 UTC | newest]

Thread overview: 7+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2018-09-14 21:33 [PATCH 1/3] python: don't sort the manifest in create_manifest Andrew Geissler
2018-09-14 21:33 ` [PATCH 2/3] python: respect package order in manifest Andrew Geissler
2018-09-19 11:08   ` Burton, Ross
2018-09-19 13:13     ` Andrew Geissler
2018-09-14 21:33 ` [PATCH 3/3] python: consolidate tests Andrew Geissler
2018-09-19 13:25 ` [PATCH 1/3] python: don't sort the manifest in create_manifest Andrew Geissler
2018-09-19 13:37 ` ✗ patchtest: failure for "python: don't sort the manifes..." and 2 more (rev2) Patchwork

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox