[tor-commits] [stem/master] The 'name' attribute of TarInfo classes can't be set in python 3

atagar at torproject.org atagar at torproject.org
Tue Mar 19 01:43:44 UTC 2013


commit 98fd0a7ba4787340d05d0baf341594555da87d00
Author: Damian Johnson <atagar at 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:





More information about the tor-commits mailing list