# HG changeset patch # User Thierry Florac # Date 1505134553 -7200 # Node ID ea4bfc8f6278229cd16081e8bccc89c8eb5255df # Parent 548b72a430c73751114d8b0aef71f0f355452e80 Use 'associations' to handle links and external files diff -r 548b72a430c7 -r ea4bfc8f6278 src/pyams_content_es/component/extfile.py --- a/src/pyams_content_es/component/extfile.py Mon Sep 11 14:55:31 2017 +0200 +++ b/src/pyams_content_es/component/extfile.py Mon Sep 11 14:55:53 2017 +0200 @@ -17,35 +17,41 @@ import base64 # import interfaces -from pyams_content.component.extfile.interfaces import IExtFileContainerTarget, IExtFileContainer +from pyams_content.component.association.interfaces import IAssociationContainer +from pyams_content.component.extfile.interfaces import IBaseExtFile +from pyams_content.component.paragraph.interfaces import IParagraphContainerTarget, IParagraphContainer from pyams_content_es.interfaces import IDocumentIndexInfo # import packages from pyams_utils.adapter import adapter_config -@adapter_config(name='extfile', context=IExtFileContainerTarget, provides=IDocumentIndexInfo) -def ExtFileContainerTargetIndexInfo(content): +@adapter_config(name='extfile', context=IParagraphContainerTarget, provides=IDocumentIndexInfo) +def ParagraphContainerTargetExtFileIndexInfo(context): """External files index info""" extfiles = [] attachments = [] - for extfile in IExtFileContainer(content).values(): - extfiles.append({'title': extfile.title, - 'description': extfile.description}) - for lang, data in extfile.data.items(): - content_type = data.content_type - if isinstance(content_type, bytes): - content_type = content_type.decode() - if content_type.startswith('image/') or \ - content_type.startswith('audio/') or \ - content_type.startswith('video/'): + for paragraph in IParagraphContainer(context).values(): + associations = IAssociationContainer(paragraph, {}) + for extfile in associations.values(): + if not IBaseExtFile.providedBy(extfile): continue - attachments.append({ - 'content_type': content_type, - 'name': data.filename, - 'language': lang, - 'content': base64.encodebytes(data.data).decode().replace('\n', '') - }) + extfiles.append({'title': extfile.title, + 'description': extfile.description}) + for lang, data in extfile.data.items(): + content_type = data.content_type + if isinstance(content_type, bytes): + content_type = content_type.decode() + if content_type.startswith('image/') or \ + content_type.startswith('audio/') or \ + content_type.startswith('video/'): + continue + attachments.append({ + 'content_type': content_type, + 'name': data.filename, + 'language': lang, + 'content': base64.encodebytes(data.data).decode().replace('\n', '') + }) result = {'extfile': extfiles} if attachments: result.update({ diff -r 548b72a430c7 -r ea4bfc8f6278 src/pyams_content_es/component/gallery.py --- a/src/pyams_content_es/component/gallery.py Mon Sep 11 14:55:31 2017 +0200 +++ b/src/pyams_content_es/component/gallery.py Mon Sep 11 14:55:53 2017 +0200 @@ -16,8 +16,7 @@ # import standard library # import interfaces -from pyams_content.component.gallery.interfaces import IGalleryContainerTarget, IGalleryContainer, IGallery, \ - IGalleryFileInfo +from pyams_content.component.gallery.interfaces import IGallery, IGalleryTarget from pyams_content_es.interfaces import IDocumentIndexInfo # import packages @@ -37,34 +36,32 @@ info=description) info[lang] = new_info for image in gallery.values(): - image_info = IGalleryFileInfo(image, None) - if image_info is not None: - for lang, title in (image_info.title or {}).items(): - if title: - new_info = '{old}\n{info}'.format(old=info.get(lang, ''), - info=title) - info[lang] = new_info - for lang, description in (image_info.description or {}).items(): - if description: - new_info = '{old}\n{info}'.format(old=info.get(lang, ''), - info=description) - info[lang] = new_info - for lang, comments in (image_info.author_comments or {}).items(): - if comments: - new_info = '{old}\n{info}'.format(old=info.get(lang, ''), - info=comments) - info[lang] = new_info + for lang, title in (image.title or {}).items(): + if title: + new_info = '{old}\n{info}'.format(old=info.get(lang, ''), + info=title) + info[lang] = new_info + for lang, description in (image.description or {}).items(): + if description: + new_info = '{old}\n{info}'.format(old=info.get(lang, ''), + info=description) + info[lang] = new_info + for lang, comments in (image.author_comments or {}).items(): + if comments: + new_info = '{old}\n{info}'.format(old=info.get(lang, ''), + info=comments) + info[lang] = new_info return info -@adapter_config(name='gallery', context=IGalleryContainerTarget, provides=IDocumentIndexInfo) -def GalleryContainerTargetIndexInfo(content): +@adapter_config(name='gallery', context=IGalleryTarget, provides=IDocumentIndexInfo) +def GalleryTargetIndexInfo(content): """Gallery container index info""" body = {} - for gallery in IGalleryContainer(content).values(): - info = IDocumentIndexInfo(gallery, None) - if info is not None: - for lang, info_body in info.items(): - body[lang] = '{old}\n{body}'.format(old=body.get(lang, ''), - body=info_body) + gallery = IGallery(content) + info = IDocumentIndexInfo(gallery, None) + if info is not None: + for lang, info_body in info.items(): + body[lang] = '{old}\n{body}'.format(old=body.get(lang, ''), + body=info_body) return {'gallery': body} diff -r 548b72a430c7 -r ea4bfc8f6278 src/pyams_content_es/component/paragraph.py --- a/src/pyams_content_es/component/paragraph.py Mon Sep 11 14:55:31 2017 +0200 +++ b/src/pyams_content_es/component/paragraph.py Mon Sep 11 14:55:53 2017 +0200 @@ -16,8 +16,10 @@ # import standard library # import interfaces -from pyams_content.component.paragraph.interfaces import IParagraphContainer, IParagraphContainerTarget, IHTMLParagraph, \ - IIllustrationParagraph +from pyams_content.component.illustration.interfaces import IIllustrationParagraph +from pyams_content.component.paragraph.interfaces import IParagraphContainer, IParagraphContainerTarget +from pyams_content.component.paragraph.interfaces.header import IHeaderParagraph +from pyams_content.component.paragraph.interfaces.html import IHTMLParagraph from pyams_content_es.interfaces import IDocumentIndexInfo # import packages @@ -25,6 +27,16 @@ from pyams_utils.html import html_to_text +@adapter_config(context=IHeaderParagraph, provides=IDocumentIndexInfo) +def HeaderParagraphIndexInfo(paragraph): + """Header paragraph index info""" + info = {} + for lang, header in paragraph.header.items(): + if header: + info.setdefault(lang, header) + return info + + @adapter_config(context=IHTMLParagraph, provides=IDocumentIndexInfo) def HTMLParagraphIndexInfo(paragraph): """HTML paragraph index info""" @@ -47,7 +59,7 @@ for lang, title in paragraph.title.items(): if title: info.setdefault(lang, title) - for lang, legend in paragraph.legend.items(): + for lang, legend in paragraph.alt_title.items(): if legend: new_legend = '{old}\n{legend}'.format(old=info.get(lang, ''), legend=legend)