| 238 | self.offset = 0 # Current file offset for seek(), tell(), etc |
| 239 | |
| 240 | def _write_gzip_header(self, compresslevel): |
| 241 | self.fileobj.write(b'\037\213') # magic header |
| 242 | self.fileobj.write(b'\010') # compression method |
| 243 | try: |
| 244 | # RFC 1952 requires the FNAME field to be Latin-1. Do not |
| 245 | # include filenames that cannot be represented that way. |
| 246 | fname = os.path.basename(self.name) |
| 247 | if not isinstance(fname, bytes): |
| 248 | fname = fname.encode('latin-1') |
| 249 | if fname.endswith(b'.gz'): |
| 250 | fname = fname[:-3] |
| 251 | except UnicodeEncodeError: |
| 252 | fname = b'' |
| 253 | flags = 0 |
| 254 | if fname: |
| 255 | flags = FNAME |
| 256 | self.fileobj.write(chr(flags).encode('latin-1')) |
| 257 | mtime = self._write_mtime |
| 258 | if mtime is None: |
| 259 | mtime = time.time() |
| 260 | write32u(self.fileobj, int(mtime)) |
| 261 | if compresslevel == _COMPRESS_LEVEL_BEST: |
| 262 | xfl = b'\002' |
| 263 | elif compresslevel == _COMPRESS_LEVEL_FAST: |
| 264 | xfl = b'\004' |
| 265 | else: |
| 266 | xfl = b'\000' |
| 267 | self.fileobj.write(xfl) |
| 268 | self.fileobj.write(b'\377') |
| 269 | if fname: |
| 270 | self.fileobj.write(fname + b'\000') |
| 271 | |
| 272 | def write(self,data): |
| 273 | self._check_not_closed() |