Skip to content
Snippets Groups Projects

Reforma vyhodnocování práv

Closed Martin Mareš requested to merge mj/rights into master
1 unresolved thread
1 file
+ 3
1
Compare changes
  • Side-by-side
  • Inline
@@ -4,11 +4,12 @@ from datetime import timedelta
import os
import secrets
from sqlalchemy import or_
from typing import Optional, Dict, Callable
from typing import Optional, Dict, Callable, List
import mo
import mo.config as config
import mo.db as db
import mo.rights
import mo.util
from mo.util import logger
@@ -28,10 +29,13 @@ class TheJob:
job: db.Job
job_id: Optional[int]
gatekeeper: Optional[mo.rights.Gatekeeper]
errors: List[str]
def __init__(self, job_id: Optional[int] = None):
"""Pokud chceme pracovat s existujícím jobem, zadáme jeho ID."""
self.job_id = job_id
self.errors = []
def load(self) -> db.Job:
sess = db.get_session()
@@ -95,6 +99,9 @@ class TheJob:
logger.info(f'Job: Ruším job #{self.job.job_id}')
return self._finish_remove()
def error(self, msg):
self.errors.append(msg)
def run(self):
sess = db.get_session()
if not self.load() or self.job.state != db.JobState.ready:
@@ -109,13 +116,21 @@ class TheJob:
sess.commit()
try:
self.gatekeeper = mo.rights.Gatekeeper(job.user)
_handler_table[job.type](self)
logger.info(f'Job: Úspěšně dokončen job #{job.job_id}')
if self.errors:
logger.info(f'Job: Neúspěšně dokončen job #{job.job_id} ({job.result})')
job.state = db.JobState.failed
job.out_json = {'errors': self.errors}
if job.result == "":
job.result = 'Došlo k chybám, viz detail'
else:
logger.info(f'Job: Úspěšně dokončen job #{job.job_id} ({job.result})')
job.state = db.JobState.done
except Exception as e:
logger.error(f'Job: Chyba při zpracování jobu #{job.job_id}: %s', e, exc_info=e)
job.state = db.JobState.failed
return
job.result = 'Interní chyba, informujte prosím správce systému.'
job.finished_at = mo.util.get_now()
job.expires_at = job.finished_at + timedelta(minutes=config.JOB_EXPIRATION)
Loading