From 16d3e04cb80a975eef0e0ad6f0f6dc4800860d3c Mon Sep 17 00:00:00 2001 From: Michael Fenn Date: Thu, 19 Mar 2015 15:10:44 -0400 Subject: compat: use eval instead of ast.literal_eval on python 2.4 --- doc/development/compat.txt | 10 ++++++++++ src/lib/Bcfg2/Compat.py | 6 ++++++ src/lib/Bcfg2/Options.py | 4 ++-- 3 files changed, 18 insertions(+), 2 deletions(-) diff --git a/doc/development/compat.txt b/doc/development/compat.txt index 8700c46d3..5ac08ea68 100644 --- a/doc/development/compat.txt +++ b/doc/development/compat.txt @@ -129,6 +129,8 @@ below, since some of these implementations may be feature-incomplete. +----------------+--------------------------------+--------------------------------------------+ | MutableMapping | :class:`UserDict.DictMixin` | :class:`collections.MutableMapping` (2.6+) | +----------------+--------------------------------+--------------------------------------------+ +| literal_eval | :func:`ast.literal_eval` | :func:`eval` | ++----------------+--------------------------------+--------------------------------------------+ walk_packages ~~~~~~~~~~~~~ @@ -171,6 +173,14 @@ mind. :class:`collections.MutableMapping` is available in Python 2.6+, and will be used if available. +literal_eval +~~~~~~~~~~~~ + +:func:`ast.literal_eval` is a safe version of :func:`eval` that will only +allow delaration of literal strings, ints, list, dicts, etc. This was +introduced in Python 2.6, and as such Python 2.4 uses the plain-old +:func:`eval`. + Other Symbols ------------- diff --git a/src/lib/Bcfg2/Compat.py b/src/lib/Bcfg2/Compat.py index b8a75a0c5..1c2420ccf 100644 --- a/src/lib/Bcfg2/Compat.py +++ b/src/lib/Bcfg2/Compat.py @@ -286,3 +286,9 @@ except NameError: def cmp(a, b): """ Py3k implementation of cmp() """ return (a > b) - (a < b) + +# ast was introduced in python 2.6 +try: + from ast import literal_eval +except ImportError: + literal_eval = eval diff --git a/src/lib/Bcfg2/Options.py b/src/lib/Bcfg2/Options.py index fdc34eb95..5653b29e5 100644 --- a/src/lib/Bcfg2/Options.py +++ b/src/lib/Bcfg2/Options.py @@ -1,6 +1,5 @@ """Option parsing library for utilities.""" -import ast import copy import getopt import grp @@ -13,6 +12,7 @@ import sys import Bcfg2.Client.Tools from Bcfg2.Compat import ConfigParser +from Bcfg2.Compat import literal_eval from Bcfg2.version import __version__ @@ -333,7 +333,7 @@ def colon_split(c_string): def dict_split(c_string): """ literally evaluate the option in order to allow for arbitrarily nested dictionaries """ - return ast.literal_eval(c_string) + return literal_eval(c_string) def get_bool(val): -- cgit v1.2.3-1-g7c22