def post(self, *args, **kwargs): try: if 'task_id' in kwargs or 'events' in kwargs: raise BadRequest('Invalid args for this method') if 'json' in kwargs: raw = kwargs['json'] else: raw = request.get_json(force=True) marshaller = GManMarshaller(raw) marshaller.enforce('create_task') if marshaller.task.data.thread_id != marshaller.task.data.task_id: Task.get(Task.task_id == marshaller.task.data.thread_id) if marshaller.task.data.parent_id: Task.get(Task.task_id == marshaller.task.data.parent_id) task = Task.create(task_id=marshaller.task.data.task_id, run_id=marshaller.task.data.run_id, project=marshaller.task.data.project, thread_id=marshaller.task.data.thread_id, parent_id=marshaller.task.data.parent_id, caller=marshaller.task.data.caller) event = TaskEvent.create(task=task, message=marshaller.event.data.message, status=marshaller.event.data.status, timestamp=marshaller.event.data.timestamp) return TaskEventSchema(exclude=['id']).dump(event) except MarshalError as e: return e.errors.emit(), 422 except DoesNotExist: marshaller.errors.add( 'missing_task', 'An existing task_id must exist' ' for thread_id and parent_id') return marshaller.errors.emit(), 422 except AttributeError as e: reg = re.compile(r" '(.+)'") matches = reg.search(str(e)) marshaller.errors.add(matches.groups()[0], 'Is required but not valid') return marshaller.errors.emit(), 422 except BadRequest as e: return self.BadRequest(str(e)) except Exception as e: return self.InternalError(str(e))
def test_raw_artifact_bad_hash(testtask): task_resp = testtask() task = Task().get(Task.task_id == task_resp.json['task']['task_id']) event = TaskEvent.create(task=task, message='testing creating an artifact', status='info', timestamp=datetime.datetime.now()) with pytest.raises(ValueError): Artifact().create(task=task, event_id=event, type='log', status='unknown', sri='some non sri value', uri='https://www.example.com')
def put(self, task_id, events=None, json=None): try: if events: raise BadRequest('Events may not be specified on a PUT') if json: raw = json else: raw = request.get_json(force=True) marshaller = GManMarshaller(raw) marshaller.enforce('add_event') task = Task.get(Task.task_id == task_id) try: completed = self.task_completed_event(task_id) marshaller.errors.add( 'status', f'A closing event for {completed.task_id} of ' f'{completed.status} already exists.') return marshaller.errors.emit(), 422 except ZeroResults: pass event = TaskEvent.create(task=task, message=marshaller.event.data.message, status=marshaller.event.data.status, timestamp=marshaller.event.data.timestamp) if event: return TaskEventSchema(exclude=['id']).dump(event) else: raise QueryFailed( f'Event Creation Error for task_id {task_id}') except MarshalError as e: return e.errors.emit(), 422 except DoesNotExist: return self.NotFound() except BadRequest as e: return self.BadRequest(str(e)) except Exception as e: return self.InternalError(str(e))