From 9887444a0823ff658030e14589d44f36edab3049 Mon Sep 17 00:00:00 2001 From: Jannis Leidel Date: Sat, 26 Jan 2013 18:36:24 +0100 Subject: [PATCH] Minor cleanup. --- storages/backends/overwrite.py | 8 +++----- storages/backends/symlinkorcopy.py | 28 ++++++++++++++-------------- storages/tests/hashpath.py | 3 --- 3 files changed, 17 insertions(+), 22 deletions(-) diff --git a/storages/backends/overwrite.py b/storages/backends/overwrite.py index 14a4cd1..fba464a 100644 --- a/storages/backends/overwrite.py +++ b/storages/backends/overwrite.py @@ -1,16 +1,14 @@ -import os - -from django.conf import settings from django.core.files.storage import FileSystemStorage + class OverwriteStorage(FileSystemStorage): """ Comes from http://www.djangosnippets.org/snippets/976/ (even if it already exists in S3Storage for ages) - + See also Django #4339, which might add this functionality to core. """ - + def get_available_name(self, name): """ Returns a filename that's free on the target storage system, and diff --git a/storages/backends/symlinkorcopy.py b/storages/backends/symlinkorcopy.py index 9091e47..14f8e29 100644 --- a/storages/backends/symlinkorcopy.py +++ b/storages/backends/symlinkorcopy.py @@ -4,34 +4,34 @@ from django.core.files.storage import FileSystemStorage __doc__ = """ -I needed to efficiently create a mirror of a directory tree (so that -"origin pull" CDNs can automatically pull files). The trick was that -some files could be modified, and some could be identical to the original. -Of course it doesn't make sense to store the exact same data twice on the +I needed to efficiently create a mirror of a directory tree (so that +"origin pull" CDNs can automatically pull files). The trick was that +some files could be modified, and some could be identical to the original. +Of course it doesn't make sense to store the exact same data twice on the file system. So I created SymlinkOrCopyStorage. -SymlinkOrCopyStorage allows you to symlink a file when it's identical to +SymlinkOrCopyStorage allows you to symlink a file when it's identical to the original file and to copy the file if it's modified. -Of course, it's impossible to know if a file is modified just by looking +Of course, it's impossible to know if a file is modified just by looking at the file, without knowing what the original file was. -That's what the symlinkWithin parameter is for. It accepts one or more paths -(if multiple, they should be concatenated using a colon (:)). -Files that will be saved using SymlinkOrCopyStorage are then checked on their -location: if they are within one of the symlink_within directories, +That's what the symlinkWithin parameter is for. It accepts one or more paths +(if multiple, they should be concatenated using a colon (:)). +Files that will be saved using SymlinkOrCopyStorage are then checked on their +location: if they are within one of the symlink_within directories, they will be symlinked, otherwise they will be copied. -The rationale is that unmodified files will exist in their original location, -e.g. /htdocs/example.com/image.jpg and modified files will be stored in +The rationale is that unmodified files will exist in their original location, +e.g. /htdocs/example.com/image.jpg and modified files will be stored in a temporary directory, e.g. /tmp/image.jpg. """ class SymlinkOrCopyStorage(FileSystemStorage): """Stores symlinks to files instead of actual files whenever possible - + When a file that's being saved is currently stored in the symlink_within directory, then symlink the file. Otherwise, copy the file. """ - def __init__(self, location=settings.MEDIA_ROOT, base_url=settings.MEDIA_URL, + def __init__(self, location=settings.MEDIA_ROOT, base_url=settings.MEDIA_URL, symlink_within=None): super(SymlinkOrCopyStorage, self).__init__(location, base_url) self.symlink_within = symlink_within.split(":") diff --git a/storages/tests/hashpath.py b/storages/tests/hashpath.py index 38bd3b8..5cc4d65 100644 --- a/storages/tests/hashpath.py +++ b/storages/tests/hashpath.py @@ -30,9 +30,6 @@ def test_save_same_file(self): saves a file twice, the file should only be stored once, because the content/hash is the same """ - path_1 = self.storage.save('test', ContentFile('new content')) - path_2 = self.storage.save('test', ContentFile('new content')) - self.assertEqual(path_1, path_2)