imio.smartweb.common 1.2.8__py3-none-any.whl → 1.2.12__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,7 +1,7 @@
1
1
  # -*- coding: utf-8 -*-
2
2
 
3
3
  from imio.smartweb.locales import SmartwebMessageFactory as _
4
- from plone.app.z3cform.widget import SelectFieldWidget
4
+ from plone.app.z3cform.widget import AjaxSelectFieldWidget
5
5
  from plone.autoform import directives
6
6
  from plone.autoform.interfaces import IFormFieldProvider
7
7
  from plone.supermodel import model
@@ -21,4 +21,4 @@ class ITopics(model.Schema):
21
21
  default=[],
22
22
  required=False,
23
23
  )
24
- directives.widget(topics=SelectFieldWidget)
24
+ directives.widget(topics=AjaxSelectFieldWidget)
@@ -0,0 +1,67 @@
1
+ # -*- coding: utf-8 -*-
2
+
3
+ from imio.smartweb.common.utils import is_staging_or_local
4
+ from plone import api
5
+ from plone.restapi.services import Service
6
+ from zope.interface import implementer
7
+ from zope.interface import Interface
8
+
9
+ import logging
10
+ import requests
11
+
12
+ logger = logging.getLogger("imio.smartweb.common")
13
+
14
+
15
+ class IOdwbService(Interface):
16
+
17
+ def available():
18
+ """ """
19
+
20
+ def reply():
21
+ """ """
22
+
23
+ def remove():
24
+ """ """
25
+
26
+
27
+ @implementer(IOdwbService)
28
+ class OdwbService(Service):
29
+
30
+ def available(self):
31
+ staging_or_local = is_staging_or_local()
32
+ if staging_or_local:
33
+ logger.info(
34
+ "Don't send odwb data when we are in staging or local environment"
35
+ )
36
+ return not staging_or_local
37
+
38
+
39
+ class OdwbBaseEndpointGet(OdwbService):
40
+
41
+ def __init__(self, context, request, odwb_imio_service, odbw_pushkey):
42
+ self.odwb_api_push_url = "https://www.odwb.be/api/push/1.0"
43
+ self.odwb_imio_service = odwb_imio_service
44
+ self.odwb_pushkey = api.portal.get_registry_record(odbw_pushkey)
45
+
46
+ self.context = context
47
+ self.request = request
48
+ self.__datas__ = []
49
+
50
+ def odwb_query(self, url, payload, headers=None):
51
+ if headers is None:
52
+ headers = {"Content-Type": "application/json"}
53
+ try:
54
+ response = requests.post(url, headers=headers, data=payload)
55
+ return response.text
56
+ except requests.exceptions.ConnectionError as e:
57
+ logger.error("ODWB : Connection error: %s", e)
58
+ return "ODWB : Connection error occurred"
59
+ except requests.exceptions.Timeout as e:
60
+ logger.error("ODWB : Request timed out: %s", e)
61
+ return "ODWB : Request timed out"
62
+ except requests.exceptions.HTTPError as e:
63
+ logger.error("ODWB : HTTP error occurred: %s", e)
64
+ return "ODWB : HTTP error occurred"
65
+ except Exception as e:
66
+ logger.error("ODWB : An unexpected error occurred: %s", e)
67
+ return "ODWB : Unexpected error occurred"
@@ -1,11 +1,13 @@
1
1
  # -*- coding: utf-8 -*-
2
2
 
3
+ from imio.smartweb.common.rest.odwb import OdwbService
3
4
  from imio.smartweb.common.rest.utils import get_restapi_query_lang
4
5
  from imio.smartweb.common.testing import IMIO_SMARTWEB_COMMON_ACCEPTANCE_TESTING
5
6
  from plone import api
6
7
  from plone.app.testing import setRoles
7
8
  from plone.app.testing import TEST_USER_ID
8
9
  from plone.restapi.testing import RelativeSession
10
+ from unittest.mock import patch
9
11
 
10
12
  import transaction
11
13
  import unittest
@@ -117,3 +119,14 @@ class TestREST(unittest.TestCase):
117
119
  self.assertNotIn("has_leadimage", json)
118
120
  self.assertNotIn("start", json)
