imio.smartweb.core 1.2.84__py3-none-any.whl → 1.2.86__py3-none-any.whl
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- imio/smartweb/core/contents/sections/common_templates/carousel.pt +1 -0
- imio/smartweb/core/contents/sections/common_templates/table.pt +1 -0
- imio/smartweb/core/contents/sections/configure.zcml +18 -0
- imio/smartweb/core/contents/sections/events/view.py +5 -0
- imio/smartweb/core/contents/sections/files/view.py +10 -0
- imio/smartweb/core/contents/sections/gallery/view.pt +1 -1
- imio/smartweb/core/contents/sections/gallery/views.py +11 -0
- imio/smartweb/core/contents/sections/links/view.py +10 -0
- imio/smartweb/core/contents/sections/macros.pt +6 -0
- imio/smartweb/core/contents/sections/news/view.py +5 -0
- imio/smartweb/core/contents/sections/video/views.py +52 -1
- imio/smartweb/core/contents/sections/views.py +12 -0
- imio/smartweb/core/tests/resources/json_news_raw_mock.json +361 -0
- imio/smartweb/core/tests/test_section_gallery.py +75 -0
- imio/smartweb/core/tests/test_sections.py +15 -3
- imio/smartweb/core/tests/test_utils.py +19 -0
- imio/smartweb/core/utils.py +18 -0
- {imio.smartweb.core-1.2.84.dist-info → imio.smartweb.core-1.2.86.dist-info}/METADATA +40 -2
- {imio.smartweb.core-1.2.84.dist-info → imio.smartweb.core-1.2.86.dist-info}/RECORD +25 -23
- {imio.smartweb.core-1.2.84.dist-info → imio.smartweb.core-1.2.86.dist-info}/WHEEL +1 -1
- /imio.smartweb.core-1.2.84-py3.12-nspkg.pth → /imio.smartweb.core-1.2.86-py3.12-nspkg.pth +0 -0
- {imio.smartweb.core-1.2.84.dist-info → imio.smartweb.core-1.2.86.dist-info}/LICENSE.GPL +0 -0
- {imio.smartweb.core-1.2.84.dist-info → imio.smartweb.core-1.2.86.dist-info}/LICENSE.rst +0 -0
- {imio.smartweb.core-1.2.84.dist-info → imio.smartweb.core-1.2.86.dist-info}/namespace_packages.txt +0 -0
- {imio.smartweb.core-1.2.84.dist-info → imio.smartweb.core-1.2.86.dist-info}/top_level.txt +0 -0
@@ -49,6 +49,7 @@
|
|
49
49
|
<a tal:omit-tag="not: item/url"
|
50
50
|
tal:attributes="href item/url;
|
51
51
|
class item/container_id | nothing;
|
52
|
+
title python:view.a_tag_item_title(item);
|
52
53
|
target python:'_blank' if (open_in_new_tab and not can_edit_sections) else ''">
|
53
54
|
<div class="swiper-image"
|
54
55
|
tal:condition="python: item_has_image and show_lead_image"
|
@@ -59,6 +59,7 @@
|
|
59
59
|
tal:attributes="class string:table_display ${item/container_id | nothing} ${item/smartweb_type | nothing};"
|
60
60
|
>
|
61
61
|
<a tal:attributes="class python:'table_image no-image' if no_icon_no_image else 'table_image';
|
62
|
+
title python:view.a_tag_item_title(item);
|
62
63
|
href python:view.retrieve_item_url(item);
|
63
64
|
target python:'_blank' if (open_in_new_tab and not can_edit_sections) else '';">
|
64
65
|
<tal:if tal:condition="show_lead_image">
|
@@ -54,6 +54,24 @@
|
|
54
54
|
layer="imio.smartweb.core.interfaces.IImioSmartwebCoreLayer"
|
55
55
|
/>
|
56
56
|
|
57
|
+
<browser:page
|
58
|
+
name="refresh_modification_date"
|
59
|
+
for="imio.smartweb.core.contents.ISectionNews"
|
60
|
+
class=".views.SectionView"
|
61
|
+
attribute="refresh_modification_date"
|
62
|
+
permission="cmf.ModifyPortalContent"
|
63
|
+
layer="imio.smartweb.core.interfaces.IImioSmartwebCoreLayer"
|
64
|
+
/>
|
65
|
+
|
66
|
+
<browser:page
|
67
|
+
name="refresh_modification_date"
|
68
|
+
for="imio.smartweb.core.contents.ISectionEvents"
|
69
|
+
class=".views.SectionView"
|
70
|
+
attribute="refresh_modification_date"
|
71
|
+
permission="cmf.ModifyPortalContent"
|
72
|
+
layer="imio.smartweb.core.interfaces.IImioSmartwebCoreLayer"
|
73
|
+
/>
|
74
|
+
|
57
75
|
<browser:page
|
58
76
|
for="*"
|
59
77
|
name="getsizes"
|
@@ -2,6 +2,7 @@
|
|
2
2
|
|
3
3
|
from datetime import date
|
4
4
|
from dateutil.parser import parse
|
5
|
+
from DateTime import DateTime
|
5
6
|
from imio.smartweb.common.utils import translate_vocabulary_term
|
6
7
|
from imio.smartweb.core.config import EVENTS_URL
|
7
8
|
from imio.smartweb.core.contents.sections.views import CarouselOrTableSectionView
|
@@ -9,6 +10,7 @@ from imio.smartweb.core.contents.sections.views import HashableJsonSectionView
|
|
9
10
|
from imio.smartweb.core.utils import batch_results
|
10
11
|
from imio.smartweb.core.utils import get_json
|
11
12
|
from imio.smartweb.core.utils import hash_md5
|
13
|
+
from imio.smartweb.core.utils import remove_cache_key
|
12
14
|
from plone import api
|
13
15
|
from Products.CMFPlone.utils import normalizeString
|
14
16
|
|
@@ -26,6 +28,7 @@ class EventsView(CarouselOrTableSectionView, HashableJsonSectionView):
|
|
26
28
|
selected_item = "&".join(
|
27
29
|
[f"UID={event_uid}" for event_uid in specific_related_events]
|
28
30
|
)
|
31
|
+
modified_hash = hash_md5(str(self.context.modification_date))
|
29
32
|
params = [
|
30
33
|
selected_item,
|
31
34
|
"metadata_fields=container_uid",
|
@@ -37,6 +40,7 @@ class EventsView(CarouselOrTableSectionView, HashableJsonSectionView):
|
|
37
40
|
"metadata_fields=has_leadimage",
|
38
41
|
"metadata_fields=modified",
|
39
42
|
"metadata_fields=UID",
|
43
|
+
f"cache_key={modified_hash}",
|
40
44
|
f"event_dates.query={today}",
|
41
45
|
"event_dates.range=min",
|
42
46
|
f"b_size={max_items}",
|
@@ -50,6 +54,7 @@ class EventsView(CarouselOrTableSectionView, HashableJsonSectionView):
|
|
50
54
|
]
|
51
55
|
url = "{}/@events?{}".format(EVENTS_URL, "&".join(params))
|
52
56
|
self.json_data = get_json(url)
|
57
|
+
self.json_data = remove_cache_key(self.json_data)
|
53
58
|
self.refresh_modification_date()
|
54
59
|
if self.json_data is None or len(self.json_data.get("items", [])) == 0:
|
55
60
|
return []
|
@@ -3,9 +3,11 @@ from imio.smartweb.core.contents import IPublication
|
|
3
3
|
from imio.smartweb.core.contents.sections.views import CarouselOrTableSectionView
|
4
4
|
from imio.smartweb.core.utils import batch_results
|
5
5
|
from imio.smartweb.core.utils import get_scale_url
|
6
|
+
from imio.smartweb.locales import SmartwebMessageFactory as _
|
6
7
|
from plone import api
|
7
8
|
from plone.protect.interfaces import IDisableCSRFProtection
|
8
9
|
from zope.component import queryMultiAdapter
|
10
|
+
from zope.i18n import translate
|
9
11
|
from zope.interface import alsoProvides
|
10
12
|
|
11
13
|
|
@@ -32,6 +34,7 @@ class FilesView(CarouselOrTableSectionView):
|
|
32
34
|
"url": url,
|
33
35
|
"image": scale_url,
|
34
36
|
"has_image": has_image,
|
37
|
+
"open_in_new_tab": True,
|
35
38
|
}
|
36
39
|
dict_item["item_infos"] = (
|
37
40
|
None if file_view is None else file_view.human_readable_size()
|
@@ -62,3 +65,10 @@ class FilesView(CarouselOrTableSectionView):
|
|
62
65
|
for prop in extra_properties:
|
63
66
|
dict_item[prop] = getattr(item, prop, None)
|
64
67
|
return dict_item
|
68
|
+
|
69
|
+
def a_tag_item_title(self, item):
|
70
|
+
# Files always open in a new tab
|
71
|
+
title = item.get("title") or ""
|
72
|
+
current_lang = api.portal.get_current_language()[:2]
|
73
|
+
new_tab_txt = translate(_("New tab"), target_language=current_lang)
|
74
|
+
return f"{title} ({new_tab_txt})"
|
@@ -11,3 +11,14 @@ class GalleryView(SectionView, PhotoGallery):
|
|
11
11
|
def get_scale_url(self, item, scale, orientation="paysage"):
|
12
12
|
request = self.request
|
13
13
|
return get_scale_url(item, request, "image", scale, orientation)
|
14
|
+
|
15
|
+
def alt_label(self, item):
|
16
|
+
title = item.title or ""
|
17
|
+
description = item.description or ""
|
18
|
+
# Accessibility: if title is the same as the filename, return empty string because, filename is not a good practice in alt tag for an img.
|
19
|
+
if item.image and title == item.image.filename and len(description) == 0:
|
20
|
+
title = ""
|
21
|
+
# Accessibility : Return description if longer is same or greater than title.
|
22
|
+
if len(description) >= len(title):
|
23
|
+
return description
|
24
|
+
return title
|
@@ -3,7 +3,9 @@
|
|
3
3
|
from imio.smartweb.core.contents.sections.views import CarouselOrTableSectionView
|
4
4
|
from imio.smartweb.core.utils import batch_results
|
5
5
|
from imio.smartweb.core.utils import get_scale_url
|
6
|
+
from imio.smartweb.locales import SmartwebMessageFactory as _
|
6
7
|
from plone import api
|
8
|
+
from zope.i18n import translate
|
7
9
|
|
8
10
|
|
9
11
|
class LinksView(CarouselOrTableSectionView):
|
@@ -41,3 +43,11 @@ class LinksView(CarouselOrTableSectionView):
|
|
41
43
|
}
|
42
44
|
)
|
43
45
|
return batch_results(results, self.context.nb_results_by_batch)
|
46
|
+
|
47
|
+
def a_tag_item_title(self, item):
|
48
|
+
title = item.get("title") or ""
|
49
|
+
if item.get("open_in_new_tab", False):
|
50
|
+
current_lang = api.portal.get_current_language()[:2]
|
51
|
+
new_tab_txt = translate(_("New tab"), target_language=current_lang)
|
52
|
+
return f"{title} ({new_tab_txt})"
|
53
|
+
return title
|
@@ -98,6 +98,12 @@
|
|
98
98
|
</span>
|
99
99
|
</tal:dates>
|
100
100
|
|
101
|
+
<tal:if tal:condition="python:context.portal_type in ['imio.smartweb.SectionNews', 'imio.smartweb.SectionEvents']">
|
102
|
+
<span class="glyphicon-repeat glyphicon"></span>
|
103
|
+
<a tal:attributes="href string:${context/absolute_url}/refresh_modification_date"
|
104
|
+
i18n:translate="">Refresh section</a>
|
105
|
+
</tal:if>
|
106
|
+
|
101
107
|
</div>
|
102
108
|
</div>
|
103
109
|
|
@@ -1,5 +1,6 @@
|
|
1
1
|
# -*- coding: utf-8 -*-
|
2
2
|
|
3
|
+
from DateTime import DateTime
|
3
4
|
from imio.smartweb.common.utils import translate_vocabulary_term
|
4
5
|
from imio.smartweb.core.config import NEWS_URL
|
5
6
|
from imio.smartweb.core.contents.sections.views import CarouselOrTableSectionView
|
@@ -7,6 +8,7 @@ from imio.smartweb.core.contents.sections.views import HashableJsonSectionView
|
|
7
8
|
from imio.smartweb.core.utils import batch_results
|
8
9
|
from imio.smartweb.core.utils import get_json
|
9
10
|
from imio.smartweb.core.utils import hash_md5
|
11
|
+
from imio.smartweb.core.utils import remove_cache_key
|
10
12
|
from plone import api
|
11
13
|
from Products.CMFPlone.utils import normalizeString
|
12
14
|
|
@@ -23,6 +25,7 @@ class NewsView(CarouselOrTableSectionView, HashableJsonSectionView):
|
|
23
25
|
selected_item = "&".join(
|
24
26
|
[f"UID={newsitem_uid}" for newsitem_uid in specific_related_newsitems]
|
25
27
|
)
|
28
|
+
modified_hash = hash_md5(str(self.context.modification_date))
|
26
29
|
params = [
|
27
30
|
selected_item,
|
28
31
|
"portal_type=imio.news.NewsItem",
|
@@ -34,6 +37,7 @@ class NewsView(CarouselOrTableSectionView, HashableJsonSectionView):
|
|
34
37
|
"metadata_fields=modified",
|
35
38
|
"metadata_fields=effective",
|
36
39
|
"metadata_fields=UID",
|
40
|
+
f"cache_key={modified_hash}",
|
37
41
|
f"sort_limit={max_items}",
|
38
42
|
]
|
39
43
|
current_lang = api.portal.get_current_language()[:2]
|
@@ -46,6 +50,7 @@ class NewsView(CarouselOrTableSectionView, HashableJsonSectionView):
|
|
46
50
|
]
|
47
51
|
url = "{}/@search?{}".format(NEWS_URL, "&".join(params))
|
48
52
|
self.json_data = get_json(url)
|
53
|
+
self.json_data = remove_cache_key(self.json_data)
|
49
54
|
self.refresh_modification_date()
|
50
55
|
if self.json_data is None or len(self.json_data.get("items", [])) == 0:
|
51
56
|
return []
|
@@ -1,10 +1,61 @@
|
|
1
1
|
# -*- coding: utf-8 -*-
|
2
2
|
|
3
3
|
from embeddify import Embedder
|
4
|
+
from embeddify import Vimeo
|
5
|
+
from embeddify import YouTube
|
6
|
+
from embeddify.embeddify import STANDARD_PLUGINS
|
4
7
|
from imio.smartweb.core.contents.sections.views import SectionView
|
8
|
+
from imio.smartweb.locales import SmartwebMessageFactory as _
|
9
|
+
from plone import api
|
10
|
+
from zope.i18n import translate
|
11
|
+
|
12
|
+
import html
|
5
13
|
|
6
14
|
|
7
15
|
class VideoView(SectionView):
|
8
16
|
def get_embed_video(self, width=800, height=600):
|
9
|
-
|
17
|
+
plugins = STANDARD_PLUGINS
|
18
|
+
plugins = [
|
19
|
+
SmartwebYoutube() if isinstance(plugin, YouTube) else plugin
|
20
|
+
for plugin in plugins
|
21
|
+
]
|
22
|
+
plugins = [
|
23
|
+
SmartwebVimeo() if isinstance(plugin, Vimeo) else plugin
|
24
|
+
for plugin in plugins
|
25
|
+
]
|
26
|
+
embedder = Embedder(width=width, height=height, plugins=plugins)
|
10
27
|
return embedder(self.context.video_url, params=dict(autoplay=False))
|
28
|
+
|
29
|
+
|
30
|
+
class SmartwebYoutube(YouTube):
|
31
|
+
|
32
|
+
def do_request(self, parts, config):
|
33
|
+
if self.test(parts):
|
34
|
+
res = super(SmartwebYoutube, self).do_request(parts, config)
|
35
|
+
title = res.get("title", "")
|
36
|
+
current_lang = api.portal.get_current_language()[:2]
|
37
|
+
additional_accessibility_info = translate(
|
38
|
+
_("Youtube video"), target_language=current_lang
|
39
|
+
)
|
40
|
+
res["title"] = f"{title} ({additional_accessibility_info})"
|
41
|
+
if title != "":
|
42
|
+
res["html"] = res["html"].replace(html.escape(title), res["title"])
|
43
|
+
return res
|
44
|
+
return
|
45
|
+
|
46
|
+
|
47
|
+
class SmartwebVimeo(Vimeo):
|
48
|
+
|
49
|
+
def do_request(self, parts, config):
|
50
|
+
if self.test(parts):
|
51
|
+
res = super(SmartwebVimeo, self).do_request(parts, config)
|
52
|
+
title = res.get("title", "")
|
53
|
+
current_lang = api.portal.get_current_language()[:2]
|
54
|
+
additional_accessibility_info = translate(
|
55
|
+
_("Vimeo video"), target_language=current_lang
|
56
|
+
)
|
57
|
+
res["title"] = f"{title} ({additional_accessibility_info})"
|
58
|
+
if title != "":
|
59
|
+
res["html"] = res["html"].replace(html.escape(title), res["title"])
|
60
|
+
return res
|
61
|
+
return
|
@@ -58,6 +58,14 @@ class SectionView(BrowserView):
|
|
58
58
|
api.portal.show_message(_("Section title has been shown"), self.request)
|
59
59
|
self.redirect_to_section(self.context.id)
|
60
60
|
|
61
|
+
def refresh_modification_date(self):
|
62
|
+
alsoProvides(self.request, IDisableCSRFProtection)
|
63
|
+
modified(self.context)
|
64
|
+
api.portal.show_message(
|
65
|
+
_("Section modification date has been refreshed"), self.request
|
66
|
+
)
|
67
|
+
self.redirect_to_section(self.context.id)
|
68
|
+
|
61
69
|
@property
|
62
70
|
def display_container_title(self):
|
63
71
|
return False
|
@@ -100,6 +108,10 @@ class SectionView(BrowserView):
|
|
100
108
|
)
|
101
109
|
return json.dumps({"id": section_size, "title": size_txt})
|
102
110
|
|
111
|
+
def a_tag_item_title(self, item):
|
112
|
+
title = item.get("title") or ""
|
113
|
+
return title
|
114
|
+
|
103
115
|
|
104
116
|
class CarouselOrTableSectionView(SectionView):
|
105
117
|
"""Section view that can display a carousel"""
|
@@ -0,0 +1,361 @@
|
|
1
|
+
{
|
2
|
+
"@id": "http://localhost:8080/Plone/@search?selected_news_folders=3b1a50f17b7047f7bb0fc75cf5ad7329&portal_type=imio.news.NewsItem&metadata_fields=category_title&metadata_fields=topics&metadata_fields=has_leadimage&metadata_fields=UID&metadata_fields=container_uid&metadata_fields=local_category&metadata_fields=modified&metadata_fields=effective&cache_key=0158244a017b01923cecc32d0613e46e",
|
3
|
+
"batching": {
|
4
|
+
"@id": "http://localhost:8080/Plone/@search?selected_news_folders=3b1a50f17b7047f7bb0fc75cf5ad7329&portal_type=imio.news.NewsItem&metadata_fields=category_title&metadata_fields=topics&metadata_fields=has_leadimage&metadata_fields=UID&metadata_fields=container_uid&metadata_fields=local_category&metadata_fields=modified&metadata_fields=effective&cache_key=0158244a017b01923cecc32d0613e46e&sort_limit=9&sort_on=effective&sort_order=descending",
|
5
|
+
"first": "http://localhost:8080/Plone/@search?b_start=0&selected_news_folders=3b1a50f17b7047f7bb0fc75cf5ad7329&portal_type=imio.news.NewsItem&metadata_fields=category_title&metadata_fields=topics&metadata_fields=has_leadimage&metadata_fields=UID&metadata_fields=container_uid&metadata_fields=local_category&metadata_fields=modified&metadata_fields=effective&cache_key=0158244a017b01923cecc32d0613e46e&sort_limit=9&sort_on=effective&sort_order=descending",
|
6
|
+
"last": "http://localhost:8080/Plone/@search?b_start=25&selected_news_folders=3b1a50f17b7047f7bb0fc75cf5ad7329&portal_type=imio.news.NewsItem&metadata_fields=category_title&metadata_fields=topics&metadata_fields=has_leadimage&metadata_fields=UID&metadata_fields=container_uid&metadata_fields=local_category&metadata_fields=modified&metadata_fields=effective&cache_key=0158244a017b01923cecc32d0613e46e&sort_limit=9&sort_on=effective&sort_order=descending",
|
7
|
+
"next": "http://localhost:8080/Plone/@search?b_start=25&selected_news_folders=3b1a50f17b7047f7bb0fc75cf5ad7329&portal_type=imio.news.NewsItem&metadata_fields=category_title&metadata_fields=topics&metadata_fields=has_leadimage&metadata_fields=UID&metadata_fields=container_uid&metadata_fields=local_category&metadata_fields=modified&metadata_fields=effective&cache_key=0158244a017b01923cecc32d0613e46e&sort_limit=9&sort_on=effective&sort_order=descending"
|
8
|
+
},
|
9
|
+
"items": [
|
10
|
+
{
|
11
|
+
"@id": "http://localhost:8080/Plone/belleville/commune/66ae76b8f652426089e237ee603386a2",
|
12
|
+
"@type": "imio.news.NewsItem",
|
13
|
+
"UID": "0505534d249c48a2b99713a7ac211ebe",
|
14
|
+
"category_title": null,
|
15
|
+
"container_uid": "f110a339e3b84561bc61962a9742b705",
|
16
|
+
"description": "Cybers\u00e9curit\u00e9 et e-gouvernement seront au coeur de l'iMio Day 2025, journ\u00e9e de conf\u00e9rences et d'ateliers interactifs pour les pouvoirs locaux wallons.",
|
17
|
+
"effective": "2025-01-30T07:30:00+00:00",
|
18
|
+
"has_leadimage": true,
|
19
|
+
"image_field": null,
|
20
|
+
"image_scales": {
|
21
|
+
"image": [
|
22
|
+
{
|
23
|
+
"content-type": "image/jpeg",
|
24
|
+
"download": "@@images/image-800-63339b1cf1fa99e483e2d22118838976.jpeg",
|
25
|
+
"filename": "imio-day-news.jpg",
|
26
|
+
"height": 567,
|
27
|
+
"scales": {
|
28
|
+
"carre_affiche": {
|
29
|
+
"download": "@@images/image-750-9b875e4ec5fac53cc1c3819436f9f6de.jpeg",
|
30
|
+
"height": 531,
|
31
|
+
"width": 750
|
32
|
+
},
|
33
|
+
"carre_liste": {
|
34
|
+
"download": "@@images/image-167-75c17e711259f2bf690953f8da94e166.jpeg",
|
35
|
+
"height": 118,
|
36
|
+
"width": 167
|
37
|
+
},
|
38
|
+
"carre_vignette": {
|
39
|
+
"download": "@@images/image-430-0fe2e5e1f941ab0a06f168e36f0e2354.jpeg",
|
40
|
+
"height": 304,
|
41
|
+
"width": 430
|
42
|
+
},
|
43
|
+
"icon": {
|
44
|
+
"download": "@@images/image-32-63570e5e551edbf00756dc83f3c175b8.jpeg",
|
45
|
+
"height": 22,
|
46
|
+
"width": 32
|
47
|
+
},
|
48
|
+
"large": {
|
49
|
+
"download": "@@images/image-768-6ff498338f7766f67c1706aab38c499a.jpeg",
|
50
|
+
"height": 544,
|
51
|
+
"width": 768
|
52
|
+
},
|
53
|
+
"listing": {
|
54
|
+
"download": "@@images/image-16-19207497efaeee9c1cbcfacc8b34a0ca.jpeg",
|
55
|
+
"height": 11,
|
56
|
+
"width": 16
|
57
|
+
},
|
58
|
+
"mini": {
|
59
|
+
"download": "@@images/image-200-e051498e2896e0b0e0e238f390d7e0ad.jpeg",
|
60
|
+
"height": 141,
|
61
|
+
"width": 200
|
62
|
+
},
|
63
|
+
"paysage_affiche": {
|
64
|
+
"download": "@@images/image-750-1bed9c113c6fb72251eece6b3715ad12.jpeg",
|
65
|
+
"height": 448,
|
66
|
+
"width": 632
|
67
|
+
},
|
68
|
+
"paysage_liste": {
|
69
|
+
"download": "@@images/image-167-cb1fbeb03984f81f82331d95f7220b62.jpeg",
|
70
|
+
"height": 100,
|
71
|
+
"width": 141
|
72
|
+
},
|
73
|
+
"paysage_vignette": {
|
74
|
+
"download": "@@images/image-430-eb01854c72f779c0e1af385cbe70de06.jpeg",
|
75
|
+
"height": 257,
|
76
|
+
"width": 363
|
77
|
+
},
|
78
|
+
"portrait_affiche": {
|
79
|
+
"download": "@@images/image-448-3bdd59fe0bc2c51557a362bcc7d1698e.jpeg",
|
80
|
+
"height": 317,
|
81
|
+
"width": 448
|
82
|
+
},
|
83
|
+
"portrait_liste": {
|
84
|
+
"download": "@@images/image-222-70fc7ff043421cbe10a50b9149bb40f0.jpeg",
|
85
|
+
"height": 157,
|
86
|
+
"width": 222
|
87
|
+
},
|
88
|
+
"portrait_vignette": {
|
89
|
+
"download": "@@images/image-448-3bdd59fe0bc2c51557a362bcc7d1698e.jpeg",
|
90
|
+
"height": 317,
|
91
|
+
"width": 448
|
92
|
+
},
|
93
|
+
"preview": {
|
94
|
+
"download": "@@images/image-400-592dedf61a5e8cd7e32cd309db88ccdc.jpeg",
|
95
|
+
"height": 283,
|
96
|
+
"width": 400
|
97
|
+
},
|
98
|
+
"thumb": {
|
99
|
+
"download": "@@images/image-128-558227cc08bb21c7d0b1ffa9bf0e27bd.jpeg",
|
100
|
+
"height": 90,
|
101
|
+
"width": 128
|
102
|
+
},
|
103
|
+
"tile": {
|
104
|
+
"download": "@@images/image-64-30d47052707adb48f3ec0e8b2b31b4a9.jpeg",
|
105
|
+
"height": 45,
|
106
|
+
"width": 64
|
107
|
+
}
|
108
|
+
},
|
109
|
+
"size": 222334,
|
110
|
+
"width": 800
|
111
|
+
}
|
112
|
+
]
|
113
|
+
},
|
114
|
+
"local_category": null,
|
115
|
+
"modified": "2025-01-30T07:47:51+00:00",
|
116
|
+
"review_state": "published",
|
117
|
+
"title": "Ne ratez pas l'iMio Day du 13 f\u00e9vrier 2025 !",
|
118
|
+
"topics": null,
|
119
|
+
"type_title": "Actualit\u00e9",
|
120
|
+
"usefull_container_id": "commune",
|
121
|
+
"usefull_container_title": "Actualit\u00e9s de la commune"
|
122
|
+
},
|
123
|
+
{
|
124
|
+
"@id": "http://localhost:8080/Plone/belleville/commune/0767749eaf85441a8179303768f48ef2",
|
125
|
+
"@type": "imio.news.NewsItem",
|
126
|
+
"UID": "0767749eaf85441a8179303768f48ef2",
|
127
|
+
"category_title": null,
|
128
|
+
"container_uid": "f110a339e3b84561bc61962a9742b705",
|
129
|
+
"description": "",
|
130
|
+
"effective": "2025-01-14T14:07:06+00:00",
|
131
|
+
"has_leadimage": true,
|
132
|
+
"image_field": null,
|
133
|
+
"image_scales": {
|
134
|
+
"image": [
|
135
|
+
{
|
136
|
+
"content-type": "image/jpeg",
|
137
|
+
"download": "@@images/image-1920-0d28d8fef7ef4c6f46a185fd428a8a01.jpeg",
|
138
|
+
"filename": "motion-blur-g10d7a49bc_1920.jpg",
|
139
|
+
"height": 1279,
|
140
|
+
"scales": {
|
141
|
+
"banner": {
|
142
|
+
"download": "@@images/image-1920-1a0c7ac40882f46d5e5bd82542cd2bc3.jpeg",
|
143
|
+
"height": 1279,
|
144
|
+
"width": 1920
|
145
|
+
},
|
146
|
+
"carre_affiche": {
|
147
|
+
"download": "@@images/image-750-e2037c7eadaf2518e6fabe9c55570a43.jpeg",
|
148
|
+
"height": 499,
|
149
|
+
"width": 750
|
150
|
+
},
|
151
|
+
"carre_liste": {
|
152
|
+
"download": "@@images/image-167-b28c2562e2a234fb758a272e8cd2cfb8.jpeg",
|
153
|
+
"height": 111,
|
154
|
+
"width": 167
|
155
|
+
},
|
156
|
+
"carre_vignette": {
|
157
|
+
"download": "@@images/image-430-406b324c9324298c12da47de2e809bd3.jpeg",
|
158
|
+
"height": 286,
|
159
|
+
"width": 430
|
160
|
+
},
|
161
|
+
"icon": {
|
162
|
+
"download": "@@images/image-32-6fe71d6d2b377d659dbd031d3640eee8.jpeg",
|
163
|
+
"height": 21,
|
164
|
+
"width": 32
|
165
|
+
},
|
166
|
+
"large": {
|
167
|
+
"download": "@@images/image-768-c533dfefc4dab171ab67f91675346f37.jpeg",
|
168
|
+
"height": 511,
|
169
|
+
"width": 768
|
170
|
+
},
|
171
|
+
"listing": {
|
172
|
+
"download": "@@images/image-16-203636a735d8132c4e0be847b85343a6.jpeg",
|
173
|
+
"height": 10,
|
174
|
+
"width": 16
|
175
|
+
},
|
176
|
+
"mini": {
|
177
|
+
"download": "@@images/image-200-73a7abcb2d44f086523030a10902a972.jpeg",
|
178
|
+
"height": 133,
|
179
|
+
"width": 200
|
180
|
+
},
|
181
|
+
"paysage_affiche": {
|
182
|
+
"download": "@@images/image-750-4d6fa1004b2c148eaa85074c51bd26d8.jpeg",
|
183
|
+
"height": 448,
|
184
|
+
"width": 673
|
185
|
+
},
|
186
|
+
"paysage_liste": {
|
187
|
+
"download": "@@images/image-167-aa74a3ecc21959d849aa60e795b00cad.jpeg",
|
188
|
+
"height": 100,
|
189
|
+
"width": 150
|
190
|
+
},
|
191
|
+
"paysage_vignette": {
|
192
|
+
"download": "@@images/image-430-28ef12d29b66bb5c65b6f70b58943fc1.jpeg",
|
193
|
+
"height": 257,
|
194
|
+
"width": 386
|
195
|
+
},
|
196
|
+
"portrait_affiche": {
|
197
|
+
"download": "@@images/image-448-8613bdd585e702eba2a4a4d5fa66b013.jpeg",
|
198
|
+
"height": 298,
|
199
|
+
"width": 448
|
200
|
+
},
|
201
|
+
"portrait_liste": {
|
202
|
+
"download": "@@images/image-222-6f24b9a8a93b3d30e2dfb352962e9937.jpeg",
|
203
|
+
"height": 147,
|
204
|
+
"width": 222
|
205
|
+
},
|
206
|
+
"portrait_vignette": {
|
207
|
+
"download": "@@images/image-448-8613bdd585e702eba2a4a4d5fa66b013.jpeg",
|
208
|
+
"height": 298,
|
209
|
+
"width": 448
|
210
|
+
},
|
211
|
+
"preview": {
|
212
|
+
"download": "@@images/image-400-86c0a78163a36fb1fccff82b0cd58781.jpeg",
|
213
|
+
"height": 266,
|
214
|
+
"width": 400
|
215
|
+
},
|
216
|
+
"thumb": {
|
217
|
+
"download": "@@images/image-128-9e55ef22fea075a0211c335f39cdd91a.jpeg",
|
218
|
+
"height": 85,
|
219
|
+
"width": 128
|
220
|
+
},
|
221
|
+
"tile": {
|
222
|
+
"download": "@@images/image-64-570f49fe16b3a55e953eb555e8002cc5.jpeg",
|
223
|
+
"height": 42,
|
224
|
+
"width": 64
|
225
|
+
}
|
226
|
+
},
|
227
|
+
"size": 261649,
|
228
|
+
"width": 1920
|
229
|
+
}
|
230
|
+
]
|
231
|
+
},
|
232
|
+
"local_category": null,
|
233
|
+
"modified": "2025-01-14T14:07:06+00:00",
|
234
|
+
"review_state": "published",
|
235
|
+
"title": "Le Caching Web : Optimisation des Performances",
|
236
|
+
"topics": null,
|
237
|
+
"type_title": "Actualit\u00e9",
|
238
|
+
"usefull_container_id": "commune",
|
239
|
+
"usefull_container_title": "Actualit\u00e9s de la commune"
|
240
|
+
},
|
241
|
+
{
|
242
|
+
"@id": "http://localhost:8080/Plone/belleville/commune/01678b36a5c14de08c0048a4e60960b6",
|
243
|
+
"@type": "imio.news.NewsItem",
|
244
|
+
"UID": "01678b36a5c14de08c0048a4e60960b6",
|
245
|
+
"category_title": null,
|
246
|
+
"container_uid": "f110a339e3b84561bc61962a9742b705",
|
247
|
+
"description": "Cette actualit\u00e9 est vraiment urgente",
|
248
|
+
"effective": "2025-01-14T12:40:00+00:00",
|
249
|
+
"has_leadimage": true,
|
250
|
+
"image_field": null,
|
251
|
+
"image_scales": {
|
252
|
+
"image": [
|
253
|
+
{
|
254
|
+
"content-type": "image/jpeg",
|
255
|
+
"download": "@@images/image-1920-bdb33a542ba3c3fa6a22a42b852d2ef5.jpeg",
|
256
|
+
"filename": "meadow-g92ecd61e0_1920.jpg",
|
257
|
+
"height": 1280,
|
258
|
+
"scales": {
|
259
|
+
"banner": {
|
260
|
+
"download": "@@images/image-1920-b65b0609f5d6758fbacbde2b23557b06.jpeg",
|
261
|
+
"height": 1280,
|
262
|
+
"width": 1920
|
263
|
+
},
|
264
|
+
"carre_affiche": {
|
265
|
+
"download": "@@images/image-750-b1582bdedef66b480c23485c7127b6be.jpeg",
|
266
|
+
"height": 500,
|
267
|
+
"width": 750
|
268
|
+
},
|
269
|
+
"carre_liste": {
|
270
|
+
"download": "@@images/image-167-c8a42e802696e7482095aa488c4394f7.jpeg",
|
271
|
+
"height": 111,
|
272
|
+
"width": 167
|
273
|
+
},
|
274
|
+
"carre_vignette": {
|
275
|
+
"download": "@@images/image-430-142b5f6c63148c8770b9fea68fe24df3.jpeg",
|
276
|
+
"height": 286,
|
277
|
+
"width": 430
|
278
|
+
},
|
279
|
+
"icon": {
|
280
|
+
"download": "@@images/image-32-6cc24c2d5ace4616b574db5b932a87ef.jpeg",
|
281
|
+
"height": 21,
|
282
|
+
"width": 32
|
283
|
+
},
|
284
|
+
"large": {
|
285
|
+
"download": "@@images/image-768-8f92dbb808d056cb5b1d5181b6d8194b.jpeg",
|
286
|
+
"height": 512,
|
287
|
+
"width": 768
|
288
|
+
},
|
289
|
+
"listing": {
|
290
|
+
"download": "@@images/image-16-b8e4b8a391de69be69ce347ffb23d3c7.jpeg",
|
291
|
+
"height": 10,
|
292
|
+
"width": 16
|
293
|
+
},
|
294
|
+
"mini": {
|
295
|
+
"download": "@@images/image-200-b8ae70b47662de08ad2ddad51ecf0729.jpeg",
|
296
|
+
"height": 133,
|
297
|
+
"width": 200
|
298
|
+
},
|
299
|
+
"paysage_affiche": {
|
300
|
+
"download": "@@images/image-750-109a22ed750b2f9cd2d37e8fa5031ed6.jpeg",
|
301
|
+
"height": 448,
|
302
|
+
"width": 672
|
303
|
+
},
|
304
|
+
"paysage_liste": {
|
305
|
+
"download": "@@images/image-167-d81cf3ac0f9b0d6c6d153e35733a4719.jpeg",
|
306
|
+
"height": 100,
|
307
|
+
"width": 150
|
308
|
+
},
|
309
|
+
"paysage_vignette": {
|
310
|
+
"download": "@@images/image-430-6c5129a3abcac460e8da4fd71de2f6f4.jpeg",
|
311
|
+
"height": 257,
|
312
|
+
"width": 386
|
313
|
+
},
|
314
|
+
"portrait_affiche": {
|
315
|
+
"download": "@@images/image-448-6c15b19eb0947c6532e21681494e9ab4.jpeg",
|
316
|
+
"height": 298,
|
317
|
+
"width": 448
|
318
|
+
},
|
319
|
+
"portrait_liste": {
|
320
|
+
"download": "@@images/image-222-98bce7ad7e0a55b3cd5b199e1e9e7f1f.jpeg",
|
321
|
+
"height": 148,
|
322
|
+
"width": 222
|
323
|
+
},
|
324
|
+
"portrait_vignette": {
|
325
|
+
"download": "@@images/image-448-6c15b19eb0947c6532e21681494e9ab4.jpeg",
|
326
|
+
"height": 298,
|
327
|
+
"width": 448
|
328
|
+
},
|
329
|
+
"preview": {
|
330
|
+
"download": "@@images/image-400-d9d488dd1677386f0107d79c1565f5ae.jpeg",
|
331
|
+
"height": 266,
|
332
|
+
"width": 400
|
333
|
+
},
|
334
|
+
"thumb": {
|
335
|
+
"download": "@@images/image-128-0419c932370ccfdc495871dd991a9b55.jpeg",
|
336
|
+
"height": 85,
|
337
|
+
"width": 128
|
338
|
+
},
|
339
|
+
"tile": {
|
340
|
+
"download": "@@images/image-64-f5524890af469fd078ca929b5387130b.jpeg",
|
341
|
+
"height": 42,
|
342
|
+
"width": 64
|
343
|
+
}
|
344
|
+
},
|
345
|
+
"size": 759049,
|
346
|
+
"width": 1920
|
347
|
+
}
|
348
|
+
]
|
349
|
+
},
|
350
|
+
"local_category": null,
|
351
|
+
"modified": "2025-02-07T10:09:10+00:00",
|
352
|
+
"review_state": "published",
|
353
|
+
"title": "Une actualit\u00e9 tr\u00e8s urgente.",
|
354
|
+
"topics": null,
|
355
|
+
"type_title": "Actualit\u00e9",
|
356
|
+
"usefull_container_id": "commune",
|
357
|
+
"usefull_container_title": "Actualit\u00e9s de la commune"
|
358
|
+
}
|
359
|
+
],
|
360
|
+
"items_total": 51
|
361
|
+
}
|
@@ -0,0 +1,75 @@
|
|
1
|
+
# -*- coding: utf-8 -*-
|
2
|
+
|
3
|
+
from imio.smartweb.core.testing import IMIO_SMARTWEB_CORE_INTEGRATION_TESTING
|
4
|
+
from imio.smartweb.core.testing import ImioSmartwebTestCase
|
5
|
+
from imio.smartweb.core.tests.utils import make_named_image
|
6
|
+
from plone import api
|
7
|
+
from plone.app.testing import login
|
8
|
+
from plone.app.testing import logout
|
9
|
+
from plone.app.testing import setRoles
|
10
|
+
from plone.app.testing import TEST_USER_ID
|
11
|
+
from plone.namedfile.file import NamedBlobImage
|
12
|
+
from zope.component import queryMultiAdapter
|
13
|
+
|
14
|
+
|
15
|
+
class TestSectionGallery(ImioSmartwebTestCase):
|
16
|
+
layer = IMIO_SMARTWEB_CORE_INTEGRATION_TESTING
|
17
|
+
|
18
|
+
def setUp(self):
|
19
|
+
self.request = self.layer["request"]
|
20
|
+
self.portal = self.layer["portal"]
|
21
|
+
setRoles(self.portal, TEST_USER_ID, ["Manager"])
|
22
|
+
self.page = api.content.create(
|
23
|
+
container=self.portal,
|
24
|
+
type="imio.smartweb.Page",
|
25
|
+
id="page",
|
26
|
+
)
|
27
|
+
|
28
|
+
def test_alt_label(self):
|
29
|
+
gallery_section = api.content.create(
|
30
|
+
container=self.page,
|
31
|
+
type="imio.smartweb.SectionGallery",
|
32
|
+
title="Gallery section",
|
33
|
+
)
|
34
|
+
blob_image = NamedBlobImage(**make_named_image("plone.png"))
|
35
|
+
|
36
|
+
# image1 has no defined title (by default img blob filename) and no description
|
37
|
+
image1 = api.content.create(
|
38
|
+
container=gallery_section,
|
39
|
+
type="Image",
|
40
|
+
title="plone.png",
|
41
|
+
)
|
42
|
+
image1.image = blob_image
|
43
|
+
|
44
|
+
# image2 has a defined title and no description
|
45
|
+
image2 = api.content.create(
|
46
|
+
container=gallery_section,
|
47
|
+
type="Image",
|
48
|
+
title="Kamoulox",
|
49
|
+
)
|
50
|
+
image2.image = blob_image
|
51
|
+
|
52
|
+
# image3 has a defined title and description (greater than title)
|
53
|
+
image3 = api.content.create(
|
54
|
+
container=gallery_section,
|
55
|
+
type="Image",
|
56
|
+
title="Hello Plone !",
|
57
|
+
)
|
58
|
+
image3.image = blob_image
|
59
|
+
image3.description = "Hello Plone, what's up ?!"
|
60
|
+
|
61
|
+
# image4 has a defined title and a mistaked blank description (smaller than title)
|
62
|
+
image4 = api.content.create(
|
63
|
+
container=gallery_section,
|
64
|
+
type="Image",
|
65
|
+
title="Hello Plone !",
|
66
|
+
)
|
67
|
+
# This is a mistaked blank description
|
68
|
+
image4.image = blob_image
|
69
|
+
image4.description = " "
|
70
|
+
|
71
|
+
view = queryMultiAdapter((gallery_section, self.request), name="view")
|
72
|
+
self.assertEqual(view.alt_label(image1), "")
|
73
|
+
self.assertEqual(view.alt_label(image2), "Kamoulox")
|
74
|
+
self.assertEqual(view.alt_label(image3), "Hello Plone, what's up ?!")
|
75
|
+
self.assertEqual(view.alt_label(image4), "Hello Plone !")
|
@@ -116,6 +116,14 @@ class TestSections(ImioSmartwebTestCase):
|
|
116
116
|
self.assertIn(
|
117
117
|
"https://www.youtube.com/embed/_dOAthafoGQ?feature=oembed", embedded_video
|
118
118
|
)
|
119
|
+
self.assertIn("(Youtube video)", embedded_video)
|
120
|
+
|
121
|
+
section.video_url = "https://vimeo.com/110990510"
|
122
|
+
view = queryMultiAdapter((section, self.request), name="view")
|
123
|
+
embedded_video = view.get_embed_video()
|
124
|
+
self.assertIn("iframe", embedded_video)
|
125
|
+
self.assertIn("https://player.vimeo.com/video/110990510", embedded_video)
|
126
|
+
self.assertIn("(Vimeo video)", embedded_video)
|
119
127
|
|
120
128
|
def test_external_content_section(self):
|
121
129
|
setRoles(self.portal, TEST_USER_ID, ["Contributor"])
|
@@ -283,6 +291,7 @@ class TestSections(ImioSmartwebTestCase):
|
|
283
291
|
logout()
|
284
292
|
view = queryMultiAdapter((page, self.request), name="full_view")()
|
285
293
|
self.assertEqual(view.count('<h2 class="section-title">Title of my '), 5)
|
294
|
+
|
286
295
|
login(self.portal, "test")
|
287
296
|
gallery_section = getattr(page, "title-of-my-imio-smartweb-sectiongallery")
|
288
297
|
api.content.create(
|
@@ -290,6 +299,7 @@ class TestSections(ImioSmartwebTestCase):
|
|
290
299
|
type="Image",
|
291
300
|
title="Image",
|
292
301
|
)
|
302
|
+
|
293
303
|
files_section = getattr(page, "title-of-my-imio-smartweb-sectionfiles")
|
294
304
|
file_obj = api.content.create(
|
295
305
|
container=files_section,
|
@@ -297,12 +307,14 @@ class TestSections(ImioSmartwebTestCase):
|
|
297
307
|
title="My file",
|
298
308
|
)
|
299
309
|
file_obj.file = NamedBlobFile(data="file data", filename="file.txt")
|
310
|
+
|
300
311
|
links_section = getattr(page, "title-of-my-imio-smartweb-sectionlinks")
|
301
312
|
api.content.create(
|
302
313
|
container=links_section,
|
303
314
|
type="imio.smartweb.BlockLink",
|
304
315
|
title="My link",
|
305
316
|
)
|
317
|
+
|
306
318
|
view = queryMultiAdapter((page, self.request), name="full_view")()
|
307
319
|
self.assertEqual(
|
308
320
|
view.count('<h2 class="section-title">Title of my '), len(section_types)
|
@@ -531,12 +543,12 @@ class TestSections(ImioSmartwebTestCase):
|
|
531
543
|
)
|
532
544
|
view = getMultiAdapter((self.page, self.request), name="full_view")
|
533
545
|
self.assertIn(
|
534
|
-
'<a class="table_image no-image" href="http://nohost/plone/page/section-links/my-link" target="">',
|
546
|
+
'<a class="table_image no-image" title="My link" href="http://nohost/plone/page/section-links/my-link" target="">',
|
535
547
|
view(),
|
536
548
|
)
|
537
549
|
link.image = NamedBlobImage(**make_named_image())
|
538
550
|
self.assertIn(
|
539
|
-
'<a class="table_image" href="http://nohost/plone/page/section-links/my-link" target="">',
|
551
|
+
'<a class="table_image" title="My link" href="http://nohost/plone/page/section-links/my-link" target="">',
|
540
552
|
view(),
|
541
553
|
)
|
542
554
|
link.open_in_new_tab = True
|
@@ -548,7 +560,7 @@ class TestSections(ImioSmartwebTestCase):
|
|
548
560
|
clear_cache(self.request)
|
549
561
|
view = getMultiAdapter((self.page, self.request), name="full_view")
|
550
562
|
self.assertIn(
|
551
|
-
'<a class="table_image" href="http://nohost/plone/page/section-links/my-link" target="_blank">',
|
563
|
+
'<a class="table_image" title="My link (New tab)" href="http://nohost/plone/page/section-links/my-link" target="_blank">',
|
552
564
|
view(),
|
553
565
|
)
|
554
566
|
link.remoteUrl = "http://www.perdu.com"
|
@@ -6,6 +6,8 @@ from imio.smartweb.core.testing import ImioSmartwebTestCase
|
|
6
6
|
from imio.smartweb.core.tests.utils import make_named_image
|
7
7
|
from imio.smartweb.core.utils import batch_results
|
8
8
|
from imio.smartweb.core.utils import get_scale_url
|
9
|
+
from imio.smartweb.core.utils import remove_cache_key
|
10
|
+
from imio.smartweb.core.tests.utils import get_json
|
9
11
|
from plone import api
|
10
12
|
from plone.app.testing import setRoles
|
11
13
|
from plone.app.testing import TEST_USER_ID
|
@@ -92,3 +94,20 @@ class TestUtils(ImioSmartwebTestCase):
|
|
92
94
|
get_scale_url(brain, self.request, "image", "portrait_affiche", "portrait"),
|
93
95
|
"http://nohost/plone/page/@@images/image/portrait_affiche?cache_key=78fd1bab198354b6877aed44e2ea0b4d",
|
94
96
|
)
|
97
|
+
|
98
|
+
def test_remove_cache_key(self):
|
99
|
+
self.json_news = get_json("resources/json_news_raw_mock.json")
|
100
|
+
self.assertIn("cache_key", self.json_news["@id"])
|
101
|
+
for key in ["@id", "first", "last", "next"]:
|
102
|
+
if key in self.json_news["batching"] and isinstance(
|
103
|
+
self.json_news["batching"][key], str
|
104
|
+
):
|
105
|
+
self.assertIn("cache_key", self.json_news["batching"][key])
|
106
|
+
self.json_news = remove_cache_key(self.json_news)
|
107
|
+
|
108
|
+
self.assertNotIn("cache_key", self.json_news["@id"])
|
109
|
+
for key in ["@id", "first", "last", "next"]:
|
110
|
+
if key in self.json_news["batching"] and isinstance(
|
111
|
+
self.json_news["batching"][key], str
|
112
|
+
):
|
113
|
+
self.assertNotIn("cache_key", self.json_news["batching"][key])
|
imio/smartweb/core/utils.py
CHANGED
@@ -228,3 +228,21 @@ def get_iadeliberation_json(url):
|
|
228
228
|
json = get_json(url, auth=f"Basic {b64Val.decode('utf-8')}", timeout=20)
|
229
229
|
|
230
230
|
return json
|
231
|
+
|
232
|
+
|
233
|
+
def remove_cache_key(json_data: dict) -> dict:
|
234
|
+
pattern = re.compile(r"&cache_key=[a-f0-9]{32}")
|
235
|
+
if json_data is None:
|
236
|
+
return json_data
|
237
|
+
if "@id" in json_data and isinstance(json_data["@id"], str):
|
238
|
+
json_data["@id"] = pattern.sub("", json_data["@id"])
|
239
|
+
|
240
|
+
# Nested keys inside 'batching'
|
241
|
+
if "batching" in json_data and isinstance(json_data["batching"], dict):
|
242
|
+
for key in ["@id", "first", "last", "next"]:
|
243
|
+
if key in json_data["batching"] and isinstance(
|
244
|
+
json_data["batching"][key], str
|
245
|
+
):
|
246
|
+
json_data["batching"][key] = pattern.sub("", json_data["batching"][key])
|
247
|
+
|
248
|
+
return json_data
|
@@ -1,6 +1,6 @@
|
|
1
|
-
Metadata-Version: 2.
|
1
|
+
Metadata-Version: 2.2
|
2
2
|
Name: imio.smartweb.core
|
3
|
-
Version: 1.2.
|
3
|
+
Version: 1.2.86
|
4
4
|
Summary: Core product for iMio websites
|
5
5
|
Home-page: https://github.com/imio/imio.smartweb.core
|
6
6
|
Author: Christophe Boulanger
|
@@ -57,6 +57,18 @@ Requires-Dist: plone.restapi[test]; extra == "test"
|
|
57
57
|
Requires-Dist: requests-mock; extra == "test"
|
58
58
|
Requires-Dist: beautifulsoup4; extra == "test"
|
59
59
|
Requires-Dist: freezegun; extra == "test"
|
60
|
+
Dynamic: author
|
61
|
+
Dynamic: author-email
|
62
|
+
Dynamic: classifier
|
63
|
+
Dynamic: description
|
64
|
+
Dynamic: home-page
|
65
|
+
Dynamic: keywords
|
66
|
+
Dynamic: license
|
67
|
+
Dynamic: project-url
|
68
|
+
Dynamic: provides-extra
|
69
|
+
Dynamic: requires-dist
|
70
|
+
Dynamic: requires-python
|
71
|
+
Dynamic: summary
|
60
72
|
|
61
73
|
.. This README is meant for consumption by humans and pypi. Pypi can render rst files so please do not use Sphinx features.
|
62
74
|
If you want to learn more about writing documentation, please check out: http://docs.plone.org/about/documentation_styleguide.html
|
@@ -191,6 +203,32 @@ Changelog
|
|
191
203
|
=========
|
192
204
|
|
193
205
|
|
206
|
+
1.2.86 (2025-02-10)
|
207
|
+
-------------------
|
208
|
+
|
209
|
+
- WEB-4153 : Add a refresh_modification_date view to refresh the modification date of SectionEvents and SectionNews
|
210
|
+
[remdub]
|
211
|
+
|
212
|
+
- WEB-4153 : Add a cache key on SectionEvents and SectionNews requests to refresh the cache when the section is modified
|
213
|
+
[remdub]
|
214
|
+
|
215
|
+
|
216
|
+
1.2.85 (2025-02-10)
|
217
|
+
-------------------
|
218
|
+
|
219
|
+
- WEB-3538 : Accessibility : Add video source information in title attribute of the iframe
|
220
|
+
[boulch]
|
221
|
+
|
222
|
+
- WEB-4217 : Accessibility : Warn the user that the link will open in a new tab (title attribute)
|
223
|
+
[boulch]
|
224
|
+
|
225
|
+
- WEB-3872 : Accessibility : Files in "files section" are automaticaly open in a new (target blank) tab
|
226
|
+
[boulch]
|
227
|
+
|
228
|
+
- WEB-4211 : Accessibility : Improve behavior of the "alt" attribute for images in a gallery section
|
229
|
+
[boulch]
|
230
|
+
|
231
|
+
|
194
232
|
1.2.84 (2025-01-29)
|
195
233
|
-------------------
|
196
234
|
|
@@ -1,4 +1,4 @@
|
|
1
|
-
imio.smartweb.core-1.2.
|
1
|
+
imio.smartweb.core-1.2.86-py3.12-nspkg.pth,sha256=XZ3YhlzwpUCC8tXtelHRqxVxo3NWomIiMsUfUshrbeE,1011
|
2
2
|
imio/smartweb/core/__init__.py,sha256=iwhKnzeBJLKxpRVjvzwiRE63_zNpIBfaKLITauVph-0,24
|
3
3
|
imio/smartweb/core/config.py,sha256=BUgfvh4hCaw0onCYAG4gQI1O4hZ-GzXWEltdHi4YLIs,337
|
4
4
|
imio/smartweb/core/configure.zcml,sha256=PeC4rF--rF6MfVQ0NzggQrZWIl35oPtJdEhvQwGxhhI,1459
|
@@ -12,7 +12,7 @@ imio/smartweb/core/subscribers.py,sha256=zOmwTw0XvE6_bdoZI7qQln_W__7MxXCnKh6QwNK
|
|
12
12
|
imio/smartweb/core/subscribers.zcml,sha256=BnrxZp4AfsRYreYHsJJxKgPQZJ-wpNM2XnDTuDUbBkA,1616
|
13
13
|
imio/smartweb/core/testing.py,sha256=t0Y3t3FXX2RjgklcRzHT37AjKbMKL3ZjjT3d2UhQm7A,3636
|
14
14
|
imio/smartweb/core/testing.zcml,sha256=VyKjWW2QHYuUYKkGUvtsdFI_Pa7Wcp1yBBDla112eMc,172
|
15
|
-
imio/smartweb/core/utils.py,sha256=
|
15
|
+
imio/smartweb/core/utils.py,sha256=ToipQdzA1WnX8SLKIwaWhH7JraOBU89Q7ez2AJfAng8,8364
|
16
16
|
imio/smartweb/core/vocabularies.py,sha256=ZzdnK7m0dPogoKSrtdTjsxCQjaSqgVDAL9YPWMOHync,22905
|
17
17
|
imio/smartweb/core/vocabularies.zcml,sha256=KSH7JWlAJtKawLvfmsztZzE_AK1JR6B5udY6tleY2cQ,5904
|
18
18
|
imio/smartweb/core/behaviors/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
@@ -238,16 +238,16 @@ imio/smartweb/core/contents/rest/search/configure.zcml,sha256=BTFcBQ28NINyEfoVgY
|
|
238
238
|
imio/smartweb/core/contents/rest/search/endpoint.py,sha256=i5LMM0R1Xvpy76JHO6pI98G41Xep15fPR9uv9rqropo,9797
|
239
239
|
imio/smartweb/core/contents/sections/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
240
240
|
imio/smartweb/core/contents/sections/base.py,sha256=2e3lIG_RGGFAshBEkTNG97OReAnn9GLQk_O_Eqh7SRY,2486
|
241
|
-
imio/smartweb/core/contents/sections/configure.zcml,sha256=
|
242
|
-
imio/smartweb/core/contents/sections/macros.pt,sha256=
|
241
|
+
imio/smartweb/core/contents/sections/configure.zcml,sha256=ApBAc2UyCmttliYs4BAC_ovaZXW4vz78LBPUaSGkpEk,3379
|
242
|
+
imio/smartweb/core/contents/sections/macros.pt,sha256=zlIgvxE5t0d6DKVrRzPHh058nmo6AmxiUUbGtEmL2KM,5923
|
243
243
|
imio/smartweb/core/contents/sections/subscriber.py,sha256=WM7nEZVPOkmyT1GfkWGDWwLhuhUYaTnlBr6BJVqUJMk,642
|
244
|
-
imio/smartweb/core/contents/sections/views.py,sha256=
|
244
|
+
imio/smartweb/core/contents/sections/views.py,sha256=0KA81s4rDfxTbT-CrxOv01uZ0dv2BDYeejjAvh7BIL8,6378
|
245
245
|
imio/smartweb/core/contents/sections/collection/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
246
246
|
imio/smartweb/core/contents/sections/collection/configure.zcml,sha256=Ak4UbKFjogWZad6-5_y6oSx8tWXt3nN7bEdKXG7pQCI,920
|
247
247
|
imio/smartweb/core/contents/sections/collection/content.py,sha256=DMmU9rIaRlbRjIaot5RHXu59vJmAbun0FCmyahWhBCM,2379
|
248
248
|
imio/smartweb/core/contents/sections/collection/views.py,sha256=G8Q7zlFmuEKKCmAGLj5cVL3axebzf5ZlSVRYx9q45U4,1470
|
249
|
-
imio/smartweb/core/contents/sections/common_templates/carousel.pt,sha256=
|
250
|
-
imio/smartweb/core/contents/sections/common_templates/table.pt,sha256=
|
249
|
+
imio/smartweb/core/contents/sections/common_templates/carousel.pt,sha256=7TiEYMm090RGS55f77aUOfGJmAoP3zI6XCWtYQ6SWxA,5774
|
250
|
+
imio/smartweb/core/contents/sections/common_templates/table.pt,sha256=_XPptTPmlO1AbyFDVvYQ6ysOKU2s_NQGgTBHnFNDNnA,7558
|
251
251
|
imio/smartweb/core/contents/sections/contact/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
252
252
|
imio/smartweb/core/contents/sections/contact/configure.zcml,sha256=WjyGXO7alNf4yDW5dZCS_xQ_AYbQVQuRVRIeoyLIBzY,1591
|
253
253
|
imio/smartweb/core/contents/sections/contact/content.py,sha256=MdhY6QPMdCseThddjwZ0e7xzkx1-p21MBuwqEic1f90,2690
|
@@ -260,7 +260,7 @@ imio/smartweb/core/contents/sections/events/__init__.py,sha256=47DEQpj8HBSa-_TIm
|
|
260
260
|
imio/smartweb/core/contents/sections/events/configure.zcml,sha256=FCDIf6w-2qCPqq0QUodw8-xyAopq7l6O8zoU_uMHNwg,1117
|
261
261
|
imio/smartweb/core/contents/sections/events/content.py,sha256=aolTpBgOCKu4EHLQUFjOkFN7YpJId0Wpj_iH5AZ9Vvk,3246
|
262
262
|
imio/smartweb/core/contents/sections/events/macros.pt,sha256=llSq-xstFiOXctseKDwvhVCM7A1_Z1Jq-_cUgNiBe10,1522
|
263
|
-
imio/smartweb/core/contents/sections/events/view.py,sha256=
|
263
|
+
imio/smartweb/core/contents/sections/events/view.py,sha256=Tl92dalLryRuilVfu0MRAQ51jkfHuQTpCsPT-u3q4fE,4774
|
264
264
|
imio/smartweb/core/contents/sections/external_content/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
265
265
|
imio/smartweb/core/contents/sections/external_content/configure.zcml,sha256=6ZvD4hJiXMZM2-mz9D7ipZcphS5HKJFREG9XUzF_6ms,1651
|
266
266
|
imio/smartweb/core/contents/sections/external_content/content.py,sha256=apHtfPwxkHkLQJVFVXs4F8O0gE09uI49AFQ8xRFrXgo,1096
|
@@ -273,12 +273,12 @@ imio/smartweb/core/contents/sections/external_content/views.py,sha256=KPOjV4HBXH
|
|
273
273
|
imio/smartweb/core/contents/sections/files/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
274
274
|
imio/smartweb/core/contents/sections/files/configure.zcml,sha256=DyyHzDEKLWmOywbV08Zf7bvf0At5jyAeDfZ8PCK5Rog,501
|
275
275
|
imio/smartweb/core/contents/sections/files/content.py,sha256=C3jEokoNKIE-1cQlaWD-aKLfPDG6k8YasJeZxOR8swk,1088
|
276
|
-
imio/smartweb/core/contents/sections/files/view.py,sha256=
|
276
|
+
imio/smartweb/core/contents/sections/files/view.py,sha256=dGS1dqfq-J-kBz1UZWoFPF6czeBR_woDrEX5l0BxNY4,3017
|
277
277
|
imio/smartweb/core/contents/sections/gallery/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
278
278
|
imio/smartweb/core/contents/sections/gallery/configure.zcml,sha256=0fq5_PWU9vFrmPkExvFPBCzZrDSnlN8B0K7fHQReAvA,424
|
279
279
|
imio/smartweb/core/contents/sections/gallery/content.py,sha256=l6HLGVNi70gcEP-zz9OXi2WYtyd-V6LCAZH44a2Td_s,780
|
280
|
-
imio/smartweb/core/contents/sections/gallery/view.pt,sha256=
|
281
|
-
imio/smartweb/core/contents/sections/gallery/views.py,sha256=
|
280
|
+
imio/smartweb/core/contents/sections/gallery/view.pt,sha256=pyBTNWejZfKCH8mVI3ntcN-jh7LdTLQQrGfN5DzojSY,2075
|
281
|
+
imio/smartweb/core/contents/sections/gallery/views.py,sha256=EpWWLBUmCq3jMkRdhZMh2Rrw9nAStgXTOApE6OqLXmY,994
|
282
282
|
imio/smartweb/core/contents/sections/html/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
283
283
|
imio/smartweb/core/contents/sections/html/configure.zcml,sha256=KsYNQY72doYTDf8Oa-5j147pOJYXqLPPBF7AtvMxDck,413
|
284
284
|
imio/smartweb/core/contents/sections/html/content.py,sha256=6O1fD-6mEo_QEsuOJN80kPTsX0lLXBsqyIk0PBcjn2E,1352
|
@@ -286,7 +286,7 @@ imio/smartweb/core/contents/sections/html/view.pt,sha256=PY_z5Mn52IygWoMxAIEkbep
|
|
286
286
|
imio/smartweb/core/contents/sections/links/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
287
287
|
imio/smartweb/core/contents/sections/links/configure.zcml,sha256=rE-UWiubwkPYU6VvfxM1AH3UTr06WfsItEG1dSX9G8w,918
|
288
288
|
imio/smartweb/core/contents/sections/links/content.py,sha256=drUefjzRnT3wFxIjVZ31qqaR-BGhWN5ffmcmnEeI5tQ,1051
|
289
|
-
imio/smartweb/core/contents/sections/links/view.py,sha256=
|
289
|
+
imio/smartweb/core/contents/sections/links/view.py,sha256=Vxv12_pt3NpdocARCi1rrry77qU3jkU9YLEXdQoqn_8,2096
|
290
290
|
imio/smartweb/core/contents/sections/map/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
291
291
|
imio/smartweb/core/contents/sections/map/configure.zcml,sha256=8ocTq-RfXM7BvGHyHrhySzYAvKhwXrc5lyrABNSb2H0,412
|
292
292
|
imio/smartweb/core/contents/sections/map/content.py,sha256=z5maHOFl0BpzFHRgEVrae7TnW9qU-aRXj_m9Z3CWtd0,372
|
@@ -295,7 +295,7 @@ imio/smartweb/core/contents/sections/map/views.py,sha256=3Z5oFis2NIByJCHh8bjAlLu
|
|
295
295
|
imio/smartweb/core/contents/sections/news/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
296
296
|
imio/smartweb/core/contents/sections/news/configure.zcml,sha256=8MOIEeI7Zr_wbNVgiMa_21Ohgv_bkpEi_7gJu6NK380,880
|
297
297
|
imio/smartweb/core/contents/sections/news/content.py,sha256=A79d6gfxiqrrL87VPqFz13NYAfTjHbSFNZlpi1kixzE,3261
|
298
|
-
imio/smartweb/core/contents/sections/news/view.py,sha256=
|
298
|
+
imio/smartweb/core/contents/sections/news/view.py,sha256=RZOVu160AINgtdNTs2eA4NahN4qRASfWVka_2hEu9qs,4401
|
299
299
|
imio/smartweb/core/contents/sections/postit/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
300
300
|
imio/smartweb/core/contents/sections/postit/configure.zcml,sha256=Q0Szs1pmrNP2OiRROpeSQPKLV3tCpyjqZa9vwNFTK9Q,504
|
301
301
|
imio/smartweb/core/contents/sections/postit/content.py,sha256=--bqQPsjpKuqMzOb21eOERjp2a2QehGTAsBvZ3FnQMA,2239
|
@@ -324,7 +324,7 @@ imio/smartweb/core/contents/sections/video/__init__.py,sha256=47DEQpj8HBSa-_TImW
|
|
324
324
|
imio/smartweb/core/contents/sections/video/configure.zcml,sha256=fB2sr0jyVajOXCIuQuDVzAGm-KV5yRpxFvEyrLm3CEE,418
|
325
325
|
imio/smartweb/core/contents/sections/video/content.py,sha256=zWba02hLpdbzvbXoRDw4wgnABZ5w6iwmEb6Jd_-rpEU,978
|
326
326
|
imio/smartweb/core/contents/sections/video/view.pt,sha256=RFya2M82XzAcV5UwJfAcamLmsv-n8Egwn1BEmWhE8lg,1105
|
327
|
-
imio/smartweb/core/contents/sections/video/views.py,sha256=
|
327
|
+
imio/smartweb/core/contents/sections/video/views.py,sha256=4YQQuJonxRUm2DeY3fFo9dzd9owKCkzmKpAys-01yt0,2172
|
328
328
|
imio/smartweb/core/faceted/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
329
329
|
imio/smartweb/core/faceted/configure.zcml,sha256=xuZzXBOMGu87KNLuFIQ8gHz8fxct7lDwSbCHl1Y1Hec,826
|
330
330
|
imio/smartweb/core/faceted/layout.py,sha256=9WCr3U7cEy0SmfI1cXBijR1bF4DVXQ684LzGpD-MNMw,395
|
@@ -428,16 +428,17 @@ imio/smartweb/core/tests/test_search.py,sha256=VryeRI4_5CvnStKOoNoG95M2WTy7Lyy_A
|
|
428
428
|
imio/smartweb/core/tests/test_section_contact.py,sha256=BiJPxb67d7zURE5Dtk-9xOUbuJitcQ7YnlzDS1sT-cE,27344
|
429
429
|
imio/smartweb/core/tests/test_section_events.py,sha256=7eP-HmXp0D3gvOrjVpzVPmV9nF_PKERnmOGz1G3Z0l0,8641
|
430
430
|
imio/smartweb/core/tests/test_section_external_content.py,sha256=JI_zm3160ryO8a6NjtcmcboUJdJDa7lEX6ommbxlGao,7617
|
431
|
+
imio/smartweb/core/tests/test_section_gallery.py,sha256=Hg4QjMm6R6mq0bbCFWOnLOqnzECCOWAHiOCvhee3hZE,2687
|
431
432
|
imio/smartweb/core/tests/test_section_news.py,sha256=6S7-r6ZnpeN_JdLYLZMWbHKRzeuf5ynPWnox2DDFPZk,9126
|
432
433
|
imio/smartweb/core/tests/test_section_sendinblue.py,sha256=UmmKo33T9feelumxqeejM4HG4oLRPKJkbB8hkLO144E,2661
|
433
|
-
imio/smartweb/core/tests/test_sections.py,sha256=
|
434
|
+
imio/smartweb/core/tests/test_sections.py,sha256=zOILZHSXOw7vk-6QaibjIrbbfOAeDRk1iSgYI47TGgU,25249
|
434
435
|
imio/smartweb/core/tests/test_setup.py,sha256=JcbMnXTNCuB_8grFh5E1kZ0uALdATlKMbahAdGfToZI,2092
|
435
436
|
imio/smartweb/core/tests/test_sitemap.py,sha256=AhFvUhzpkUg5XAwVcK3obXXrOEJYwhQZC3XrWeZtnP0,6674
|
436
437
|
imio/smartweb/core/tests/test_social.py,sha256=GVHkF4c8Ygnm09J1aGxhklbtd6b-1Fy8M7NnYmjRvfI,3046
|
437
438
|
imio/smartweb/core/tests/test_subsite.py,sha256=wiD8Ke4_-ArstSYNLCs8ArqOuDx2xxUR6Wac3GXfnbE,9016
|
438
439
|
imio/smartweb/core/tests/test_text.py,sha256=DtZNNGJ-MDYbJ-YQj2C0q2Hr7t4-sUbV6SWkE7tihBY,4652
|
439
440
|
imio/smartweb/core/tests/test_toolbar.py,sha256=dxwOGNOg2wPkAnPU3hqGCI6VL2D2nPOIOtbMorvjfps,3823
|
440
|
-
imio/smartweb/core/tests/test_utils.py,sha256=
|
441
|
+
imio/smartweb/core/tests/test_utils.py,sha256=W_gR8ZOecscA6f86qrcOeQVGCzdyqhlzP6TgQI5ah2g,5045
|
441
442
|
imio/smartweb/core/tests/test_vocabularies.py,sha256=1oF4rFc9kd1baUMHBor5wX9_tR7fcziQ6rvcENjyNDU,16956
|
442
443
|
imio/smartweb/core/tests/test_vocabulary.py,sha256=9S3BtVIJbN1o0q2qMcX8k0CdUwixmc3DBs_s5qFrJwA,1648
|
443
444
|
imio/smartweb/core/tests/utils.py,sha256=hsDrWOxL0oNNyx92Hke9Kj9ByKzc2kZ19q9QPVsNud4,2688
|
@@ -461,6 +462,7 @@ imio/smartweb/core/tests/resources/json_iadeliberations_publication.json,sha256=
|
|
461
462
|
imio/smartweb/core/tests/resources/json_iadeliberations_publications.json,sha256=JsY4rynmLwpnmOEvvqhyoSQ0USUvNv3wGRYOGEKRThY,17115
|
462
463
|
imio/smartweb/core/tests/resources/json_news_entities_raw_mock.json,sha256=InbDt8kUmVBsfCTyfn5M6qqC1j8z5RB8Edg7hIWRv0g,726
|
463
464
|
imio/smartweb/core/tests/resources/json_news_newsfolder_raw_mock.json,sha256=JpryCi1tpJPAoqnF9c2ZPtcQc4R_ottDRiyU-z2x3FQ,783
|
465
|
+
imio/smartweb/core/tests/resources/json_news_raw_mock.json,sha256=P5KPoC_uJB3HaYY4t4J07uPjh58b-pxZD4ZrlKR1Gr4,15865
|
464
466
|
imio/smartweb/core/tests/resources/json_no_contact_raw_mock.json,sha256=tfcIZuQi1Lz8HV8EV93Qp1pUr9KbKATxu4MHnpiZSrc,127
|
465
467
|
imio/smartweb/core/tests/resources/json_no_newsfolder_raw_mock.json,sha256=qC4sfb5JCGTtZpM6a0t0_k1IADu_oyOazK7fow1gMCU,168
|
466
468
|
imio/smartweb/core/tests/resources/json_procedures_raw_mock.json,sha256=eMrKdEMFtSzpRmAF-PT-YMEXAoi3H0GozMli6znQGuU,3217
|
@@ -756,10 +758,10 @@ imio/smartweb/core/webcomponents/src/utils/Map.jsx,sha256=cYuZykMIaLjr4KiLvmS4aY
|
|
756
758
|
imio/smartweb/core/webcomponents/src/utils/Map.scss,sha256=xXWz0O-JBwSZrzz2XeQdN4nZEOjppU2sVFtlLQOitQ8,77
|
757
759
|
imio/smartweb/core/webcomponents/src/utils/translation.js,sha256=5YDHwdaRNWFWOgyNd7YejoAdcDvnvAENo3Xn0GDT8P8,8941
|
758
760
|
imio/smartweb/core/webcomponents/src/utils/url.js,sha256=iyl_1QXfPBgUn0LEbZYT_zMEEjmj5DMiEz44Z6AKLcg,244
|
759
|
-
imio.smartweb.core-1.2.
|
760
|
-
imio.smartweb.core-1.2.
|
761
|
-
imio.smartweb.core-1.2.
|
762
|
-
imio.smartweb.core-1.2.
|
763
|
-
imio.smartweb.core-1.2.
|
764
|
-
imio.smartweb.core-1.2.
|
765
|
-
imio.smartweb.core-1.2.
|
761
|
+
imio.smartweb.core-1.2.86.dist-info/LICENSE.GPL,sha256=gXf5dRMhNSbfLPYYTY_5hsZ1r7UU1OaKQEAQUhuIBkM,18092
|
762
|
+
imio.smartweb.core-1.2.86.dist-info/LICENSE.rst,sha256=RzkMFz6AX3-cHd531zd2YQcXai8RIbjFWTs6m66Y5u4,653
|
763
|
+
imio.smartweb.core-1.2.86.dist-info/METADATA,sha256=o-etgfTICb5MaroIhxy03nNga9k3s5DUSTeMkCYdYZc,60571
|
764
|
+
imio.smartweb.core-1.2.86.dist-info/WHEEL,sha256=In9FTNxeP60KnTkGw7wk6mJPYd_dQSjEZmXdBdMCI-8,91
|
765
|
+
imio.smartweb.core-1.2.86.dist-info/namespace_packages.txt,sha256=Pg8AH8t9viMMW1hJbNZvTy_n2jXG2igIYUpon5RA4Js,19
|
766
|
+
imio.smartweb.core-1.2.86.dist-info/top_level.txt,sha256=ZktC0EGzThvMTAin9_q_41rzvvfMT2FYbP8pbhSLMSA,5
|
767
|
+
imio.smartweb.core-1.2.86.dist-info/RECORD,,
|
File without changes
|
File without changes
|
File without changes
|
{imio.smartweb.core-1.2.84.dist-info → imio.smartweb.core-1.2.86.dist-info}/namespace_packages.txt
RENAMED
File without changes
|
File without changes
|