Ticket #10258: 10258.2.diff
File 10258.2.diff, 3.9 KB (added by , 16 years ago) |
---|
-
django/core/files/storage.py
1 1 import os 2 2 import errno 3 3 import urlparse 4 import itertools 4 5 5 6 from django.conf import settings 6 7 from django.core.exceptions import ImproperlyConfigured, SuspiciousOperation … … 63 64 Returns a filename that's free on the target storage system, and 64 65 available for new content to be written to. 65 66 """ 66 # If the filename already exists, keep adding an underscore to the name 67 # of the file until the filename doesn't exist. 68 while self.exists(name): 67 # If the filename already exists, add a number to the filename 68 # until an available name is found. 69 if self.exists(name): 70 # Build a filename template out of the (existing) name 69 71 try: 70 72 dot_index = name.rindex('.') 71 73 except ValueError: # filename has no dot 72 name += '_'74 template = "%s_%%d" % (name,) 73 75 else: 74 name = name[:dot_index] + '_' + name[dot_index:] 76 template = "%s_%%d%s" % (name[:dot_index], name[dot_index:],) 77 # Iterate indefinitely until a filename is found. 78 count = itertools.count(1) 79 while self.exists(name): 80 name = template % count.next() 75 81 return name 76 82 77 83 def path(self, name): -
tests/modeltests/files/models.py
88 88 >>> '-'.join(obj1.normal.chunks(chunk_size=2)) 89 89 'co-nt-en-t' 90 90 91 # Save another file with the same name.91 # Save more files with the same name; check for _[x] appendix. 92 92 93 >>> objs = [ Storage() for i in range(10) ] 94 >>> count = 1 95 >>> for o in objs: 96 ... o.normal.save('django_test.txt', ContentFile('Ten files, same content')) 97 >>> map(lambda o: o.normal, objs) 98 [<FieldFile: tests/django_test_1.txt>, <FieldFile: tests/django_test_2.txt>, <FieldFile: tests/django_test_3.txt>, <FieldFile: tests/django_test_4.txt>, <FieldFile: tests/django_test_5.txt>, <FieldFile: tests/django_test_6.txt>, <FieldFile: tests/django_test_7.txt>, <FieldFile: tests/django_test_8.txt>, <FieldFile: tests/django_test_9.txt>, <FieldFile: tests/django_test_10.txt>] 99 >>> for o in objs: o.delete() 100 93 101 >>> obj2 = Storage() 94 102 >>> obj2.normal.save('django_test.txt', ContentFile('more content')) 95 >>> obj2.normal96 <FieldFile: tests/django_test_.txt>97 103 >>> obj2.normal.size 98 104 12 99 105 … … 102 108 >>> cache.set('obj1', obj1) 103 109 >>> cache.set('obj2', obj2) 104 110 >>> cache.get('obj2').normal 105 <FieldFile: tests/django_test_ .txt>111 <FieldFile: tests/django_test_1.txt> 106 112 107 113 # Deleting an object deletes the file it uses, if there are no other objects 108 114 # still using that file. … … 110 116 >>> obj2.delete() 111 117 >>> obj2.normal.save('django_test.txt', ContentFile('more content')) 112 118 >>> obj2.normal 113 <FieldFile: tests/django_test_ .txt>119 <FieldFile: tests/django_test_1.txt> 114 120 115 121 # Default values allow an object to access a single file. 116 122 -
tests/regressiontests/file_storage/tests.py
121 121 name = self.save_file('conflict') 122 122 self.thread.join() 123 123 self.assert_(self.storage.exists('conflict')) 124 self.assert_(self.storage.exists('conflict_ '))124 self.assert_(self.storage.exists('conflict_1')) 125 125 self.storage.delete('conflict') 126 self.storage.delete('conflict_ ')126 self.storage.delete('conflict_1') 127 127 128 128 class FileStoragePermissions(TestCase): 129 129 def setUp(self):