119
121
  self.assertNotIn("UID", json)
122
+
123
+ @patch("imio.smartweb.common.utils.api.portal.get")
124
+ def test_odwb_service_environnement(self, mock_get):
125
+ mock_portal = mock_get.return_value
126
+ mock_portal.absolute_url.return_value = "http://localhost:8080"
127
+ endpoint = OdwbService()
128
+ self.assertEqual(endpoint.available(), False)
129
+
130
+ mock_portal.absolute_url.return_value = "https://www.production.be"
131
+ endpoint = OdwbService()
132
+ self.assertEqual(endpoint.available(), True)
@@ -376,4 +376,12 @@
376
376
  />
377
377
  </genericsetup:upgradeSteps>
378
378
 
379
+ <genericsetup:upgradeStep
380
+ title="Reindex SolR"
381
+ source="1026"
382
+ destination="1027"
383
+ handler=".upgrades.reindex_solr"
384
+ profile="imio.smartweb.common:default"
385
+ />
386
+
379
387
  </configure>
@@ -146,3 +146,10 @@ def set_effective_date_equal_to_created_date(context):
146
146
  obj = brain.getObject()
147
147
  obj.setEffectiveDate(obj.created())
148
148
  obj.reindexObject(idxs=["effective"])
149
+
150
+
151
+ def reindex_solr(context):
152
+ portal = api.portal.get()
153
+ maintenance = portal.unrestrictedTraverse("@@solr-maintenance")
154
+ maintenance.clear()
155
+ maintenance.reindex()
@@ -1,5 +1,6 @@
1
1
  # -*- coding: utf-8 -*-
2
2
 
3
+ from Acquisition import aq_parent
3
4
  from imio.smartweb.common.config import TRANSLATED_VOCABULARIES
4
5
  from imio.smartweb.common.interfaces import ICropping
5
6
  from imio.smartweb.locales import SmartwebMessageFactory as _
@@ -9,6 +10,7 @@ from plone.dexterity.utils import iterSchemata
9
10
  from plone.formwidget.geolocation.geolocation import Geolocation
10
11
  from plone.namedfile.field import NamedBlobImage
11
12
  from plone.namedfile.interfaces import IAvailableSizes
13
+ from urllib.parse import urlparse
12
14
  from zope.component import getUtility
13
15
  from zope.i18n import translate
14
16
  from zope.schema import getFields
@@ -168,3 +170,30 @@ def clean_invisible_char(value):
168
170
 
169
171
  def is_log_active():
170
172
  return api.portal.get_registry_record("imio.smartweb.common.log", default=False)
173
+
174
+
175
+ # todo: create staging/prod env var. instead of using parsed_url
176
+ def is_staging_or_local():
177
+ portal = api.portal.get()
178
+ portal_url = portal.absolute_url()
179
+ parsed_url = urlparse(portal_url)
180
+ scheme = parsed_url.scheme
181
+ netloc = parsed_url.netloc
182
+ elem = ["localhost", "127.0.0.1", "nohost"]
183
+ pattern = "|".join(map(re.escape, elem))
184
+ if scheme == "http" and re.search(pattern, netloc):
185
+ return True
186
+ elif scheme == "https" and "staging" in netloc:
187
+ return True
188
+ else:
189
+ return False
190
+
191
+
192
+ def get_parent_of_type(context, content_type):
193
+ # Traverse up the hierarchy until we find an object with the specified content type
194
+ parent = context
195
+ while parent is not None:
196
+ if getattr(parent, "portal_type", None) == content_type:
197
+ return parent
198
+ parent = aq_parent(parent)
199
+ return None
@@ -3,3 +3,9 @@
3
3
  tal:attributes="href string:${url}#content"
4
4
  i18n:domain="smartweb"
5
5
  i18n:translate="">Skip to content</a>
6
+
7
+ <a class="show-on-focus"
8
+ tal:define="url view/current_page_url"
9
+ tal:attributes="href string:${url}#portal-footer-wrapper"
10
+ i18n:domain="smartweb"
11
+ i18n:translate="">Skip to footer</a>
@@ -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
@@ -14,6 +15,7 @@ import json
14
15
 
