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/Bcfg2Py3k.py | 5 ++++ src/lib/Bcfg2/Client/Tools/POSIX/Device.py | 2 +- src/lib/Bcfg2/Client/Tools/POSIX/Directory.py | 2 +- src/lib/Bcfg2/Client/Tools/POSIX/File.py | 24 +++++++++++-------- src/lib/Bcfg2/Client/Tools/POSIX/Hardlink.py | 2 +- src/lib/Bcfg2/Client/Tools/POSIX/Nonexistent.py | 2 +- src/lib/Bcfg2/Client/Tools/POSIX/Permissions.py | 2 +- src/lib/Bcfg2/Client/Tools/POSIX/Symlink.py | 2 +- src/lib/Bcfg2/Client/Tools/POSIX/__init__.py | 2 +- src/lib/Bcfg2/Server/Core.py | 6 ++--- src/lib/Bcfg2/Server/Lint/__init__.py | 4 ++-- src/lib/Bcfg2/Server/Plugin.py | 5 ++-- src/lib/Bcfg2/Server/Plugins/Cfg/__init__.py | 29 +++++++++++------------ src/lib/Bcfg2/Server/Plugins/DBStats.py | 5 ++-- src/lib/Bcfg2/Server/Plugins/FileProbes.py | 18 +++++++------- src/lib/Bcfg2/Server/Plugins/Metadata.py | 8 +++---- src/lib/Bcfg2/Server/Plugins/Packages/__init__.py | 3 ++- src/lib/Bcfg2/Server/Plugins/Probes.py | 9 ++++--- src/lib/Bcfg2/Server/Plugins/Properties.py | 1 + src/lib/Bcfg2/Server/Plugins/SEModules.py | 7 +++--- src/lib/Bcfg2/Server/Plugins/SSHbase.py | 12 ++++------ src/lib/Bcfg2/Server/Plugins/Snapshots.py | 14 ++++------- src/lib/Bcfg2/Server/Plugins/Statistics.py | 21 ++++++++-------- src/lib/Bcfg2/Server/Plugins/TCheetah.py | 8 +++---- src/lib/Bcfg2/Server/Plugins/TGenshi.py | 8 +++---- src/lib/Bcfg2/Server/Reports/importscript.py | 5 ++-- 26 files changed, 99 insertions(+), 107 deletions(-) (limited to 'src/lib') diff --git a/src/lib/Bcfg2/Bcfg2Py3k.py b/src/lib/Bcfg2/Bcfg2Py3k.py index 640efff95..2c179a5ef 100644 --- a/src/lib/Bcfg2/Bcfg2Py3k.py +++ b/src/lib/Bcfg2/Bcfg2Py3k.py @@ -82,6 +82,11 @@ try: except: unicode = unicode +# base64 compat +from base64 import b64encode as _b64encode, b64decode as _b64decode +b64encode = lambda s: _b64encode(s.encode('ascii')).decode('ascii') +b64decode = lambda s: _b64decode(s.encode('ascii')).decode('ascii') + try: input = raw_input except: diff --git a/src/lib/Bcfg2/Client/Tools/POSIX/Device.py b/src/lib/Bcfg2/Client/Tools/POSIX/Device.py index b8fb0f4d0..3ecef2cd7 100644 --- a/src/lib/Bcfg2/Client/Tools/POSIX/Device.py +++ b/src/lib/Bcfg2/Client/Tools/POSIX/Device.py @@ -1,6 +1,6 @@ import os import sys -from base import POSIXTool, device_map +from .base import POSIXTool, device_map class POSIXDevice(POSIXTool): __req__ = ['name', 'dev_type', 'perms', 'owner', 'group'] diff --git a/src/lib/Bcfg2/Client/Tools/POSIX/Directory.py b/src/lib/Bcfg2/Client/Tools/POSIX/Directory.py index 4b0ad93ef..27834a16d 100644 --- a/src/lib/Bcfg2/Client/Tools/POSIX/Directory.py +++ b/src/lib/Bcfg2/Client/Tools/POSIX/Directory.py @@ -3,7 +3,7 @@ import sys import stat import shutil import Bcfg2.Client.XML -from base import POSIXTool +from .base import POSIXTool class POSIXDirectory(POSIXTool): __req__ = ['name', 'perms', 'owner', 'group'] 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: diff --git a/src/lib/Bcfg2/Client/Tools/POSIX/Hardlink.py b/src/lib/Bcfg2/Client/Tools/POSIX/Hardlink.py index 569ca3445..060c9499e 100644 --- a/src/lib/Bcfg2/Client/Tools/POSIX/Hardlink.py +++ b/src/lib/Bcfg2/Client/Tools/POSIX/Hardlink.py @@ -1,6 +1,6 @@ import os import sys -from base import POSIXTool +from .base import POSIXTool class POSIXHardlink(POSIXTool): __req__ = ['name', 'to'] diff --git a/src/lib/Bcfg2/Client/Tools/POSIX/Nonexistent.py b/src/lib/Bcfg2/Client/Tools/POSIX/Nonexistent.py index 64a36cce4..42d4a4cb4 100644 --- a/src/lib/Bcfg2/Client/Tools/POSIX/Nonexistent.py +++ b/src/lib/Bcfg2/Client/Tools/POSIX/Nonexistent.py @@ -1,7 +1,7 @@ import os import sys import shutil -from base import POSIXTool +from .base import POSIXTool class POSIXNonexistent(POSIXTool): __req__ = ['name'] diff --git a/src/lib/Bcfg2/Client/Tools/POSIX/Permissions.py b/src/lib/Bcfg2/Client/Tools/POSIX/Permissions.py index c041b9ade..de2bee120 100644 --- a/src/lib/Bcfg2/Client/Tools/POSIX/Permissions.py +++ b/src/lib/Bcfg2/Client/Tools/POSIX/Permissions.py @@ -1,6 +1,6 @@ import os import sys -from base import POSIXTool +from .base import POSIXTool class POSIXPermissions(POSIXTool): __req__ = ['name', 'perms', 'owner', 'group'] diff --git a/src/lib/Bcfg2/Client/Tools/POSIX/Symlink.py b/src/lib/Bcfg2/Client/Tools/POSIX/Symlink.py index d5222513e..1a5abc652 100644 --- a/src/lib/Bcfg2/Client/Tools/POSIX/Symlink.py +++ b/src/lib/Bcfg2/Client/Tools/POSIX/Symlink.py @@ -1,6 +1,6 @@ import os import sys -from base import POSIXTool +from .base import POSIXTool class POSIXSymlink(POSIXTool): __req__ = ['name', 'to'] diff --git a/src/lib/Bcfg2/Client/Tools/POSIX/__init__.py b/src/lib/Bcfg2/Client/Tools/POSIX/__init__.py index 7e649a2c1..2e4a54475 100644 --- a/src/lib/Bcfg2/Client/Tools/POSIX/__init__.py +++ b/src/lib/Bcfg2/Client/Tools/POSIX/__init__.py @@ -7,7 +7,7 @@ import shutil import pkgutil from datetime import datetime import Bcfg2.Client.Tools -from base import POSIXTool +from .base import POSIXTool class POSIX(Bcfg2.Client.Tools.Tool): """POSIX File support code.""" diff --git a/src/lib/Bcfg2/Server/Core.py b/src/lib/Bcfg2/Server/Core.py index 43f2ce68c..af28dd0a6 100644 --- a/src/lib/Bcfg2/Server/Core.py +++ b/src/lib/Bcfg2/Server/Core.py @@ -553,8 +553,7 @@ class BaseCore(object): for plugin in self.plugins_by_type(Bcfg2.Server.Plugin.Probing): for probe in plugin.GetProbes(metadata): resp.append(probe) - return lxml.etree.tostring(resp, encoding='UTF-8', - xml_declaration=False) + return lxml.etree.tostring(resp, encoding='unicode') except: err = sys.exc_info()[1] self.critical_error("Error determining probes for %s: %s" % @@ -608,8 +607,7 @@ class BaseCore(object): client = self.resolve_client(address)[0] try: config = self.BuildConfiguration(client) - return lxml.etree.tostring(config, encoding='UTF-8', - xml_declaration=False) + return lxml.etree.tostring(config, encoding='unicode') except Bcfg2.Server.Plugin.MetadataConsistencyError: self.critical_error("Metadata consistency failure for %s" % client) diff --git a/src/lib/Bcfg2/Server/Lint/__init__.py b/src/lib/Bcfg2/Server/Lint/__init__.py index 42ea6ba8c..7ee18f924 100644 --- a/src/lib/Bcfg2/Server/Lint/__init__.py +++ b/src/lib/Bcfg2/Server/Lint/__init__.py @@ -90,9 +90,9 @@ class Plugin (object): if el.text and not keep_text: el.text = '...' [el.remove(c) for c in el.iterchildren()] - xml = lxml.etree.tostring(el).strip() + xml = lxml.etree.tostring(el, encoding='unicode').strip() else: - xml = lxml.etree.tostring(element).strip() + xml = lxml.etree.tostring(element, encoding='unicode').strip() return " line %s: %s" % (element.sourceline, xml) diff --git a/src/lib/Bcfg2/Server/Plugin.py b/src/lib/Bcfg2/Server/Plugin.py index 82162aa4a..fa2e16c10 100644 --- a/src/lib/Bcfg2/Server/Plugin.py +++ b/src/lib/Bcfg2/Server/Plugin.py @@ -265,7 +265,8 @@ class ThreadedStatistics(Statistics, threading.Thread): (metadata, data) = self.work_queue.get_nowait() try: pending_data.append((metadata.hostname, - lxml.etree.tostring(data))) + lxml.etree.tostring(data, + encoding='unicode'))) except: err = sys.exc_info()[1] self.logger.warning("Dropping interaction for %s: %s" % @@ -560,7 +561,7 @@ class DirectoryBacked(object): event.filename).lstrip('/') if action == 'deleted': - for key in self.entries.keys(): + for key in list(self.entries.keys()): if key.startswith(relpath): del self.entries[key] # We remove values from self.entries, but not diff --git a/src/lib/Bcfg2/Server/Plugins/Cfg/__init__.py b/src/lib/Bcfg2/Server/Plugins/Cfg/__init__.py index f7577d60e..aef239fce 100644 --- a/src/lib/Bcfg2/Server/Plugins/Cfg/__init__.py +++ b/src/lib/Bcfg2/Server/Plugins/Cfg/__init__.py @@ -6,11 +6,10 @@ import sys import stat import pkgutil import logging -import binascii import lxml.etree import Bcfg2.Options import Bcfg2.Server.Plugin -from Bcfg2.Bcfg2Py3k import u_str +from Bcfg2.Bcfg2Py3k import u_str, b64encode import Bcfg2.Server.Lint logger = logging.getLogger(__name__) @@ -290,7 +289,7 @@ class CfgEntrySet(Bcfg2.Server.Plugin.EntrySet): raise Bcfg2.Server.Plugin.PluginExecutionError(msg) if entry.get('encoding') == 'base64': - data = binascii.b2a_base64(data) + data = b64encode(data) else: try: data = u_str(data, self.encoding) @@ -371,26 +370,26 @@ class CfgEntrySet(Bcfg2.Server.Plugin.EntrySet): if attr in new_entry] if badattr: # check for info files and inform user of their removal - if os.path.exists(self.path + "/:info"): - logger.info("Removing :info file and replacing with " - "info.xml") - os.remove(self.path + "/:info") - if os.path.exists(self.path + "/info"): - logger.info("Removing info file and replacing with " - "info.xml") - os.remove(self.path + "/info") + for ifile in ['info', ':info']: + info = os.path.join(self.path, ifile) + if os.path.exists(info): + logger.info("Removing %s and replacing with info.xml" % + info) + os.remove(info) metadata_updates = {} metadata_updates.update(self.metadata) for attr in badattr: metadata_updates[attr] = new_entry.get(attr) infoxml = lxml.etree.Element('FileInfo') infotag = lxml.etree.SubElement(infoxml, 'Info') - [infotag.attrib.__setitem__(attr, metadata_updates[attr]) \ - for attr in metadata_updates] + [infotag.attrib.__setitem__(attr, metadata_updates[attr]) + for attr in metadata_updates] ofile = open(self.path + "/info.xml", "w") - ofile.write(lxml.etree.tostring(infoxml, pretty_print=True)) + ofile.write(lxml.etree.tostring(infoxml, encoding='unicode', + pretty_print=True)) ofile.close() - self.debug_log("Wrote file %s" % (self.path + "/info.xml"), + self.debug_log("Wrote file %s" % os.path.join(self.path, + "info.xml"), flag=log) diff --git a/src/lib/Bcfg2/Server/Plugins/DBStats.py b/src/lib/Bcfg2/Server/Plugins/DBStats.py index b8750f850..63c590f0f 100644 --- a/src/lib/Bcfg2/Server/Plugins/DBStats.py +++ b/src/lib/Bcfg2/Server/Plugins/DBStats.py @@ -1,4 +1,3 @@ -import binascii import difflib import logging import lxml.etree @@ -14,6 +13,8 @@ except ImportError: import Bcfg2.Server.Plugin from Bcfg2.Server.Reports.importscript import load_stat from Bcfg2.Server.Reports.reports.models import Client +from Bcfg2.Bcfg2Py3k import b64decode + # for debugging output only logger = logging.getLogger('Bcfg2.Plugins.DBStats') @@ -88,7 +89,7 @@ class DBStats(Bcfg2.Server.Plugin.ThreadedStatistics, ret.append('\n'.join(entry.reason.unpruned)) elif entry.reason.current_diff != '': if entry.reason.is_binary: - ret.append(binascii.a2b_base64(entry.reason.current_diff)) + ret.append(b64decode(entry.reason.current_diff)) else: ret.append('\n'.join(difflib.restore(\ entry.reason.current_diff.split('\n'), 1))) diff --git a/src/lib/Bcfg2/Server/Plugins/FileProbes.py b/src/lib/Bcfg2/Server/Plugins/FileProbes.py index b4a20b0eb..a48524ac9 100644 --- a/src/lib/Bcfg2/Server/Plugins/FileProbes.py +++ b/src/lib/Bcfg2/Server/Plugins/FileProbes.py @@ -7,19 +7,19 @@ the client """ import os import sys import errno -import binascii import lxml.etree import Bcfg2.Options import Bcfg2.Server import Bcfg2.Server.Plugin +from Bcfg2.Bcfg2Py3k import b64decode probecode = """#!/usr/bin/env python import os import pwd import grp -import binascii import lxml.etree +from Bcfg2.Bcfg2Py3k import b64encode path = "%s" @@ -33,8 +33,8 @@ data = lxml.etree.Element("ProbedFileData", owner=pwd.getpwuid(stat[4])[0], group=grp.getgrgid(stat[5])[0], perms=oct(stat[0] & 07777)) -data.text = binascii.b2a_base64(open(path).read()) -print(lxml.etree.tostring(data)) +data.text = b64encode(open(path).read()) +print(lxml.etree.tostring(data, encoding="unicode")) """ class FileProbes(Bcfg2.Server.Plugin.Plugin, @@ -103,7 +103,7 @@ class FileProbes(Bcfg2.Server.Plugin.Plugin, def write_data(self, data, metadata): """Write the probed file data to the bcfg2 specification.""" filename = data.get("name") - contents = binascii.a2b_base64(data.text) + contents = b64decode(data.text) entry = self.entries[metadata.hostname][filename] cfg = self.core.plugins['Cfg'] specific = "%s.H_%s" % (os.path.basename(filename), metadata.hostname) @@ -120,7 +120,7 @@ class FileProbes(Bcfg2.Server.Plugin.Plugin, # get current entry data if entry.text and entry.get("encoding") == "base64": - entrydata = binascii.a2b_base64(entry.text) + entrydata = b64decode(entry.text) else: entrydata = entry.text @@ -187,7 +187,7 @@ class FileProbes(Bcfg2.Server.Plugin.Plugin, # get current entry data if entry.get("encoding") == "base64": - entrydata = binascii.a2b_base64(entry.text) + entrydata = b64decode(entry.text) else: entrydata = entry.text if entrydata == contents: @@ -199,8 +199,7 @@ class FileProbes(Bcfg2.Server.Plugin.Plugin, if os.path.exists(infoxml): return - self.logger.info("Writing info.xml at %s for %s" % - (infoxml, data.get("name"))) + self.logger.info("Writing %s for %s" % (infoxml, data.get("name"))) info = \ lxml.etree.Element("Info", owner=data.get("owner", @@ -216,6 +215,7 @@ class FileProbes(Bcfg2.Server.Plugin.Plugin, root.append(info) try: open(infoxml, "w").write(lxml.etree.tostring(root, + encoding='unicode', pretty_print=True)) except IOError: err = sys.exc_info()[1] diff --git a/src/lib/Bcfg2/Server/Plugins/Metadata.py b/src/lib/Bcfg2/Server/Plugins/Metadata.py index 3225b6c85..8f4f42c96 100644 --- a/src/lib/Bcfg2/Server/Plugins/Metadata.py +++ b/src/lib/Bcfg2/Server/Plugins/Metadata.py @@ -151,8 +151,8 @@ class XMLMetadataConfig(Bcfg2.Server.Plugin.XMLFileBacked): raise Bcfg2.Server.Plugin.MetadataRuntimeError(msg) # prep data dataroot = xmltree.getroot() - newcontents = str(lxml.etree.tostring(dataroot, pretty_print=True, - encoding='unicode')) + newcontents = lxml.etree.tostring(dataroot, pretty_print=True, + encoding='unicode') fd = datafile.fileno() while locked(fd) == True: @@ -807,7 +807,7 @@ class Metadata(Bcfg2.Server.Plugin.Metadata, # _any_ port numbers - perhaps a priority queue could # be faster? curtime = time.time() - for addrpair in self.session_cache.keys(): + for addrpair in list(self.session_cache.keys()): if addresspair[0] == addrpair[0]: (stamp, _) = self.session_cache[addrpair] if curtime - stamp > cache_ttl: @@ -1104,7 +1104,7 @@ class Metadata(Bcfg2.Server.Plugin.Metadata, "secure mode" % address[0]) return False # populate the session cache - if user.decode('utf-8') != 'root': + if user != 'root': self.session_cache[address] = (time.time(), client) return True diff --git a/src/lib/Bcfg2/Server/Plugins/Packages/__init__.py b/src/lib/Bcfg2/Server/Plugins/Packages/__init__.py index 702ff64d2..71ae6a038 100644 --- a/src/lib/Bcfg2/Server/Plugins/Packages/__init__.py +++ b/src/lib/Bcfg2/Server/Plugins/Packages/__init__.py @@ -177,7 +177,8 @@ class Packages(Bcfg2.Server.Plugin.Plugin, to_remove.append(pkg) else: self.logger.error("Packages: Malformed Package: %s" % - lxml.etree.tostring(pkg)) + lxml.etree.tostring(pkg, + encoding='unicode')) gpkgs = collection.get_groups(groups) for group, pkgs in gpkgs.items(): diff --git a/src/lib/Bcfg2/Server/Plugins/Probes.py b/src/lib/Bcfg2/Server/Plugins/Probes.py index e08f52a28..34b5ab187 100644 --- a/src/lib/Bcfg2/Server/Plugins/Probes.py +++ b/src/lib/Bcfg2/Server/Plugins/Probes.py @@ -52,7 +52,8 @@ if has_django: class ClientProbeDataSet(dict): - """ dict of probe => [probe data] that records a for each host """ + """ dict of probe => [probe data] that records a timestamp for + each host """ def __init__(self, *args, **kwargs): if "timestamp" in kwargs and kwargs['timestamp'] is not None: self.timestamp = kwargs.pop("timestamp") @@ -191,12 +192,10 @@ class Probes(Bcfg2.Server.Plugin.Probing, value=str(self.probedata[client][probe])) for group in sorted(self.cgroups[client]): lxml.etree.SubElement(cx, "Group", name=group) - data = lxml.etree.tostring(top, encoding='UTF-8', - xml_declaration=True, - pretty_print='true') try: datafile = open(os.path.join(self.data, 'probed.xml'), 'w') - datafile.write(data.decode('utf-8')) + datafile.write(lxml.etree.tostring(top, encoding='unicode', + pretty_print='true')) except IOError: err = sys.exc_info()[1] self.logger.error("Failed to write probed.xml: %s" % err) diff --git a/src/lib/Bcfg2/Server/Plugins/Properties.py b/src/lib/Bcfg2/Server/Plugins/Properties.py index a879b064f..3405ad50c 100644 --- a/src/lib/Bcfg2/Server/Plugins/Properties.py +++ b/src/lib/Bcfg2/Server/Plugins/Properties.py @@ -43,6 +43,7 @@ class PropertyFile(Bcfg2.Server.Plugin.StructFile): try: open(self.name, "wb").write(lxml.etree.tostring(self.xdata, + encoding='unicode', pretty_print=True)) return True except IOError: diff --git a/src/lib/Bcfg2/Server/Plugins/SEModules.py b/src/lib/Bcfg2/Server/Plugins/SEModules.py index a99e54bb2..0d75bb48f 100644 --- a/src/lib/Bcfg2/Server/Plugins/SEModules.py +++ b/src/lib/Bcfg2/Server/Plugins/SEModules.py @@ -1,15 +1,14 @@ import os import logging -import binascii -import posixpath - import Bcfg2.Server.Plugin +from Bcfg2.Bcfg2Py3k import b64encode + logger = logging.getLogger(__name__) class SEModuleData(Bcfg2.Server.Plugin.SpecificData): def bind_entry(self, entry, _): entry.set('encoding', 'base64') - entry.text = binascii.b2a_base64(self.data) + entry.text = b64encode(self.data) class SEModules(Bcfg2.Server.Plugin.GroupSpool): diff --git a/src/lib/Bcfg2/Server/Plugins/SSHbase.py b/src/lib/Bcfg2/Server/Plugins/SSHbase.py index a1a29727f..cbe8d0d9b 100644 --- a/src/lib/Bcfg2/Server/Plugins/SSHbase.py +++ b/src/lib/Bcfg2/Server/Plugins/SSHbase.py @@ -1,20 +1,16 @@ """This module manages ssh key files for bcfg2""" -import binascii import re import os +import sys import socket import shutil -import sys +import logging import tempfile from subprocess import Popen, PIPE import Bcfg2.Server.Plugin -from Bcfg2.Bcfg2Py3k import u_str +from Bcfg2.Bcfg2Py3k import u_str, reduce, b64encode -if sys.hexversion >= 0x03000000: - from functools import reduce - -import logging logger = logging.getLogger(__name__) class KeyData(Bcfg2.Server.Plugin.SpecificData): @@ -31,7 +27,7 @@ class KeyData(Bcfg2.Server.Plugin.SpecificData): def bind_entry(self, entry, metadata): entry.set('type', 'file') if entry.get('encoding') == 'base64': - entry.text = binascii.b2a_base64(self.data) + entry.text = b64encode(self.data) else: try: entry.text = u_str(self.data, self.encoding) diff --git a/src/lib/Bcfg2/Server/Plugins/Snapshots.py b/src/lib/Bcfg2/Server/Plugins/Snapshots.py index 666beef21..e62638b4f 100644 --- a/src/lib/Bcfg2/Server/Plugins/Snapshots.py +++ b/src/lib/Bcfg2/Server/Plugins/Snapshots.py @@ -1,9 +1,5 @@ -#import lxml.etree import logging -import binascii import difflib -#import sqlalchemy -#import sqlalchemy.orm import Bcfg2.Server.Plugin import Bcfg2.Server.Snapshots import Bcfg2.Logger @@ -13,8 +9,7 @@ import time import threading # Compatibility import -from Bcfg2.Bcfg2Py3k import Queue -from Bcfg2.Bcfg2Py3k import u_str +from Bcfg2.Bcfg2Py3k import Queue, u_str, b64decode logger = logging.getLogger('Snapshots') @@ -45,13 +40,12 @@ def build_snap_ent(entry): if entry.get('encoding', 'ascii') == 'ascii': desired['contents'] = u_str(entry.text) else: - desired['contents'] = u_str(binascii.a2b_base64(entry.text)) + desired['contents'] = u_str(b64decode(entry.text)) if 'current_bfile' in entry.attrib: - state['contents'] = u_str(binascii.a2b_base64( \ - entry.get('current_bfile'))) + state['contents'] = u_str(b64decode(entry.get('current_bfile'))) elif 'current_bdiff' in entry.attrib: - diff = binascii.a2b_base64(entry.get('current_bdiff')) + diff = b64decode(entry.get('current_bdiff')) state['contents'] = u_str( \ '\n'.join(difflib.restore(diff.split('\n'), 1))) diff --git a/src/lib/Bcfg2/Server/Plugins/Statistics.py b/src/lib/Bcfg2/Server/Plugins/Statistics.py index ce8d085cc..33b78047a 100644 --- a/src/lib/Bcfg2/Server/Plugins/Statistics.py +++ b/src/lib/Bcfg2/Server/Plugins/Statistics.py @@ -1,16 +1,14 @@ '''This file manages the statistics collected by the BCFG2 Server''' -import binascii import copy import difflib import logging -from lxml.etree import XML, SubElement, Element, XMLSyntaxError import lxml.etree import os import sys from time import asctime, localtime, time, strptime, mktime import threading - +from Bcfg2.Bcfg2Py3k import b64decode import Bcfg2.Server.Plugin @@ -20,7 +18,7 @@ class StatisticsStore(object): def __init__(self, filename): self.filename = filename - self.element = Element('Dummy') + self.element = lxml.etree.Element('Dummy') self.dirty = 0 self.lastwrite = 0 self.logger = logging.getLogger('Bcfg2.Server.Statistics') @@ -36,7 +34,8 @@ class StatisticsStore(object): ioerr = sys.exc_info()[1] self.logger.error("Failed to open %s for writing: %s" % (self.filename + '.new', ioerr)) else: - fout.write(lxml.etree.tostring(self.element, encoding='UTF-8', xml_declaration=True)) + fout.write(lxml.etree.tostring(self.element, + encoding='unicode')) fout.close() os.rename(self.filename + '.new', self.filename) self.dirty = 0 @@ -48,11 +47,11 @@ class StatisticsStore(object): fin = open(self.filename, 'r') data = fin.read() fin.close() - self.element = XML(data) + self.element = lxml.etree.XML(data) self.dirty = 0 - except (IOError, XMLSyntaxError): + except (IOError, lxml.etree.XMLSyntaxError): self.logger.error("Creating new statistics file %s"%(self.filename)) - self.element = Element('ConfigStatistics') + self.element = lxml.etree.Element('ConfigStatistics') self.WriteBack() self.dirty = 0 @@ -78,7 +77,7 @@ class StatisticsStore(object): nummatch = len(nodes) if nummatch == 0: # Create an entry for this node - node = SubElement(self.element, 'Node', name=client) + node = lxml.etree.SubElement(self.element, 'Node', name=client) elif nummatch == 1 and not node_dirty: # Delete old instance node = nodes[0] @@ -150,9 +149,9 @@ class Statistics(Bcfg2.Server.Plugin.ThreadedStatistics, if cfentry.get('sensitive') in ['true', 'True']: raise Bcfg2.Server.Plugin.PluginExecutionError elif 'current_bfile' in cfentry.attrib: - contents = binascii.a2b_base64(cfentry.get('current_bfile')) + contents = b64decode(cfentry.get('current_bfile')) elif 'current_bdiff' in cfentry.attrib: - diff = binascii.a2b_base64(cfentry.get('current_bdiff')) + diff = b64decode(cfentry.get('current_bdiff')) contents = '\n'.join(difflib.restore(diff.split('\n'), 1)) else: contents = None diff --git a/src/lib/Bcfg2/Server/Plugins/TCheetah.py b/src/lib/Bcfg2/Server/Plugins/TCheetah.py index d99baa512..2bf475363 100644 --- a/src/lib/Bcfg2/Server/Plugins/TCheetah.py +++ b/src/lib/Bcfg2/Server/Plugins/TCheetah.py @@ -1,13 +1,11 @@ '''This module implements a templating generator based on Cheetah''' -import binascii import logging import sys import traceback import Bcfg2.Server.Plugin -# py3k compatibility -if sys.hexversion >= 0x03000000: - unicode = str + +from Bcfg2.Bcfg2Py3k import unicode, b64encode logger = logging.getLogger('Bcfg2.Plugins.TCheetah') @@ -60,7 +58,7 @@ class TemplateFile: else: if entry.get('encoding') == 'base64': # take care of case where file needs base64 encoding - entry.text = binascii.b2a_base64(self.template) + entry.text = b64encode(self.template) else: entry.text = unicode(str(self.template), self.encoding) except: diff --git a/src/lib/Bcfg2/Server/Plugins/TGenshi.py b/src/lib/Bcfg2/Server/Plugins/TGenshi.py index 846c2a464..c84e0a506 100644 --- a/src/lib/Bcfg2/Server/Plugins/TGenshi.py +++ b/src/lib/Bcfg2/Server/Plugins/TGenshi.py @@ -1,12 +1,10 @@ """This module implements a templating generator based on Genshi.""" -import binascii import logging import sys import Bcfg2.Server.Plugin -# py3k compatibility -if sys.hexversion >= 0x03000000: - unicode = str + +from Bcfg2.Bcfg2Py3k import unicode, b64encode logger = logging.getLogger('Bcfg2.Plugins.TGenshi') @@ -99,7 +97,7 @@ class TemplateFile: else: if entry.get('encoding') == 'base64': # take care of case where file needs base64 encoding - entry.text = binascii.b2a_base64(textdata) + entry.text = b64encode(textdata) else: entry.text = unicode(textdata, self.encoding) else: diff --git a/src/lib/Bcfg2/Server/Reports/importscript.py b/src/lib/Bcfg2/Server/Reports/importscript.py index 61f0c103c..4eced8340 100755 --- a/src/lib/Bcfg2/Server/Reports/importscript.py +++ b/src/lib/Bcfg2/Server/Reports/importscript.py @@ -4,7 +4,6 @@ Imports statistics.xml and clients.xml files in to database backend for new statistics engine """ -import binascii import os import sys import traceback @@ -35,7 +34,7 @@ import Bcfg2.Logger import platform # Compatibility import -from Bcfg2.Bcfg2Py3k import ConfigParser +from Bcfg2.Bcfg2Py3k import ConfigParser, b64decode def build_reason_kwargs(r_ent, encoding, logger): @@ -54,7 +53,7 @@ def build_reason_kwargs(r_ent, encoding, logger): # No point in flagging binary if we have no data binary_file = False elif r_ent.get('current_bdiff', False): - rc_diff = binascii.a2b_base64(r_ent.get('current_bdiff')) + rc_diff = b64decode(r_ent.get('current_bdiff')) elif r_ent.get('current_diff', False): rc_diff = r_ent.get('current_diff') else: -- cgit v1.2.3-1-g7c22