summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAlex Grönholm <alex.gronholm@nextday.fi>2021-10-09 12:51:45 +0300
committerAlex Grönholm <alex.gronholm@nextday.fi>2021-10-09 12:51:45 +0300
commit3ab5e567b70325f1b2469536e365f9ae39da9844 (patch)
tree091096e53bd20cbec87b4709d0b93765e332098d
parent71c698053524b8d0da52970ddeefa65fb764023d (diff)
downloadapscheduler-3ab5e567b70325f1b2469536e365f9ae39da9844.tar.gz
Enabled the use of tzlocal 4+
-rw-r--r--apscheduler/schedulers/base.py6
-rw-r--r--apscheduler/triggers/cron/__init__.py6
-rw-r--r--apscheduler/triggers/date.py6
-rw-r--r--apscheduler/triggers/interval.py7
-rw-r--r--apscheduler/util.py11
-rw-r--r--docs/versionhistory.rst6
-rw-r--r--setup.py5
7 files changed, 30 insertions, 17 deletions
diff --git a/apscheduler/schedulers/base.py b/apscheduler/schedulers/base.py
index 3dfb743..b750650 100644
--- a/apscheduler/schedulers/base.py
+++ b/apscheduler/schedulers/base.py
@@ -8,7 +8,6 @@ import warnings
import sys
from pkg_resources import iter_entry_points
-from tzlocal import get_localzone
import six
from apscheduler.schedulers import SchedulerAlreadyRunningError, SchedulerNotRunningError
@@ -19,7 +18,8 @@ from apscheduler.jobstores.memory import MemoryJobStore
from apscheduler.job import Job
from apscheduler.triggers.base import BaseTrigger
from apscheduler.util import (
- asbool, asint, astimezone, maybe_ref, timedelta_seconds, undefined, TIMEOUT_MAX)
+ asbool, asint, astimezone, get_pytz_localzone, maybe_ref, timedelta_seconds, undefined,
+ TIMEOUT_MAX)
from apscheduler.events import (
SchedulerEvent, JobEvent, JobSubmissionEvent, EVENT_SCHEDULER_START, EVENT_SCHEDULER_SHUTDOWN,
EVENT_JOBSTORE_ADDED, EVENT_JOBSTORE_REMOVED, EVENT_ALL, EVENT_JOB_MODIFIED, EVENT_JOB_REMOVED,
@@ -699,7 +699,7 @@ class BaseScheduler(six.with_metaclass(ABCMeta)):
def _configure(self, config):
# Set general options
self._logger = maybe_ref(config.pop('logger', None)) or getLogger('apscheduler.scheduler')
- self.timezone = astimezone(config.pop('timezone', None)) or get_localzone()
+ self.timezone = astimezone(config.pop('timezone', None)) or get_pytz_localzone()
self.jobstore_retry_interval = float(config.pop('jobstore_retry_interval', 10))
# Set the job defaults
diff --git a/apscheduler/triggers/cron/__init__.py b/apscheduler/triggers/cron/__init__.py
index fec6e3b..28bda47 100644
--- a/apscheduler/triggers/cron/__init__.py
+++ b/apscheduler/triggers/cron/__init__.py
@@ -1,12 +1,12 @@
from datetime import datetime, timedelta
-from tzlocal import get_localzone
import six
from apscheduler.triggers.base import BaseTrigger
from apscheduler.triggers.cron.fields import (
BaseField, MonthField, WeekField, DayOfMonthField, DayOfWeekField, DEFAULT_VALUES)
-from apscheduler.util import datetime_ceil, convert_to_datetime, datetime_repr, astimezone
+from apscheduler.util import (
+ datetime_ceil, convert_to_datetime, datetime_repr, astimezone, get_pytz_localzone)
class CronTrigger(BaseTrigger):
@@ -55,7 +55,7 @@ class CronTrigger(BaseTrigger):
elif isinstance(end_date, datetime) and end_date.tzinfo:
self.timezone = end_date.tzinfo
else:
- self.timezone = get_localzone()
+ self.timezone = get_pytz_localzone()
self.start_date = convert_to_datetime(start_date, self.timezone, 'start_date')
self.end_date = convert_to_datetime(end_date, self.timezone, 'end_date')
diff --git a/apscheduler/triggers/date.py b/apscheduler/triggers/date.py
index 0768100..c6df3a8 100644
--- a/apscheduler/triggers/date.py
+++ b/apscheduler/triggers/date.py
@@ -1,9 +1,7 @@
from datetime import datetime
-from tzlocal import get_localzone
-
from apscheduler.triggers.base import BaseTrigger
-from apscheduler.util import convert_to_datetime, datetime_repr, astimezone
+from apscheduler.util import convert_to_datetime, datetime_repr, astimezone, get_pytz_localzone
class DateTrigger(BaseTrigger):
@@ -17,7 +15,7 @@ class DateTrigger(BaseTrigger):
__slots__ = 'run_date'
def __init__(self, run_date=None, timezone=None):
- timezone = astimezone(timezone) or get_localzone()
+ timezone = astimezone(timezone) or get_pytz_localzone()
if run_date is not None:
self.run_date = convert_to_datetime(run_date, timezone, 'run_date')
else:
diff --git a/apscheduler/triggers/interval.py b/apscheduler/triggers/interval.py
index 61094aa..ea8d024 100644
--- a/apscheduler/triggers/interval.py
+++ b/apscheduler/triggers/interval.py
@@ -1,10 +1,9 @@
from datetime import timedelta, datetime
from math import ceil
-from tzlocal import get_localzone
-
from apscheduler.triggers.base import BaseTrigger
-from apscheduler.util import convert_to_datetime, timedelta_seconds, datetime_repr, astimezone
+from apscheduler.util import (
+ convert_to_datetime, timedelta_seconds, datetime_repr, astimezone, get_pytz_localzone)
class IntervalTrigger(BaseTrigger):
@@ -41,7 +40,7 @@ class IntervalTrigger(BaseTrigger):
elif isinstance(end_date, datetime) and end_date.tzinfo:
self.timezone = end_date.tzinfo
else:
- self.timezone = get_localzone()
+ self.timezone = get_pytz_localzone()
start_date = start_date or (datetime.now(self.timezone) + self.interval)
self.start_date = convert_to_datetime(start_date, self.timezone, 'start_date')
diff --git a/apscheduler/util.py b/apscheduler/util.py
index 1e643bf..09749cc 100644
--- a/apscheduler/util.py
+++ b/apscheduler/util.py
@@ -11,6 +11,7 @@ import sys
from pytz import timezone, utc, FixedOffset
import six
+import tzlocal
try:
from inspect import signature
@@ -431,3 +432,13 @@ def iscoroutinefunction_partial(f):
# The asyncio version of iscoroutinefunction includes testing for @coroutine
# decorations vs. the inspect version which does not.
return iscoroutinefunction(f)
+
+
+def get_pytz_localzone():
+ if hasattr(tzlocal, 'get_localzone_name'):
+ # tzlocal 4 or later
+ zone_name = tzlocal.get_localzone_name()
+ return timezone(zone_name)
+ else:
+ # tzlocal 2 or earlier
+ return tzlocal.get_localzone()
diff --git a/docs/versionhistory.rst b/docs/versionhistory.rst
index d17efcc..68c272b 100644
--- a/docs/versionhistory.rst
+++ b/docs/versionhistory.rst
@@ -4,6 +4,12 @@ Version history
To find out how to migrate your application from a previous version of
APScheduler, see the :doc:`migration section <migration>`.
+UNRELEASED
+----------
+
+- Enabled the use of ``tzlocal`` 4 and later
+
+
3.8.0
-----
diff --git a/setup.py b/setup.py
index a33213f..6517efe 100644
--- a/setup.py
+++ b/setup.py
@@ -1,8 +1,7 @@
# coding: utf-8
import os.path
-from setuptools import setup, find_packages
-
+from setuptools import find_packages, setup
here = os.path.dirname(__file__)
readme_path = os.path.join(here, 'README.rst')
@@ -41,7 +40,7 @@ setup(
'setuptools >= 0.7',
'six >= 1.4.0',
'pytz',
- 'tzlocal ~= 2.0',
+ 'tzlocal >= 2.0, != 3.*',
],
extras_require={
':python_version == "2.7"': ['futures'],