imio.smartweb.common 1.2.35__py3-none-any.whl → 1.2.37__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.
@@ -1,6 +1,6 @@
1
1
  <?xml version="1.0" encoding="UTF-8"?>
2
2
  <metadata>
3
- <version>1032</version>
3
+ <version>1033</version>
4
4
  <dependencies>
5
5
  <dependency>profile-plone.restapi:default</dependency>
6
6
  <dependency>profile-eea.facetednavigation:default</dependency>
@@ -107,7 +107,7 @@
107
107
  },
108
108
  "insert": {
109
109
  "title": "Insert",
110
- "items": ""
110
+ "items": "hr"
111
111
  },
112
112
  "table": {
113
113
  "title": "Table",
@@ -10,4 +10,14 @@
10
10
  permission="zope2.View"
11
11
  />
12
12
 
13
+ <plone:service
14
+ name="@find"
15
+ method="GET"
16
+ accept="application/json"
17
+ for="zope.interface.Interface"
18
+ factory=".endpoint.FindEndpoint"
19
+ permission="zope2.View"
20
+ layer="imio.smartweb.common.interfaces.IImioSmartwebCommonLayer"
21
+ />
22
+
13
23
  </configure>
@@ -0,0 +1,175 @@
1
+ # -*- coding: utf-8 -*-
2
+
3
+ from collections import Counter
4
+ from imio.smartweb.common.rest.utils import get_json
5
+ from plone import api
6
+ from plone.restapi.search.handler import SearchHandler
7
+ from plone.restapi.search.utils import unflatten_dotted_dict
8
+ from plone.restapi.services import Service
9
+ from Products.CMFCore.utils import getToolByName
10
+ from zExceptions import Unauthorized
11
+
12
+ import json
13
+ import logging
14
+
15
+ logger = logging.getLogger("imio.smartweb.common")
16
+
17
+
18
+ class FindEndpointHandler(SearchHandler):
19
+ def search(self, query=None):
20
+ results = {"items": []}
21
+ portal = api.portal.get()
22
+ get_types_url = f"{portal.absolute_url()}/@types"
23
+ auth_header = self.request._orig_env.get("HTTP_AUTHORIZATION", None)
24
+ types = get_json(get_types_url, auth=auth_header, timeout=20)
25
+ if not types:
26
+ raise Unauthorized("No types found, you are not allowed to search")
27
+ self._constrain_query_by_path(query)
28
+ if not query.get("path"):
29
+ query["path"] = {"query": "/Plone"}
30
+ # query = self._parse_query(query)
31
+ if query.get("type_of_request") == "count_contents_types":
32
+ results = self.count_contents_types(query)
33
+ elif query.get("type_of_request") == "find_big_files_or_images":
34
+ results = self.find_big_files_or_images(query)
35
+ elif query.get("type_of_request") == "get_max_depth":
36
+ results = self.get_max_depth()
37
+ elif query.get("type_of_request") == "check_value_of_field":
38
+ results = self.check_value_of_field(
39
+ query.get("portal_type"),
40
+ query.get("field_name"),
41
+ query.get("expected_values"),
42
+ )
43
+ else:
44
+ return super().search(query)
45
+ return results
46
+
47
+ def count_contents_types(self, query):
48
+ results = {"items": []}
49
+ if query.get("operator") == "and":
50
+ query["path"]["depth"] = -1
51
+ lazy_resultset = self.catalog.searchResults(**query)
52
+ results = {
53
+ "items": [
54
+ {
55
+ "portal_type": query.get("portal_type"),
56
+ "nb_items": len(lazy_resultset),
57
+ }
58
+ ]
59
+ }
60
+ else:
61
+ portal_types = (
62
+ query.get("portal_type")
63
+ if isinstance(query.get("portal_type"), list)
64
+ else [query.get("portal_type")] if query.get("portal_type") else []
65
+ )
66
+ for portal_type in portal_types:
67
+ new_query = query.copy()
68
+ new_query["portal_type"] = portal_type
69
+ lazy_resultset = self.catalog.searchResults(**new_query)
70
+ results["items"].append(
71
+ {"portal_type": portal_type, "nb_items": len(lazy_resultset)}
72
+ )
73
+ # fullobjects = False
74
+ # results = getMultiAdapter((lazy_resultset, self.request), ISerializeToJson)(
75
+ # fullobjects=fullobjects
76
+ # )
77
+ return results
78
+
79
+ def find_big_files_or_images(self, query):
80
+ SIZE_LIMIT = query.get("size", "1000000")
81
+ results = {"items": []}
82
+ lazy_resultset = self.catalog.searchResults(**query)
83
+ for brain in lazy_resultset:
84
+ obj = brain.getObject()
85
+ blob = getattr(obj, "file", None) or getattr(obj, "image", None)
86
+ if blob and hasattr(blob, "getSize"):
87
+ size = blob.getSize()
88
+ if size > int(SIZE_LIMIT):
89
+ results["items"].append(
90
+ {
91
+ "title": obj.title,
92
+ "portal_type": obj.portal_type,
93
+ "url": obj.absolute_url(),
94
+ "size": round(size / (1024 * 1024), 2),
95
+ }
96
+ )
97
+ return results
98
+
99
+ def get_max_depth(self):
100
+ portal = api.portal.get()
101
+ catalog = getToolByName(portal, "portal_catalog")
102
+
103
+ max_depth = 0
104
+ results = {"items": []}
105
+
106
+ for brain in catalog():
107
+ path = brain.getPath()
108
+ depth = len(path.strip("/").split("/"))
109
+ if depth > max_depth:
110
+ max_depth = depth
111
+ results["items"] = [{"path": path, "depth": depth}]
112
+ elif depth == max_depth:
113
+ results["items"].append({"path": path, "depth": depth})
114
+ results["max_depth"] = max_depth
115
+ return results
116
+
117
+ def check_value_of_field(self, portal_type, field_name, expected_values):
118
+ """
119
+ Analyse la répartition des valeurs d'un champ dans les objets d'un content_type donné.
120
+ query sample : http://localhost:8085/Plone/@find?portal_type=imio.events.Event&field_name=event_type&expected_values=["activity", "event-driven"]&type_of_request=check_value_of_field
121
+
122
+ :param content_type: str, le portal_type (ex: "Event")
123
+ :param field_name: str, field name (ex: "event_type")
124
+ :param expected_values: list, list of values we want to check (ex: ["activity", "event-driven"])
125
+ :return: dict {valeur: {"count": n, "percent": x.xx}}
126
+ """
127
+ brains = self.catalog(portal_type=portal_type)
128
+
129
+ total = len(brains)
130
+ if total == 0:
131
+ return {}
132
+
133
+ # Récupération des valeurs réelles dans les objets
134
+ values = []
135
+ for brain in brains:
136
+ obj = brain.getObject()
137
+ value = getattr(obj, field_name, None)
138
+ if isinstance(value, (list, tuple)): # cas champ multi-valué
139
+ values.extend(value)
140
+ else:
141
+ values.append(value)
142
+ counter = Counter(values)
143
+
144
+ # Calcul stats seulement pour expected_values
145
+ result = {}
146
+ expected_values = normalize_query_param(expected_values)
147
+ for val in expected_values:
148
+ count = counter.get(val, 0)
149
+ percent = (count / total) * 100 if total > 0 else 0
150
+ result[val] = {"count": count, "percent": round(percent, 2)}
151
+ return result
152
+
153
+
154
+ class FindEndpoint(Service):
155
+ def reply(self):
156
+ query = self.request.form.copy()
157
+ query = unflatten_dotted_dict(query)
158
+ return FindEndpointHandler(self.context, self.request).search(query)
159
+
160
+
161
+ def normalize_query_param(value):
162
+ if isinstance(value, list):
163
+ return value
164
+
165
+ if isinstance(value, str):
166
+ val = value.strip()
167
+ # Try to parse json list
168
+ if val.startswith("[") and val.endswith("]"):
169
+ try:
170
+ return json.loads(val)
171
+ except json.JSONDecodeError:
172
+ return [val]
173
+ else:
174
+ return [val]
175
+ return [value]
@@ -157,6 +157,14 @@
157
157
  directory="profiles/1031_to_1032"
158
158
  />
159
159
 
160
+ <genericsetup:registerProfile
161
+ name="upgrade_1032_to_1033"
162
+ title="Upgrade common from 1032 to 1033"
163
+ description="Add HorizontalRule to TinyMCE7"
164
+ provides="Products.GenericSetup.interfaces.EXTENSION"
165
+ directory="profiles/1032_to_1033"
166
+ />
167
+
160
168
  <genericsetup:upgradeStep
161
169
  title="Configure first official release"
162
170
  description="Run needed registry step"
@@ -496,4 +504,15 @@
496
504
  />
497
505
  </genericsetup:upgradeSteps>
498
506
 
507
+ <genericsetup:upgradeSteps
508
+ profile="imio.smartweb.common:default"
509
+ source="1032"
510
+ destination="1033"
511
+ >
512
+ <genericsetup:upgradeDepends
513
+ title="Add HorizontalRule to TinyMCE7"
514
+ import_profile="imio.smartweb.common.upgrades:upgrade_1032_to_1033"
515
+ />
516
+ </genericsetup:upgradeSteps>
517
+
499
518
  </configure>
@@ -0,0 +1,86 @@
1
+ <?xml version="1.0" encoding="utf-8"?>
2
+ <registry>
3
+
4
+ <!-- See possible values in https://www.tiny.cloud/docs/tinymce/latest/available-menu-items/ -->
5
+ <record interface="plone.base.interfaces.controlpanel.ITinyMCESchema"
6
+ name="plone.menu"
7
+ >
8
+ <value purge="true">
9
+ {
10
+ "file": {
11
+ "title": "File",
12
+ "items": ""
13
+ },
14
+ "tools": {
15
+ "title": "Tools",
16
+ "items": ""
17
+ },
18
+ "table": {
19
+ "title": "Table",
20
+ "items": ""
21
+ },
22
+ "edit": {
23
+ "title": "Edit",
24
+ "items": "undo redo | cut copy paste | searchreplace selectall"
25
+ },
26
+ "format": {
27
+ "title": "Format",
28
+ "items": ""
29
+ },
30
+ "insert": {
31
+ "title": "Insert",
32
+ "items": "hr"
33
+ },
34
+ "table": {
35
+ "title": "Table",
36
+ "items": "inserttable deletetable | cell row column"
37
+ },
38
+ "view": {
39
+ "title": "View",
40
+ "items": "visualblocks preview fullscreen"
41
+ }
42
+ }
43
+ </value>
44
+ </record>
45
+
46
+ <!-- See paste_as_text options in https://www.tiny.cloud/docs/tinymce/latest/copy-and-paste/#paste_as_text -->
47
+ <!-- See style_formats options in https://www.tiny.cloud/docs/tinymce/latest/user-formatting-options/#style_formats -->
48
+ <!-- See default table options in https://www.tiny.cloud/docs/tinymce/latest/table-options/ -->
49
+ <!-- See plugin table options in https://www.tiny.cloud/docs/tinymce/latest/table/ -->
50
+ <record interface="plone.base.interfaces.controlpanel.ITinyMCESchema"
51
+ name="plone.other_settings"
52
+ >
53
+ <value>
54
+ {
55
+ "paste_as_text": true,
56
+ "style_formats": [
57
+ {
58
+ "block": "p",
59
+ "title": "Paragraphe"
60
+ },
61
+ {
62
+ "block": "h2",
63
+ "title": "Titre 2"
64
+ },
65
+ {
66
+ "block": "h3",
67
+ "title": "Titre 3"
68
+ },
69
+ {
70
+ "block": "h4",
71
+ "title": "Titre 4"
72
+ },
73
+ {
74
+ "block": "mark",
75
+ "title": "Mise en évidence"
76
+ },
77
+ {
78
+ "block": "blockquote",
79
+ "title": "Citation"
80
+ }
81
+ ]
82
+ }
83
+ </value>
84
+ </record>
85
+
86
+ </registry>
@@ -5,6 +5,7 @@ from plone import api
5
5
  from plone.i18n.normalizer.interfaces import IIDNormalizer
6
6
  from plone.registry.interfaces import IRegistry
7
7
  from zope.component import getUtility
8
+ from zope.i18n import translate
8
9
  from zope.i18n.locales import locales
9
10
  from zope.schema.vocabulary import SimpleTerm
10
11
  from zope.schema.vocabulary import SimpleVocabulary
@@ -40,6 +41,23 @@ class TopicsVocabularyFactory:
40
41
  TopicsVocabulary = TopicsVocabularyFactory()
41
42
 
42
43
 
44
+ class TopicsDeVocabularyFactory:
45
+ def __call__(self, context=None):
46
+ vocabulary = TopicsVocabularyFactory()(context)
47
+ translated_terms = [
48
+ SimpleTerm(
49
+ value=term.value,
50
+ token=term.token,
51
+ title=translate(term.title, target_language="de"),
52
+ )
53
+ for term in vocabulary
54
+ ]
55
+ return SimpleVocabulary(translated_terms)
56
+
57
+
58
+ TopicsDeVocabulary = TopicsDeVocabularyFactory()
59
+
60
+
43
61
  class IAmVocabularyFactory:
44
62
  def __call__(self, context=None):
45
63
  iam = [
@@ -61,6 +79,23 @@ class IAmVocabularyFactory:
61
79
  IAmVocabulary = IAmVocabularyFactory()
62
80
 
63
81
 
82
+ class IAmDeVocabularyFactory:
83
+ def __call__(self, context=None):
84
+ vocabulary = IAmVocabularyFactory()(context)
85
+ translated_terms = [
86
+ SimpleTerm(
87
+ value=term.value,
88
+ token=term.token,
89
+ title=translate(term.title, target_language="de"),
90
+ )
91
+ for term in vocabulary
92
+ ]
93
+ return SimpleVocabulary(translated_terms)
94
+
95
+
96
+ IAmDeVocabulary = IAmDeVocabularyFactory()
97
+
98
+
64
99
  class CountriesVocabularyFactory:
65
100
  def __call__(self, context=None, lang=None):
66
101
  normalizer = getUtility(IIDNormalizer)
@@ -7,11 +7,23 @@
7
7
  provides="zope.schema.interfaces.IVocabularyFactory"
8
8
  />
9
9
 
10
+ <utility
11
+ name="imio.smartweb.vocabulary.Topics_de"
12
+ component=".vocabularies.TopicsDeVocabulary"
13
+ provides="zope.schema.interfaces.IVocabularyFactory"
14
+ />
15
+
10
16
  <utility
11
17
  name="imio.smartweb.vocabulary.IAm"
12
18
  component=".vocabularies.IAmVocabulary"
13
19
  provides="zope.schema.interfaces.IVocabularyFactory"
14
20
  />
21
+
22
+ <utility
23
+ name="imio.smartweb.vocabulary.IAm_de"
24
+ component=".vocabularies.IAmDeVocabulary"
25
+ provides="zope.schema.interfaces.IVocabularyFactory"
26
+ />
15
27
 
16
28
  <utility
17
29
  name="imio.smartweb.vocabulary.Countries"
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: imio.smartweb.common
3
- Version: 1.2.35
3
+ Version: 1.2.37
4
4
  Summary: Common utilities, vocabularies, taxonomies for imio.smartweb & co products
5
5
  Home-page: https://github.com/imio/imio.smartweb.common
6
6
  Author: iMio
@@ -178,6 +178,26 @@ Changelog
178
178
  =========
179
179
 
180
180
 
181
+ 1.2.37 (2025-09-03)
182
+ -------------------
183
+
184
+ - Add new @find endpoint to find content in instance
185
+ [boulch]
186
+
187
+
188
+ 1.2.36 (2025-06-25)
189
+ -------------------
190
+
191
+ - WEB-4278 : Create translated (de) iam vocabulary for e-guichet (citizen project)
192
+ [boulch]
193
+
194
+ - WEB-4278 : Create translated (de) topics vocabulary for e-guichet (citizen project)
195
+ [boulch]
196
+
197
+ - WEB-4269 : Add Horizontal Rule option to the insert menu in TinyMCE
198
+ [remdub]
199
+
200
+
181
201
  1.2.35 (2025-05-26)
182
202
  -------------------
183
203
 
@@ -1,4 +1,4 @@
1
- imio.smartweb.common-1.2.35-py3.12-nspkg.pth,sha256=XZ3YhlzwpUCC8tXtelHRqxVxo3NWomIiMsUfUshrbeE,1011
1
+ imio.smartweb.common-1.2.37-py3.12-nspkg.pth,sha256=XZ3YhlzwpUCC8tXtelHRqxVxo3NWomIiMsUfUshrbeE,1011
2
2
  imio/smartweb/common/__init__.py,sha256=Na9XBfEQUMrm2c5jbqQgwWeg40ih0aXVG1vT8NeAjMQ,2709
3
3
  imio/smartweb/common/adapters.py,sha256=dG4MALuHPQI6lTeNvs5p4vVOxHoBBYaWN6g8J96KxzQ,1507
4
4
  imio/smartweb/common/adapters.zcml,sha256=VO3luZDtRL9FIIEghxPrqpx8paZF3m6MGEy-8kF1sOQ,437
@@ -21,8 +21,8 @@ imio/smartweb/common/testing.py,sha256=GKlYMHJUSxZFVX0o_R_c_Au1VYlkd-GjykQqfONHv
21
21
  imio/smartweb/common/testing.zcml,sha256=7N-ALtklyWeLSzZmlxN2Tp-aZe_3An--w_6BGl1991E,172
22
22
  imio/smartweb/common/utility_overrides.zcml,sha256=Nn1q1FwQUyktB-EJM2qzPfsc-zUmHxX0Gj9OQTlYKQM,413
23
23
  imio/smartweb/common/utils.py,sha256=bQaR1i9_dID2_QKmHImZfJhWOYzK8AzFtI43-IG7xPo,7831
24
- imio/smartweb/common/vocabularies.py,sha256=QRIOWLOALzZDM92o1iUTWgDBBcrdd9BYz7miNjpYCDA,3835
25
- imio/smartweb/common/vocabularies.zcml,sha256=iFJer5q3wabBp_EZivPPVUqI1_9w5P_Ft1RGJB5Yqxs,940
24
+ imio/smartweb/common/vocabularies.py,sha256=L4H73GQxLbIRZOpn_fHBU4-J-gY6BeiYjDyU90jV0U8,4809
25
+ imio/smartweb/common/vocabularies.zcml,sha256=hnsIJYrof0k4gCj1wAJQtekXznvfFHIQXu-58eqXevk,1306
26
26
  imio/smartweb/common/widgets.zcml,sha256=GQ0aJblx44OJpj0HGXiyQJnFeSaJlOTMd1RAZn_1Qgk,375
27
27
  imio/smartweb/common/behaviors/__init__.py,sha256=iwhKnzeBJLKxpRVjvzwiRE63_zNpIBfaKLITauVph-0,24
28
28
  imio/smartweb/common/behaviors/configure.zcml,sha256=RfGH8DIybHpxxe2HUsjH2QKSiWYpV7lCZhGN6KLFwCw,531
@@ -63,10 +63,10 @@ imio/smartweb/common/faceted/widget.py,sha256=EMvFyEcS9t6lJAgz4zIkUnGAPd1fQcrv4A
63
63
  imio/smartweb/common/profiles/default/actions.xml,sha256=q5ajChGAPlPtpN_H80voDgg4C8Z-yDcIghUJIgFYtRg,1193
64
64
  imio/smartweb/common/profiles/default/browserlayer.xml,sha256=Up2dVOgFtzE43eLMNJY1xXvdUbQRSEpNxnySqSncFqQ,185
65
65
  imio/smartweb/common/profiles/default/catalog.xml,sha256=hB2Cu64TPp29EKICqbfixwa3AFmrDJVC784KeKTMX90,576
66
- imio/smartweb/common/profiles/default/metadata.xml,sha256=wGhizUvfr8wK8PTsvYMOjFXLsum3ZLNai6oizW3-LNA,432
66
+ imio/smartweb/common/profiles/default/metadata.xml,sha256=ay0Er9TDIXpaEiDIRwdMbhxZt_kZVzRQyQdQGCMc86w,432
67
67
  imio/smartweb/common/profiles/default/rolemap.xml,sha256=XCdOazRleiwTAAZt3lzTsOw3ZtIwoPDqA8s4zXACvkc,1595
68
68
  imio/smartweb/common/profiles/default/registry/registry.xml,sha256=GXo92ntNu5GPhFOvDzde5ES7z6pgzrvK1aJtH-ElAHg,44314
69
- imio/smartweb/common/profiles/default/registry/tinymce.xml,sha256=Z5iwGtQmL_dG0ACpMRoSLQ8BM-WXho0IXOwCnWBpZnc,5141
69
+ imio/smartweb/common/profiles/default/registry/tinymce.xml,sha256=bRDdJ_cS8NS3d5oleipENhY1qYDOgpV1vuYR6hRtitA,5143
70
70
  imio/smartweb/common/profiles/testing/catalog.xml,sha256=CzEXLuHkT5NH-lRzTSDIR_3y_U7t2D7oBDm1oAJIoP4,214
71
71
  imio/smartweb/common/profiles/testing/metadata.xml,sha256=hPZnje-9ffhOiQfVamGoE_lOf9ISjBBf2ynQlg-Hv20,229
72
72
  imio/smartweb/common/profiles/testing/registry.xml,sha256=8lTQSGT_bnP2Z0y-86ztgpdQY8yDOLoXgqTC7fXiD2Y,1010
@@ -75,7 +75,8 @@ imio/smartweb/common/profiles/testing/types/Document.xml,sha256=E3hhW_oL-WarUKcY
75
75
  imio/smartweb/common/profiles/testing/types/Folder.xml,sha256=RPxIPgViAK0GGGTPKbdlw53sywyQXPhVj6B8x0tYSD8,312
76
76
  imio/smartweb/common/profiles/uninstall/browserlayer.xml,sha256=glaCGlITwc36-1Fi2z0VCbLcoQ5GddkAhuW-SGYeZy8,130
77
77
  imio/smartweb/common/rest/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
78
- imio/smartweb/common/rest/configure.zcml,sha256=8hQGCvo1EMGFe9cNUpGOcH7spKhUkglFRnRkd9IJ2eE,301
78
+ imio/smartweb/common/rest/configure.zcml,sha256=eT5gr-PcfMRxQzMME7T3nzz2Y0BVI4r9HyKHIccQC2s,575
79
+ imio/smartweb/common/rest/endpoint.py,sha256=hgQsZW8VV9kOiupnSJfSTcXEecv2iAn76KSum5ysjnY,6712
79
80
  imio/smartweb/common/rest/odwb.py,sha256=zRZxowUaE76xlW_blc92vRCzToUpnzw3O5mxFXaeScU,2249
80
81
  imio/smartweb/common/rest/search_filters.py,sha256=upZAZ6h50qiSXo0q22lUgNlcmX5elFtrIQs_jFBl1-s,3832
81
82
  imio/smartweb/common/rest/utils.py,sha256=9zc5ge_DmVuexxN09c3U6QAITAI1s2hc0m6eZuylSxM,1269
@@ -111,7 +112,7 @@ imio/smartweb/common/tests/resources/image_1400x800.png,sha256=Iy3bWGH4NBlgYC5Bo
111
112
  imio/smartweb/common/tests/resources/image_1800x700.png,sha256=aQcMisSFQO78c6QX4mO7qIfDb9SDRmfzTuPjxMJ_0HM,32643
112
113
  imio/smartweb/common/tests/robot/test_example.robot,sha256=3ClbWps1Pfr6-RHT4FmmzGWGmtJrNnDW53bJGP69Nz4,2011
113
114
  imio/smartweb/common/upgrades/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
114
- imio/smartweb/common/upgrades/configure.zcml,sha256=hc2VR-xRvCjGpVJxWjJYTQ0CnGON0rAGgaMiHH0_JCs,16160
115
+ imio/smartweb/common/upgrades/configure.zcml,sha256=m-Trixs77TNqYg_WCdH8fqthgtCD0YGSjHkJ12jRpx8,16760
115
116
  imio/smartweb/common/upgrades/upgrades.py,sha256=NObmvdWPUrfgaPJhTB_tIZsmLawxg5jbui-TRLhS2NE,5474
116
117
  imio/smartweb/common/upgrades/profiles/1007_to_1008/rolemap.xml,sha256=dKUuBq-2pO4dGtHshBisISSTBP8aWfbwTGHj_pJvY5A,1346
117
118
  imio/smartweb/common/upgrades/profiles/1008_to_1009/actions.xml,sha256=D41gp1PDVINobhCM8L11IMXABYatjmoUuW-EQkPT804,721
@@ -134,6 +135,7 @@ imio/smartweb/common/upgrades/profiles/1028_to_1029/registry.xml,sha256=3XXZyTOD
134
135
  imio/smartweb/common/upgrades/profiles/1029_to_1030/registry.xml,sha256=cApJaG7duyGX3D3Bby3V3D8YcIAZuWB-A-WSH3XKU7E,406
135
136
  imio/smartweb/common/upgrades/profiles/1030_to_1031/registry/tinymce.xml,sha256=EYBpIVuUnQyfxntiLmXoTLiRHBzMlwzfFXmTqwMNrn0,5813
136
137
  imio/smartweb/common/upgrades/profiles/1031_to_1032/registry/tinymce.xml,sha256=3IOzZra7FIfxDO8DDIXwygL8z92f-cUCYEXq2GsVetg,2419
138
+ imio/smartweb/common/upgrades/profiles/1032_to_1033/registry/tinymce.xml,sha256=V-8TeadC9Wk4aEBPOKOKd_48iSeyQEYlYXMLP2ILJ10,2421
137
139
  imio/smartweb/common/viewlets/__init__.py,sha256=iwhKnzeBJLKxpRVjvzwiRE63_zNpIBfaKLITauVph-0,24
138
140
  imio/smartweb/common/viewlets/analytics.pt,sha256=J6e8fWmusLWMKXg3cJbNYV0LPS9ONz2yJ921vMvrrzE,33
139
141
  imio/smartweb/common/viewlets/colophon.pt,sha256=qaEUV2N5aZpAEcztLzK_R2eINBod1AByWxi11B1HYa0,1278
@@ -146,10 +148,10 @@ imio/smartweb/common/viewlets/skip_to_content.py,sha256=wm22NUf8Qh5uzz8p4vkLCdFN
146
148
  imio/smartweb/common/widgets/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
147
149
  imio/smartweb/common/widgets/select.py,sha256=5sV0UIgwu4AvwpgVmJeSZwUWz7OPD9VxYMowfmjcfbA,1313
148
150
  imio/smartweb/common/widgets/templates/ajaxselect_display.pt,sha256=v8TT2Xc19er6SUGWabgNfIdrayFYIjxyLK9H_XkIG3M,1209
149
- imio_smartweb_common-1.2.35.dist-info/licenses/LICENSE.GPL,sha256=gXf5dRMhNSbfLPYYTY_5hsZ1r7UU1OaKQEAQUhuIBkM,18092
150
- imio_smartweb_common-1.2.35.dist-info/licenses/LICENSE.rst,sha256=5dd78Fdt0e-oM2ICBrMpjHnT8vEP-jhBDF7akXni6B4,655
151
- imio_smartweb_common-1.2.35.dist-info/METADATA,sha256=HSWM1e8udHYqj3o5xNpsvFb3GLCKYYcHNmk6BJpnTzU,18389
152
- imio_smartweb_common-1.2.35.dist-info/WHEEL,sha256=zaaOINJESkSfm_4HQVc5ssNzHCPXhJm0kEUakpsEHaU,91
153
- imio_smartweb_common-1.2.35.dist-info/namespace_packages.txt,sha256=Pg8AH8t9viMMW1hJbNZvTy_n2jXG2igIYUpon5RA4Js,19
154
- imio_smartweb_common-1.2.35.dist-info/top_level.txt,sha256=ZktC0EGzThvMTAin9_q_41rzvvfMT2FYbP8pbhSLMSA,5
155
- imio_smartweb_common-1.2.35.dist-info/RECORD,,
151
+ imio_smartweb_common-1.2.37.dist-info/licenses/LICENSE.GPL,sha256=gXf5dRMhNSbfLPYYTY_5hsZ1r7UU1OaKQEAQUhuIBkM,18092
152
+ imio_smartweb_common-1.2.37.dist-info/licenses/LICENSE.rst,sha256=5dd78Fdt0e-oM2ICBrMpjHnT8vEP-jhBDF7akXni6B4,655
153
+ imio_smartweb_common-1.2.37.dist-info/METADATA,sha256=kCY4-SImXYTNlaTQ8SA2iHzNOjaM2B8-wSxhJz_Q-ts,18813
154
+ imio_smartweb_common-1.2.37.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
155
+ imio_smartweb_common-1.2.37.dist-info/namespace_packages.txt,sha256=Pg8AH8t9viMMW1hJbNZvTy_n2jXG2igIYUpon5RA4Js,19
156
+ imio_smartweb_common-1.2.37.dist-info/top_level.txt,sha256=ZktC0EGzThvMTAin9_q_41rzvvfMT2FYbP8pbhSLMSA,5
157
+ imio_smartweb_common-1.2.37.dist-info/RECORD,,
@@ -1,5 +1,5 @@
1
1
  Wheel-Version: 1.0
2
- Generator: setuptools (80.8.0)
2
+ Generator: setuptools (80.9.0)
3
3
  Root-Is-Purelib: true
4
4
  Tag: py3-none-any
5
5