From nobody Sat May 4 16:57:44 2024 Delivered-To: importer@patchew.org Authentication-Results: mx.zohomail.com; dkim=fail; spf=none (zohomail.com: 192.237.175.120 is neither permitted nor denied by domain of lists.xenproject.org) smtp.mailfrom=xen-devel-bounces@lists.xenproject.org; dmarc=fail(p=none dis=none) header.from=citrix.com ARC-Seal: i=1; a=rsa-sha256; t=1576681590; cv=none; d=zohomail.com; s=zohoarc; b=eJ9eAIg/AhVMGsR24MMHX0y9SLfVRreY/QHIytcSjEf8YlUIk1A5Ojc6jf0j1eAsaZFJY1GyP0+Jpx5x4auoJLDpZL8QtihShQ4JjfS0bWQKsPnp582i1FDhujr3WeHAfxikgfGOoNHLpFOY7pVYiImTe+Ku/I1p7viBJTYCVpY= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1576681590; h=Content-Type:Content-Transfer-Encoding:Cc:Date:From:List-Subscribe:List-Post:List-Id:List-Help:List-Unsubscribe:MIME-Version:Message-ID:Sender:Subject:To; bh=yhbWBSqa4MgMaA2q5cwERtlNtIABQi4FY3SQh3BzNow=; b=VRtv9ENcWj9/w1kkQrQmhVyAO9eVTjvMAtbG6/EU1K2LU7oRmXsJKkEcCrKW0UcBm0m6rJ1uPLVNXbS9HDPWU54Y32JVFs3aKRdwYt+EWBuZ9ByZFX9bCXbaE9n8cRjsJLQeF+eVXlgGZYgpgHNMfBRaclMG0YQeOSvIN/sYUro= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=fail; spf=none (zohomail.com: 192.237.175.120 is neither permitted nor denied by domain of lists.xenproject.org) smtp.mailfrom=xen-devel-bounces@lists.xenproject.org; dmarc=fail header.from= (p=none dis=none) header.from= Return-Path: Received: from lists.xenproject.org (lists.xenproject.org [192.237.175.120]) by mx.zohomail.com with SMTPS id 1576681590822120.80863640540394; Wed, 18 Dec 2019 07:06:30 -0800 (PST) Received: from localhost ([127.0.0.1] helo=lists.xenproject.org) by lists.xenproject.org with esmtp (Exim 4.89) (envelope-from ) id 1ihatN-00079p-Oo; Wed, 18 Dec 2019 15:05:37 +0000 Received: from us1-rack-iad1.inumbo.com ([172.99.69.81]) by lists.xenproject.org with esmtp (Exim 4.89) (envelope-from ) id 1ihatM-00079k-UU for xen-devel@lists.xenproject.org; Wed, 18 Dec 2019 15:05:36 +0000 Received: from esa4.hc3370-68.iphmx.com (unknown [216.71.155.144]) by us1-rack-iad1.inumbo.com (Halon) with ESMTPS id d31744d0-21a7-11ea-88e7-bc764e2007e4; Wed, 18 Dec 2019 15:05:27 +0000 (UTC) X-Inumbo-ID: d31744d0-21a7-11ea-88e7-bc764e2007e4 DKIM-Signature: v=1; a=rsa-sha256; c=simple/simple; d=citrix.com; s=securemail; t=1576681527; h=from:to:cc:subject:date:message-id:mime-version; bh=5aT7trezLy5JRg+JZ+LxxxyojXrsqG5YzzzHDl9g6WI=; b=HAuk4/EjhS4Wp+tr+rVYDwugf6nYmnjd5PqnJHqlb9fSPCXFJpG8YnOs 4bTa3EkdLFqIK18Te+MsidnlSjLAJXxBwA3pnVdX998uOMxiWsIip9GaR MmyZbqKtxrHVFC86ydfkHKq4Mcay3O1qbgGHAZGCn9FPwi5NbhB7IyV49 g=; Authentication-Results: esa4.hc3370-68.iphmx.com; dkim=none (message not signed) header.i=none; spf=None smtp.pra=andrew.cooper3@citrix.com; spf=Pass smtp.mailfrom=Andrew.Cooper3@citrix.com; spf=None smtp.helo=postmaster@mail.citrix.com Received-SPF: none (zohomail.com: 192.237.175.120 is neither permitted nor denied by domain of lists.xenproject.org) client-ip=192.237.175.120; envelope-from=xen-devel-bounces@lists.xenproject.org; helo=lists.xenproject.org; Received-SPF: None (esa4.hc3370-68.iphmx.com: no sender authenticity information available from domain of andrew.cooper3@citrix.com) identity=pra; client-ip=162.221.158.21; receiver=esa4.hc3370-68.iphmx.com; envelope-from="Andrew.Cooper3@citrix.com"; x-sender="andrew.cooper3@citrix.com"; x-conformance=sidf_compatible Received-SPF: Pass (esa4.hc3370-68.iphmx.com: domain of Andrew.Cooper3@citrix.com designates 162.221.158.21 as permitted sender) identity=mailfrom; client-ip=162.221.158.21; receiver=esa4.hc3370-68.iphmx.com; envelope-from="Andrew.Cooper3@citrix.com"; x-sender="Andrew.Cooper3@citrix.com"; x-conformance=sidf_compatible; x-record-type="v=spf1"; x-record-text="v=spf1 ip4:209.167.231.154 ip4:178.63.86.133 ip4:195.66.111.40/30 ip4:85.115.9.32/28 ip4:199.102.83.4 ip4:192.28.146.160 ip4:192.28.146.107 ip4:216.52.6.88 ip4:216.52.6.188 ip4:162.221.158.21 ip4:162.221.156.83 ip4:168.245.78.127 ~all" Received-SPF: None (esa4.hc3370-68.iphmx.com: no sender authenticity information available from domain of postmaster@mail.citrix.com) identity=helo; client-ip=162.221.158.21; receiver=esa4.hc3370-68.iphmx.com; envelope-from="Andrew.Cooper3@citrix.com"; x-sender="postmaster@mail.citrix.com"; x-conformance=sidf_compatible IronPort-SDR: rtZ/od3WehVj9CPuL+fMoMhTfHnQ4aI2kd2G3cyN+eml6PLiMNNlEtt5fjEVJiQgIyvPfNN/rw K3UfTHC3Br9WR+piYPHJ8XKKjDkTCU/zBvte/4dPxbeUeoizA97FhydsoyULobsRtq2L01oHVb ENmP5zH9a4wWtCpYi/Oy68mk/alSJJRgr/A9Ze41YYXKjZEu852tmS9JwiHOf6b3hB1Fm/ngyS ysd4wEhioB2d4SSAK+HV89sPWBJiEb0sJP+Fe8I0J+1bsisHCczOzRLQHSiDUcvlvbhzieESLv VbM= X-SBRS: 2.7 X-MesageID: 10464680 X-Ironport-Server: esa4.hc3370-68.iphmx.com X-Remote-IP: 162.221.158.21 X-Policy: $RELAYED X-IronPort-AV: E=Sophos;i="5.69,329,1571716800"; d="scan'208";a="10464680" From: Andrew Cooper To: Xen-devel Date: Wed, 18 Dec 2019 15:05:22 +0000 Message-ID: <20191218150522.8697-1-andrew.cooper3@citrix.com> X-Mailer: git-send-email 2.11.0 MIME-Version: 1.0 Subject: [Xen-devel] [PATCH] tools/python: Python 3 compatibility X-BeenThere: xen-devel@lists.xenproject.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: Xen developer discussion List-Unsubscribe: , List-Post: List-Help: List-Subscribe: , Cc: Andrew Cooper , Wei Liu , Ian Jackson Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Errors-To: xen-devel-bounces@lists.xenproject.org Sender: "Xen-devel" X-ZohoMail-DKIM: fail (Header signature does not verify) convert-legacy-stream is only used for incomming migration from pre Xen 4.7, and verify-stream-v2 appears to only be used by me during migration development - it is little surprise that they missed the main converstion effort in Xen 4.13. Fix it all up. Move open_file_or_fd() into a new util.py to avoid duplication, making it a more generic wrapper around open() or fdopen(). Signed-off-by: Andrew Cooper --- CC: Ian Jackson CC: Wei Liu This needs backporting to 4.13 ASAP --- tools/python/scripts/convert-legacy-stream | 49 +++++++-------------------= ---- tools/python/scripts/verify-stream-v2 | 43 +++++--------------------- tools/python/xen/migration/libxc.py | 2 +- tools/python/xen/migration/libxl.py | 2 +- tools/python/xen/migration/verify.py | 4 +-- tools/python/xen/util.py | 23 ++++++++++++++ 6 files changed, 46 insertions(+), 77 deletions(-) create mode 100644 tools/python/xen/util.py diff --git a/tools/python/scripts/convert-legacy-stream b/tools/python/scri= pts/convert-legacy-stream index 5f80f13654..b0d81aa92e 100755 --- a/tools/python/scripts/convert-legacy-stream +++ b/tools/python/scripts/convert-legacy-stream @@ -5,6 +5,8 @@ Convert a legacy migration stream to a v2 stream. """ =20 +from __future__ import print_function + import sys import os, os.path import syslog @@ -12,6 +14,7 @@ import traceback =20 from struct import calcsize, unpack, pack =20 +from xen.util import open_file_or_fd as open_file_or_fd from xen.migration import legacy, public, libxc, libxl, xl =20 __version__ =3D 1 @@ -39,16 +42,16 @@ def info(msg): for line in msg.split("\n"): syslog.syslog(syslog.LOG_INFO, line) else: - print msg + print(msg) =20 def err(msg): """Error message, routed to appropriate destination""" if log_to_syslog: for line in msg.split("\n"): syslog.syslog(syslog.LOG_ERR, line) - print >> sys.stderr, msg + print(msg, file =3D sys.stderr) =20 -class StreamError(StandardError): +class StreamError(Exception): """Error with the incoming migration stream""" pass =20 @@ -70,7 +73,7 @@ class VM(object): =20 # libxl self.libxl =3D fmt =3D=3D "libxl" - self.emu_xenstore =3D "" # NUL terminated key&val pairs from "tool= stack" records + self.emu_xenstore =3D b"" # NUL terminated key&val pairs from "too= lstack" records =20 def write_libxc_ihdr(): stream_write(pack(libxc.IHDR_FORMAT, @@ -336,7 +339,7 @@ def read_libxl_toolstack(vm, data): if twidth =3D=3D 64: name =3D name[:-4] =20 - if name[-1] !=3D '\x00': + if name[-1] !=3D b'\x00': raise StreamError("physmap name not NUL terminated") =20 root =3D "physmap/%x" % (phys,) @@ -347,7 +350,7 @@ def read_libxl_toolstack(vm, data): for key, val in zip(kv[0::2], kv[1::2]): info(" '%s' =3D '%s'" % (key, val)) =20 - vm.emu_xenstore +=3D '\x00'.join(kv) + '\x00' + vm.emu_xenstore +=3D b'\x00'.join(kv) + b'\x00' =20 =20 def read_chunks(vm): @@ -534,7 +537,7 @@ def read_qemu(vm): sig, =3D unpack("21s", rawsig) info("Qemu signature: %s" % (sig, )) =20 - if sig =3D=3D "DeviceModelRecord0002": + if sig =3D=3D b"DeviceModelRecord0002": rawsz =3D rdexact(4) sz, =3D unpack("I", rawsz) qdata =3D rdexact(sz) @@ -617,36 +620,6 @@ def read_legacy_stream(vm): return 2 return 0 =20 -def open_file_or_fd(val, mode): - """ - If 'val' looks like a decimal integer, open it as an fd. If not, try = to - open it as a regular file. - """ - - fd =3D -1 - try: - # Does it look like an integer? - try: - fd =3D int(val, 10) - except ValueError: - pass - - # Try to open it... - if fd !=3D -1: - return os.fdopen(fd, mode, 0) - else: - return open(val, mode, 0) - - except StandardError, e: - if fd !=3D -1: - err("Unable to open fd %d: %s: %s" % - (fd, e.__class__.__name__, e)) - else: - err("Unable to open file '%s': %s: %s" % - (val, e.__class__.__name__, e)) - - raise SystemExit(1) - =20 def main(): from optparse import OptionParser @@ -723,7 +696,7 @@ def main(): if __name__ =3D=3D "__main__": try: sys.exit(main()) - except SystemExit, e: + except SystemExit as e: sys.exit(e.code) except KeyboardInterrupt: sys.exit(1) diff --git a/tools/python/scripts/verify-stream-v2 b/tools/python/scripts/v= erify-stream-v2 index 3daf25791e..8355c2d206 100755 --- a/tools/python/scripts/verify-stream-v2 +++ b/tools/python/scripts/verify-stream-v2 @@ -3,12 +3,15 @@ =20 """ Verify a v2 format migration stream """ =20 +from __future__ import print_function + import sys import struct import os, os.path import syslog import traceback =20 +from xen.util import open_file_or_fd as open_file_or_fd from xen.migration.verify import StreamError, RecordError from xen.migration.libxc import VerifyLibxc from xen.migration.libxl import VerifyLibxl @@ -25,7 +28,7 @@ def info(msg): for line in msg.split("\n"): syslog.syslog(syslog.LOG_INFO, line) else: - print msg + print(msg) =20 def err(msg): """Error message, routed to appropriate destination""" @@ -33,7 +36,7 @@ def err(msg): if log_to_syslog: for line in msg.split("\n"): syslog.syslog(syslog.LOG_ERR, line) - print >> sys.stderr, msg + print(msg, file =3D sys.stderr) =20 def stream_read(_ =3D None): """Read from input""" @@ -56,7 +59,7 @@ def skip_xl_header(): """Skip over an xl header in the stream""" =20 hdr =3D rdexact(32) - if hdr !=3D "Xen saved domain, xl format\n \0 \r": + if hdr !=3D b"Xen saved domain, xl format\n \0 \r": raise StreamError("No xl header") =20 _, mflags, _, optlen =3D unpack_exact("=3DIIII") @@ -86,7 +89,7 @@ def read_stream(fmt): err(traceback.format_exc()) return 1 =20 - except StandardError: + except Exception: err("Script Error:") err(traceback.format_exc()) err("Please fix me") @@ -94,36 +97,6 @@ def read_stream(fmt): =20 return 0 =20 -def open_file_or_fd(val, mode, buffering): - """ - If 'val' looks like a decimal integer, open it as an fd. If not, try = to - open it as a regular file. - """ - - fd =3D -1 - try: - # Does it look like an integer? - try: - fd =3D int(val, 10) - except ValueError: - pass - - # Try to open it... - if fd !=3D -1: - return os.fdopen(fd, mode, buffering) - else: - return open(val, mode, buffering) - - except StandardError, e: - if fd !=3D -1: - err("Unable to open fd %d: %s: %s" % - (fd, e.__class__.__name__, e)) - else: - err("Unable to open file '%s': %s: %s" % - (val, e.__class__.__name__, e)) - - raise SystemExit(2) - def main(): """ main """ from optparse import OptionParser @@ -168,7 +141,7 @@ def main(): if __name__ =3D=3D "__main__": try: sys.exit(main()) - except SystemExit, e: + except SystemExit as e: sys.exit(e.code) except KeyboardInterrupt: sys.exit(2) diff --git a/tools/python/xen/migration/libxc.py b/tools/python/xen/migrati= on/libxc.py index f24448a9ef..cbffd1975e 100644 --- a/tools/python/xen/migration/libxc.py +++ b/tools/python/xen/migration/libxc.py @@ -223,7 +223,7 @@ def verify_record(self): self.squashed_pagedata_records +=3D 1 =20 padding =3D content[length:] - if padding !=3D "\x00" * len(padding): + if padding !=3D b"\x00" * len(padding): raise StreamError("Padding containing non0 bytes found") =20 if rtype not in record_verifiers: diff --git a/tools/python/xen/migration/libxl.py b/tools/python/xen/migrati= on/libxl.py index d5f54dc489..79f4024e72 100644 --- a/tools/python/xen/migration/libxl.py +++ b/tools/python/xen/migration/libxl.py @@ -128,7 +128,7 @@ def verify_record(self): content =3D self.rdexact(contentsz) =20 padding =3D content[length:] - if padding !=3D "\x00" * len(padding): + if padding !=3D b"\x00" * len(padding): raise StreamError("Padding containing non0 bytes found") =20 if rtype not in record_verifiers: diff --git a/tools/python/xen/migration/verify.py b/tools/python/xen/migrat= ion/verify.py index 7a42dbfc58..1e38f4a3c0 100644 --- a/tools/python/xen/migration/verify.py +++ b/tools/python/xen/migration/verify.py @@ -7,11 +7,11 @@ =20 from struct import calcsize, unpack =20 -class StreamError(StandardError): +class StreamError(Exception): """Error with the stream""" pass =20 -class RecordError(StandardError): +class RecordError(Exception): """Error with a record in the stream""" pass =20 diff --git a/tools/python/xen/util.py b/tools/python/xen/util.py new file mode 100644 index 0000000000..a11358eefa --- /dev/null +++ b/tools/python/xen/util.py @@ -0,0 +1,23 @@ +#!/usr/bin/env python +# -*- coding: utf-8 -*- + +import os + +def open_file_or_fd(val, *argl, **kwargs): + """ + If 'val' looks like a decimal integer, open it as an fd. If not, try = to + open it as a regular file. + """ + + fd =3D -1 + try: + # Does it look like an integer? + fd =3D int(val, 10) + except ValueError: + pass + + # Try to open it... + if fd !=3D -1: + return os.fdopen(fd, *argl, **kwargs) + else: + return open(val, *argl, **kwargs) --=20 2.11.0 _______________________________________________ Xen-devel mailing list Xen-devel@lists.xenproject.org https://lists.xenproject.org/mailman/listinfo/xen-devel