diff options
author | Richard Maw <richard.maw@codethink.co.uk> | 2013-01-21 17:16:23 +0000 |
---|---|---|
committer | Richard Maw <richard.maw@codethink.co.uk> | 2013-01-21 17:27:30 +0000 |
commit | d1882582a3d0641a06f908c65de200e5b13ff5c2 (patch) | |
tree | cf80a101c822ddbf040f5f90b7169fd46e915d41 /morphlib/morph2.py | |
parent | 7172dca14d7306d79e93b97dcef3a006309f2e03 (diff) | |
parent | 053c0993bb62dd5e1a73d3367ea04c70874f3bd1 (diff) | |
download | morph-d1882582a3d0641a06f908c65de200e5b13ff5c2.tar.gz |
Merge branch 'jjardon/python_compatibility_fixes' of ssh://git.baserock.org/baserock/baserock/morph
This includes the following fixups:
- altering the bootstrap script to install ordereddict and simplejson.
- Adding a comment to clarify that it is intentional to use simplejson
if collections does not have OrderedDict
- Amending the copyright years to include 2013
Diffstat (limited to 'morphlib/morph2.py')
-rw-r--r-- | morphlib/morph2.py | 34 |
1 files changed, 13 insertions, 21 deletions
diff --git a/morphlib/morph2.py b/morphlib/morph2.py index 73d55d1d..4fdf7ba4 100644 --- a/morphlib/morph2.py +++ b/morphlib/morph2.py @@ -1,4 +1,4 @@ -# Copyright (C) 2012 Codethink Limited +# Copyright (C) 2012-2013 Codethink Limited # # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by @@ -14,16 +14,19 @@ # 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. -import sys -have_python27 = sys.version_info >= (2,7) - -import collections -if not hasattr(collections, 'OrderedDict'): # pragma: no cover - collections.OrderedDict = dict import copy -import json import re +# It is intentional that if collections does not have OrderedDict that +# simplejson is also used in preference to json, as OrderedDict became +# a member of collections in the same release json got its object_pairs_hook +try: # pragma: no cover + from collections import OrderedDict + import json +except ImportError: # pragma: no cover + from ordereddict import OrderedDict + import simplejson as json + class Morphology(object): @@ -58,19 +61,8 @@ class Morphology(object): ] } - if have_python27: # pragma: no cover - @staticmethod - def _order_keys(pairs): - result = collections.OrderedDict() - for k,v in pairs: - result[k] = v - return result - def __init__(self, text): - if have_python27: # pragma: no cover - self._dict = json.loads(text, object_pairs_hook=self._order_keys) - else: # pragma: no cover - self._dict = json.loads(text) + self._dict = json.loads(text, object_pairs_hook=OrderedDict) self._set_defaults() self._validate_children() @@ -158,7 +150,7 @@ class Morphology(object): # Recreate dict without the empty default values, with a few kind # specific hacks to try and edit standard morphologies as # non-destructively as possible - as_dict = collections.OrderedDict() + as_dict = OrderedDict() for key in self.keys(): if self['kind'] == 'stratum' and key == 'chunks': value = copy.copy(self[key]) |