15
16
  class TopicsVocabularyFactory:
16
17
  def __call__(self, context=None):
18
+ lang = api.portal.get_current_language()[:2]
17
19
  topics = [
18
20
  ("entertainment", _("Entertainment")),
19
21
  ("agriculture", _("Agriculture")),
@@ -33,7 +35,14 @@ class TopicsVocabularyFactory:
33
35
  ("territory_public_space", _("Territory and public space")),
34
36
  ("tourism", _("Tourism")),
35
37
  ]
36
- terms = [SimpleTerm(value=t[0], token=t[0], title=t[1]) for t in topics]
38
+ terms = [
39
+ SimpleTerm(
40
+ value=t[0],
41
+ token=t[0],
42
+ title=translate(t[1], target_language=lang),
43
+ )
44
+ for t in topics
45
+ ]
37
46
  return SimpleVocabulary(terms)
38
47
 
39
48
 
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: imio.smartweb.common
3
- Version: 1.2.8
3
+ Version: 1.2.12
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
@@ -28,8 +28,8 @@ Requires-Dist: z3c.jbot
28
28
  Requires-Dist: z3c.unconfigure
29
29
  Requires-Dist: beautifulsoup4
30
30
  Requires-Dist: geopy
31
- Requires-Dist: Products.GenericSetup >=1.8.2
32
- Requires-Dist: plone.api >=1.8.4
31
+ Requires-Dist: Products.GenericSetup (>=1.8.2)
32
+ Requires-Dist: plone.api (>=1.8.4)
33
33
  Requires-Dist: plone.restapi
34
34
  Requires-Dist: plone.app.dexterity
35
35
  Requires-Dist: plone.app.imagecropping
@@ -44,7 +44,7 @@ Requires-Dist: imio.smartweb.locales
44
44
  Requires-Dist: more-itertools
45
45
  Provides-Extra: test
46
46
  Requires-Dist: plone.app.testing ; extra == 'test'
47
- Requires-Dist: plone.testing >=5.0.0 ; extra == 'test'
47
+ Requires-Dist: plone.testing (>=5.0.0) ; extra == 'test'
48
48
  Requires-Dist: plone.app.robotframework[debug] ; extra == 'test'
49
49
  Requires-Dist: plone.restapi[test] ; extra == 'test'
50
50
  Requires-Dist: freezegun ; extra == 'test'
@@ -160,6 +160,38 @@ Changelog
160
160
  =========
161
161
 
162
162
 
163
+ 1.2.12 (2024-05-06)
164
+ -------------------
165
+
166
+ - WEB-4102 : Add second skip to footer
167
+ [thomlamb]
168
+
169
+
170
+ 1.2.11 (2024-05-02)
171
+ -------------------
172
+
173
+ - WEB-4101 : Fix vocabulary terms translation (for Topics only - for the moment)
174
+ when used with `AjaxSelectFieldWidget`
175
+ [laulaz]
176
+
177
+
178
+ 1.2.10 (2024-05-02)
179
+ -------------------
180
+
181
+ - WEB-4101 : Change Topics field widget to keep value ordering
182
+ [laulaz]
183
+
184
+ - WEB-4088 : Implement some odwb utils and generic classes
185
+ [boulch]
186
+
187
+
188
+ 1.2.9 (2024-02-08)
189
+ ------------------
190
+
191
+ - WEB-4064 : Reindex SolR because of changes in schema
192
+ [remdub]
193
+
194
+
163
195
  1.2.8 (2024-02-02)
164
196
  ------------------
165
197
 
@@ -1,4 +1,4 @@
1
- imio.smartweb.common-1.2.8-py3.8-nspkg.pth,sha256=wnCUSUElqssZ5FI3x-9HqwD229HQ-bAuPoDUNJHmMtU,1684
1
+ imio.smartweb.common-1.2.12-py3.10-nspkg.pth,sha256=wnCUSUElqssZ5FI3x-9HqwD229HQ-bAuPoDUNJHmMtU,1684
2
2
  imio/smartweb/common/__init__.py,sha256=Na9XBfEQUMrm2c5jbqQgwWeg40ih0aXVG1vT8NeAjMQ,2709
