Skip to content

Commit 9153d80

Browse files
authored
Merge pull request #4129 from plone/drop-pkg-resources-usage
Replace pkg_resources usage
2 parents e779b9a + 2a95a6f commit 9153d80

File tree

9 files changed

+38
-39
lines changed

9 files changed

+38
-39
lines changed

Products/CMFPlone/MigrationTool.py

+13-13
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,8 @@
22
from AccessControl.class_init import InitializeClass
33
from AccessControl.requestmethod import postonly
44
from App.config import getConfiguration
5+
from importlib.metadata import distribution
6+
from importlib.metadata import PackageNotFoundError
57
from io import StringIO
68
from OFS.SimpleItem import SimpleItem
79
from plone.base.interfaces import IMigrationTool
@@ -15,7 +17,6 @@
1517
from zope.interface import implementer
1618

1719
import logging
18-
import pkg_resources
1920
import sys
2021
import transaction
2122

@@ -149,7 +150,7 @@ def getInstanceVersion(self):
149150

150151
if version == "unknown":
151152
if _version:
152-
# Instance version was not pkg_resources compatible...
153+
# Instance version was not standard...
153154
_version = _version.replace("devel (svn/unreleased)", "dev")
154155
_version = _version.rstrip("-final")
155156
_version = _version.rstrip("final")
@@ -185,7 +186,7 @@ def getFileSystemVersion(self):
185186

186187
def getSoftwareVersion(self):
187188
# The software version.
188-
dist = pkg_resources.get_distribution("Products.CMFPlone")
189+
dist = distribution("Products.CMFPlone")
189190
return dist.version
190191

191192
security.declareProtected(ManagePortal, "needUpgrading")
@@ -199,24 +200,23 @@ def needUpgrading(self):
199200
def coreVersions(self):
200201
# Useful core information.
201202
vars = {}
202-
get_dist = pkg_resources.get_distribution
203-
vars["Zope"] = get_dist("Zope").version
203+
vars["Zope"] = distribution("Zope").version
204204
vars["Python"] = sys.version
205205
vars["Platform"] = sys.platform
206-
vars["Plone"] = get_dist("Products.CMFPlone").version
206+
vars["Plone"] = distribution("Products.CMFPlone").version
207207
vars["Plone Instance"] = self.getInstanceVersion()
208208
vars["Plone File System"] = self.getFileSystemVersion()
209-
vars["CMF"] = get_dist("Products.CMFCore").version
209+
vars["CMF"] = distribution("Products.CMFCore").version
210210
vars["Debug mode"] = getConfiguration().debug_mode and "Yes" or "No"
211211
try:
212-
vars["PIL"] = get_dist("PIL").version
213-
except pkg_resources.DistributionNotFound:
212+
vars["PIL"] = distribution("PIL").version
213+
except PackageNotFoundError:
214214
try:
215-
vars["PIL"] = get_dist("PILwoTK").version
216-
except pkg_resources.DistributionNotFound:
215+
vars["PIL"] = distribution("PILwoTK").version
216+
except PackageNotFoundError:
217217
try:
218-
vars["PIL"] = "%s (Pillow)" % get_dist("Pillow").version
219-
except pkg_resources.DistributionNotFound:
218+
vars["PIL"] = "%s (Pillow)" % distribution("Pillow").version
219+
except PackageNotFoundError:
220220
try:
221221
import _imaging
222222

Products/CMFPlone/WorkflowTool.py

+5-12
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,8 @@
22
from AccessControl import getSecurityManager
33
from AccessControl.class_init import InitializeClass
44
from Acquisition import aq_base
5+
from importlib.metadata import distribution
6+
from importlib.metadata import PackageNotFoundError
57
from plone.base.interfaces import IWorkflowChain
68
from Products.CMFCore.permissions import ManagePortal
79
from Products.CMFCore.utils import getToolByName
@@ -11,22 +13,13 @@
1113
from ZODB.POSException import ConflictError
1214
from zope.component import getMultiAdapter
1315

14-
import pkg_resources
15-
1616

1717
try:
18-
pkg_resources.get_distribution("plone.app.multilingual")
19-
except pkg_resources.DistributionNotFound:
18+
multilingual_version = distribution("plone.app.multilingual").version
19+
except PackageNotFoundError:
2020
has_new_lang_bypass = False
2121
else:
22-
has_new_lang_bypass = (
23-
int(
24-
pkg_resources.get_distribution("plone.app.multilingual").version.split(".")[
25-
0
26-
]
27-
)
28-
> 1
29-
)
22+
has_new_lang_bypass = int(multilingual_version.split(".")[0]) > 1
3023

3124

3225
class WorkflowTool(PloneBaseTool, BaseTool):

Products/CMFPlone/bbb.py

+4-3
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,11 @@
1-
import pkg_resources
1+
from importlib.metadata import distribution
2+
from importlib.metadata import PackageNotFoundError
23

34

