| 346 | |
| 347 | |
| 348 | class OSUtils: |
| 349 | def get_file_size(self, filename): |
| 350 | return os.path.getsize(filename) |
| 351 | |
| 352 | def open_file_chunk_reader(self, filename, start_byte, size, callback): |
| 353 | return ReadFileChunk.from_filename( |
| 354 | filename, start_byte, size, callback, enable_callback=False |
| 355 | ) |
| 356 | |
| 357 | def open(self, filename, mode): |
| 358 | return open(filename, mode) |
| 359 | |
| 360 | def remove_file(self, filename): |
| 361 | """Remove a file, noop if file does not exist.""" |
| 362 | # Unlike os.remove, if the file does not exist, |
| 363 | # then this method does nothing. |
| 364 | try: |
| 365 | os.remove(filename) |
| 366 | except OSError: |
| 367 | pass |
| 368 | |
| 369 | def rename_file(self, current_filename, new_filename): |
| 370 | s3transfer.compat.rename_file(current_filename, new_filename) |
| 371 | |
| 372 | |
| 373 | class MultipartUploader: |