2012-05-15 1 views
0

J'essaie d'implémenter une nouvelle classe Storage qui sous-classe le S3BotoStorage de Django-Storages. (http://code.larlet.fr/django-storages/src/83fa2f0ba20c/storages/backends/s3boto.py)Appel de la méthode S3BotoStorage Save() à partir d'une sous-classe

Chaque fois que la méthode de sauvegarde de ma nouvelle classe est appelée, je veux faire d'autres choses puis appelez la méthode S3BotoStorage._save(). Comme ceci:

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) 

Si je n'ai pas ce CustomStorage._save() méthode, tout fonctionne bien (le S3BotoStorage._save (nom, contenu) est appelé et tout à S3 uploads). Si j'ai cette nouvelle méthode CustomStorage.save cependant, j'obtiens une erreur 500. (Il s'appelle quand même, car mon message d'erreur apparaît dans le terminal). Je ne peux pas voir une pile d'appel ou quoi que ce soit.

J'ai essayé:

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

Aucune de ces travaillé aussi.

Des idées ?!

Merci!

Répondre

0

Storage._save doit renvoyer le nom du fichier en cours d'enregistrement. Votre _save ne fait pas. Vous devez renvoyer la valeur de l'appel 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

Merci Mark! Comme toujours! – abisson

Questions connexes