45
HAS_ZSERVER = True
56
try:
6-
dist = pkg_resources.get_distribution("ZServer")
7-
except pkg_resources.DistributionNotFound:
7+
dist = distribution("ZServer")
8+
except PackageNotFoundError:
89
HAS_ZSERVER = False
910

1011
NullResource = None

Products/CMFPlone/controlpanel/browser/overview.py

+2-2
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
from AccessControl import getSecurityManager
22
from Acquisition import aq_inner
33
from App.config import getConfiguration
4+
from importlib.metadata import distribution
45
from plone.app.registry.browser import controlpanel
56
from plone.base.interfaces.controlpanel import IMailSchema
67
from plone.memoize.instance import memoize
@@ -11,7 +12,6 @@
1112
from zope.component import getUtility
1213
from ZPublisher.HTTPRequest import WSGIRequest
1314

14-
import pkg_resources
1515
import warnings
1616

1717

@@ -61,7 +61,7 @@ def server_info(self):
6161
elif "/" in server_name:
6262
server_name = server_name.split("/")[0]
6363
try:
64-
server = pkg_resources.get_distribution(server_name)
64+
server = distribution(server_name)
6565
server_version = server.version
6666
except Exception:
6767
warnings.warn(

Products/CMFPlone/controlpanel/browser/quickinstaller.py

+6-4
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,6 @@
1+
from importlib.metadata import distribution
2+
from importlib.metadata import PackageNotFoundError
3+
from packaging import version
14
from plone.base import PloneMessageFactory as _
25
from plone.base.interfaces import INonInstallable
36
from plone.memoize import view
@@ -10,7 +13,6 @@
1013
from zope.i18n import translate
1114

1215
import logging
13-
import pkg_resources
1416
import transaction
1517

1618

@@ -207,9 +209,9 @@ def is_product_installable(self, product_id, allow_hidden=False):
207209
def get_product_version(self, product_id):
208210
"""Return the version of the product (package)."""
209211
try:
210-
dist = pkg_resources.get_distribution(product_id)
212+
dist = distribution(product_id)
211213
return dist.version
212-
except pkg_resources.DistributionNotFound:
214+
except PackageNotFoundError:
213215
if "." in product_id:
214216
return ""
215217
# For CMFPlacefulWorkflow we need to try Products.CMFPlacefulWorkflow.
@@ -226,7 +228,7 @@ def get_latest_upgrade_step(self, profile_id):
226228
available = self.ps.listUpgrades(profile_id, True)
227229
if available: # could return empty sequence
228230
latest = available[-1]
229-
profile_version = max(latest["dest"], key=pkg_resources.parse_version)
231+
profile_version = max(latest["dest"], key=version.parse)
230232
except Exception:
231233
pass
232234
return profile_version

Products/CMFPlone/relationhelper.py

+4-3
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,8 @@
22
from collections import defaultdict
33
from collections import OrderedDict
44
from five.intid.intid import addIntIdSubscriber
5+
from importlib.metadata import distribution
6+
from importlib.metadata import PackageNotFoundError
57
from plone.app.linkintegrity.handlers import modifiedContent
68
from plone.app.linkintegrity.utils import referencedRelationship
79
from plone.app.relationfield.event import update_behavior_relations
@@ -24,13 +26,12 @@
2426
from zope.intid.interfaces import ObjectMissingError
2527

2628
import logging
27-
import pkg_resources
2829

2930

3031
try:
3132
# "iterate" is not a dependency of CMFPlone, but a consumer of it
32-
pkg_resources.get_distribution("plone.app.iterate")
33-
except pkg_resources.DistributionNotFound:
33+
distribution("plone.app.iterate")
34+
except PackageNotFoundError:
3435
HAS_ITERATE = False
3536
else:
3637
HAS_ITERATE = True

Products/CMFPlone/utils.py

+2-2
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,7 @@
1111
from App.ImageFile import ImageFile
1212
from DateTime import DateTime
1313
from html import escape
14+
from importlib.metadata import distribution
1415
from OFS.CopySupport import CopyError
1516
from os.path import abspath
1617
from os.path import join
@@ -40,7 +41,6 @@
4041
from zope.interface import implementedBy
4142

4243
import OFS
43-
import pkg_resources
4444
import re
4545
import sys
4646
import transaction
@@ -312,7 +312,7 @@ def versionTupleFromString(v_str):
312312

313313
def getFSVersionTuple():
314314
"""Returns Products.CMFPlone version tuple"""
315-
version = pkg_resources.get_distribution("Products.CMFPlone").version
315+
version = distribution("Products.CMFPlone").version
316316
return versionTupleFromString(version)
317317

318318

news/4126.bugfix

+1
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
Replace `pkg_resources` with `importlib.metadata` and `packaging`. @gforcada

setup.py

+1
Original file line numberDiff line numberDiff line change
@@ -53,6 +53,7 @@
5353
"five.customerize",
5454
"five.intid",
5555
"lxml",
56+
"packaging",
5657
"plone.app.content",
5758
"plone.app.contentlisting",
5859
"plone.app.contentmenu >= 2.0.1",

0 commit comments

Comments
 (0)