(self, to_path)
| 172 | self._archive.list(*args, **kwargs) |
| 173 | |
| 174 | def extract(self, to_path): |
| 175 | members = self._archive.getmembers() |
| 176 | leading = self.has_leading_dir(x.name for x in members) |
| 177 | for member in members: |
| 178 | name = member.name |
| 179 | if leading: |
| 180 | name = self.split_leading_dir(name)[1] |
| 181 | filename = self.target_filename(to_path, name) |
| 182 | if member.isdir(): |
| 183 | if filename: |
| 184 | os.makedirs(filename, exist_ok=True) |
| 185 | else: |
| 186 | try: |
| 187 | extracted = self._archive.extractfile(member) |
| 188 | except (KeyError, AttributeError) as exc: |
| 189 | # Some corrupt tar files seem to produce this |
| 190 | # (specifically bad symlinks) |
| 191 | print( |
| 192 | "In the tar file %s the member %s is invalid: %s" |
| 193 | % (name, member.name, exc) |
| 194 | ) |
| 195 | else: |
| 196 | dirname = os.path.dirname(filename) |
| 197 | if dirname: |
| 198 | os.makedirs(dirname, exist_ok=True) |
| 199 | with open(filename, "wb") as outfile: |
| 200 | shutil.copyfileobj(extracted, outfile) |
| 201 | self._copy_permissions(member.mode, filename) |
| 202 | finally: |
| 203 | if extracted: |
| 204 | extracted.close() |
| 205 | |
| 206 | def close(self): |
| 207 | self._archive.close() |
nothing calls this directly
no test coverage detected