3
3
  imio/smartweb/common/adapters.py,sha256=rLlObjqZm3hs2hgUT-LmJytwhT-E1rTvbpIi0mmKQqY,610
4
4
  imio/smartweb/common/adapters.zcml,sha256=ndYNj0J_BFfVpX_7JhY2asSwLzXG-WmjLdfwL9hX_No,254
@@ -17,13 +17,13 @@ imio/smartweb/common/setuphandlers.py,sha256=ejKHdgROXjmDM7dgoAh9sITiAJDfQGNxTEO
17
17
  imio/smartweb/common/subscribers.py,sha256=GHG_PIqsNV7K-pr_cXceQx1WCXylvQiv1lCgSGNJIno,2608
18
18
  imio/smartweb/common/subscribers.zcml,sha256=WZNhGtbTux2DoWHhLCQd1uJY27VhVLsibf0bdsclHOU,860
19
19
  imio/smartweb/common/testing.py,sha256=fjNzFXCZpT6xtE3oSb7R5dW1n4bILtpv9LA3FugI1Zw,1964
20
- imio/smartweb/common/utils.py,sha256=mC1VA-N7t6wAKU8JkFeh6lzCgzT8vWxuyPwja_UK8m4,5841
21
- imio/smartweb/common/vocabularies.py,sha256=QRIOWLOALzZDM92o1iUTWgDBBcrdd9BYz7miNjpYCDA,3835
20
+ imio/smartweb/common/utils.py,sha256=sdj2oYwlJ_AXuqTotLoJYv74lNKWSqm6_iVztcAUj94,6774
21
+ imio/smartweb/common/vocabularies.py,sha256=g15ykmmsbcGsHHdef26MDFUf5ZIzGMyRFitf_fuFjSo,4050
22
22
  imio/smartweb/common/vocabularies.zcml,sha256=iFJer5q3wabBp_EZivPPVUqI1_9w5P_Ft1RGJB5Yqxs,940
23
23
  imio/smartweb/common/behaviors/__init__.py,sha256=iwhKnzeBJLKxpRVjvzwiRE63_zNpIBfaKLITauVph-0,24
24
24
  imio/smartweb/common/behaviors/configure.zcml,sha256=RfGH8DIybHpxxe2HUsjH2QKSiWYpV7lCZhGN6KLFwCw,531
25
25
  imio/smartweb/common/behaviors/iam.py,sha256=17ON7M6FHXOM_8NOHT_QnJJuAIs4diWCrguHP6Lh5oA,825
26
- imio/smartweb/common/behaviors/topics.py,sha256=CallVa_wB-QZMGboxGARcBihW5VzwitIlcYNzwSk80Q,824
26
+ imio/smartweb/common/behaviors/topics.py,sha256=mguoFXN5XjcGXvA5HeV_l7-gJ5eR0hfjN1nbXYogcWw,832
27
27
  imio/smartweb/common/browser/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
28
28
  imio/smartweb/common/browser/configure.zcml,sha256=Ph2JGC7VX_Oy4nIJ9z8GDAF9pWZRmk4yDosAzpDRJxA,2667
29
29
  imio/smartweb/common/browser/cropping.py,sha256=uB0UiCUVMD1YT4a1rBmRzmhtnbatrPAXZztkSypiE6s,2676
@@ -68,6 +68,7 @@ imio/smartweb/common/profiles/testing/types/Folder.xml,sha256=RPxIPgViAK0GGGTPKb
68
68
  imio/smartweb/common/profiles/uninstall/browserlayer.xml,sha256=glaCGlITwc36-1Fi2z0VCbLcoQ5GddkAhuW-SGYeZy8,130
69
69
  imio/smartweb/common/rest/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
70
70
  imio/smartweb/common/rest/configure.zcml,sha256=8hQGCvo1EMGFe9cNUpGOcH7spKhUkglFRnRkd9IJ2eE,301
71
+ imio/smartweb/common/rest/odwb.py,sha256=36g6Hs_i6FfliKWA63ELlE3_89B_zp-p99Zo_BKGYhM,2072
71
72
  imio/smartweb/common/rest/search_filters.py,sha256=uiNdTF0P9oW_VpSgL8qV9q015BUe9Xigs3K1DNbK7uI,3349
