Outstanding question regarding storage/backend notwithstanding, I uploaded a new patch here:
http://code.djangoproject.com/attachment/ticket/4604/django-contrib-messages-6399c12d1773.diff Luke, it includes a note that fail_silently only hides the error when messages is disabled. I'm going to give this a final whirl by converting a project or two. Cheers, Tobias On Sat, Dec 5, 2009 at 2:05 PM, Tobias McNulty <tob...@caktusgroup.com> wrote: > It looks like I mis-read the original question about storage vs. > backend, so thanks for picking this up Luke. > > I don't have much to add to your argument except to say that it would > be non-trivial to move to a more strictly organized/named setup. > > Cheers, > Tobias > > On Sat, Dec 5, 2009 at 12:51 PM, Luke Plant <l.plant...@cantab.net> wrote: >> On Saturday 05 December 2009 13:40:40 Russell Keith-Magee wrote: >> >>> * I'd rather the AddMessageFailure have a more generic name (like >>> MessageFailure). I don't see any need to be task specific in the >>> exception class name. >> >> Another thing here we should think about: at the moment, fail_silently >> only silences the error for the messages framework not being >> installed. But there are a lot of other ways the messages backend >> could potentially fail. Should we silence those errors too? I would >> suggest not, or there should be a separate keyword argument for that. >> But this should be clear in the docs. >> >>> * I don't know why I didn't pick this up earlier, but the emerging >>> convention for pluggable backends is for the user to specify the >>> name of the module, and for the module to have a predictable class >>> name. i.e - each storage backend module should have a >>> "StorageEngine" class, and the user specifies the name of the >>> module. There is also an emerging convention to call the pluggable >>> bits 'backends', rather than picking a name like 'storage'. Net >>> result: the user should be configuring >>> MESSAGE_BACKEND="django.contrib.messages.backends.user_messages" >>> rather than >>> MESSAGE_STORAGE = >>> 'django.contrib.messages.storage.user_messages.LegacyFallbackStorag >>> e' >> >> Hmm, it is 'emerging' only in that several established subsystems use >> it (db, session, cache) and the e-mail stuff just added uses this >> convention. There are other established conventions in the code base, >> some of which are more recent IIRC: >> >> * that used by the file storage classes, file upload handlers and the >> authentication backend where the specific class is referred to. >> * that used by the template loaders, where the specific callable >> is referred to. >> >> I actually much prefer the explicit naming of a class/callable. Here >> are some arguments in favour of this method, some of which are >> stronger than others: >> >> * you can put multiple backends in one file if you want to, and you >> are not forced to duplicate imports or get creative with module >> names if you happen to have several backends that really belong >> in the same module. >> >> * it is much more obvious for someone who does not know the code, >> since it doesn't rely on a convention of a class with a certain >> name. If they see the setting for MESSAGE_STORAGE pointing to >> a class, they will immediately know where the implementation is, >> whereas if it points to a module and the module contains multiple >> classes, they will have to guess which class is the main one, or >> browse docs/source code. >> >> * it makes it less verbose and confusing if one backend refers to >> another (as happens with messages), because all the classes >> have different names, rather than having the same name. We >> currently have: >> >> from django.contrib.messages.storage.fallback import FallbackStorage >> ... >> class LegacyFallbackStorage(FallbackStorage): >> storage_classes = (UserMessagesStorage,) + >> FallbackStorage.storage_classes >> >> which would need to be changed to: >> >> from django.contrib.messages.backends import fallback >> ... >> class StorageEngine(fallback.StorageEngine): >> storage_classes = (UserMessageStorageEngine,) + >> fallback.StorageEngine.storage_classes >> >> or, using 'as' for the import: >> >> from django.contrib.messages.backends.fallback import StorageEngine \ >> as FallbackStorageEngine >> ... >> class StorageEngine(FallbackStorageEngine): >> storage_classes = (UserMessageStorageEngine,) + >> FallbackStorageEngine.storage_classes >> >> (the fallback storage module would have similar issues) >> >> The DB subsystem, which uses backends, is big and has multiple >> classes, so it makes sense for it to be referred to by module names. >> But if there is exactly one class which implements a feature, I don't >> see the sense in having a setting that refers to the containing >> module. There might be a future proofing argument here, but for >> smaller features it sounds like YAGNI to me. >> >> For the cache subsystem, the name of the module (without the 'path') >> is used as the protocol part of a URI-style setting, so it also makes >> sense for it to be short and lower case. >> >> As for the e-mail and session subsystems, IMO they are using the less >> preferable convention. Some of the disadvantages mentioned above don't >> exist for the e-mail backends, because they don't use each other like >> the messages ones do. >> >> Regards, >> >> Luke >> >> -- >> "Idiocy: Never underestimate the power of stupid people in large >> groups." (despair.com) >> >> Luke Plant || http://lukeplant.me.uk/ >> >> -- >> >> You received this message because you are subscribed to the Google Groups >> "Django developers" group. >> To post to this group, send email to django-develop...@googlegroups.com. >> To unsubscribe from this group, send email to >> django-developers+unsubscr...@googlegroups.com. >> For more options, visit this group at >> http://groups.google.com/group/django-developers?hl=en. >> >> >> > > > > -- > Tobias McNulty > Caktus Consulting Group, LLC > P.O. Box 1454 > Carrboro, NC 27510 > (919) 951-0052 > http://www.caktusgroup.com > -- Tobias McNulty Caktus Consulting Group, LLC P.O. Box 1454 Carrboro, NC 27510 (919) 951-0052 http://www.caktusgroup.com -- You received this message because you are subscribed to the Google Groups "Django developers" group. To post to this group, send email to django-develop...@googlegroups.com. To unsubscribe from this group, send email to django-developers+unsubscr...@googlegroups.com. For more options, visit this group at http://groups.google.com/group/django-developers?hl=en.