diff --git a/rhodecode/model/db.py b/rhodecode/model/db.py --- a/rhodecode/model/db.py +++ b/rhodecode/model/db.py @@ -5485,8 +5485,7 @@ class ScheduleEntry(Base, BaseModel): @schedule_type.setter def schedule_type(self, val): if val not in self.schedule_types: - raise ValueError('Value must be on of `{}` and got `{}`'.format( - val, self.schedule_type)) + raise ValueError(f'Value must be on of `{val}` and got `{self.schedule_type}`') self._schedule_type = val @@ -5494,21 +5493,25 @@ class ScheduleEntry(Base, BaseModel): def get_uid(cls, obj): args = obj.task_args kwargs = obj.task_kwargs + if isinstance(args, JsonRaw): try: - args = json.loads(args) + args = json.loads(str(args)) except ValueError: + log.exception('json.loads of args failed...') args = tuple() if isinstance(kwargs, JsonRaw): try: - kwargs = json.loads(kwargs) + kwargs = json.loads(str(kwargs)) except ValueError: + log.exception('json.loads of kwargs failed...') kwargs = dict() dot_notation = obj.task_dot_notation - val = '.'.join(map(safe_str, [ - sorted(dot_notation), args, sorted(kwargs.items())])) + val = '.'.join(map(safe_str, [dot_notation, args, sorted(kwargs.items())])) + log.debug('calculating task uid using id:`%s`', val) + return sha1(safe_bytes(val)) @classmethod @@ -5519,6 +5522,10 @@ class ScheduleEntry(Base, BaseModel): def get_by_schedule_id(cls, schedule_id): return cls.query().filter(cls.schedule_entry_id == schedule_id).scalar() + @classmethod + def get_by_task_uid(cls, task_uid): + return cls.query().filter(cls.task_uid == task_uid).scalar() + @property def task(self): return self.task_dot_notation