diff options
author | Sol Jerome <sol.jerome@gmail.com> | 2012-07-02 16:25:23 -0500 |
---|---|---|
committer | Sol Jerome <sol.jerome@gmail.com> | 2012-07-02 16:25:23 -0500 |
commit | a6ca4978eeb134fac7111b26fd973885fe117f3a (patch) | |
tree | b0e33f262c082670d5b8766d30398c32a6d29c2d | |
parent | 16a38827b5bb374da6caaf103f9363a45262f745 (diff) | |
download | bcfg2-a6ca4978eeb134fac7111b26fd973885fe117f3a.tar.gz bcfg2-a6ca4978eeb134fac7111b26fd973885fe117f3a.tar.bz2 bcfg2-a6ca4978eeb134fac7111b26fd973885fe117f3a.zip |
Cfg: Fix traceback for unicode templates
Signed-off-by: Sol Jerome <sol.jerome@gmail.com>
-rw-r--r-- | src/lib/Bcfg2Py3k.py | 6 | ||||
-rw-r--r-- | 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]) |