Commit 1c7a928c by willmcgugan

Small optimization

parent 5489ce99
......@@ -77,20 +77,24 @@ def recursepath(path, reverse=False):
>>> recursepath('a/b/c')
['/', u'/a', u'/a/b', u'/a/b/c']
"""
"""
paths = [u'/']
append = paths.append
path = u'/' + normpath(path.lstrip('/'))
find = path.find
pos = 1
if len(path) > 1:
while 1:
pos = find('/', pos + 1)
if pos == -1:
append(path)
break
append(path[:pos])
if reverse:
paths = []
append = paths.append
path = abspath(normpath(path)).rstrip("/")
while path:
append(path)
path = dirname(path).rstrip("/")
paths.append(u"/")
return paths
else:
paths = [u""] + list(iteratepath(path))
return [u"/"] + [u'/'.join(paths[:i+1]) for i in xrange(1,len(paths))]
return paths[::-1]
return paths
def abspath(path):
"""Convert the given path to an absolute path.
......
......@@ -7,6 +7,7 @@ Make a temporary file system that exists in a folder provided by the OS. All fil
"""
import os
import os.path
import time
import tempfile
......@@ -23,7 +24,8 @@ class TempFS(OSFS):
_meta = { 'virtual' : False,
'read_only' : False,
'unicode_paths' : os.path.supports_unicode_filenames,
'case_insensitive_paths' : os.path.normcase('Aa') == 'aa',
'case_insensitive_paths' : os.path.normcase('Aa') == 'aa',
'pickle_contents': False,
'network' : False,
'atomic.move' : True,
'atomic.copy' : True,
......@@ -55,7 +57,9 @@ class TempFS(OSFS):
return u'<TempFS: %s>' % self._temp_dir
def __setstate__(self, state):
state = super(TempFS, self).__setstate__(state)
"""Pickle the TempFS. TempFS delted their contents when closed, so pickling
is not garanteed to preserve the directory contents"""
state = super(TempFS, self).__setstate__(state)
self._temp_dir = tempfile.mkdtemp(self.identifier or "TempFS", dir=self.temp_dir)
super(TempFS, self).__init__(self._temp_dir,
dir_mode=self.dir_mode,
......
......@@ -685,11 +685,16 @@ class FSTestCases(object):
self.assertEquals(self.fs.getcontents('f.txt'),contents)
def test_pickling(self):
self.fs.setcontents("test1","hello world")
fs2 = pickle.loads(pickle.dumps(self.fs))
self.assert_(fs2.isfile("test1"))
fs3 = pickle.loads(pickle.dumps(self.fs,-1))
self.assert_(fs3.isfile("test1"))
if self.fs.getmeta('pickle_contents', True):
self.fs.setcontents("test1","hello world")
fs2 = pickle.loads(pickle.dumps(self.fs))
self.assert_(fs2.isfile("test1"))
fs3 = pickle.loads(pickle.dumps(self.fs,-1))
self.assert_(fs3.isfile("test1"))
else:
# Just make sure it doesn't throw an exception
fs2 = pickle.loads(pickle.dumps(self.fs))
def test_big_file(self):
chunk_size = 1024 * 256
......
......@@ -103,6 +103,7 @@ class TestPathFunctions(unittest.TestCase):
self.assertEquals(recursepath("hello",reverse=True),["/hello","/"])
self.assertEquals(recursepath("",reverse=True),["/"])
def test_isdotfile(self):
for path in ['.foo',
'.svn',
......
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