From 399d8d995cefe47460bac7efcaef4a68c14a0833 Mon Sep 17 00:00:00 2001 From: Riccardo Gusmeroli Date: Fri, 6 Oct 2017 08:05:02 +0200 Subject: [PATCH] Pass a file-like object to replace_pic Added possibilitu to pass a file-like object to replace_pic --- docxtpl/__init__.py | 21 ++++++++++++++------- 1 file changed, 14 insertions(+), 7 deletions(-) diff --git a/docxtpl/__init__.py b/docxtpl/__init__.py index 8893356..f1cb15d 100644 --- a/docxtpl/__init__.py +++ b/docxtpl/__init__.py @@ -214,22 +214,29 @@ class DocxTemplate(object): def replace_pic(self,embedded_file,dst_file): """Replace embedded picture with original-name given by embedded_file. (give only the file basename, not the full path) - The new picture is given by dst_file. + The new picture is given by dst_file (either a filename or a file-like + object) Notes: 1) embedded_file and dst_file must have the same extension/format + in case dst_file is a file-like object, no check is done on + format compatibility 2) the aspect ratio will be the same as the replaced image 3) There is no need to keep the original file (this is not the case for replace_embedded and replace_media) """ - emp_path,emb_ext=os.path.splitext(embedded_file) - dst_path,dst_ext=os.path.splitext(dst_file) + if hasattr(dst_file,'read'): + # NOTE: file extension not checked + self.pic_to_replace[embedded_file]=dst_file.read() + else: + emp_path,emb_ext=os.path.splitext(embedded_file) + dst_path,dst_ext=os.path.splitext(dst_file) - if emb_ext!=dst_ext: - raise ValueError('replace_pic: extensions must match') + if emb_ext!=dst_ext: + raise ValueError('replace_pic: extensions must match') - with open(dst_file, 'rb') as fh: - self.pic_to_replace[embedded_file]=fh.read() + with open(dst_file, 'rb') as fh: + self.pic_to_replace[embedded_file]=fh.read() def replace_embedded(self,src_file,dst_file): """Replace one embdded object by another one into a docx