2012-05-15 4 views
0

Я пытаюсь реализовать новый класс хранения, который подклассы S3BotoStorage из Django-Storages. (http://code.larlet.fr/django-storages/src/83fa2f0ba20c/storages/backends/s3boto.py)Вызов метода S3BotoStorage Save() из подкласса

Всякий раз, когда вы вызываете метод сохранения моего нового класса, я хочу сделать что-то другое а затем вызовите метод S3BotoStorage._save(). Как это:

class CustomStorage(S3BotoStorage): 
    def __init__(self, *args, **kwargs): 
     super(CustomStorage, self).__init__(*args, **kwargs) 

    def _save(self,*args, **kwargs): 
     #Will do stuff there 
     print >> sys.stderr, "%s" % (self.bucket) 
     super(CustomStorage, self)._save(*args, **kwargs) 

Если у меня нет этого метода CustomStorage._save(), все работает хорошо (то есть S3BotoStorage._save (название, содержание) называется и все, добавления к S3). Однако, если у меня есть этот новый метод CustomStorage.save, я получаю ошибку 500. (Это вызвано, хотя, поскольку мое сообщение об ошибке появляется в терминале). Я не вижу ни одного стека вызовов или чего-то еще.

Я пробовал:

def save(self,*args, **kwargs): 
def save(self,name, content): 

Ни один из них работал.

Любые идеи ?!

Спасибо!

ответ

0

Storage._save должен вернуть имя сохраняемого файла. Ваш _save нет. Вы должны вернуть значение из вызова super.

class CustomStorage(S3BotoStorage): 
    def __init__(self, *args, **kwargs): 
     super(CustomStorage, self).__init__(*args, **kwargs) 

    def _save(self,*args, **kwargs): 
     #Will do stuff there 
     print >> sys.stderr, "%s" % (self.bucket) 
     return super(CustomStorage, self)._save(*args, **kwargs) 
+0

Thanks Mark! Как всегда! – abisson

Смежные вопросы