summaryrefslogtreecommitdiff
path: root/Lib/posixpath.py
diff options
context:
space:
mode:
authorSerhiy Storchaka <storchaka@gmail.com>2014-02-13 10:14:48 +0200
committerSerhiy Storchaka <storchaka@gmail.com>2014-02-13 10:14:48 +0200
commit7dfaa27fddb57ffcaf79bf21c49fd2a2cd741ab9 (patch)
treee5795f29cb7a2be5c2ed8d6b6bdab8091b231cdd /Lib/posixpath.py
parentb58f053e48923cba2708410bd215371a7d1d5250 (diff)
parentdbb101909d4bcc7cfe7a8063bb4ac4ec879ecac8 (diff)
downloadcpython-git-7dfaa27fddb57ffcaf79bf21c49fd2a2cd741ab9.tar.gz
Issue #6815: os.path.expandvars() now supports non-ASCII environment
variables names and values.
Diffstat (limited to 'Lib/posixpath.py')
-rw-r--r--Lib/posixpath.py18
1 files changed, 10 insertions, 8 deletions
diff --git a/Lib/posixpath.py b/Lib/posixpath.py
index 492c415aa5..812582ad23 100644
--- a/Lib/posixpath.py
+++ b/Lib/posixpath.py
@@ -279,6 +279,7 @@ def expandvars(path):
search = _varprogb.search
start = b'{'
end = b'}'
+ environ = getattr(os, 'environb', None)
else:
if '$' not in path:
return path
@@ -288,6 +289,7 @@ def expandvars(path):
search = _varprog.search
start = '{'
end = '}'
+ environ = os.environ
i = 0
while True:
m = search(path, i)
@@ -297,18 +299,18 @@ def expandvars(path):
name = m.group(1)
if name.startswith(start) and name.endswith(end):
name = name[1:-1]
- if isinstance(name, bytes):
- name = str(name, 'ASCII')
- if name in os.environ:
+ try:
+ if environ is None:
+ value = os.fsencode(os.environ[os.fsdecode(var)])
+ else:
+ value = environ[name]
+ except KeyError:
+ i = j
+ else:
tail = path[j:]
- value = os.environ[name]
- if isinstance(path, bytes):
- value = value.encode('ASCII')
path = path[:i] + value
i = len(path)
path += tail
- else:
- i = j
return path