# # patch "fs.py" # from [ea1a06ff477257b93d3e620fe0fdf02e488db4fe] # to [f571e9b863841b0cb2a55ff7e528cfc5991781e1] # # patch "fs_http.py" # from [b5c05a4be6317cf55e146da0646dde0599ecd381] # to [d5d3296ad125d00865d83cce4ea508802ed228b9] # ======================================================================== --- fs.py ea1a06ff477257b93d3e620fe0fdf02e488db4fe +++ fs.py f571e9b863841b0cb2a55ff7e528cfc5991781e1 @@ -1,13 +1,28 @@ # interface to FS-like things +import urlparse import os import os.path +class BadURL(Exception): + pass + def readable_fs_for_url(url): - return LocalReadableFS(url) + (scheme, host, path, param, query, frag) = urlparse(url, "file") + if scheme == "file": + return LocalReadableFS(path) + elif scheme in ("http", "https", "ftp"): + import fs_http + return fs_http.HTTPReadableFS(url) + else: + raise BadURL, url def writeable_fs_for_url(url): - return LocalWriteableFs(url) + (scheme, host, path, param, query, frag) = urlparse(url, "file") + if scheme == "file": + return LocalWriteableFs(path) + else: + raise BadURL, url class ReadableFS: # All operators are blocking ======================================================================== --- fs_http.py b5c05a4be6317cf55e146da0646dde0599ecd381 +++ fs_http.py d5d3296ad125d00865d83cce4ea508802ed228b9 @@ -8,7 +8,7 @@ self.url = url def _url(self, filename): - return FIXME + return urlparse.urljoin(self.url, filename) def open_read(self, filename): return urlgrabber.urlopen(self._url(filename))