Django

Code

Ticket #5361 (new)

Opened 8 months ago

Last modified 3 days ago

Support pluggable backends for FileField

Reported by: Marty Alchin <gulopine@gamemusic.org> Assigned to: Gulopine
Component: Database wrapper Version: SVN
Keywords: Cc: hv@tbz-pariv.de, ross@rossp.org, faheem@email.unc.edu, larlet@gmail.com, cmawebsite@gmail.com, roppert@gmail.com, jvisinand@gmail.com, dcramer@gmail.com, danielnaab@gmail.com, griff.rees@gmail.com, django@jensdiemer.de, jmunter@gmail.com, yatiohi@ideopolis.gr, code.updates@roundysoft.com, sverre.johansen@gmail.com, prufrocks@gmail.com, sciyoshi@gmail.com
Triage Stage: Accepted Has patch: 1
Needs documentation: 0 Needs tests: 0
Patch needs improvement: 0

Description

In order to provide the ability to store files in alternate, even remote, filesystems, FileField should support a backend protocol and allow individual FileField instances to specify a backend to store files.

Attachments

file-backends.diff (23.7 kB) - added by Marty Alchin <gulopine@gamemusic.org> on 09/07/07 21:46:57.
FileField refactor to support backends, as well as a FileSystemBackend to implement existing functionality
filestorage.diff (28.1 kB) - added by Marty Alchin <gulopine@gamemusic.org> on 09/08/07 22:29:22.
Moved backend code into django.core.filestorage, added documentation and a few minor tweaks
filestorage.2.diff (37.3 kB) - added by Marty Alchin <gulopine@gamemusic.org> on 09/09/07 12:31:02.
Fixed a tyop and added missing documentation in the last patch
filestorage.3.diff (19.6 kB) - added by x0nix on 09/14/07 18:45:49.
Fixed few details, so it works for me with current trunk (hope didn't break it for you :-) ). Also default backend is loaded from settings.
filestorage.4.diff (33.2 kB) - added by Gulopine on 09/18/07 18:38:17.
Working patch with documentation, including get_absolute_path()
filestorage.5.diff (33.2 kB) - added by Gulopine on 09/18/07 18:53:43.
Fixed a reference that didn't get updated to get_absolute_path()
filestorage.6.diff (33.2 kB) - added by javinievas on 10/21/07 09:29:42.
Fixed a bug when saving the uploaded file
filestorage.7.diff (52.0 kB) - added by Gulopine on 12/17/07 22:05:04.
Much more complete patch, including docs and tests
filestorage.8.diff (63.3 kB) - added by Gulopine on 12/29/07 15:58:13.
Fixed a few things, added tests and hopefully the patch will work this time
filestorage.9.diff (58.4 kB) - added by Gulopine on 01/24/08 06:17:59.
Finally implemented File.eq properly
filestorage.10.diff (64.1 kB) - added by Gulopine on 02/05/08 20:44:29.
Fixed merge problems, updated to r7091, passed all tests, and removed a few uses of the now-deprecated get_FOO_*() methods
filestorage.11.diff (62.5 kB) - added by Gulopine on 02/21/08 20:48:47.
Fixed a few issues raised by David Larlet, added documentation for upload_to callables, updated to patch cleanly against r7133
filestorage.12.diff (61.5 kB) - added by Gulopine on 02/26/08 06:25:21.
Fixed caching problem, added FileField subclassing docs, updated to r7156
filestorage.13.diff (61.9 kB) - added by Gulopine on 03/17/08 10:34:03.
Fixed a problem when deleting models, updated to r7261
filestorage.14.diff (64.0 kB) - added by Gulopine on 03/19/08 13:15:28.
Some reorganization, several method renames and doc rewordings, and an update to r7321
filestorage.15.diff (63.9 kB) - added by Gulopine on 04/02/08 18:43:55.
Takes david's corrections into account and updates to r7397
filestorage.16.diff (69.9 kB) - added by Gulopine on 05/09/08 09:23:57.
Some security enhancements, more tests, and an update to r7520

Change History

09/07/07 21:46:57 changed by Marty Alchin <gulopine@gamemusic.org>

  • attachment file-backends.diff added.

FileField refactor to support backends, as well as a FileSystemBackend to implement existing functionality

09/07/07 21:48:58 changed by Simon G. <dev@simon.net.nz>

  • needs_better_patch changed.
  • stage changed from Unreviewed to Design decision needed.
  • needs_tests changed.
  • needs_docs changed.

09/07/07 21:57:33 changed by Marty Alchin <gulopine@gamemusic.org>

  • needs_docs set to 1.
  • needs_tests set to 1.

I don't have any documentation written for this patch yet, but the patch is here to look over. It's also untested in newforms-admin, but it doesn't change any of the form-handling code, so it should work properly. I'll try to have some documentation ready sometime this week. In the meantime, I'll make some additional notes about it on django-developers, to help explain things a bit.

09/08/07 22:29:22 changed by Marty Alchin <gulopine@gamemusic.org>

  • attachment filestorage.diff added.

Moved backend code into django.core.filestorage, added documentation and a few minor tweaks

09/09/07 12:31:02 changed by Marty Alchin <gulopine@gamemusic.org>

  • attachment filestorage.2.diff added.

Fixed a tyop and added missing documentation in the last patch

09/10/07 06:19:16 changed by Gulopine

  • owner changed from nobody to Gulopine.

09/14/07 13:31:04 changed by x0nix

There is wrong import in last patch.

In django/db/models/fields/init.py on line 750 should be "from django.core.filestorage import FileSystemBackend?"

09/14/07 13:41:50 changed by x0nix

Eh close ... it should be:

from django.core.filestorage.filesystem import FileSystemBackend

09/14/07 17:28:52 changed by x0nix

One more idea ... the default backend should be in settings. Then you could (for example) use different backend for development and other on production server.

09/14/07 18:45:49 changed by x0nix

  • attachment filestorage.3.diff added.

Fixed few details, so it works for me with current trunk (hope didn't break it for you :-) ). Also default backend is loaded from settings.

09/14/07 19:02:53 changed by x0nix

Seems my last patch is wrong, ignore (or delete) it please ...

09/14/07 20:36:40 changed by Gulopine

While I'm not opposed to finding a way to specify the filestorage backend in settings.py, specifying just a path alone won't generally suffice. You see, alternate backends don't always share the same arguments, so it's difficult to expect a single function call to work for all available backends.

The only way I can really think of doing it is to instantiate the backend object directly in the settings. For FileStorageBackend?, this is okay as long as the media_root and media_url arguments are supplied. If they're not, it'll try loading them from django.conf.settings, which will obviously break fairly severely.

Of course, you could manually supply the MEDIA_ROOT and MEDIA_URL values as arguments, but then that disallows using it in global_settings.py, since MEDIA_ROOT and MEDIA_URL aren't set properly when the default backend would get instantiated.

So, all in all, I think it's worth considering, but I'm not sure the framework in its current condition can support it. I'll see what it'll take to do so, but it may be a documentation issue. For instance, one way to do it would be to import the backend from some module that's different in your development and production environments. Then the application code could just use the backend protocol, while the environment-specific code determine which backend is most appropriate.

09/15/07 20:53:56 changed by PhiR

  • owner changed from Gulopine to PhiR.
  • status changed from new to assigned.

Will likely solve #641, #1642 and #5306.

09/15/07 20:54:24 changed by PhiR

  • owner changed from PhiR to Gulopine.
  • status changed from assigned to new.

09/16/07 13:19:55 changed by ubernostrum

Will solve #3588 when fixed.

09/16/07 19:52:11 changed by Gulopine

Actually, I don't see how this patch would have any impact whatsoever on #3588. This doesn't change what field is used to store the path+filename, it only affects how and where the file itself is stored.

09/18/07 18:38:17 changed by Gulopine

  • attachment filestorage.4.diff added.

Working patch with documentation, including get_absolute_path()

09/18/07 18:53:43 changed by Gulopine

  • attachment filestorage.5.diff added.

Fixed a reference that didn't get updated to get_absolute_path()

09/19/07 12:01:47 changed by jacob

  • owner changed from Gulopine to jacob.
  • status changed from new to assigned.

10/11/07 08:41:22 changed by Thomas Güttler <hv@tbz-pariv.de>

  • cc set to hv@tbz-pariv.de.

10/21/07 09:29:42 changed by javinievas

  • attachment filestorage.6.diff added.

Fixed a bug when saving the uploaded file

12/01/07 16:13:23 changed by anonymous

  • cc changed from hv@tbz-pariv.de to hv@tbz-pariv.de, ross@rossp.org.

12/07/07 14:29:35 changed by faheem

  • cc changed from hv@tbz-pariv.de, ross@rossp.org to hv@tbz-pariv.de, ross@rossp.org, faheem@email.unc.edu.

12/11/07 12:13:47 changed by Gulopine

  • keywords set to fs-rf.

12/16/07 16:25:50 changed by david

  • cc changed from hv@tbz-pariv.de, ross@rossp.org, faheem@email.unc.edu to hv@tbz-pariv.de, ross@rossp.org, faheem@email.unc.edu, larlet@gmail.com.

12/17/07 22:05:04 changed by Gulopine

  • attachment filestorage.7.diff added.

Much more complete patch, including docs and tests

12/17/07 22:08:04 changed by Gulopine

  • keywords deleted.
  • needs_docs deleted.
  • needs_tests deleted.

This latest patch includes tests and updated documentation, and some changes that attempt to address many various issues that have come up regarding FileField?. I've added "fs-rf-fixed" and "fs-rf-docs" keywords to tickets that are addressed, at least in part, by this new patch. The tickets with "fs-rf-fixed" are legitimately fixed by this patch, and be closed immediately when committed. The "fs-rf-docs" tickets aren't fixed directly by the patch, but their fixes are enabled by the new features, and the documentation covers what hooks will be needed to solve the problems described.

Also, the patch doesn't come up in the web viewer, but it should be intact. TortoiseSVN tends to screw up my patches sometimes for some reason, though, so if it doesn't work, let me know and I'll try again.

12/25/07 13:36:37 changed by anonymous

hej Gulopine i cant seem to be able to apply filestorage.7.diff using

patch -p0 filestorage.7.diff

to me it looks like the .diff is broken could you try again?

12/29/07 15:58:13 changed by Gulopine

  • attachment filestorage.8.diff added.

Fixed a few things, added tests and hopefully the patch will work this time

01/18/08 10:31:56 changed by CollinAnderson

  • cc changed from hv@tbz-pariv.de, ross@rossp.org, faheem@email.unc.edu, larlet@gmail.com to hv@tbz-pariv.de, ross@rossp.org, faheem@email.unc.edu, larlet@gmail.com, cmawebsite@gmail.com.

01/23/08 08:06:05 changed by roppert

  • cc changed from hv@tbz-pariv.de, ross@rossp.org, faheem@email.unc.edu, larlet@gmail.com, cmawebsite@gmail.com to hv@tbz-pariv.de, ross@rossp.org, faheem@email.unc.edu, larlet@gmail.com, cmawebsite@gmail.com, roppert@gmail.com.

01/24/08 06:17:59 changed by Gulopine

  • attachment filestorage.9.diff added.

Finally implemented File.eq properly

01/24/08 06:22:13 changed by Gulopine

It dawned on me that I had some temporary kludge in File.__eq__, that I had put in just to get the serializer tests to work. Now it's implemented properly, and the serializer tests still work!

01/24/08 07:48:33 changed by jvisinand <jvisinand@gmail.com>

  • cc changed from hv@tbz-pariv.de, ross@rossp.org, faheem@email.unc.edu, larlet@gmail.com, cmawebsite@gmail.com, roppert@gmail.com to hv@tbz-pariv.de, ross@rossp.org, faheem@email.unc.edu, larlet@gmail.com, cmawebsite@gmail.com, roppert@gmail.com, jvisinand@gmail.com.

01/28/08 22:18:48 changed by Gulopine

  • owner changed from jacob to Gulopine.
  • status changed from assigned to new.

The most recent diff had some problems I didn't catch before uploading, so it's not to be used at the moment. I'll get a new patch up this week.

02/05/08 16:56:59 changed by dcramer

  • cc changed from hv@tbz-pariv.de, ross@rossp.org, faheem@email.unc.edu, larlet@gmail.com, cmawebsite@gmail.com, roppert@gmail.com, jvisinand@gmail.com to hv@tbz-pariv.de, ross@rossp.org, faheem@email.unc.edu, larlet@gmail.com, cmawebsite@gmail.com, roppert@gmail.com, jvisinand@gmail.com, dcramer@gmail.com.

02/05/08 20:44:29 changed by Gulopine

  • attachment filestorage.10.diff added.

Fixed merge problems, updated to r7091, passed all tests, and removed a few uses of the now-deprecated get_FOO_*() methods

02/08/08 09:12:44 changed by david

My awesome contribution: s/desribed/described/ line 1167 of filestorage.10.diff

02/11/08 11:17:39 changed by david

In FileSystemBackend.delete_file() I suggest that we add a test:

 if filename and os.path.exists(file_name):

because otherwise it raises an IOError if filename is empty.

02/14/08 10:04:37 changed by david

An import of settings is missing in db.models.fields.files, used line 156, patch:

from django.conf import settings

02/16/08 22:25:36 changed by Dan Naab <danielnaab@gmail.com>

  • cc changed from hv@tbz-pariv.de, ross@rossp.org, faheem@email.unc.edu, larlet@gmail.com, cmawebsite@gmail.com, roppert@gmail.com, jvisinand@gmail.com, dcramer@gmail.com to hv@tbz-pariv.de, ross@rossp.org, faheem@email.unc.edu, larlet@gmail.com, cmawebsite@gmail.com, roppert@gmail.com, jvisinand@gmail.com, dcramer@gmail.com, danielnaab@gmail.com.

02/21/08 19:24:06 changed by George Kappel <george.kappel@gmail.com>

It appears that this patch is supposed to provide dynamic file naming capability but I have reviewed the docs and have not seen how that capability is exercised

02/21/08 20:48:47 changed by Gulopine

  • attachment filestorage.11.diff added.

Fixed a few issues raised by David Larlet, added documentation for upload_to callables, updated to patch cleanly against r7133

02/21/08 20:54:13 changed by Gulopine

George, this new patch includes documentation on providing a function as the upload_to argument, which provides the funcitonality you require.

Also, I mistyped in the attacment comment. That last attachment is valid up to r7141.

02/22/08 08:57:21 changed by Gulopine

David Larlet informed me that the new upload_to handling prevents model instances from being pickled (and thus cached) in many cases. This is now a known issue, I've got a fix for it, and I'll update the patch this weekend to resolve the issue.

02/26/08 06:25:21 changed by Gulopine

  • attachment filestorage.12.diff added.

Fixed caching problem, added FileField subclassing docs, updated to r7156

03/06/08 20:02:57 changed by Griffith Rees <griff.rees@gmail.com>

  • cc changed from hv@tbz-pariv.de, ross@rossp.org, faheem@email.unc.edu, larlet@gmail.com, cmawebsite@gmail.com, roppert@gmail.com, jvisinand@gmail.com, dcramer@gmail.com, danielnaab@gmail.com to hv@tbz-pariv.de, ross@rossp.org, faheem@email.unc.edu, larlet@gmail.com, cmawebsite@gmail.com, roppert@gmail.com, jvisinand@gmail.com, dcramer@gmail.com, danielnaab@gmail.com, griff.rees@gmail.com.

03/13/08 08:14:00 changed by jedie

  • cc changed from hv@tbz-pariv.de, ross@rossp.org, faheem@email.unc.edu, larlet@gmail.com, cmawebsite@gmail.com, roppert@gmail.com, jvisinand@gmail.com, dcramer@gmail.com, danielnaab@gmail.com, griff.rees@gmail.com to hv@tbz-pariv.de, ross@rossp.org, faheem@email.unc.edu, larlet@gmail.com, cmawebsite@gmail.com, roppert@gmail.com, jvisinand@gmail.com, dcramer@gmail.com, danielnaab@gmail.com, griff.rees@gmail.com, django@jensdiemer.de.

03/17/08 10:34:03 changed by Gulopine

  • attachment filestorage.13.diff added.

Fixed a problem when deleting models, updated to r7261

03/18/08 20:48:39 changed by PhiR

Can't see the latest patches, trac issue again ? By the way will this solve #6456 ? From filestorage.6.diff I'd say no but maybe this has been added since.

03/19/08 10:32:40 changed by Gulopine

No, I don't expect this will have any impact on #6456, which is why I didn't mark it with any fs-rf keywords. This patch doesn't really deal with the interactions between the database and file behaviors, it just manages how files are stored and accessed. #6456 deals more with the "when" which is also important, but beyond what this ticket is for.

03/19/08 10:47:39 changed by mtredinnick

  • stage changed from Design decision needed to Accepted.

03/19/08 13:15:28 changed by Gulopine

  • attachment filestorage.14.diff added.

Some reorganization, several method renames and doc rewordings, and an update to r7321

03/19/08 13:17:46 changed by Gulopine

This most recent patch includes several changes suggested by Jacob, and should be a final patch except for some possible documentation changes. Anyone who's already been using this patch, be aware that most of the method names have changed, and **your code will break**. It won't break anybody who's running trunk, but those of you using the patch have been warned.

03/20/08 09:00:18 changed by david

Many changes, many questions:

  • why don't you use django.core.urlresolvers.get_callable in get_storage?
  • how can I pass arguments to my custom Storage? (let's say I want to pass Amazon credentials for S3, see #6390)
  • why get_absolute_url() had been renamed to url()? I just want to understand because the previous version looks more coherent with models for instance.

I confirm that my code will break :) With your answers, I will try to integrate this new patch in my project before it's merged to the trunk.

03/20/08 21:40:12 changed by Gulopine

Okay, I figured you'd be the first to react, and I'm glad you're following closely enough to ask these questions.

  • I didn't know about django.core.urlresolvers.get_callable() when I wrote it. Jacob thought there was some kind of a function to resolve import paths to objects, but we just didn't run across it. I'll look into it.
  • Just write your __init__() in the same way as the one in FileSystemStorage. That is, it can take arguments, just make sure they're optional, and their defaults should be pulled from settings.
  • Not to pass the buck, but those method renamings were requested by both Jacob and Adrian. It's a little inconsistent, but it's not something I'm willing to fight over.

I do apologize for the breakage, but that can happen even on our fairly-stable trunk, and is especially likely when running uncommitted patches.

03/21/08 04:11:33 changed by david

No problem for the breakage, I know that this game has rules and I'm happy to contribute. Thanks for your answers, I will pass all default arguments as settings now.

It seems that there is still a s/get_absolute_url/url/ to do in db.models.fields.files.File.url() (and maybe a test to add to verify this point?).

03/21/08 05:25:07 changed by david

Okay, I confirm that it works perfectly with both filesystem and S3 storages if you use the file attached in #6390.

03/27/08 09:09:54 changed by david

There is still a s/get_absolute_path/path/ to do in db.models.fields.files.File.path() line 38, let me know if you want a diff of your diff.

04/02/08 18:43:55 changed by Gulopine

  • attachment filestorage.15.diff added.

Takes david's corrections into account and updates to r7397

04/02/08 18:46:24 changed by Gulopine

Okay, I like david's suggestion of using the existing get_callable, but it feels wrong to reach into urlresolver code for this, and refactoring that would be outside the scope of this ticket. I've left it as is for now.

04/03/08 09:29:59 changed by david

What about my proposition to do not delete default image? For the moment I'd hardcoded it in storage.delete but that's not really reusable/safe. It'll be probably more appropriated to do it in FileField.delete_file because this way you have access to self.default

04/03/08 09:46:13 changed by Gulopine

Indeed, I missed that one, thanks for the reminder. I'll definitely put up a new patch with that included.

04/10/08 15:31:53 changed by SchruteBucks

Gulopine, It looks like django.core.filestorage.init is missing an import of the exceptions module.

You need a: from django.core import exceptions

I only hit this bug because my settings file didn't have a DEFAULT_FILE_STORAGE setting

Thanks

04/10/08 16:12:35 changed by Gulopine

Thanks, that's a good catch. I've added it to my local copy, and I'll get a new patch up soon. I'm just holding off to see if there's anything else that needs to be changed/added.

04/12/08 22:57:14 changed by dcramer

  • cc changed from hv@tbz-pariv.de, ross@rossp.org, faheem@email.unc.edu, larlet@gmail.com, cmawebsite@gmail.com, roppert@gmail.com, jvisinand@gmail.com, dcramer@gmail.com, danielnaab@gmail.com, griff.rees@gmail.com, django@jensdiemer.de to hv@tbz-pariv.de, ross@rossp.org, faheem@email.unc.edu, larlet@gmail.com, cmawebsite@gmail.com, roppert@gmail.com, jvisinand@gmail.com, dcramer@gmail.com, danielnaab@gmail.com, griff.rees@gmail.com, django@jensdiemer.de, jmunter@gmail.com.

04/14/08 15:52:09 changed by ctrochalakis

  • cc changed from hv@tbz-pariv.de, ross@rossp.org, faheem@email.unc.edu, larlet@gmail.com, cmawebsite@gmail.com, roppert@gmail.com, jvisinand@gmail.com, dcramer@gmail.com, danielnaab@gmail.com, griff.rees@gmail.com, django@jensdiemer.de, jmunter@gmail.com to hv@tbz-pariv.de, ross@rossp.org, faheem@email.unc.edu, larlet@gmail.com, cmawebsite@gmail.com, roppert@gmail.com, jvisinand@gmail.com, dcramer@gmail.com, danielnaab@gmail.com, griff.rees@gmail.com, django@jensdiemer.de, jmunter@gmail.com, yatiohi@ideopolis.gr.

04/15/08 02:26:18 changed by anonymous

  • cc changed from hv@tbz-pariv.de, ross@rossp.org, faheem@email.unc.edu, larlet@gmail.com, cmawebsite@gmail.com, roppert@gmail.com, jvisinand@gmail.com, dcramer@gmail.com, danielnaab@gmail.com, griff.rees@gmail.com, django@jensdiemer.de, jmunter@gmail.com, yatiohi@ideopolis.gr to hv@tbz-pariv.de, ross@rossp.org, faheem@email.unc.edu, larlet@gmail.com, cmawebsite@gmail.com, roppert@gmail.com, jvisinand@gmail.com, dcramer@gmail.com, danielnaab@gmail.com, griff.rees@gmail.com, django@jensdiemer.de, jmunter@gmail.com, yatiohi@ideopolis.gr, sverre.johansen@gmail.com.

04/16/08 00:04:41 changed by anonymous

  • cc changed from hv@tbz-pariv.de, ross@rossp.org, faheem@email.unc.edu, larlet@gmail.com, cmawebsite@gmail.com, roppert@gmail.com, jvisinand@gmail.com, dcramer@gmail.com, danielnaab@gmail.com, griff.rees@gmail.com, django@jensdiemer.de, jmunter@gmail.com, yatiohi@ideopolis.gr, sverre.johansen@gmail.com to hv@tbz-pariv.de, ross@rossp.org, faheem@email.unc.edu, larlet@gmail.com, cmawebsite@gmail.com, roppert@gmail.com, jvisinand@gmail.com, dcramer@gmail.com, danielnaab@gmail.com, griff.rees@gmail.com, django@jensdiemer.de, jmunter@gmail.com, yatiohi@ideopolis.gr, sverre.johansen@gmail.com, prufrocks@gmail.com.
  • has_patch deleted.

04/16/08 00:05:16 changed by anonymous

  • has_patch set to 1.

04/20/08 18:47:42 changed by anonymous

  • cc changed from hv@tbz-pariv.de, ross@rossp.org, faheem@email.unc.edu, larlet@gmail.com, cmawebsite@gmail.com, roppert@gmail.com, jvisinand@gmail.com, dcramer@gmail.com, danielnaab@gmail.com, griff.rees@gmail.com, django@jensdiemer.de, jmunter@gmail.com, yatiohi@ideopolis.gr, sverre.johansen@gmail.com, prufrocks@gmail.com to hv@tbz-pariv.de, ross@rossp.org, faheem@email.unc.edu, larlet@gmail.com, cmawebsite@gmail.com, roppert@gmail.com, jvisinand@gmail.com, dcramer@gmail.com, danielnaab@gmail.com, griff.rees@gmail.com, django@jensdiemer.de, jmunter@gmail.com, yatiohi@ideopolis.gr, code.updates@roundysoft.com, sverre.johansen@gmail.com, prufrocks@gmail.com.

05/02/08 20:25:56 changed by Samuel Cormier-Iijima <sciyoshi@gmail.com>

  • cc changed from hv@tbz-pariv.de, ross@rossp.org, faheem@email.unc.edu, larlet@gmail.com, cmawebsite@gmail.com, roppert@gmail.com, jvisinand@gmail.com, dcramer@gmail.com, danielnaab@gmail.com, griff.rees@gmail.com, django@jensdiemer.de, jmunter@gmail.com, yatiohi@ideopolis.gr, code.updates@roundysoft.com, sverre.johansen@gmail.com, prufrocks@gmail.com to hv@tbz-pariv.de, ross@rossp.org, faheem@email.unc.edu, larlet@gmail.com, cmawebsite@gmail.com, roppert@gmail.com, jvisinand@gmail.com, dcramer@gmail.com, danielnaab@gmail.com, griff.rees@gmail.com, django@jensdiemer.de, jmunter@gmail.com, yatiohi@ideopolis.gr, code.updates@roundysoft.com, sverre.johansen@gmail.com, prufrocks@gmail.com, sciyoshi@gmail.com.

05/09/08 09:23:57 changed by Gulopine

  • attachment filestorage.16.diff added.

Some security enhancements, more tests, and an update to r7520

05/13/08 08:40:53 changed by david

Sometimes self._dimensions_cache doesn't exist in db.models.fields.files.ImageFile.delete(), I suggest to check with if hasattr(self, '_dimensions_cache'): before.


Add/Change #5361 (Support pluggable backends for FileField)




Change Properties
Action