Python APScheduler fails: 'Only timezones from the pytz library are supported' error
Asked Answered
P

3

6

I am trying to run a python async app with an asyncioscheduler scheduled job but the APScheduler fails during build because of this error:

'Only timezones from the pytz library are supported' error

I do include pytz in my app and i am passing the timezone. What is causing the error?

I am calling the asyncioscheduler in a class where i create job manager:

from apscheduler.schedulers.asyncio import AsyncIOScheduler


class ScheduleManager:
    def __init__(self) -> None:
    self.scheduler = AsyncIOScheduler()
    
    def start(self):
    self.scheduler.start()

    def stop(self):
    self.scheduler.shutdown()
    
    def add_seconds_interval_job(self, callback, interval : int):
    self.scheduler.add_job(callback, 'interval', seconds = interval)
    
    def add_minutes_interval_job(self, callback, interval : int):
    self.scheduler.add_job(callback, 'interval', minutes = interval)

    def add_hours_interval_job(self, callback, interval : int):
    self.scheduler.add_job(callback, 'interval', hours = interval)

    def add_days_interval_job(self, callback, interval : int):
    self.scheduler.add_job(callback, 'interval', days = interval)

then i call this manager from my application like :

from jobs import ScheduleManager, ConfigJob

class AppInitializer:

    def __init__(self) -> None:
    self.schedule_manager = ScheduleManager()
    self.config__job = ConfigJob()

    async def initialize(self, app, loop):
    self.schedule_manager.add_seconds_interval_job(self.config_job.run, 5)
    self.schedule_manager.start()
Pasquinade answered 18/8, 2021 at 12:36 Comment(4)
Questions seeking debugging help ("why isn't this code working?") should include the desired behavior, a specific problem or error and the shortest code necessary to reproduce it as formatted text (not images) in the question itself. Questions without a clear problem statement are not useful to other readers. See: minimal reproducible example.Firelock
there is nothing special about my code i am just using the asynciosceduler() in a asynchronous but I ll add my codePasquinade
We need a short, self-contained, runnable example that produces the same output you're getting.Firelock
That's fine, we just need something that can reproduce what you're seeing.Firelock
A
6

The tzlocal library switched from pytz to zoneinfo timezones in 3.0 and APScheduler 3.x is not compatible with those. Due to this, APScheduler 3.7.0 has tzlocal pinned to v2.x. If you're getting tzlocal 3.0 installed through APScheduler, you're using an old version. Please upgrade.

Abba answered 19/8, 2021 at 7:26 Comment(1)
If you're sure that you are only using timezones from pytz or tzlocal, please open a new question here with a minimal reproducing script.Barrows
R
4

I stumbled over this as well. And now there's a new tzlocal version (4.1) out that isn't actually compatible with apscheduler 3.x which isn't handled in the pinning: apscheduler 3.8.1 requires tzlocal!=3.*,>=2.0 This breaks things if you have tzlocal==4.1 installed. I pinned tzlocal now manually in my requirements.yml:

tzlocal<3.0 or more specific tzlocal==2.1

Update: The apscheduler docs state that this issue is fixed with 3.8.1 and with 3.9.0 they don't enforce pytz time zones anymore. After some testing with different versions I nevertheless still get the same errors with Python 3.10.2, apscheduler 3.8.1/3.9.0 and tzlocal 4.0/4.1. I am forced to use tzlocal<3.0.

Receipt answered 21/2, 2022 at 9:55 Comment(4)
How does tzlocal 4.1 break things? There is nothing in their changelog to indicate that it should be breaking things.Barrows
You are actually right! According to the documentation it's fixed with version 3.8.1: apscheduler.readthedocs.io/en/stable/versionhistory.html I am using Python 3.10.2 and apscheduler 3.8.1. If I use tzlocal 4.1 I get these errors: TypeError: Only timezones from the pytz library are supported If I use tzlocal 2.1 this works as expected (as it uses pytz time zones). I just tested with apscheduler 3.9.0 because they stated in the above links that they no longer enforce pytz time zones in that version.But still doesn't work for me, same error.Receipt
Please create a ticket in the APScheduler issue tracker with a reproducible sample.Barrows
Done, check hereReceipt
P
0

Ok so it required a dependency tzlocal==2.1 so it could get local timezone, i assume for some reason the version that the module has does not work on my system

Pasquinade answered 18/8, 2021 at 16:21 Comment(0)

© 2022 - 2025 — McMap. All rights reserved.