def success_run(database: DB, fs: StorageVolume, basedir: str) -> Tuple[str, str, str, str]: """Create a successful run with two result files: - A.json - results/B.json Returns the identifier of the created workflow, group, run, and user. """ # Setup temporary run folder. runfs = FileSystemStorage(basedir=os.path.join(basedir, 'tmprun')) runfs.store(file=io_file({'A': 1}), dst='A.json') runfs.store(file=io_file({'B': 1}), dst=util.join('results', 'B.json')) with database.session() as session: user_id = create_user(session, active=True) workflow_id = create_workflow(session) group_id = create_group(session, workflow_id, users=[user_id]) groups = WorkflowGroupManager(session=session, fs=fs) runs = RunManager(session=session, fs=fs) run = runs.create_run(group=groups.get_group(group_id)) run_id = run.run_id state = run.state() runs.update_run( run_id=run_id, state=state.start().success(files=['A.json', 'results/B.json']), runstore=runfs) return workflow_id, group_id, run_id, user_id
def success_run(database: DB, fs: FileStore, basedir: str) -> Tuple[str, str, str, str]: """Create a successful run with two result files: - A.json - run/results/B.json Returns the identifier of the created workflow, group, run, and user. """ # Setup temporary run folder. tmprundir = os.path.join(basedir, 'tmprun') tmpresultsdir = os.path.join(tmprundir, 'run', 'results') os.makedirs(tmprundir) os.makedirs(tmpresultsdir) f1 = os.path.join(tmprundir, 'A.json') util.write_object(f1, {'A': 1}) f2 = os.path.join(tmpresultsdir, 'B.json') util.write_object(f2, {'B': 1}) with database.session() as session: user_id = create_user(session, active=True) workflow_id = create_workflow(session) group_id = create_group(session, workflow_id, users=[user_id]) groups = WorkflowGroupManager(session=session, fs=fs) runs = RunManager(session=session, fs=fs) run = runs.create_run(group=groups.get_group(group_id)) run_id = run.run_id state = run.state() runs.update_run( run_id, state.start().success(files=['A.json', 'run/results/B.json']), rundir=tmprundir) assert not os.path.exists(tmprundir) return workflow_id, group_id, run_id, user_id
def test_session_scope(): """Test the session scope object.""" db = DB(connect_url=TEST_URL, web_app=False) db.init() with db.session() as session: session.add(User(user_id='U', name='U', secret='U', active=True)) # Query all users. Expects two objects in the resulting list (te created # user and the default user). with db.session() as session: assert len(session.query(User).all()) == 2 # Error when adding user with duplicate key. with pytest.raises(IntegrityError): with db.session() as session: session.add(User(user_id='U', name='U', secret='U', active=True)) # Query all users. Still expects one object in the resulting list. with db.session() as session: assert len(session.query(User).all()) == 2 # Raise an exception within the session scope. with pytest.raises(ValueError): with db.session() as session: session.add(User(user_id='W', name='W', secret='W', active=True)) raise ValueError('some error') # Query all users. Still expects two object in the resulting list. with db.session() as session: assert len(session.query(User).all()) == 2