72
73
  imio/smartweb/common/rest/utils.py,sha256=9zc5ge_DmVuexxN09c3U6QAITAI1s2hc0m6eZuylSxM,1269
73
74
  imio/smartweb/common/sharing/__init__.py,sha256=I_cdzTAnsdb8tEO2kg2lzRkeA7wIGPqHKzu7LBxDwtk,56
@@ -83,7 +84,7 @@ imio/smartweb/common/tests/test_indexes.py,sha256=3dzPAEbqnRqthKX9YUXM_dSbuZzWV-
83
84
  imio/smartweb/common/tests/test_local_roles.py,sha256=4cwVdtrkeecp3HRM26db6AJHJ7HvIzqtYkBzgfOeeH4,3370
84
85
  imio/smartweb/common/tests/test_permissions.py,sha256=LCz7Ixpd1IrzJeTV6Ov5GXjWNVz7h5UbpS9-DD4SjmE,1578
85
86
  imio/smartweb/common/tests/test_privacy.py,sha256=ObnquDYgd29P9hxnpF6VxuOtyVgxvW8HQnf8ZBDGnXk,2953
86
- imio/smartweb/common/tests/test_rest.py,sha256=xLJTJVf0Ebxs7d4-BEKqcnsM99KevjLgaSbzPMzAPEQ,3799
87
+ imio/smartweb/common/tests/test_rest.py,sha256=KbT8gVHym1GhUMVNhSKXNjdRWmbnktg7twex5LiLIAQ,4366
87
88
  imio/smartweb/common/tests/test_robot.py,sha256=0Qdn5A8lXoVxQ9zE9IIhekSqfJJF003KiYqLVuDrros,955
88
89
  imio/smartweb/common/tests/test_setup.py,sha256=TxoQZrESFOgGRBN9uO8FzEOx57G550YICBd-NzaGHvY,2102
89
90
  imio/smartweb/common/tests/test_subscribers.py,sha256=AiJ5LTqGP2JKGJFYNeCCAMJL53DWO41iYQ9VYiA7DIA,1699
@@ -96,8 +97,8 @@ imio/smartweb/common/tests/resources/image_1400x800.png,sha256=Iy3bWGH4NBlgYC5Bo
96
97
  imio/smartweb/common/tests/resources/image_1800x700.png,sha256=aQcMisSFQO78c6QX4mO7qIfDb9SDRmfzTuPjxMJ_0HM,32643
97
98
  imio/smartweb/common/tests/robot/test_example.robot,sha256=3ClbWps1Pfr6-RHT4FmmzGWGmtJrNnDW53bJGP69Nz4,2011
98
99
  imio/smartweb/common/upgrades/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
99
- imio/smartweb/common/upgrades/configure.zcml,sha256=uuqS7V08MgqI2vMTBc-W1VpXS8SK999CxIJVDhwB5Fc,12591
100
- imio/smartweb/common/upgrades/upgrades.py,sha256=3hfYLIupp_1Js0D1N5hO3A4vdeN_TWIJacfEjCBig9c,5297
100
+ imio/smartweb/common/upgrades/configure.zcml,sha256=IASXLaJj1kgXzDiPQFxzqCGKBt4vuWhb4aulFGbMkKk,12785
101
+ imio/smartweb/common/upgrades/upgrades.py,sha256=NObmvdWPUrfgaPJhTB_tIZsmLawxg5jbui-TRLhS2NE,5474
101
102
  imio/smartweb/common/upgrades/profiles/1007_to_1008/rolemap.xml,sha256=dKUuBq-2pO4dGtHshBisISSTBP8aWfbwTGHj_pJvY5A,1346
102
103
  imio/smartweb/common/upgrades/profiles/1008_to_1009/actions.xml,sha256=D41gp1PDVINobhCM8L11IMXABYatjmoUuW-EQkPT804,721
103
104
  imio/smartweb/common/upgrades/profiles/1009_to_1010/registry/tiny_nonbreakingspace.xml,sha256=u3qd6CPmX52ITUUayJW28m578LP1Nw6wsM2r8B03nTo,587
