From 22016ee593d6047855964734a17120d2aea6b5a5 Mon Sep 17 00:00:00 2001 From: "Chris St. Pierre" Date: Tue, 21 Aug 2012 13:32:51 -0400 Subject: lots of various py3k fixes --- src/lib/Bcfg2/Client/Tools/POSIX/File.py | 24 ++++++++++++++---------- 1 file changed, 14 insertions(+), 10 deletions(-) (limited to 'src/lib/Bcfg2/Client/Tools/POSIX/File.py') diff --git a/src/lib/Bcfg2/Client/Tools/POSIX/File.py b/src/lib/Bcfg2/Client/Tools/POSIX/File.py index 1b5535d28..bba72791d 100644 --- a/src/lib/Bcfg2/Client/Tools/POSIX/File.py +++ b/src/lib/Bcfg2/Client/Tools/POSIX/File.py @@ -3,10 +3,9 @@ import sys import stat import time import difflib -import binascii import tempfile -from base import POSIXTool -from Bcfg2.Bcfg2Py3k import unicode +from .base import POSIXTool +from Bcfg2.Bcfg2Py3k import unicode, b64encode, b64decode class POSIXFile(POSIXTool): __req__ = ['name', 'perms', 'owner', 'group'] @@ -20,6 +19,9 @@ class POSIXFile(POSIXTool): for char in strng: if ord(char) < 9 or ord(char) > 13 and ord(char) < 32: return False + if not hasattr(strng, "decode"): + # py3k + return True try: strng.decode(encoding) return True @@ -29,13 +31,14 @@ class POSIXFile(POSIXTool): def _get_data(self, entry): is_binary = False if entry.get('encoding', 'ascii') == 'base64': - tempdata = binascii.a2b_base64(entry.text) + tempdata = b64decode(entry.text) is_binary = True + elif entry.get('empty', 'false') == 'true': tempdata = '' else: tempdata = entry.text - if isinstance(tempdata, unicode): + if isinstance(tempdata, unicode) and unicode != str: try: tempdata = tempdata.encode(self.setup['encoding']) except UnicodeEncodeError: @@ -163,7 +166,7 @@ class POSIXFile(POSIXTool): if is_binary: # don't compute diffs if the file is binary prompt.append('Binary file, no printable diff') - attrs['current_bfile'] = binascii.b2a_base64(content) + attrs['current_bfile'] = b64encode(content) else: if interactive: diff = self._diff(content, self._get_data(entry)[0], @@ -171,8 +174,10 @@ class POSIXFile(POSIXTool): filename=entry.get("name")) if diff: udiff = ''.join(diff) + if hasattr(udiff, "decode"): + udiff = udiff.decode(self.setup['encoding']) try: - prompt.append(udiff.decode(self.setup['encoding'])) + prompt.append(udiff) except UnicodeEncodeError: prompt.append("Could not encode diff") else: @@ -182,10 +187,9 @@ class POSIXFile(POSIXTool): diff = self._diff(content, self._get_data(entry)[0], difflib.ndiff, filename=entry.get("name")) if diff: - attrs["current_bdiff"] = \ - binascii.b2a_base64("\n".join(diff)) + attrs["current_bdiff"] = b64encode("\n".join(diff)) else: - attrs['current_bfile'] = binascii.b2a_base64(content) + attrs['current_bfile'] = b64encode(content) if interactive: entry.set("qtext", "\n".join(prompt)) if not sensitive: -- cgit v1.2.3-1-g7c22