Commit db789699 authored by Antoine Millet's avatar Antoine Millet
Browse files

Updated Jobs class with better default status.

parent f06c669f
Loading
Loading
Loading
Loading
+25 −7
Original line number Diff line number Diff line
@@ -48,9 +48,15 @@ class BaseJob(dict, Thread, object):
        # The manager of this job:
        self.manager = manager

        # Define default status:
        # Define default job properties:
        self['status'] = 'pending'
        self['done'] = False
        self['cancelled'] = False
        self['created'] = datetime.now()
        self['ended'] = None
        self['duration'] = 0

        #~ assert self.get('author') is not None, 'author is not defined'

        # List of actions to do by the rollback method:
        self._wayback = []
@@ -115,7 +121,7 @@ class BaseJob(dict, Thread, object):
        :param func: callable to add to the wayback list.
        '''

        if self['done']:
        if self['cancelled']:
            raise JobCancelError('Job has been cancelled by user')

        if func is not None:
@@ -133,15 +139,19 @@ class BaseJob(dict, Thread, object):
        except Exception as err:
            self.report('rollback failed: %s' % err, done=True)
        else:
            self.report('rollback: %s' % error, done=True)
            self.report('cancelled: %s' % error, done=True)

    def cancel(self):
        '''
        Cancel the job.

        .. note::
            You can override this method to trigger an action when user cancel
            the job.
        '''

        self['done'] = True
        self['status'] = 'cancelling'
        self['cancelled'] = True
        self.report('cancelling')

    def export(self, props=None):
        '''
@@ -157,7 +167,16 @@ class BaseJob(dict, Thread, object):
                dt = now - val
                val = dt.seconds + dt.days * 86400

            exported[key] = val
            if key == 'duration':
                if self['done']:
                    dt = self['ended'] - self['started']
                    val = dt.seconds + dt.days * 86400
                else:
                    now = datetime.now()
                    dt = now - self['started']
                    val = dt.seconds + dt.days * 86400

            exported[key] = str(val)
        return exported


@@ -259,7 +278,6 @@ class JobsManager(object):
            raise BadJobTypeError('Invalid job type %r' % jtype)
        
        job = jobtype(self, id=jobid, **kwargs)
        job['since'] = datetime.now()
        self._jobs[jobid] = job
        job.daemon = True
        job.start()