diff options
author | agronholm <devnull@localhost> | 2011-04-10 08:42:38 +0300 |
---|---|---|
committer | agronholm <devnull@localhost> | 2011-04-10 08:42:38 +0300 |
commit | 023f720f148e354cceddee59e5c22d7d680ba081 (patch) | |
tree | b22e8cdb83f2da58905f077a2bb8bc1c02277b79 /apscheduler/jobstores/sqlalchemy_store.py | |
parent | cfa52267937ce77041c771cbc77830f279441c44 (diff) | |
download | apscheduler-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.py | 17 |
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): |