| 1 |
Index: core/files/move.py |
|---|
| 2 |
=================================================================== |
|---|
| 3 |
--- core/files/move.py (revision 8295) |
|---|
| 4 |
+++ core/files/move.py (working copy) |
|---|
| 5 |
@@ -1,12 +1,13 @@ |
|---|
| 6 |
""" |
|---|
| 7 |
Move a file in the safest way possible:: |
|---|
| 8 |
|
|---|
| 9 |
- >>> from django.core.files.move import file_move_save |
|---|
| 10 |
- >>> file_move_save("/tmp/old_file", "/tmp/new_file") |
|---|
| 11 |
+ >>> from django.core.files.move import file_move_safe |
|---|
| 12 |
+ >>> file_move_safe("/tmp/old_file", "/tmp/new_file") |
|---|
| 13 |
""" |
|---|
| 14 |
|
|---|
| 15 |
import os |
|---|
| 16 |
from django.core.files import locks |
|---|
| 17 |
+from django.core.files.locks import system_type |
|---|
| 18 |
|
|---|
| 19 |
__all__ = ['file_move_safe'] |
|---|
| 20 |
|
|---|
| 21 |
@@ -16,6 +17,16 @@ |
|---|
| 22 |
except ImportError: |
|---|
| 23 |
file_move = os.rename |
|---|
| 24 |
|
|---|
| 25 |
+if system_type == 'nt' : |
|---|
| 26 |
+ def _remove( file_name ) : |
|---|
| 27 |
+ from exceptions import WindowsError |
|---|
| 28 |
+ try: |
|---|
| 29 |
+ return os.remove(file_name) |
|---|
| 30 |
+ except: |
|---|
| 31 |
+ pass # Since file_name is the name of a NamedTemporaryFile which is still open |
|---|
| 32 |
+else : |
|---|
| 33 |
+ _remove = os.remove |
|---|
| 34 |
+ |
|---|
| 35 |
def file_move_safe(old_file_name, new_file_name, chunk_size = 1024*64, allow_overwrite=False): |
|---|
| 36 |
""" |
|---|
| 37 |
Moves a file from one location to another in the safest way possible. |
|---|
| 38 |
@@ -53,7 +64,8 @@ |
|---|
| 39 |
current_chunk = old_file.read(chunk_size) |
|---|
| 40 |
new_file.write(current_chunk) |
|---|
| 41 |
|
|---|
| 42 |
+ locks.unlock(new_file) |
|---|
| 43 |
new_file.close() |
|---|
| 44 |
old_file.close() |
|---|
| 45 |
- |
|---|
| 46 |
- os.remove(old_file_name) |
|---|
| 47 |
+ |
|---|
| 48 |
+ _remove( old_file_name ) |
|---|