Projet

Général

Profil

Development #12872

ne pas inclure le chemin complet comme nom d'image

Ajouté par Frédéric Péters il y a plus de 7 ans. Mis à jour il y a environ 7 ans.

Statut:
Fermé
Priorité:
Normal
Assigné à:
Version cible:
-
Début:
18 août 2016
Echéance:
% réalisé:

0%

Temps estimé:
Patch proposed:
Oui
Planning:

Description

Pour le moment on a ça :

Content-Type: image/png;
 name="/media/ckeditor/uploads/2016/08/18/whatever.png" 
MIME-Version: 1.0
Content-Transfer-Encoding: base64
Content-Disposition: inline;
 filename="/media/ckeditor/uploads/2016/08/18/whatever.png" 
Content-ID: </media/ckeditor/uploads/2016/08/18/whatever.png>

Ce serait mieux d'avoir uniquement la partie avec le nom de fichier dans filename.


Fichiers

Révisions associées

Révision ecf2d157 (diff)
Ajouté par Serghei Mihai il y a plus de 7 ans

include filename only for attached inline images (#12872)

Historique

#2

Mis à jour par Serghei Mihai il y a plus de 7 ans

  • Statut changé de Nouveau à En cours
#3

Mis à jour par Frédéric Péters il y a plus de 7 ans

Ça ne fonctionne pas. Dans le mail ça se trouve être mis src="filename" et non le src="cid:filename" qu'il faudrait pour que l'image puisse apparaitre. Parce que le module emails passe sur les attributs @src et celui-ci est encore à media/ckeditor/whatever et media/ckeditor/whatever n'est pas trouvé dans les attachements connus vu que c'est maintenant uniquement whatever, etc.

#4

Mis à jour par Serghei Mihai il y a plus de 7 ans

Après un peu d'archéologie dans le code de emails, patch à jour.

#5

Mis à jour par Thomas Noël il y a plus de 7 ans

J'éviterais le trop simple basename pour renommer les fichiers, ça va casser sur les doublons (qui existeront forcément, on ne contrôle pas) : plutôt faire un replace('/','_') ou un hash du nom

je poserai aussi quelques commentaires pour dire ce qui se passe lors des m.transformer.*

Je me pose quand même la question de faire toute cette moulinette sur chaque mail, ça simplifie pas la compréhension, et tout ça juste pour le lien unsubscribe. On pourrait convenir d'un remplacement de ###UNSUBCRIBE_LINK### posé dans corbo/announce.html ?

#6

Mis à jour par Frédéric Péters il y a plus de 7 ans

Je me pose quand même la question de faire toute cette moulinette sur chaque mail, ça simplifie pas la compréhension, et tout ça juste pour le lien unsubscribe. On pourrait convenir d'un remplacement de ###UNSUBCRIBE_LINK### posé dans corbo/announce.html ?

Uh, aucun rapport ?

#7

Mis à jour par Thomas Noël il y a plus de 7 ans

Frédéric Péters a écrit :

Je me pose quand même la question de faire toute cette moulinette sur chaque mail, ça simplifie pas la compréhension, et tout ça juste pour le lien unsubscribe. On pourrait convenir d'un remplacement de ###UNSUBCRIBE_LINK### posé dans corbo/announce.html ?

Uh, aucun rapport ?

Oui, pas de rapport avec ce patch, c'est une autre idée.

#8

Mis à jour par Serghei Mihai il y a plus de 7 ans

Je viens de rajouter un hash à chaque image afin d'éviter les doublons issus des différents répértoires de ckeditor.
Et quelques commentaires quant aux fonctions de emails

#9

Mis à jour par Thomas Noël il y a plus de 7 ans

Serghei Mihai a écrit :

Je viens de rajouter un hash à chaque image afin d'éviter les doublons issus des différents répértoires de ckeditor.

Tu fais un hash du nom seulement (sans le répertoire), ça marchera pas...

Aussi, dans les tests, il faut hardcoder des choses (aka "ça sert à rien de tester si add(2,2)==add(2,2)")

#10

Mis à jour par Serghei Mihai il y a plus de 7 ans

Bien, vu. Je viens de modifier la fonction.
Concernant les tests, tu parles de la fonction de test des images inline?

#11

Mis à jour par Thomas Noël il y a plus de 7 ans

Serghei Mihai a écrit :

Bien, vu. Je viens de modifier la fonction.

Heu... vraiment ?

Concernant les tests, tu parles de la fonction de test des images inline?

Bon, j'ai peut-être tort, par exemple dans la séquence :

        transformed_image_src = transform_image_src(img_src)
        assert transformed_image_src in mail.outbox[0].attachments.keys()
        assert 'cid:%s' % transformed_image_src in mail.outbox[0].html_body

ça serait mieux de faire un "transformed_image_src = 'ce que tu sais être le résultat correct'" (et pas le résultat d'un calcul).

#12

Mis à jour par Serghei Mihai il y a plus de 7 ans

Oui.
Les lignes qui ont changé dans la fonction:

    ...
    name, ext = os.path.splitext(src)
    ...
    return '%s_%s%s' % (os.path.basename(name), hash.hexdigest()[:8], ext)

Quant aux tests, je repasse le nom de l'image par la fonction transform_image_src car l'image peut être sauvegardé par Django sous un nom différent.
Par exemple "logo.png" peut être écrit par le storage comme "logo_1l12eDE.png"

#13

Mis à jour par Thomas Noël il y a plus de 7 ans

Serghei Mihai a écrit :

Oui.
Les lignes qui ont changé dans la fonction:
[...]

Arf, j'ai raté cette subtilité, sorry (mais bon, j'aurais utilisé un bête hashlib.sha256(src) sans tripoter le src)

Quant aux tests, je repasse le nom de l'image par la fonction transform_image_src car l'image peut être sauvegardé par Django sous un nom différent.
Par exemple "logo.png" peut être écrit par le storage comme "logo_1l12eDE.png"

Okaye, de toute façon l'essentiel c'est de retrouver la même valeur dans les cid: et dans les attachments, donc on va dire que j'arrête de râler :)

Bref, ça me semble valoir un bon "ack".

#14

Mis à jour par Serghei Mihai il y a plus de 7 ans

Thomas Noël a écrit :

Arf, j'ai raté cette subtilité, sorry (mais bon, j'aurais utilisé un bête hashlib.sha256(src) sans tripoter le src)

Je voulais garder le nom du fichier original suivi d'un hash pour pouvoir quand même réperer quelle image est utilisée et ou dans le corps du message.

#15

Mis à jour par Serghei Mihai il y a plus de 7 ans

  • Statut changé de En cours à Résolu (à déployer)
commit ecf2d157efc7f11bb5b16b08fbf1b78cb31b6f23
Author: Serghei Mihai <smihai@entrouvert.com>
Date:   Mon Aug 22 13:51:07 2016 +0200

    include filename only for attached inline images (#12872)
#16

Mis à jour par Serghei Mihai il y a environ 7 ans

  • Statut changé de Résolu (à déployer) à Fermé

Formats disponibles : Atom PDF