diff piecrust/app.py @ 67:563ce5dd02af

I don't care what the YAML spec says, ordered maps are the only sane way.
author Ludovic Chabant <ludovic@chabant.com>
date Fri, 29 Aug 2014 16:42:15 -0700
parents 2d617b889b00
children fdb08d986384
line wrap: on
line diff
--- a/piecrust/app.py	Fri Aug 29 16:41:16 2014 -0700
+++ b/piecrust/app.py	Fri Aug 29 16:42:15 2014 -0700
@@ -4,6 +4,7 @@
 import codecs
 import hashlib
 import logging
+import collections
 import yaml
 from werkzeug.utils import cached_property
 from piecrust import (APP_VERSION,
@@ -15,7 +16,8 @@
 from piecrust.cache import ExtensibleCache, NullCache, NullExtensibleCache
 from piecrust.plugins.base import PluginLoader
 from piecrust.environment import StandardEnvironment
-from piecrust.configuration import Configuration, ConfigurationError, merge_dicts
+from piecrust.configuration import (Configuration, ConfigurationError,
+        OrderedDictYAMLLoader, merge_dicts)
 from piecrust.routing import Route
 from piecrust.sources.base import REALM_USER, REALM_THEME
 from piecrust.taxonomies import Taxonomy
@@ -64,7 +66,8 @@
         if self.cache.isValid('config.json', path_times):
             logger.debug("Loading configuration from cache...")
             config_text = self.cache.read('config.json')
-            self._values = json.loads(config_text)
+            self._values = json.loads(config_text,
+                    object_pairs_hook=collections.OrderedDict)
 
             actual_cache_key = self._values.get('__cache_key')
             if actual_cache_key == cache_key:
@@ -77,7 +80,8 @@
         logger.debug("Loading configuration from: %s" % self.paths)
         for i, p in enumerate(self.paths):
             with codecs.open(p, 'r', 'utf-8') as fp:
-                loaded_values = yaml.load(fp.read())
+                loaded_values = yaml.load(fp.read(),
+                        Loader=OrderedDictYAMLLoader)
             if loaded_values is None:
                 loaded_values = {}
             for fixup in self.fixups: