Skip to content
Snippets Groups Projects

Generování protokolů a zpracování scanů

Merged Martin Mareš requested to merge mj/protokoly into devel
1 file
+ 25
6
Compare changes
  • Side-by-side
  • Inline
+ 25
6
@@ -34,8 +34,9 @@ class TheJob:
self.errors = []
def load(self) -> db.Job:
sess = db.get_session()
self.job = sess.query(db.Job).with_for_update().get(self.job_id)
if getattr(self, 'job', None) is None:
sess = db.get_session()
self.job = sess.query(db.Job).with_for_update().get(self.job_id)
return self.job
def create(self, type: db.JobType, for_user: db.User) -> db.Job:
@@ -103,11 +104,29 @@ class TheJob:
logger.info(f'Job: >> {msg}')
self.errors.append(msg)
def run(self):
def _check_runnable(self, retry: bool) -> Optional[str]:
s = self.job.state
if s == db.JobState.ready:
return None
elif s == db.JobState.running:
# Může se stát, že ho mezitím začal vyřizovat jiný proces
return 'právě běží'
elif s in (db.JobState.done, db.JobState.failed):
return None if retry else 'je už hotový'
else:
return 'je v neznámém stavu'
def run(self, retry: bool = False):
sess = db.get_session()
if not self.load() or self.job.state != db.JobState.ready:
# Někdo ho mezitím smazal nebo vyřídil
logger.info(f'Job: Job #{self.job_id} vyřizuje někdo jiný')
if not self.load():
# Někdo ho mezitím smazal
logger.info(f'Job: Job #{self.job_id} neexistuje')
sess.rollback()
return
reject_reason = self._check_runnable(retry)
if reject_reason is not None:
logger.info(f'Job: Job #{self.job_id} {reject_reason}')
sess.rollback()
return
Loading