summaryrefslogtreecommitdiff
path: root/apscheduler/jobstores/sqlalchemy_store.py
diff options
context:
space:
mode:
authoragronholm <devnull@localhost>2011-04-10 08:42:38 +0300
committeragronholm <devnull@localhost>2011-04-10 08:42:38 +0300
commit023f720f148e354cceddee59e5c22d7d680ba081 (patch)
treeb22e8cdb83f2da58905f077a2bb8bc1c02277b79 /apscheduler/jobstores/sqlalchemy_store.py
parentcfa52267937ce77041c771cbc77830f279441c44 (diff)
downloadapscheduler-023f720f148e354cceddee59e5c22d7d680ba081.tar.gz
Made ShelveJobStore store the state of the job, not the actual object and prevented one failing job restore from aborting the entire procedure
Diffstat (limited to 'apscheduler/jobstores/sqlalchemy_store.py')
-rw-r--r--apscheduler/jobstores/sqlalchemy_store.py17
1 files changed, 11 insertions, 6 deletions
diff --git a/apscheduler/jobstores/sqlalchemy_store.py b/apscheduler/jobstores/sqlalchemy_store.py
index d3af550..0e7e515 100644
--- a/apscheduler/jobstores/sqlalchemy_store.py
+++ b/apscheduler/jobstores/sqlalchemy_store.py
@@ -2,16 +2,18 @@
Stores jobs in a database table using SQLAlchemy.
"""
import pickle
+import logging
from apscheduler.jobstores.base import JobStore
from apscheduler.job import Job
-from apscheduler.util import obj_to_ref
try:
from sqlalchemy import *
except ImportError: # pragma: nocover
raise ImportError('SQLAlchemyJobStore requires SQLAlchemy installed')
+logger = logging.getLogger(__name__)
+
class SQLAlchemyJobStore(JobStore):
def __init__(self, url=None, engine=None, tablename='apscheduler_jobs',
@@ -48,7 +50,6 @@ class SQLAlchemyJobStore(JobStore):
self.jobs_t.create(self.engine, True)
def add_job(self, job):
- job.func_ref = obj_to_ref(job.func)
job_dict = job.__getstate__()
result = self.engine.execute(self.jobs_t.insert().values(**job_dict))
job.id = result.inserted_primary_key[0]
@@ -62,10 +63,14 @@ class SQLAlchemyJobStore(JobStore):
def load_jobs(self):
jobs = []
for row in self.engine.execute(select([self.jobs_t])):
- job = Job.__new__(Job)
- job_dict = dict(row.items())
- job.__setstate__(job_dict)
- jobs.append(job)
+ try:
+ job = Job.__new__(Job)
+ job_dict = dict(row.items())
+ job.__setstate__(job_dict)
+ jobs.append(job)
+ except Exception:
+ job_name = job_dict.get('name', '(unknown)')
+ logger.exception('Unable to restore job "%s"', job_name)
self.jobs = jobs
def update_job(self, job):