Пример #1
0
 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)
Пример #2
0
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)