On Wed, 17 Sep 2008 14:42:40 -0400 (EDT), Faheem Mitha
<[EMAIL PROTECTED]> wrote:
>
> Hi,
>
> I wrote some unit tests for file upload. since I didn't want the files in 
> the unit tests to be uploaded to the "official locaion", I changed the 
> upload location by reassiging MEDIA_ROOT to something else, '/tmp' in this 
> case.
>
> With an upgrade to Django 1.0, this method no longer works. The file 
> upload appears to ignore the value of MEDIA_ROOT.
>
> Can anyone suggest another method? Apparently file upload is now more 
> flexible - vide http://code.djangoproject.com/wiki/FileStorageRefactor. 
> I'm not sure if it is possible to use this kind of functionality to do 
> this. Suggestions welcome.

I'm following up on my own message. The following approach works:

*******************************************************
customstorage.py
*******************************************************
import os
from django.core.files.storage import FileSystemStorage
from django.utils._os import safe_join
from django.conf import settings

class FileUploadStorage(FileSystemStorage):
    def path(self, name):
        print "calling FileUploadStorage class."
        try:
            path = safe_join(settings.MEDIA_ROOT, name)
        except ValueError:
            raise SuspiciousOperation("Attempted access to '%s' denied." % name)
        return os.path.normpath(path)
*******************************************************

Then in settings.py use 

DEFAULT_FILE_STORAGE = "customstorage.FileUploadStorage"

Basically, overwrite the path in FileSystemStorage so it no longer
uses self.location, but instead looks up settings.MEDIA_ROOT when path
is called.

This is just a hack. I think it would be reasonable to make location
in FileSystemStorage a callable in similar fashion to the upload_to
argument in FileField. If I understand correctly, that would be make
this hack redundant. Comments appreciated - please cc me.

                                                               Faheem.


--~--~---------~--~----~------------~-------~--~----~
You received this message because you are subscribed to the Google Groups 
"Django users" group.
To post to this group, send email to django-users@googlegroups.com
To unsubscribe from this group, send email to [EMAIL PROTECTED]
For more options, visit this group at 
http://groups.google.com/group/django-users?hl=en
-~----------~----~----~----~------~----~------~--~---

Reply via email to