def _md(md): RE = RunEngine(md) RE.ignore_callback_exceptions = False scan = simple_scan(motor) assert_raises(KeyError, RE, scan) # missing owner, beamline_id scan = simple_scan(motor) assert_raises(KeyError, RE, scan, owner='dan') scan = simple_scan(motor) RE(scan, owner='dan', beamline_id='his desk', group='some group', config={}) # this should work scan = simple_scan(motor) assert_raises(KeyError, RE, scan) # this should fail; none was persisted RE.md['owner'] = 'dan' RE.md['group'] = 'some group' RE.md['config'] = {} RE.md['beamline_id'] = 'his desk' scan = simple_scan(motor) RE(scan) # this should work RE.md.clear() scan = simple_scan(motor) assert_raises(KeyError, RE, scan) # We can prime the md directly. RE.md['owner'] = 'dan' RE.md['group'] = 'some group' RE.md['config'] = {} RE.md['beamline_id'] = 'his desk' scan = simple_scan(motor) RE(scan) # Check persistence. scan = simple_scan(motor) RE(scan, project='sitting') # 'project' should not persist scan = simple_scan(motor) RE(scan, subs={'start': [validate_dict_cb_opposite('project')]}) # ...unless we add it to RE.md RE.md['project'] = 'sitting' scan = simple_scan(motor) RE(scan, subs={'start': [validate_dict_cb('project', 'sitting')]}) # new values to 'project' passed in the call override the value in md scan = simple_scan(motor) RE(scan, project='standing', subs={'start': [validate_dict_cb('project', 'standing')]}) # ...but they do not update the value in md assert_equal(RE.md['project'], 'sitting')