files.sort(cmp=my_cmp)
return dirs, files
+def find_files(path):
+ files_list = []
+ for root, dirs, files in os.walk(path):
+ for a_file in files:
+ files_list.append(os.path.join(root, a_file))
+ return files_list
+
id_number = 0
self._data.append(data)
def read(self):
return ''.join(self._data)
+ def length(self):
+ return sum([len(x) for x in self._data])
-def tar_generator(path, mode='w|', bufsize=65536):
+def tar_size(files, mode='w|', bufsize=65536):
+ size = 0
buffer = FileBuffer()
- #yield 'open()\n'
tar = tarfile.open(mode=mode, fileobj=buffer, bufsize=bufsize)
- for root, dirs, files in os.walk(path):
- for name in files:
- tar.add(os.path.join(root, name), recursive=False)
- #yield '+ file: %s\n' % os.path.join(root, name)
- yield buffer.read()
- buffer.reset()
+ for a_file in files:
+ tar.add(a_file, recursive=False)
+ size += buffer.length()
+ buffer.reset()
+ tar.close()
+ size += buffer.length()
+ return size
+
+def tar_generator(files, mode='w|', bufsize=65536):
+ buffer = FileBuffer()
+ tar = tarfile.open(mode=mode, fileobj=buffer, bufsize=bufsize)
+ for a_file in files:
+ tar.add(a_file, recursive=False)
+ yield buffer.read()
+ buffer.reset()
tar.close()
- #yield 'close()\n'
yield buffer.read()
def application(environ, start_response):
start_response('200 OK', headers)
return file('.' + path)
if path.endswith('.tar') and os.path.isdir('.' + path[:-4]):
- #headers = [('Content-Type', 'text/plain; charset=utf-8'), ]
- headers = [('Content-Type', 'application/octet-stream'), ]
+ files = find_files('.' + path[:-4])
+ headers = [('Content-Type', 'application/octet-stream'),
+ ('Content-Length', str(tar_size(files)) ), ]
start_response('200 OK', headers)
- return tar_generator('.' + path[:-4])
+ return tar_generator(files)
content, size = dir_content(environ['SCRIPT_NAME'], environ['PATH_INFO'])
environ.update({
'page_title': PAGE_TITLE % human_size(size),