[Scipy-svn] r3429 - trunk/scipy/io
scipy-svn at scipy.org
scipy-svn at scipy.org
Tue Oct 9 20:02:56 EDT 2007
Author: chris.burns
Date: 2007-10-09 19:02:53 -0500 (Tue, 09 Oct 2007)
New Revision: 3429
Modified:
trunk/scipy/io/datasource.py
Log:
Cleanup the public interface and document.
Modified: trunk/scipy/io/datasource.py
===================================================================
--- trunk/scipy/io/datasource.py 2007-10-09 23:32:25 UTC (rev 3428)
+++ trunk/scipy/io/datasource.py 2007-10-10 00:02:53 UTC (rev 3429)
@@ -1,8 +1,12 @@
-"""Utilities for importing (possibly compressed) data sets from an URL
-(or file) and possibly caching them.
+"""A generic interface for importing data. Data sources can originate from
+URLs or local paths and can be in compressed or uncompressed form.
"""
+# TODO: Make DataSource and Repository the public interface.
+# Cache will be used internally. Add methods in DataSource to expose
+# some of the functionality that exists only in Cache currently.
+
__docformat__ = "restructuredtext en"
import os
@@ -31,8 +35,8 @@
warnings.warn(_api_warning)
# TODO: .zip support
-zipexts = (".gz",".bz2")
-file_openers = {".gz":gzip.open, ".bz2":bz2.BZ2File, None:file}
+_zipexts = (".gz",".bz2")
+_file_openers = {".gz":gzip.open, ".bz2":bz2.BZ2File, None:file}
def iszip(filename):
"""Test if the given file is a zip file.
@@ -50,7 +54,7 @@
"""
_tmp, ext = path(filename).splitext()
- return ext in zipexts
+ return ext in _zipexts
def unzip(filename):
"""Unzip the given file and return the path object to the new file.
@@ -70,7 +74,7 @@
if not iszip(filename):
raise ValueError("file %s is not zipped"%filename)
unzip_name, zipext = splitzipext(filename)
- opener = file_openers[zipext]
+ opener = _file_openers[zipext]
outfile = file(unzip_name, 'w')
outfile.write(opener(filename).read())
outfile.close()
@@ -119,7 +123,7 @@
else:
return filename, None
-def isurl(pathstr):
+def _isurl(pathstr):
"""Test whether a given string can be parsed as a URL.
*Parameters*:
@@ -133,7 +137,7 @@
"""
- scheme, netloc, _tmp, _tmp, _tmp, _tmp = urlparse(pathstr)
+ scheme, netloc, _path, _params, _query, _frag = urlparse(pathstr)
return bool(scheme and netloc)
def ensuredirs(directory):
@@ -233,7 +237,7 @@
>>> mycache = datasource.Cache()
>>> mycache.filename('xyzcoords.txt')
- '/home/guido/.scipy/cache/yzcoords.txt'
+ '/home/guido/.scipy/cache/xyzcoords.txt'
"""
# TODO: Change to non-public?
@@ -263,13 +267,15 @@
file(upath, 'w').write(openedurl.read())
def clear(self):
- """ Delete all files in the cache.
+ """Delete all files in the cache."""
- :Returns: ``None``
- """
+ # TODO: This deletes all files in the cache directory, regardless
+ # of if this instance created them. Too destructive and
+ # unexpected behavior.
+
for _file in self.path.files():
- _file.rm()
-
+ os.remove(file)
+
def iscached(self, uri):
""" Check if a file exists in the cache.
@@ -303,25 +309,54 @@
self._cache = Cache(cachepath)
def tempfile(self, suffix='', prefix=''):
- """Return an temporary file name in the cache."""
+ """Create a temporary file in the cache.
+
+ *Parameters*:
+ suffix : {''}, optional
+
+ prefix : {''}, optional
+
+ *Returns*:
+ tmpfile : {string}
+ String containing the full path to the temporary file.
+
+ *Examples*
+
+ >>> datasrc = datasource.DataSource()
+ >>> tmpfile = datasrc.tempfile()
+ >>> tmpfile
+ '/home/guido/src/scipy-trunk/scipy/io/PZTuKo'
+
+ """
return self._cache.tempfile(suffix, prefix)
def _possible_names(self, filename):
+ """Return a tuple containing compressed filenames."""
names = [filename]
if not iszip(filename):
- for zipext in zipexts:
+ for zipext in _zipexts:
names.append(filename+zipext)
return tuple(names)
def cache(self, pathstr):
- if isurl(pathstr):
+ # TODO: Should work with files also, not just urls.
+ if _isurl(pathstr):
self._cache.cache(pathstr)
+ def clear(self):
+ # TODO: Implement a clear interface for deleting tempfiles.
+ # There's a problem with the way this is handled in the Cache,
+ # All files in the cache directory will be deleted. In the
+ # default instance, that's the os.curdir. I doubt this is what
+ # people would want. The instance should only delete files that
+ # it created!
+ pass
+
def filename(self, pathstr):
found = None
for name in self._possible_names(pathstr):
try:
- if isurl(name):
+ if _isurl(name):
self.cache(name)
found = self._cache.filename(name)
else:
@@ -343,13 +378,13 @@
return False
def open(self, pathstr, mode='r'):
- if isurl(pathstr) and iswritemode(mode):
+ if _isurl(pathstr) and iswritemode(mode):
raise ValueError("URLs are not writeable")
found = self.filename(pathstr)
_, ext = splitzipext(found)
if ext == 'bz2':
mode.replace("+", "")
- return file_openers[ext](found, mode=mode)
+ return _file_openers[ext](found, mode=mode)
def _fullpath(self, pathstr):
return pathstr
More information about the Scipy-svn
mailing list