mirror of
https://github.com/tahoe-lafs/tahoe-lafs.git
synced 2025-06-17 06:48:20 +00:00
Reorganize imports to make Python 3 support easier.
This commit is contained in:
@ -1,5 +1,5 @@
|
|||||||
"""Directory Node implementation."""
|
"""Directory Node implementation."""
|
||||||
import time, unicodedata
|
import time
|
||||||
|
|
||||||
from zope.interface import implementer
|
from zope.interface import implementer
|
||||||
from twisted.internet import defer
|
from twisted.internet import defer
|
||||||
@ -18,7 +18,7 @@ from allmydata.check_results import DeepCheckResults, \
|
|||||||
DeepCheckAndRepairResults
|
DeepCheckAndRepairResults
|
||||||
from allmydata.monitor import Monitor
|
from allmydata.monitor import Monitor
|
||||||
from allmydata.util import hashutil, base32, log
|
from allmydata.util import hashutil, base32, log
|
||||||
from allmydata.util.encodingutil import quote_output
|
from allmydata.util.encodingutil import quote_output, normalize
|
||||||
from allmydata.util.assertutil import precondition
|
from allmydata.util.assertutil import precondition
|
||||||
from allmydata.util.netstring import netstring, split_netstring
|
from allmydata.util.netstring import netstring, split_netstring
|
||||||
from allmydata.util.consumer import download_to_data
|
from allmydata.util.consumer import download_to_data
|
||||||
@ -101,12 +101,6 @@ def update_metadata(metadata, new_metadata, now):
|
|||||||
return metadata
|
return metadata
|
||||||
|
|
||||||
|
|
||||||
# 'x' at the end of a variable name indicates that it holds a Unicode string that may not
|
|
||||||
# be NFC-normalized.
|
|
||||||
|
|
||||||
def normalize(namex):
|
|
||||||
return unicodedata.normalize('NFC', namex)
|
|
||||||
|
|
||||||
# TODO: {Deleter,MetadataSetter,Adder}.modify all start by unpacking the
|
# TODO: {Deleter,MetadataSetter,Adder}.modify all start by unpacking the
|
||||||
# contents and end by repacking them. It might be better to apply them to
|
# contents and end by repacking them. It might be better to apply them to
|
||||||
# the unpacked contents.
|
# the unpacked contents.
|
||||||
|
@ -13,11 +13,17 @@ from future.utils import PY2
|
|||||||
if PY2:
|
if PY2:
|
||||||
from 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 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 past.builtins import unicode
|
||||||
|
|
||||||
import os
|
import os
|
||||||
import time
|
import time
|
||||||
import signal
|
import signal
|
||||||
|
|
||||||
from twisted.internet import reactor
|
from twisted.internet import reactor
|
||||||
|
from twisted.trial import unittest
|
||||||
|
|
||||||
|
from ..util.assertutil import precondition
|
||||||
|
from ..util.encodingutil import unicode_platform, get_filesystem_encoding
|
||||||
|
|
||||||
|
|
||||||
class TimezoneMixin(object):
|
class TimezoneMixin(object):
|
||||||
@ -65,3 +71,20 @@ class SignalMixin(object):
|
|||||||
if self.sigchldHandler:
|
if self.sigchldHandler:
|
||||||
signal.signal(signal.SIGCHLD, self.sigchldHandler)
|
signal.signal(signal.SIGCHLD, self.sigchldHandler)
|
||||||
return super(SignalMixin, self).tearDown()
|
return super(SignalMixin, self).tearDown()
|
||||||
|
|
||||||
|
|
||||||
|
class ReallyEqualMixin(object):
|
||||||
|
def failUnlessReallyEqual(self, a, b, msg=None):
|
||||||
|
self.assertEqual(a, b, msg)
|
||||||
|
self.assertEqual(type(a), type(b), "a :: %r, b :: %r, %r" % (a, b, msg))
|
||||||
|
|
||||||
|
|
||||||
|
def skip_if_cannot_represent_filename(u):
|
||||||
|
precondition(isinstance(u, unicode))
|
||||||
|
|
||||||
|
enc = get_filesystem_encoding()
|
||||||
|
if not unicode_platform():
|
||||||
|
try:
|
||||||
|
u.encode(enc)
|
||||||
|
except UnicodeEncodeError:
|
||||||
|
raise unittest.SkipTest("A non-ASCII filename could not be encoded on this platform.")
|
||||||
|
@ -9,24 +9,15 @@ from twisted.python import failure
|
|||||||
from twisted.trial import unittest
|
from twisted.trial import unittest
|
||||||
|
|
||||||
from ..util.assertutil import precondition
|
from ..util.assertutil import precondition
|
||||||
from allmydata.util.encodingutil import (unicode_platform, get_filesystem_encoding,
|
from allmydata.util.encodingutil import get_io_encoding
|
||||||
|
|
||||||
get_io_encoding)
|
|
||||||
from future.utils import PY2
|
from future.utils import PY2
|
||||||
if PY2: # XXX this is a hack that makes some tests pass on Python3, remove
|
if PY2: # XXX this is a hack that makes some tests pass on Python3, remove
|
||||||
# in the future
|
# in the future
|
||||||
from ..scripts import runner
|
from ..scripts import runner
|
||||||
from .common_py3 import SignalMixin
|
from .common_py3 import (
|
||||||
|
SignalMixin, skip_if_cannot_represent_filename, ReallyEqualMixin,
|
||||||
|
)
|
||||||
|
|
||||||
def skip_if_cannot_represent_filename(u):
|
|
||||||
precondition(isinstance(u, unicode))
|
|
||||||
|
|
||||||
enc = get_filesystem_encoding()
|
|
||||||
if not unicode_platform():
|
|
||||||
try:
|
|
||||||
u.encode(enc)
|
|
||||||
except UnicodeEncodeError:
|
|
||||||
raise unittest.SkipTest("A non-ASCII filename could not be encoded on this platform.")
|
|
||||||
|
|
||||||
def skip_if_cannot_represent_argv(u):
|
def skip_if_cannot_represent_argv(u):
|
||||||
precondition(isinstance(u, unicode))
|
precondition(isinstance(u, unicode))
|
||||||
@ -87,12 +78,6 @@ def flip_one_bit(s, offset=0, size=None):
|
|||||||
return result
|
return result
|
||||||
|
|
||||||
|
|
||||||
class ReallyEqualMixin(object):
|
|
||||||
def failUnlessReallyEqual(self, a, b, msg=None):
|
|
||||||
self.assertEqual(a, b, msg)
|
|
||||||
self.assertEqual(type(a), type(b), "a :: %r, b :: %r, %r" % (a, b, msg))
|
|
||||||
|
|
||||||
|
|
||||||
class StallMixin(object):
|
class StallMixin(object):
|
||||||
def stall(self, res=None, delay=1):
|
def stall(self, res=None, delay=1):
|
||||||
d = defer.Deferred()
|
d = defer.Deferred()
|
||||||
|
@ -64,15 +64,15 @@ from twisted.trial import unittest
|
|||||||
|
|
||||||
from twisted.python.filepath import FilePath
|
from twisted.python.filepath import FilePath
|
||||||
|
|
||||||
from allmydata.test.common_util import ReallyEqualMixin
|
from allmydata.test.common_py3 import (
|
||||||
|
ReallyEqualMixin, skip_if_cannot_represent_filename,
|
||||||
|
)
|
||||||
from allmydata.util import encodingutil, fileutil
|
from allmydata.util import encodingutil, fileutil
|
||||||
from allmydata.util.encodingutil import argv_to_unicode, unicode_to_url, \
|
from allmydata.util.encodingutil import argv_to_unicode, unicode_to_url, \
|
||||||
unicode_to_output, quote_output, quote_path, quote_local_unicode_path, \
|
unicode_to_output, quote_output, quote_path, quote_local_unicode_path, \
|
||||||
quote_filepath, unicode_platform, listdir_unicode, FilenameEncodingError, \
|
quote_filepath, unicode_platform, listdir_unicode, FilenameEncodingError, \
|
||||||
get_io_encoding, get_filesystem_encoding, to_str, from_utf8_or_none, _reload, \
|
get_io_encoding, get_filesystem_encoding, to_str, from_utf8_or_none, _reload, \
|
||||||
to_filepath, extend_filepath, unicode_from_filepath, unicode_segments_from
|
to_filepath, extend_filepath, unicode_from_filepath, unicode_segments_from
|
||||||
from allmydata.dirnode import normalize
|
|
||||||
from .common_util import skip_if_cannot_represent_filename
|
|
||||||
from twisted.python import usage
|
from twisted.python import usage
|
||||||
|
|
||||||
|
|
||||||
@ -258,7 +258,7 @@ class EncodingUtil(ReallyEqualMixin):
|
|||||||
_reload()
|
_reload()
|
||||||
filenames = listdir_unicode(u'/dummy')
|
filenames = listdir_unicode(u'/dummy')
|
||||||
|
|
||||||
self.failUnlessEqual(set([normalize(fname) for fname in filenames]),
|
self.failUnlessEqual(set([encodingutil.normalize(fname) for fname in filenames]),
|
||||||
set(TEST_FILENAMES))
|
set(TEST_FILENAMES))
|
||||||
|
|
||||||
|
|
||||||
@ -283,7 +283,7 @@ class StdlibUnicode(unittest.TestCase):
|
|||||||
|
|
||||||
# We only require that the listing includes a filename that is canonically equivalent
|
# We only require that the listing includes a filename that is canonically equivalent
|
||||||
# to lumiere_nfc (on Mac OS X, it will be the NFD equivalent).
|
# to lumiere_nfc (on Mac OS X, it will be the NFD equivalent).
|
||||||
self.failUnlessIn(lumiere_nfc + ".txt", set([normalize(fname) for fname in filenames]))
|
self.failUnlessIn(lumiere_nfc + ".txt", set([encodingutil.normalize(fname) for fname in filenames]))
|
||||||
|
|
||||||
expanded = fileutil.expanduser(u"~/" + lumiere_nfc)
|
expanded = fileutil.expanduser(u"~/" + lumiere_nfc)
|
||||||
self.failIfIn(u"~", expanded)
|
self.failIfIn(u"~", expanded)
|
||||||
|
@ -6,6 +6,7 @@ unicode and back.
|
|||||||
from past.builtins import unicode
|
from past.builtins import unicode
|
||||||
|
|
||||||
import sys, os, re, locale
|
import sys, os, re, locale
|
||||||
|
import unicodedata
|
||||||
|
|
||||||
from allmydata.util.assertutil import precondition, _assert
|
from allmydata.util.assertutil import precondition, _assert
|
||||||
from twisted.python import usage
|
from twisted.python import usage
|
||||||
@ -358,3 +359,9 @@ def listdir_unicode(path):
|
|||||||
|
|
||||||
def listdir_filepath(fp):
|
def listdir_filepath(fp):
|
||||||
return listdir_unicode(unicode_from_filepath(fp))
|
return listdir_unicode(unicode_from_filepath(fp))
|
||||||
|
|
||||||
|
|
||||||
|
# 'x' at the end of a variable name indicates that it holds a Unicode string that may not
|
||||||
|
# be NFC-normalized.
|
||||||
|
def normalize(namex):
|
||||||
|
return unicodedata.normalize('NFC', namex)
|
||||||
|
Reference in New Issue
Block a user