From fbc5f87f0ae7cecda3935c4af0b2683aa27ccfd5 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?J=C3=A9r=C3=B4me=20Lebleu?= Date: Mon, 16 Jun 2014 12:55:55 +0200 Subject: [PATCH] [fix] Keep actions map arguments's order on parsing --- moulinette/actionsmap.py | 15 ++++++++++++--- 1 file changed, 12 insertions(+), 3 deletions(-) diff --git a/moulinette/actionsmap.py b/moulinette/actionsmap.py index 02b942b7..4bea8e19 100644 --- a/moulinette/actionsmap.py +++ b/moulinette/actionsmap.py @@ -254,7 +254,7 @@ class ExtraArgumentParser(object): try: self._extra_params[tid][arg_name] = parameters except KeyError: - self._extra_params[tid] = { arg_name: parameters } + self._extra_params[tid] = OrderedDict({ arg_name: parameters }) def parse_args(self, tid, args): """ @@ -265,7 +265,7 @@ class ExtraArgumentParser(object): - args -- A dict of argument name associated to their value """ - extra_args = dict(self._extra_params.get(GLOBAL_ARGUMENT, {})) + extra_args = OrderedDict(self._extra_params.get(GLOBAL_ARGUMENT, {})) extra_args.update(self._extra_params.get(tid, {})) # Iterate over action arguments with extra parameters @@ -298,6 +298,15 @@ class ExtraArgumentParser(object): ## Main class ---------------------------------------------------------- +def ordered_yaml_load(stream): + class OrderedLoader(yaml.Loader): + pass + OrderedLoader.add_constructor( + yaml.resolver.BaseResolver.DEFAULT_MAPPING_TAG, + lambda loader, node: OrderedDict(loader.construct_pairs(node))) + return yaml.load(stream, OrderedLoader) + + class ActionsMap(object): """Validate and process actions defined into an actions map @@ -346,7 +355,7 @@ class ActionsMap(object): break else: with open('%s/actionsmap/%s.yml' % (pkg.datadir, n)) as f: - actionsmaps[n] = yaml.load(f) + actionsmaps[n] = ordered_yaml_load(f) # Load translations # FIXME: Allow several namespaces in m18n