unicode and back.
"""
-import sys
-import os
-import re
+import sys, os, re, locale
+from types import NoneType
+
from allmydata.util.assertutil import precondition
from twisted.python import usage
-import locale
from allmydata.util import log
from allmydata.util.fileutil import abspath_expanduser_unicode
raise usage.UsageError("Argument %s cannot be decoded as %s." %
(quote_output(s), io_encoding))
-def argv_to_abspath(s):
+def argv_to_abspath(s, **kwargs):
"""
Convenience function to decode an argv element to an absolute path, with ~ expanded.
If this fails, raise a UsageError.
"""
- return abspath_expanduser_unicode(argv_to_unicode(s))
+ decoded = argv_to_unicode(s)
+ if decoded.startswith(u'-'):
+ raise usage.UsageError("Path argument %s cannot start with '-'.\nUse %s if you intended to refer to a file."
+ % (quote_output(s), quote_output(os.path.join('.', s))))
+ return abspath_expanduser_unicode(decoded, **kwargs)
def unicode_to_argv(s, mangle=False):
"""
return s
return s.encode('utf-8')
+def from_utf8_or_none(s):
+ precondition(isinstance(s, (NoneType, str)), s)
+ if s is None:
+ return s
+ return s.decode('utf-8')
+
PRINTABLE_ASCII = re.compile(r'^[\n\r\x20-\x7E]*$', re.DOTALL)
PRINTABLE_8BIT = re.compile(r'^[\n\r\x20-\x7E\x80-\xFF]*$', re.DOTALL)