commit 98fd0a7ba4787340d05d0baf341594555da87d00 Author: Damian Johnson atagar@torproject.org Date: Mon Mar 18 16:36:11 2013 -0700
The 'name' attribute of TarInfo classes can't be set in python 3
Workaround for the 'name' attribute being unwriteable in python 3. On reflection this is a little more elegant than our prior hack. :)
Exception in thread Descriptor Reader: Traceback (most recent call last): File "/home/atagar/Python-3.3.0/Lib/threading.py", line 639, in _bootstrap_inner self.run() File "/home/atagar/Python-3.3.0/Lib/threading.py", line 596, in run self._target(*self._args, **self._kwargs) File "/home/atagar/Desktop/stem/test/data/python3/stem/descriptor/reader.py", line 435, in _read_descriptor_files self._handle_file(target, new_processed_files) File "/home/atagar/Desktop/stem/test/data/python3/stem/descriptor/reader.py", line 514, in _handle_file self._handle_archive(target) File "/home/atagar/Desktop/stem/test/data/python3/stem/descriptor/reader.py", line 557, in _handle_archive entry.name = target AttributeError: attribute 'name' of '_io.BufferedReader' objects is not writable --- stem/descriptor/reader.py | 11 ++--------- 1 files changed, 2 insertions(+), 9 deletions(-)
diff --git a/stem/descriptor/reader.py b/stem/descriptor/reader.py index f3b77ae..4fb6ff4 100644 --- a/stem/descriptor/reader.py +++ b/stem/descriptor/reader.py @@ -548,20 +548,13 @@ class DescriptorReader(object): if tar_entry.isfile(): entry = tar_file.extractfile(tar_entry)
- # The parse_file() function uses the 'name' attribute to figure out - # the file that it came from. In the case of TarInfo instances the - # 'name' is the path within the archive. We'll want that for - # _set_archive_path(). - - archive_path = entry.name - entry.name = target - try: for desc in stem.descriptor.parse_file(entry, validate = self._validate, document_handler = self._document_handler): if self._is_stopped.isSet(): return
- desc._set_archive_path(archive_path) + desc._set_path(os.path.abspath(target)) + desc._set_archive_path(entry.name) self._unreturned_descriptors.put(desc) self._iter_notice.set() except TypeError, exc: