Commit 71ff6467 authored by Georg Brandl's avatar Georg Brandl

Patch #1001604: glob.glob() now returns unicode filenames if it was

given a unicode argument and os.listdir() returns unicode filenames.
parent 172e7257
"""Filename globbing utility.""" """Filename globbing utility."""
import sys
import os import os
import fnmatch
import re import re
import fnmatch
__all__ = ["glob", "iglob"] __all__ = ["glob", "iglob"]
...@@ -48,13 +49,15 @@ def iglob(pathname): ...@@ -48,13 +49,15 @@ def iglob(pathname):
def glob1(dirname, pattern): def glob1(dirname, pattern):
if not dirname: if not dirname:
dirname = os.curdir dirname = os.curdir
if isinstance(pattern, unicode) and not isinstance(dirname, unicode):
dirname = unicode(dirname, sys.getfilesystemencoding())
try: try:
names = os.listdir(dirname) names = os.listdir(dirname)
except os.error: except os.error:
return [] return []
if pattern[0]!='.': if pattern[0] != '.':
names=filter(lambda x: x[0]!='.',names) names = filter(lambda x: x[0] != '.', names)
return fnmatch.filter(names,pattern) return fnmatch.filter(names, pattern)
def glob0(dirname, basename): def glob0(dirname, basename):
if basename == '': if basename == '':
......
...@@ -52,6 +52,16 @@ class GlobTests(unittest.TestCase): ...@@ -52,6 +52,16 @@ class GlobTests(unittest.TestCase):
eq(self.glob('aab'), [self.norm('aab')]) eq(self.glob('aab'), [self.norm('aab')])
eq(self.glob('zymurgy'), []) eq(self.glob('zymurgy'), [])
# test return types are unicode, but only if os.listdir
# returns unicode filenames
uniset = set([unicode])
tmp = os.listdir(u'.')
if set(type(x) for x in tmp) == uniset:
u1 = glob.glob(u'*')
u2 = glob.glob(u'./*')
self.assertEquals(set(type(r) for r in u1), uniset)
self.assertEquals(set(type(r) for r in u2), uniset)
def test_glob_one_directory(self): def test_glob_one_directory(self):
eq = self.assertSequencesEqual_noorder eq = self.assertSequencesEqual_noorder
eq(self.glob('a*'), map(self.norm, ['a', 'aab', 'aaa'])) eq(self.glob('a*'), map(self.norm, ['a', 'aab', 'aaa']))
......
...@@ -152,6 +152,9 @@ Core and builtins ...@@ -152,6 +152,9 @@ Core and builtins
Library Library
------- -------
- Patch #1001604: glob.glob() now returns unicode filenames if it was
given a unicode argument and os.listdir() returns unicode filenames.
- Patch #1673619: setup.py identifies extension modules it doesn't know how - Patch #1673619: setup.py identifies extension modules it doesn't know how
to build and those it knows how to build but that fail to build. to build and those it knows how to build but that fail to build.
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment