summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorSol Jerome <sol.jerome@gmail.com>2012-07-02 16:25:23 -0500
committerSol Jerome <sol.jerome@gmail.com>2012-07-02 16:25:23 -0500
commita6ca4978eeb134fac7111b26fd973885fe117f3a (patch)
treeb0e33f262c082670d5b8766d30398c32a6d29c2d
parent16a38827b5bb374da6caaf103f9363a45262f745 (diff)
downloadbcfg2-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.py6
-rw-r--r--src/lib/Server/Plugins/Cfg.py14
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])