diff --git a/src/allmydata/scripts/cli.py b/src/allmydata/scripts/cli.py index 011dc3b21..41695aa47 100644 --- a/src/allmydata/scripts/cli.py +++ b/src/allmydata/scripts/cli.py @@ -1,6 +1,15 @@ +""" +Ported to Python 3. +""" +from __future__ import unicode_literals +from __future__ import absolute_import +from __future__ import division from __future__ import print_function -from past.builtins import unicode +from future.utils import PY2 +if PY2: + from future.builtins import filter, map, zip, ascii, chr, hex, input, next, oct, open, pow, round, super, bytes, dict, list, object, range, str, max, min # noqa: F401 + import os.path, re, fnmatch @@ -38,7 +47,7 @@ class FileStoreOptions(BaseOptions): # compute a node-url from the existing options, put in self['node-url'] if self['node-url']: - if (not isinstance(self['node-url'], (bytes, unicode)) + if (not isinstance(self['node-url'], (bytes, str)) or not NODEURL_RE.match(self['node-url'])): msg = ("--node-url is required to be a string and look like " "\"http://HOSTNAMEORADDR:PORT\", not: %r" % @@ -354,8 +363,9 @@ class BackupOptions(FileStoreOptions): abs_filepath = argv_to_abspath(filepath) try: exclude_file = open(abs_filepath) - except: - raise BackupConfigurationError('Error opening exclude file %s.' % quote_local_unicode_path(abs_filepath)) + except Exception as e: + raise BackupConfigurationError('Error opening exclude file %s. (Error: %s)' % ( + quote_local_unicode_path(abs_filepath), e)) try: for line in exclude_file: self.opt_exclude(line) diff --git a/src/allmydata/test/cli/test_backup.py b/src/allmydata/test/cli/test_backup.py index 4bd4b8bfa..4cc7e865f 100644 --- a/src/allmydata/test/cli/test_backup.py +++ b/src/allmydata/test/cli/test_backup.py @@ -9,9 +9,7 @@ from __future__ import unicode_literals from future.utils import PY2 if PY2: from future.builtins import filter, map, zip, ascii, chr, hex, input, next, oct, open, pow, round, super, bytes, dict, list, object, range, str, max, min # noqa: F401 - import __builtin__ as builtins -else: - import builtins + import os.path from six.moves import cStringIO as StringIO @@ -430,7 +428,11 @@ class Backup(GridTestMixin, CLITestMixin, StallMixin, unittest.TestCase): else: return original_open(name, *args) - patcher = MonkeyPatcher((builtins, 'open', call_file)) + if PY2: + from allmydata.scripts import cli as module_to_patch + else: + import builtins as module_to_patch + patcher = MonkeyPatcher((module_to_patch, 'open', call_file)) patcher.runWithPatches(parse_options, basedir, "backup", ['--exclude-from', unicode_to_argv(exclude_file), 'from', 'to']) self.failUnless(ns.called) diff --git a/src/allmydata/util/_python3.py b/src/allmydata/util/_python3.py index 510e50d35..7767a52d8 100644 --- a/src/allmydata/util/_python3.py +++ b/src/allmydata/util/_python3.py @@ -89,7 +89,8 @@ PORTED_MODULES = [ "allmydata.nodemaker", "allmydata.scripts", "allmydata.scripts.admin", - "allmydata.scripts.backupdb", + "allmydata.scripts.backupdb" + "allmydata.scripts.cli", "allmydata.scripts.create_node", "allmydata.scripts.runner", "allmydata.scripts.types_",