ptbcontrib
ptbcontrib copied to clipboard
[BUG] PTBSQLAlchemyJobStore can't handle conversation timeout jobs
Module in question: ptb_sqlalchemy_jobstore
Steps to reproduce
-
Create a ConversationHandler with conversation_timeout set to any supported value other than None.
-
Add PTBSQLAlchemyJobStore to dispatcher.job_queue.scheduler .
-
Start the bot.
-
Enter ConversationHandler created in step 1.
Expected behaviour
Conversation Timeout job should be added to job store.
Actual behaviour
Job cannot be stored due to serialisation error.
Configuration
MacOs 12.0.1, python 3.9.7
Version of Python, python-telegram-bot & dependencies:
python-telegram-bot 13.8.1
Bot API 5.4
certifi 2021.10.08
Python 3.9.7 (default, Oct 22 2021, 13:39:39) [Clang 13.0.0 (clang-1300.0.29.3)]
ptbcontrib 0.0.0
Logs
Traceback (most recent call last):
File "venv/lib/python3.9/site-packages/telegram/ext/conversationhandler.py", line 497, in _schedule_job
self.timeout_jobs[conversation_key] = j_queue.run_once( # type: ignore[union-attr]
File "venv/lib/python3.9/site-packages/telegram/ext/jobqueue.py", line 196, in run_once
j = self.scheduler.add_job(
File "venv/lib/python3.9/site-packages/apscheduler/schedulers/base.py", line 444, in add_job
self._real_add_job(job, jobstore, replace_existing)
File "venv/lib/python3.9/site-packages/apscheduler/schedulers/base.py", line 868, in _real_add_job
store.add_job(job)
File "venv/lib/python3.9/site-packages/ptbcontrib-0.0.0-py3.9.egg/ptbcontrib/ptb_sqlalchemy_jobstore/jobstore.py", line 65, in add_job
super().add_job(job)
File "venv/lib/python3.9/site-packages/apscheduler/jobstores/sqlalchemy.py", line 95, in add_job
'job_state': pickle.dumps(job.__getstate__(), self.pickle_protocol)
TypeError: cannot pickle '_thread.lock' object
2021-11-11 23:15:26,089 - cannot pickle '_thread.lock' object
Traceback (most recent call last):
File "venv/lib/python3.9/site-packages/telegram/ext/conversationhandler.py", line 497, in _schedule_job
self.timeout_jobs[conversation_key] = j_queue.run_once( # type: ignore[union-attr]
File "venv/lib/python3.9/site-packages/telegram/ext/jobqueue.py", line 196, in run_once
j = self.scheduler.add_job(
File "venv/lib/python3.9/site-packages/apscheduler/schedulers/base.py", line 444, in add_job
self._real_add_job(job, jobstore, replace_existing)
File "venv/lib/python3.9/site-packages/apscheduler/schedulers/base.py", line 868, in _real_add_job
store.add_job(job)
File "venv/lib/python3.9/site-packages/ptbcontrib-0.0.0-py3.9.egg/ptbcontrib/ptb_sqlalchemy_jobstore/jobstore.py", line 65, in add_job
super().add_job(job)
File "venv/lib/python3.9/site-packages/apscheduler/jobstores/sqlalchemy.py", line 95, in add_job
'job_state': pickle.dumps(job.__getstate__(), self.pickle_protocol)
TypeError: cannot pickle '_thread.lock' object
I forgot to mention, that jobs created with run_once (for example) are being stored and executed as expected, so i assume this is either undocumented limitation or a bug and not my error.