summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRan Benita <ran@unusedvar.com>2023-04-04 11:54:53 +0300
committerGitHub <noreply@github.com>2023-04-04 11:54:53 +0300
commit3afb91c1ac0efafd14db2246299579ffe47ae828 (patch)
treee605316ef9e9f0c2a2f78c4b033b1cbe463e96fa
parentbe291699755e58ff398f90b5e71bff1e163df1db (diff)
downloadapscheduler-3.x.tar.gz
[3.x] Fix pkg_resources deprecation - use importlib.metadata when available (#726)3.x
* Fix pkg_resources deprecation - use importlib.metadata when available Usage of pkg_resources now emits a deprecation warning. It is also quite slow (just importing it). Use importlib.metadata instead which is the recommended alternative. * Use importlib-metadata backport for older pythons * Removed setuptools as a run-time dependency --------- Co-authored-by: Alex Grönholm <alex.gronholm@nextday.fi>
-rw-r--r--apscheduler/__init__.py13
-rw-r--r--apscheduler/schedulers/base.py18
-rw-r--r--setup.py4
3 files changed, 25 insertions, 10 deletions
diff --git a/apscheduler/__init__.py b/apscheduler/__init__.py
index 968169a..651aba4 100644
--- a/apscheduler/__init__.py
+++ b/apscheduler/__init__.py
@@ -1,10 +1,15 @@
-from pkg_resources import get_distribution, DistributionNotFound
+import sys
+if sys.version_info >= (3, 8):
+ import importlib.metadata as importlib_metadata
+else:
+ import importlib_metadata
+
try:
- release = get_distribution('APScheduler').version.split('-')[0]
-except DistributionNotFound:
+ release = importlib_metadata.version('APScheduler').split('-')[0]
+except importlib_metadata.PackageNotFoundError:
release = '3.5.0'
version_info = tuple(int(x) if x.isdigit() else x for x in release.split('.'))
version = __version__ = '.'.join(str(x) for x in version_info[:3])
-del get_distribution, DistributionNotFound
+del sys, importlib_metadata
diff --git a/apscheduler/schedulers/base.py b/apscheduler/schedulers/base.py
index 444de8e..3ce2bfc 100644
--- a/apscheduler/schedulers/base.py
+++ b/apscheduler/schedulers/base.py
@@ -7,7 +7,6 @@ from logging import getLogger
import warnings
import sys
-from pkg_resources import iter_entry_points
from tzlocal import get_localzone
import six
@@ -31,6 +30,11 @@ try:
except ImportError:
from collections import MutableMapping
+try:
+ from importlib.metadata import entry_points
+except ModuleNotFoundError:
+ from importlib_metadata import entry_points
+
#: constant indicating a scheduler's stopped state
STATE_STOPPED = 0
#: constant indicating a scheduler's running state (started and processing jobs)
@@ -62,12 +66,18 @@ class BaseScheduler(six.with_metaclass(ABCMeta)):
.. seealso:: :ref:`scheduler-config`
"""
+ # The `group=...` API is only available in the backport, used in <=3.7, and in std>=3.10.
+ if (3, 8) <= sys.version_info <= (3, 9):
+ _trigger_plugins = {ep.name: ep for ep in entry_points()['apscheduler.triggers']}
+ _executor_plugins = {ep.name: ep for ep in entry_points()['apscheduler.executors']}
+ _jobstore_plugins = {ep.name: ep for ep in entry_points()['apscheduler.jobstores']}
+ else:
+ _trigger_plugins = {ep.name: ep for ep in entry_points(group='apscheduler.triggers')}
+ _executor_plugins = {ep.name: ep for ep in entry_points(group='apscheduler.executors')}
+ _jobstore_plugins = {ep.name: ep for ep in entry_points(group='apscheduler.jobstores')}
- _trigger_plugins = dict((ep.name, ep) for ep in iter_entry_points('apscheduler.triggers'))
_trigger_classes = {}
- _executor_plugins = dict((ep.name, ep) for ep in iter_entry_points('apscheduler.executors'))
_executor_classes = {}
- _jobstore_plugins = dict((ep.name, ep) for ep in iter_entry_points('apscheduler.jobstores'))
_jobstore_classes = {}
#
diff --git a/setup.py b/setup.py
index 3b452aa..cd93e10 100644
--- a/setup.py
+++ b/setup.py
@@ -39,10 +39,10 @@ setup(
'setuptools_scm'
],
install_requires=[
- 'setuptools >= 0.7',
'six >= 1.4.0',
'pytz',
- 'tzlocal >= 2.0, != 3.*'
+ 'tzlocal >= 2.0, != 3.*',
+ 'importlib-metadata >= 3.6.0; python_version < "3.8"',
],
extras_require={
'gevent': ['gevent'],