summaryrefslogtreecommitdiffstats
path: root/Lib/posixpath.py
diff options
context:
space:
mode:
authorSerhiy Storchaka <storchaka@gmail.com>2014-02-19 21:27:37 (GMT)
committerSerhiy Storchaka <storchaka@gmail.com>2014-02-19 21:27:37 (GMT)
commit2ac9d3110898a1cfc779dd436f05cd6ac231cbb3 (patch)
treeb62d200630b8675414e833a7f1200cd424cf7ebe /Lib/posixpath.py
parentc77d4ba85b4d2f08b4de094bc9d9104113772374 (diff)
downloadcpython-2ac9d3110898a1cfc779dd436f05cd6ac231cbb3.zip
cpython-2ac9d3110898a1cfc779dd436f05cd6ac231cbb3.tar.gz
cpython-2ac9d3110898a1cfc779dd436f05cd6ac231cbb3.tar.bz2
Issue #6815: os.path.expandvars() now supports non-ASCII Unicode environment
variables names and values.
Diffstat (limited to 'Lib/posixpath.py')
-rw-r--r--Lib/posixpath.py27
1 files changed, 21 insertions, 6 deletions
diff --git a/Lib/posixpath.py b/Lib/posixpath.py
index d65dc75..0378004 100644
--- a/Lib/posixpath.py
+++ b/Lib/posixpath.py
@@ -285,28 +285,43 @@ def expanduser(path):
# Non-existent variables are left unchanged.
_varprog = None
+_uvarprog = None
def expandvars(path):
"""Expand shell variables of form $var and ${var}. Unknown variables
are left unchanged."""
- global _varprog
+ global _varprog, _uvarprog
if '$' not in path:
return path
- if not _varprog:
- import re
- _varprog = re.compile(r'\$(\w+|\{[^}]*\})')
+ if isinstance(path, _unicode):
+ if not _varprog:
+ import re
+ _varprog = re.compile(r'\$(\w+|\{[^}]*\})')
+ varprog = _varprog
+ encoding = sys.getfilesystemencoding()
+ else:
+ if not _uvarprog:
+ import re
+ _uvarprog = re.compile(_unicode(r'\$(\w+|\{[^}]*\})'), re.UNICODE)
+ varprog = _uvarprog
+ encoding = None
i = 0
while True:
- m = _varprog.search(path, i)
+ m = varprog.search(path, i)
if not m:
break
i, j = m.span(0)
name = m.group(1)
if name.startswith('{') and name.endswith('}'):
name = name[1:-1]
+ if encoding:
+ name = name.encode(encoding)
if name in os.environ:
tail = path[j:]
- path = path[:i] + os.environ[name]
+ value = os.environ[name]
+ if encoding:
+ value = value.decode(encoding)
+ path = path[:i] + value
i = len(path)
path += tail
else: