def post(self): run_dict = request.json protocol_id = extract_protocol_id(run_dict) run_dict.pop('protocol', None) if not protocol_id: abort(400) return protocol = Protocol.query.get(protocol_id) if not protocol: abort(400) return run = Run() run_version = RunVersion(data=strip_metadata(run_dict), server_version=app.config['SERVER_VERSION']) run_version.run = run run.current = run_version run.protocol_version_id = protocol.version_id add_owner(run) db.session.add_all([run, run_version]) samples = get_samples(run, run_version) if samples: for sample in samples: db.session.merge(sample) db.session.commit() add_policy(path=f"/run/{str(run.id)}", method="GET") add_policy(path=f"/run/{str(run.id)}", method="PUT") add_policy(path=f"/run/{str(run.id)}", method="DELETE") return run_to_dict(run, run_version)
async def create_run( run: RunModel, enforcer: casbin.Enforcer = Depends(get_enforcer), db: Session = Depends(get_db), current_user: Auth0ClaimsPatched = Depends(get_current_user)): run_dict = run.dict() protocol_id = extract_protocol_id(run_dict) run_dict.pop('protocol', None) if not protocol_id: raise HTTPException(status_code=400, detail='Invalid Protocol ID') protocol = db.query(Protocol).get(protocol_id) if not protocol: raise HTTPException(status_code=400, detail='Invalid Protocol (Not Found)') new_run = Run() new_run_version = RunVersion(data=strip_metadata(run_dict), server_version=settings.server_version) new_run_version.run = new_run new_run.current = new_run_version new_run.protocol_version_id = protocol.version_id add_owner(new_run, current_user.username) db.add_all([new_run, new_run_version]) samples = get_samples(new_run_version, protocol.current) if samples: for sample in samples: db.merge(sample) db.commit() add_policy(enforcer, user=current_user.username, path=f"/run/{str(new_run.id)}", method="GET") add_policy(enforcer, user=current_user.username, path=f"/run/{str(new_run.id)}", method="PUT") add_policy(enforcer, user=current_user.username, path=f"/run/{str(new_run.id)}", method="DELETE") return run_to_dict(new_run, new_run_version)