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

given a unicode argument and os.listdir() returns unicode filenames.
This commit is contained in:
Georg Brandl 2007-03-07 08:31:51 +00:00
parent 172e7257f6
commit 71ff646743
3 changed files with 20 additions and 4 deletions

View File

@ -1,8 +1,9 @@
"""Filename globbing utility."""
import sys
import os
import fnmatch
import re
import fnmatch
__all__ = ["glob", "iglob"]
@ -48,13 +49,15 @@ def iglob(pathname):
def glob1(dirname, pattern):
if not dirname:
dirname = os.curdir
if isinstance(pattern, unicode) and not isinstance(dirname, unicode):
dirname = unicode(dirname, sys.getfilesystemencoding())
try:
names = os.listdir(dirname)
except os.error:
return []
if pattern[0]!='.':
names=filter(lambda x: x[0]!='.',names)
return fnmatch.filter(names,pattern)
if pattern[0] != '.':
names = filter(lambda x: x[0] != '.', names)
return fnmatch.filter(names, pattern)
def glob0(dirname, basename):
if basename == '':

View File

@ -52,6 +52,16 @@ class GlobTests(unittest.TestCase):
eq(self.glob('aab'), [self.norm('aab')])
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):
eq = self.assertSequencesEqual_noorder
eq(self.glob('a*'), map(self.norm, ['a', 'aab', 'aaa']))

View File

@ -152,6 +152,9 @@ Core and builtins
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
to build and those it knows how to build but that fail to build.