From a6ca4978eeb134fac7111b26fd973885fe117f3a Mon Sep 17 00:00:00 2001 From: Sol Jerome Date: Mon, 2 Jul 2012 16:25:23 -0500 Subject: Cfg: Fix traceback for unicode templates Signed-off-by: Sol Jerome --- src/lib/Bcfg2Py3k.py | 6 ++++++ src/lib/Server/Plugins/Cfg.py | 14 ++++++++++---- 2 files changed, 16 insertions(+), 4 deletions(-) diff --git a/src/lib/Bcfg2Py3k.py b/src/lib/Bcfg2Py3k.py index 5d32c79a0..031c74ec0 100644 --- a/src/lib/Bcfg2Py3k.py +++ b/src/lib/Bcfg2Py3k.py @@ -64,6 +64,12 @@ try: except ImportError: import http.client as httplib +# py3k compatibility +if sys.hexversion >= 0x03000000: + unicode = str +else: + unicode = unicode + # print to file compatibility def u_str(string, encoding=None): if sys.hexversion >= 0x03000000: diff --git a/src/lib/Server/Plugins/Cfg.py b/src/lib/Server/Plugins/Cfg.py index 9ec39e108..c877679d0 100644 --- a/src/lib/Server/Plugins/Cfg.py +++ b/src/lib/Server/Plugins/Cfg.py @@ -2,6 +2,7 @@ __revision__ = '$Revision$' import binascii +import codecs import logging import lxml import operator @@ -12,7 +13,7 @@ import stat import sys import tempfile from subprocess import Popen, PIPE -from Bcfg2.Bcfg2Py3k import u_str +from Bcfg2.Bcfg2Py3k import u_str, unicode import Bcfg2.Server.Plugin @@ -173,8 +174,10 @@ class CfgEntrySet(Bcfg2.Server.Plugin.EntrySet): try: fname = entry.get('realname', entry.get('name')) s = {'useStackFrames': False} - template = Cheetah.Template.Template(open(basefile.name).read(), - compilerSettings=s) + template = Cheetah.Template.Template( + codecs.open(basefile.name, + encoding=self.encoding).read(), + compilerSettings=s) template.metadata = metadata template.path = fname template.source_path = basefile.name @@ -194,7 +197,10 @@ class CfgEntrySet(Bcfg2.Server.Plugin.EntrySet): entry.text = binascii.b2a_base64(data) else: try: - entry.text = u_str(data, self.encoding) + if type(data) == unicode: + entry.text = data + else: + entry.text = u_str(data, self.encoding) except UnicodeDecodeError: msg = "Failed to decode %s: %s" % (entry.get('name'), sys.exc_info()[1]) -- cgit v1.2.3-1-g7c22