@@ -121,12 +122,12 @@ imio/smartweb/common/viewlets/colophon.py,sha256=Rt3ZPj2F0kcVG-vhl8JIyAHlVVJ8pkt
121
122
  imio/smartweb/common/viewlets/configure.zcml,sha256=uDHHrOeEGhrYYkvhasor_tXpHfdq1IT766h4T7H5kdQ,1758
122
123
  imio/smartweb/common/viewlets/privacy.pt,sha256=bAD-I6s3LUgkh30vyTbP3pNUZQYua1Kx4aZpPGZaJVE,1212
123
124
  imio/smartweb/common/viewlets/privacy.py,sha256=H752etTTIFCM0wTwjESQFl0PStJfCoSRfcePSUQOp8E,449
124
- imio/smartweb/common/viewlets/skip_to_content.pt,sha256=f5_ZURM6khQbavEzKh7yaFxYhlg1BKxSCZNLP1gonUA,181
125
+ imio/smartweb/common/viewlets/skip_to_content.pt,sha256=FFfTxvRl8V52FzFE6In6B34ApgShNntvMp6F1qwfL0g,376
125
126
  imio/smartweb/common/viewlets/skip_to_content.py,sha256=wm22NUf8Qh5uzz8p4vkLCdFNiDv9zUGAueRyXAIXQDo,496
126
- imio.smartweb.common-1.2.8.dist-info/LICENSE.GPL,sha256=gXf5dRMhNSbfLPYYTY_5hsZ1r7UU1OaKQEAQUhuIBkM,18092
127
- imio.smartweb.common-1.2.8.dist-info/LICENSE.rst,sha256=5dd78Fdt0e-oM2ICBrMpjHnT8vEP-jhBDF7akXni6B4,655
128
- imio.smartweb.common-1.2.8.dist-info/METADATA,sha256=IQh71Egcsy1h6FWC4EkCxH4sQ0nYnVX3km_J3O-9xBI,13418
129
- imio.smartweb.common-1.2.8.dist-info/WHEEL,sha256=yQN5g4mg4AybRjkgi-9yy4iQEFibGQmlz78Pik5Or-A,92
130
- imio.smartweb.common-1.2.8.dist-info/namespace_packages.txt,sha256=Pg8AH8t9viMMW1hJbNZvTy_n2jXG2igIYUpon5RA4Js,19
131
- imio.smartweb.common-1.2.8.dist-info/top_level.txt,sha256=ZktC0EGzThvMTAin9_q_41rzvvfMT2FYbP8pbhSLMSA,5
132
- imio.smartweb.common-1.2.8.dist-info/RECORD,,
127
+ imio.smartweb.common-1.2.12.dist-info/LICENSE.GPL,sha256=gXf5dRMhNSbfLPYYTY_5hsZ1r7UU1OaKQEAQUhuIBkM,18092
128
+ imio.smartweb.common-1.2.12.dist-info/LICENSE.rst,sha256=5dd78Fdt0e-oM2ICBrMpjHnT8vEP-jhBDF7akXni6B4,655
129
+ imio.smartweb.common-1.2.12.dist-info/METADATA,sha256=IARR82taBusp5de_TiQWYX7J90DP3ercwb50ZMi5Zlg,13991
130
+ imio.smartweb.common-1.2.12.dist-info/WHEEL,sha256=pkctZYzUS4AYVn6dJ-7367OJZivF2e8RA9b_ZBjif18,92
131
+ imio.smartweb.common-1.2.12.dist-info/namespace_packages.txt,sha256=Pg8AH8t9viMMW1hJbNZvTy_n2jXG2igIYUpon5RA4Js,19
132
+ imio.smartweb.common-1.2.12.dist-info/top_level.txt,sha256=ZktC0EGzThvMTAin9_q_41rzvvfMT2FYbP8pbhSLMSA,5
133
+ imio.smartweb.common-1.2.12.dist-info/RECORD,,
@@ -1,5 +1,5 @@
1
1
  Wheel-Version: 1.0
2
- Generator: bdist_wheel (0.41.2)
2
+ Generator: bdist_wheel (0.40.0)
3
3
  Root-Is-Purelib: true
4
4
  Tag: py3-none-any
5
5