(self, zip_file, member=None)
| 138 | return save_file |
| 139 | |
| 140 | def extract(self, zip_file, member=None): |
| 141 | zip_name, extension = os.path.splitext(zip_file) |
| 142 | if zip_name.endswith(".tar"): |
| 143 | extension = ".tar" + extension |
| 144 | zip_name = zip_name[:-4] |
| 145 | |
| 146 | if extension == ".txt": |
| 147 | return zip_file |
| 148 | elif member is None: |
| 149 | save_file = zip_name |
| 150 | else: |
| 151 | save_file = os.path.join(os.path.dirname(zip_name), os.path.basename(member)) |
| 152 | if save_file in self.local_files(): |
| 153 | return save_file |
| 154 | |
| 155 | if extension == ".gz": |
| 156 | logger.info("extracting %s to %s" % (self.relpath(zip_file), self.relpath(save_file))) |
| 157 | with gzip.open(zip_file, "rb") as fin, open(save_file, "wb") as fout: |
| 158 | shutil.copyfileobj(fin, fout) |
| 159 | elif extension == ".tar.gz" or extension == ".tar": |
| 160 | if member is None: |
| 161 | logger.info("extracting %s to %s" % (self.relpath(zip_file), self.relpath(save_file))) |
| 162 | with tarfile.open(zip_file, "r") as fin: |
| 163 | fin.extractall(save_file) |
| 164 | else: |
| 165 | logger.info("extracting %s from %s to %s" % (member, self.relpath(zip_file), self.relpath(save_file))) |
| 166 | with tarfile.open(zip_file, "r").extractfile(member) as fin, open(save_file, "wb") as fout: |
| 167 | shutil.copyfileobj(fin, fout) |
| 168 | elif extension == ".zip": |
| 169 | if member is None: |
| 170 | logger.info("extracting %s to %s" % (self.relpath(zip_file), self.relpath(save_file))) |
| 171 | with zipfile.ZipFile(zip_file) as fin: |
| 172 | fin.extractall(save_file) |
| 173 | else: |
| 174 | logger.info("extracting %s from %s to %s" % (member, self.relpath(zip_file), self.relpath(save_file))) |
| 175 | with zipfile.ZipFile(zip_file).open(member, "r") as fin, open(save_file, "wb") as fout: |
| 176 | shutil.copyfileobj(fin, fout) |
| 177 | else: |
| 178 | raise ValueError("Unknown file extension `%s`" % extension) |
| 179 | |
| 180 | return save_file |
| 181 | |
| 182 | def get_file(self, key): |
| 183 | file_name = os.path.join(self.path, "%s_%s.txt" % (self.name, key)) |
no test coverage detected