From 8bebaf104fea5d5bbeed9eb6ff57e902cd79d2e9 Mon Sep 17 00:00:00 2001 From: Miriam Rittenberg Date: Mon, 27 Jul 2020 00:45:18 -0400 Subject: [PATCH 1/2] Make locker-support work with python3 --- athdir | 5 +++-- attach | 41 ++++++++++++++++++++--------------------- detach | 14 +++++++------- fsid | 24 ++++++++++++++---------- quota.debathena | 21 +++++++++++---------- 5 files changed, 55 insertions(+), 50 deletions(-) diff --git a/athdir b/athdir index a570d80..a43d3de 100755 --- a/athdir +++ b/athdir @@ -1,5 +1,6 @@ #!/usr/bin/python +from __future__ import absolute_import, division, print_function, unicode_literals import athdir import sys import logging @@ -64,7 +65,7 @@ if len(sys.argv) <= 3 and not any(x.startswith('-') for x in sys.argv): a = athdir.Athdir(sys.argv[1], sys.argv[2] if len(sys.argv) == 3 else 'bin') paths = a.get_paths() if len(paths) > 0: - print ''.join(paths) + print(''.join(paths)) sys.exit(0 if len(paths) > 0 else 1) (options, args) = parser.parse_args() @@ -89,5 +90,5 @@ for p in options.lockerpath: options.forceDependent, options.forceIndependent, options.listAll) if len(paths) > 0: - print options.recsep.join(paths) + print(options.recsep.join(paths)) sys.exit(0 if len(paths) > 0 else 1) diff --git a/attach b/attach index c51956b..a02e6ea 100755 --- a/attach +++ b/attach @@ -1,5 +1,6 @@ #!/usr/bin/python +from __future__ import absolute_import, division, print_function, unicode_literals import sys import subprocess import logging @@ -53,14 +54,12 @@ class Environment(dict): assert len(paths) < 2 if subdir == 'bin' and options.warn: if len(paths) == 0: - print >>sys.stderr, \ - "%s: warning: %s has no binary directory" % \ - (sys.argv[0], mountpoint) + print("%s: warning: %s has no binary directory" % \ + (sys.argv[0], mountpoint), file=sys.stderr) else: if False in [adir.is_native(p) for p in paths]: - print >>sys.stderr, \ - "%s: warning: using compatibility for %s" % \ - (sys.argv[0], mountpoint) + print("%s: warning: using compatibility for %s" % \ + (sys.argv[0], mountpoint), file=sys.stderr) for p in paths: self[varmap[subdir]].remove(p) if options.front: @@ -97,13 +96,13 @@ def attach_filesys(filesys, options): if options.lookup: try: results = locker.resolve(filesys) - print "%s resolves to:" % (filesys) + print("%s resolves to:" % (filesys)) for r in results: - print "%s %s%s" % \ + print("%s %s%s" % \ (r['type'], r['data'], - ' ' + str(r['priority']) if r['priority'] > 0 else '') + ' ' + str(r['priority']) if r['priority'] > 0 else '')) except (locker.LockerNotFoundError, locker.LockerError) as e: - print >>sys.stderr, e + print(e, file=sys.stderr) else: # Multiple entries will only be returned for FSGROUPs # which we want to try in order. Once successful, we're done @@ -114,7 +113,7 @@ def attach_filesys(filesys, options): try: filesystems = locker.lookup(filesys) except locker.LockerError as e: - print >>sys.stderr, e + print(e, file=sys.stderr) for entry in filesystems: logger.debug("Attempting to attach %s", entry) if (options.map or options.remap) and \ @@ -122,7 +121,7 @@ def attach_filesys(filesys, options): try: subprocess.check_call(entry.getAuthCommandline()) except subprocess.CalledProcessError as e: - print >>sys.stderr, "Error while authenticating:", e + print("Error while authenticating:", e, file=sys.stderr) if entry.authRequired: return None if options.mountpoint is not None: @@ -130,13 +129,13 @@ def attach_filesys(filesys, options): try: entry.attach(force=options.force) except locker.LockerError as e: - print >>sys.stderr, e + print(e, file=sys.stderr) continue if options.printpath: - print entry.mountpoint + print(entry.mountpoint) elif options.verbose: - print "%s: %s attached to %s for filesystem %s" % \ - (sys.argv[0], entry.path, entry.mountpoint, entry.name) + print("%s: %s attached to %s for filesystem %s" % \ + (sys.argv[0], entry.path, entry.mountpoint, entry.name)) return entry.mountpoint return None @@ -151,7 +150,7 @@ def deprecated_callback(option, opt_str, value, parser): """ An OptionParser callback for deprecated options """ - print >>sys.stderr, "WARNING: '%s' is obsolete and will be removed in future versions." % (opt_str) + print("WARNING: '%s' is obsolete and will be removed in future versions." % (opt_str), file=sys.stderr) def attachopts_callback(option, opt_str, value, parser): # Consume all remaining values on the list @@ -275,7 +274,7 @@ if (len(argv) > 0) and (argv[0] == "-Padd"): if options.printpath or len(lockers + paths) < 1: # See NOTES[5] pathsep=':' if options.bourne else ' ' - print >>sys.stderr, pathsep.join([shorten_path(p) for p in env['PATH']]) + print(pathsep.join([shorten_path(p) for p in env['PATH']]), file=sys.stderr) sys.exit(0) if options.remove: for p in paths: @@ -285,7 +284,7 @@ if (len(argv) > 0) and (argv[0] == "-Padd"): if at is None: at = locker.read_attachtab() if filesys not in at: - print >>sys.stderr, "%s: Not attached." % (filesys,) + print("%s: Not attached." % (filesys,), file=sys.stderr) continue env.removeLocker(at[filesys].mountpoint) else: @@ -298,14 +297,14 @@ if (len(argv) > 0) and (argv[0] == "-Padd"): env['PATH'].insert(0, p) else: env['PATH'].append(p) - print env.toShell(options.bourne) + print(env.toShell(options.bourne)) else: (options, args) = attachParser.parse_args(argv) if options.debug: logging.basicConfig() logger.setLevel(logging.DEBUG) if len(args) < 1: - print locker.read_attachtab()._legacyFormat() + print(locker.read_attachtab()._legacyFormat()) if not options.map: options.remap = False if options.explicit and not options.mountpoint: diff --git a/detach b/detach index 71571d2..fabff3f 100755 --- a/detach +++ b/detach @@ -1,5 +1,6 @@ #!/usr/bin/python +from __future__ import absolute_import, division, print_function, unicode_literals import sys, os import socket import logging @@ -22,8 +23,7 @@ def deprecated_callback(option, opt_str, value, parser): """ An OptionParser callback for deprecated options """ - print >>sys.stderr, "WARNING: '%s' is obsolete and will be removed in future versions." % (opt_str) - + print("WARNING: '%s' is obsolete and will be removed in future versions." % (opt_str), file=sys.stderr) parser = OptionParser(usage=usage, add_help_option=False) parser.set_defaults(zephyr=False, unmap=True, verbose=True, all_filesys=False, explicit=False, fstype=[]) @@ -111,9 +111,9 @@ if options.all_filesys or options.host: try: attachtab[l].detach() if options.verbose: - print >>sys.stderr, "%s: %s detached" % (sys.argv[0], attachtab[l].name) + print("%s: %s detached" % (sys.argv[0], attachtab[l].name), file=sys.stderr) except locker.LockerError as e: - print >>sys.stderr, "%s: Unable to detach: %s" % (l, e) + print("%s: Unable to detach: %s" % (l, e), file=sys.stderr) sys.exit(0) for a in args: @@ -121,9 +121,9 @@ for a in args: try: attachtab[a].detach() if options.verbose: - print >>sys.stderr, "%s: %s detached" % (sys.argv[0], attachtab[a].name) + print("%s: %s detached" % (sys.argv[0], attachtab[a].name), file=sys.stderr) except locker.LockerError as e: - print >>sys.stderr, "%s: Unable to detach: %s" % (l, e) + print("%s: Unable to detach: %s" % (l, e), file=sys.stderr) else: - print >>sys.stderr, "%s: Not attached." % (a,) + print("%s: Not attached." % (a,), file=sys.stderr) sys.exit(0) diff --git a/fsid b/fsid index a3fef74..1e225b4 100755 --- a/fsid +++ b/fsid @@ -1,5 +1,6 @@ #!/usr/bin/python +from __future__ import absolute_import, division, print_function, unicode_literals import sys, os import logging from optparse import OptionParser @@ -13,28 +14,31 @@ def do_map(l, options): if not options.map: cmdline = l.getDeauthCommandline() if cmdline is None: - print >>sys.stderr, "%s: %s: %smapping not supported" % (sys.argv[0], + print("%s: %s: %smapping not supported" % (sys.argv[0], l.name, - '' if options.map else 'un') + '' if options.map else 'un'), file=sys.stderr) else: try: subprocess.check_call(cmdline) if options.verbose: - print >>sys.stderr, "%s: %s mapped" % (sys.argv[0], - l.name) + print("%s: %s mapped" % (sys.argv[0], + l.name), file=sys.stderr) + except subprocess.CalledProcessError as e: - print >>sys.stderr, "%s: Unable to map %s" % (sys.argv[0], - l.name) + print("%s: Unable to map %s" % (sys.argv[0], + l.name), file=sys.stderr) + except locker.LockerError as e: - print >>sys.stderr, "%s: %s: %s" % (sys.argv[0], + print("%s: %s: %s" % (sys.argv[0], l.name, - e) + e), file=sys.stderr) + def deprecated_callback(option, opt_str, value, parser): """ An OptionParser callback for deprecated options """ - print >>sys.stderr, "WARNING: '%s' is obsolete and will be removed in future versions." % (opt_str) + print("WARNING: '%s' is obsolete and will be removed in future versions." % (opt_str), file=sys.stderr) usage = """%prog [options] [-f] filesystem ... %prog [options] -c cell ... @@ -111,6 +115,6 @@ for f in options.filesystems + args: if f in attachtab: do_map(attachtab[f], options) else: - print >>sys.stderr, "%s: %s not attached" % (sys.argv[0], f) + print("%s: %s not attached" % (sys.argv[0], f), file=sys.stderr) sys.exit(0) diff --git a/quota.debathena b/quota.debathena index 9b16751..b964367 100755 --- a/quota.debathena +++ b/quota.debathena @@ -1,5 +1,6 @@ #!/usr/bin/python +from __future__ import absolute_import, division, print_function, unicode_literals import sys import locker import os @@ -15,7 +16,7 @@ def deprecated_callback(option, opt_str, value, parser): """ An OptionParser callback for deprecated options """ - print >>sys.stderr, "WARNING: '%s' is obsolete and will be removed in future versions." % (opt_str) + print("WARNING: '%s' is obsolete and will be removed in future versions." % (opt_str), file=sys.stderr) parser = OptionParser(usage=usage) parser.set_defaults(verbose=False, all_filesys=False, parsable=False, @@ -72,8 +73,8 @@ for x in set(options.filesys): continue if x not in at: # See NOTES[6] - print >>sys.stderr, "%s: Not attached." % (x,) - print >>sys.stderr, "%s: Unknown filesystem %s." % (sys.argv[0], x) + print("%s: Not attached." % (x,), file=sys.stderr) + print("%s: Unknown filesystem %s." % (sys.argv[0], x), file=sys.stderr) sys.exit(1) filesystems.append(at[x].mountpoint) @@ -118,7 +119,7 @@ for l in at: if options.verbose: if options.parsable: - print "\n".join(output['parsable']) + print("\n".join(output['parsable'])) sys.exit(0) uid = os.getuid() try: @@ -126,15 +127,15 @@ if options.verbose: except Exception as e: logger.debug("Exception while getting username: %s", e) username = "unknown user" - print "Disk quotas for %s (uid %d)" % (username, uid) - print "%-16s %8s %8s %8s %8s %8s %8s" % ("Filesystem", + print("Disk quotas for %s (uid %d)" % (username, uid)) + print("%-16s %8s %8s %8s %8s %8s %8s" % ("Filesystem", "usage", "quota", "limit", "files", - "quota", "limit") - print "\n".join(output['quotas']) + "quota", "limit")) + print("\n".join(output['quotas'])) # We always print a blank line. -print '' +print('') if len(output['overage']) > 0: - print "\n".join(output['overage']) + print("\n".join(output['overage'])) sys.exit(0) From 3801013b44488dab81bcea2b72634ba9340a1499 Mon Sep 17 00:00:00 2001 From: Quentin Smith Date: Mon, 27 Jul 2020 01:35:24 -0400 Subject: [PATCH 2/2] Fix athdir on Python 3 and bump version number --- athdir.py | 3 ++- setup.py | 2 +- 2 files changed, 3 insertions(+), 2 deletions(-) diff --git a/athdir.py b/athdir.py index 50c9222..465486a 100644 --- a/athdir.py +++ b/athdir.py @@ -2,6 +2,7 @@ A Python re-implementation of Athena's libathdir """ import os +import six import subprocess import sys import logging @@ -22,7 +23,7 @@ def _machtype(arg=None): cmd.append(arg) try: rv = subprocess.Popen(cmd, stdout=subprocess.PIPE).communicate()[0].strip() - return rv + return six.ensure_str(rv) except OSError as e: logger.info(e) return rv diff --git a/setup.py b/setup.py index 384a4e8..33eca79 100644 --- a/setup.py +++ b/setup.py @@ -1,7 +1,7 @@ from distutils.core import setup setup(name='locker-support', - version='10.4.7', + version='10.4.8', author='Debathena Project', author_email='debathena@mit.edu', py_modules=['locker', 'athdir'],