def test_mapping_api(client: TestClient):
    key = create_api_client('user1', 'sirius_cybernetics_gpp', INGEST_JOBS_API)
    request = Mapping(name="foo", description="bar", resource_spec="blah")
    response: CreateMappingResponse = client.post(url="/api/ingest/mappings",
                                                  data=request.json(),
                                                  headers={API_KEY_NAME: key})
    assert response.status_code == 200
    response = client.get(url="/api/ingest/mappings/" + "foo",
                          headers={API_KEY_NAME: key})
    mapping = Mapping(
        **response.json())  # first item because we have a version tag in there
    assert mapping.name == "foo"
def test_auth_session(sample_file):
    ingestor = MappedHD5Ingestor(Mapping(**mapping_dict), sample_file,
                                 "test_root")
    for name, doc in ingestor.generate_docstream():
        if name == 'start':
            assert doc['auth_session'] == []
            continue

    ingestor = MappedHD5Ingestor(Mapping(**mapping_dict),
                                 sample_file,
                                 "test_root",
                                 auth_session=['bealine1', 'users1'])
    for name, doc in ingestor.generate_docstream():
        if name == 'start':
            assert doc['auth_session'] == ['bealine1', 'users1']
            continue
def test_timestamp_error(sample_file):
    mapping = {
        "name": "test name",
        "description": "test descriptions",
        "version": "42",
        "resource_spec": "MultiKeySlice",
        "md_mappings": [],
        "stream_mappings": {
            "do_not_cross": {
                "time_stamp":
                "/does/not/exist",
                "mapping_fields": [{
                    "field": "/exchange/data",
                    "external": True
                }, {
                    "field": "/process/acquisition/sample_position_x",
                    "description": "tile_xmovedist"
                }]
            }
        }
    }
    ingestor = MappedHD5Ingestor(Mapping(**mapping), sample_file, "test_root")

    list(ingestor.generate_docstream())
    assert "Error fetching timestamp" in ingestor.issues[0]
def test_hdf5_mapped_ingestor(sample_file, tmp_path):
    ingestor = MappedHD5Ingestor(Mapping(**mapping_dict),
                                 sample_file,
                                 "test_root",
                                 thumbs_root=tmp_path)
    run_cache = SingleRunCache()
    descriptors = []
    result_events = []
    result_datums = []
    start_found = False
    stop_found = False
    run_uid = ""
    for name, doc in ingestor.generate_docstream():
        run_cache.callback(name, doc)
        if name == "start":
            assert doc[
                ":measurement:sample:name"] == "my sample", "metadata in start doc"
            assert doc["projections"][0][
                'name'] == "foo_bar", "projection is in start doc"
            start_found = True
            run_uid = doc['uid']
            continue
        if name == "descriptor":
            descriptors.append(doc)
            continue
        if name == "resource":
            doc["spec"] == mapping_dict["resource_spec"]
            continue
        if name == "datum":
            result_datums.append(doc)
            continue
        if name == "resource":
            result_events.append(doc)
            continue
        if name == "event":
            result_events.append(doc)
        if name == "stop":
            stop_found = True
            assert doc["num_events"]["primary"] == num_frames_primary
            # assert doc["num_events"]["darks"] == num_frames_darks
            continue

    assert start_found, "a start document was produced"
    assert stop_found, "a stop document was produced"

    assert len(descriptors) == 2, "return two descriptors"
    assert descriptors[0]["name"] == "primary", "first descriptor is primary"
    assert descriptors[1]["name"] == "darks", "second descriptor is darks"
    assert len(
        descriptors[0]["data_keys"].keys()) == 2, "primary has two data_keys"

    assert len(result_datums) == num_frames_primary + num_frames_darks
    assert len(result_events) == num_frames_primary + num_frames_darks

    run = run_cache.retrieve()
    stream = run["primary"].to_dask()
    assert stream
    dir = Path(tmp_path)
    file = run_uid + ".png"
    assert Path(dir / file).exists()
Exemple #5
0
def test_ingest(sample_file, init_mongomock):
    mapping = Mapping(**mapping_dict)
    create_mapping("slartibartfast", mapping)
    mapping = find_mapping("slartibartfast", "magrathia")
    assert mapping.resource_spec == "MultiKeySlice", "test a field"
    job = create_job("user1", sample_file.filename, "magrathia", ["deep_thought"])
    start_uid = ingest("slartibartfast", job)
    job = find_job(job.id)
    assert job is not None
    assert job.status == JobStatus.successful, f'injest completed  {job.status_history}'

    assert bluesky_context.db['run_start'].find_one({"uid": start_uid}) is not None, "job wrote start doc"
Exemple #6
0
def gen_ev_docs(scm: ScicatTomo):
    with open(
            '/home/dylan/work/als-computing/splash-ingest/.scratch/832Mapping.json',
            'r') as json_file:
        data = json.load(json_file)
    map = Mapping(**data)
    with h5py.File('/home/dylan/data/beamlines/als832/20210204_172932_ddd.h5',
                   'r') as h5_file:
        ingestor = MappedHD5Ingestor(
            map, h5_file, 'root', '/home/dylan/data/beamlines/als832/thumbs')
        for name, doc in ingestor.generate_docstream():
            if 'start' in name:
                doRaw(doc, scm)
            if 'descriptor' in name:
                pprint(doc)
def test_mapped_ingestor_bad_metadata_field(sample_file):
    mapping_dict_bad_metadata_field = {
        "name": "test name",
        "description": "test descriptions",
        "version": "42",
        "resource_spec": "MultiKeySlice",
        "md_mappings": [
            {
                "field": "raise_exception"
            },
        ],
        "stream_mappings": {}
    }
    ingestor = MappedHD5Ingestor(Mapping(**mapping_dict_bad_metadata_field),
                                 sample_file, "test_root")
    list(ingestor.generate_docstream())
    assert "Error finding mapping" in ingestor.issues[0]
def test_mapped_ingestor_bad_stream_field(sample_file):
    mapping_dict_bad_stream_field = {
        "name": "test name",
        "description": "test descriptions",
        "version": "42",
        "resource_spec": "MultiKeySlice",
        "md_mappings": [{
            "field": "/measurement/sample/name"
        }],
        "stream_mappings": {
            "primary": {
                "time_stamp": "/does/not/exist",
                "mapping_fields": [{
                    "field": "raise_exception"
                }]
            },
        }
    }
    ingestor = MappedHD5Ingestor(Mapping(**mapping_dict_bad_stream_field),
                                 sample_file, "test_root")
    list(ingestor.generate_docstream())
    assert "Error finding mapping" in ingestor.issues[0]
def test_build_mapping():
    mapping = Mapping(**mapping_dict)
    assert mapping.name == 'test name'
    assert mapping.stream_mappings['primary'].mapping_fields[
        0].field == '/exchange/data'
def test_calc_num_events(sample_file):
    stream_mapping = Mapping(
        **mapping_dict).stream_mappings["primary"].mapping_fields
    num_events = calc_num_events(stream_mapping, sample_file)
    assert num_events == num_frames_primary, "primary stream has same number events as primary stream frames"
    assert calc_num_events({}, sample_file) == 0, "no fields returns none"
def find_mapping(submitter, mapping_id: str) -> Mapping:
    mapping_dict = service_context.ingest_mappings.find_one({"name": mapping_id})
    if mapping_dict is None:
        return None
    revision = mapping_dict.pop('revision')
    return Mapping(**mapping_dict)