mirror of
https://github.com/tahoe-lafs/tahoe-lafs.git
synced 2025-02-21 10:01:54 +00:00
Merge pull request #1073 from tahoe-lafs/3718.allmydata-scripts-python-3-part-2
Port allmydata.scripts to Python 3, part 2 Fixes ticket:3718
This commit is contained in:
commit
336ca45c7f
0
newsfragments/3718.minor
Normal file
0
newsfragments/3718.minor
Normal file
@ -1,3 +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 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 sys
|
||||
import six
|
||||
|
@ -1,7 +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 future.utils import PY3
|
||||
from past.builtins import unicode
|
||||
from future.utils import PY2, PY3
|
||||
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
|
||||
|
||||
from six import ensure_str
|
||||
|
||||
import os, time
|
||||
@ -29,7 +37,7 @@ class SlowOperationRunner(object):
|
||||
except UnknownAliasError as e:
|
||||
e.display(stderr)
|
||||
return 1
|
||||
path = unicode(path, "utf-8")
|
||||
path = str(path, "utf-8")
|
||||
if path == '/':
|
||||
path = ''
|
||||
url = nodeurl + "uri/%s" % url_quote(rootcap)
|
||||
@ -58,10 +66,10 @@ class SlowOperationRunner(object):
|
||||
|
||||
def wait_for_results(self):
|
||||
last = 0
|
||||
for next in self.poll_times():
|
||||
delay = next - last
|
||||
for next_item in self.poll_times():
|
||||
delay = next_item - last
|
||||
time.sleep(delay)
|
||||
last = next
|
||||
last = next_item
|
||||
if self.poll():
|
||||
return 0
|
||||
|
||||
|
@ -1,7 +1,14 @@
|
||||
from __future__ import print_function
|
||||
"""
|
||||
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
|
||||
import codecs
|
||||
@ -37,7 +44,7 @@ def add_line_to_aliasfile(aliasfile, alias, cap):
|
||||
def add_alias(options):
|
||||
nodedir = options['node-directory']
|
||||
alias = options.alias
|
||||
precondition(isinstance(alias, unicode), alias=alias)
|
||||
precondition(isinstance(alias, str), alias=alias)
|
||||
cap = options.cap
|
||||
stdout = options.stdout
|
||||
stderr = options.stderr
|
||||
@ -54,7 +61,7 @@ def add_alias(options):
|
||||
show_output(stderr, "Alias {alias} already exists!", alias=alias)
|
||||
return 1
|
||||
aliasfile = os.path.join(nodedir, "private", "aliases")
|
||||
cap = unicode(uri.from_string_dirnode(cap).to_string(), 'utf-8')
|
||||
cap = str(uri.from_string_dirnode(cap).to_string(), 'utf-8')
|
||||
|
||||
add_line_to_aliasfile(aliasfile, alias, cap)
|
||||
show_output(stdout, "Alias {alias} added", alias=alias)
|
||||
@ -64,7 +71,7 @@ def create_alias(options):
|
||||
# mkdir+add_alias
|
||||
nodedir = options['node-directory']
|
||||
alias = options.alias
|
||||
precondition(isinstance(alias, unicode), alias=alias)
|
||||
precondition(isinstance(alias, str), alias=alias)
|
||||
stdout = options.stdout
|
||||
stderr = options.stderr
|
||||
if u":" in alias:
|
||||
@ -94,7 +101,7 @@ def create_alias(options):
|
||||
|
||||
# probably check for others..
|
||||
|
||||
add_line_to_aliasfile(aliasfile, alias, unicode(new_uri, "utf-8"))
|
||||
add_line_to_aliasfile(aliasfile, alias, str(new_uri, "utf-8"))
|
||||
show_output(stdout, "Alias {alias} created", alias=alias)
|
||||
return 0
|
||||
|
||||
@ -114,7 +121,7 @@ def show_output(fp, template, **kwargs):
|
||||
``encoding`` attribute at all (eg StringIO.StringIO) by writing
|
||||
utf-8-encoded bytes.
|
||||
"""
|
||||
assert isinstance(template, unicode)
|
||||
assert isinstance(template, str)
|
||||
|
||||
# On Python 3 fp has an encoding attribute under all real usage. On
|
||||
# Python 2, the encoding attribute is None if stdio is not a tty. The
|
||||
|
@ -1,6 +1,14 @@
|
||||
"""
|
||||
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
|
||||
import time
|
||||
@ -293,7 +301,7 @@ def collect_backup_targets(root, listdir, filter_children):
|
||||
yield FilenameUndecodableTarget(root, isdir=True)
|
||||
else:
|
||||
for child in filter_children(children):
|
||||
assert isinstance(child, unicode), child
|
||||
assert isinstance(child, str), child
|
||||
childpath = os.path.join(root, child)
|
||||
if os.path.islink(childpath):
|
||||
yield LinkTarget(childpath, isdir=False)
|
||||
@ -498,10 +506,10 @@ class BackupProgress(object):
|
||||
)
|
||||
|
||||
def _format_elapsed(self, elapsed):
|
||||
seconds = elapsed.total_seconds()
|
||||
hours = int(seconds / 3600)
|
||||
minutes = int(seconds / 60 % 60)
|
||||
seconds = int(seconds % 60)
|
||||
seconds = int(elapsed.total_seconds())
|
||||
hours = seconds // 3600
|
||||
minutes = (seconds // 60) % 60
|
||||
seconds = seconds % 60
|
||||
return "{}h {}m {}s".format(
|
||||
hours,
|
||||
minutes,
|
||||
@ -526,12 +534,12 @@ class BackupProgress(object):
|
||||
return self, {
|
||||
os.path.basename(create_path): create_value
|
||||
for (create_path, create_value)
|
||||
in self._create_contents.items()
|
||||
in list(self._create_contents.items())
|
||||
if os.path.dirname(create_path) == dirpath
|
||||
}, {
|
||||
os.path.basename(compare_path): compare_value
|
||||
for (compare_path, compare_value)
|
||||
in self._compare_contents.items()
|
||||
in list(self._compare_contents.items())
|
||||
if os.path.dirname(compare_path) == dirpath
|
||||
}
|
||||
|
||||
|
@ -1,19 +1,26 @@
|
||||
"""
|
||||
Ported to Python 3.
|
||||
"""
|
||||
from __future__ import unicode_literals
|
||||
from __future__ import absolute_import
|
||||
from __future__ import division
|
||||
from __future__ import print_function
|
||||
|
||||
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
|
||||
|
||||
from six import ensure_str, ensure_text
|
||||
|
||||
from urllib.parse import quote as url_quote
|
||||
import json
|
||||
|
||||
# Python 2 compatibility
|
||||
from future.utils import PY2
|
||||
if PY2:
|
||||
from future.builtins import str # noqa: F401
|
||||
|
||||
from twisted.protocols.basic import LineOnlyReceiver
|
||||
|
||||
from allmydata.scripts.common import get_alias, DEFAULT_ALIAS, escape_path, \
|
||||
UnknownAliasError
|
||||
from allmydata.scripts.common_http import do_http, format_http_error
|
||||
from allmydata.util.encodingutil import quote_output, quote_path
|
||||
from allmydata.util.encodingutil import quote_output, quote_path, get_io_encoding
|
||||
|
||||
class Checker(object):
|
||||
pass
|
||||
@ -168,7 +175,9 @@ class DeepCheckOutput(LineOnlyReceiver, object):
|
||||
|
||||
# LIT files and directories do not have a "summary" field.
|
||||
summary = cr.get("summary", "Healthy (LIT)")
|
||||
print("%s: %s" % (quote_path(path), quote_output(summary, quotemarks=False)), file=stdout)
|
||||
# When Python 2 is dropped the ensure_text()/ensure_str() will be unnecessary.
|
||||
print(ensure_text(ensure_str("%s: %s") % (quote_path(path), quote_output(summary, quotemarks=False)),
|
||||
encoding=get_io_encoding()), file=stdout)
|
||||
|
||||
# always print out corrupt shares
|
||||
for shareloc in cr["results"].get("list-corrupt-shares", []):
|
||||
@ -245,11 +254,14 @@ class DeepCheckAndRepairOutput(LineOnlyReceiver, object):
|
||||
if not path:
|
||||
path = ["<root>"]
|
||||
# we don't seem to have a summary available, so build one
|
||||
# When Python 2 is dropped the ensure_text/ensure_str crap can be
|
||||
# dropped.
|
||||
if was_healthy:
|
||||
summary = "healthy"
|
||||
summary = ensure_str("healthy")
|
||||
else:
|
||||
summary = "not healthy"
|
||||
print("%s: %s" % (quote_path(path), summary), file=stdout)
|
||||
summary = ensure_str("not healthy")
|
||||
print(ensure_text(ensure_str("%s: %s") % (quote_path(path), summary),
|
||||
encoding=get_io_encoding()), file=stdout)
|
||||
|
||||
# always print out corrupt shares
|
||||
prr = crr.get("pre-repair-results", {})
|
||||
|
@ -16,6 +16,7 @@ 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
|
||||
|
||||
|
||||
PORTED_INTEGRATION_TESTS = [
|
||||
"integration.test_aaa_aardvark",
|
||||
"integration.test_servers_of_happiness",
|
||||
@ -98,7 +99,12 @@ PORTED_MODULES = [
|
||||
"allmydata.scripts.common",
|
||||
"allmydata.scripts.create_node",
|
||||
"allmydata.scripts.debug",
|
||||
"allmydata.scripts.default_nodedir",
|
||||
"allmydata.scripts.runner",
|
||||
"allmydata.scripts.slow_operation",
|
||||
"allmydata.scripts.tahoe_add_alias",
|
||||
"allmydata.scripts.tahoe_backup",
|
||||
"allmydata.scripts.tahoe_check",
|
||||
"allmydata.scripts.types_",
|
||||
"allmydata.stats",
|
||||
"allmydata.storage_client",
|
||||
|
Loading…
x
Reference in New Issue
Block a user