示例#1
0
def generate_base_submission():
    file_name = "base_submission.json"
    path = os.path.join(TEST_SUBMISSIONS_DIR, file_name)
    mdfcc = MDFConnectClient()  # service_instance is irrelevant
    mdfcc.create_dc_block(title="Base Deploy Testing Dataset",
                          authors="jgaff",
                          affiliations="UChicago")
    mdfcc.add_data_source(DATA_SOURCES)
    mdfcc.set_test(True)
    mdfcc.update = UPDATE_FLAG
    submission = mdfcc.get_submission()
    with open(path, 'w') as f:
        json.dump(submission, f)
    return {"success": True}
示例#2
0
def generate_base_failure():
    file_name = "base_failure.json"
    path = os.path.join(TEST_SUBMISSIONS_DIR, file_name)
    mdfcc = MDFConnectClient()  # service_instance is irrelevant
    mdfcc.create_dc_block(title="Base Deploy Fail Dataset",
                          authors="jgaff",
                          affiliations="UChicago")
    mdfcc.add_data_source(DATA_SOURCES)
    # Failure point: Submission not in nanomfg organization,
    # but attempting to write to nanomfg project block
    mdfcc.set_project_block("nanomfg", {"catalyst": "bad data testing"})
    mdfcc.set_test(True)
    mdfcc.update = UPDATE_FLAG
    submission = mdfcc.get_submission()
    with open(path, 'w') as f:
        json.dump(submission, f)
    return {"success": True}
def mdf_submit(local_json_path,
               globus_uri,
               test=True,
               with_doi=True,
               update=False):
    """Submit dataset to MDF Connect.

    Arguments:
        local_json_path (str): The path to the local JSON metadata file.
        globus_uri (str): The URI to the Globus Endpoint and path, in the form:
                "globus://[endpoint id]/[path to data directory]"
        test (bool): Is this a test submission (test submissions generate test DOIs
                and populate the Search index "mdf-test" instead of "mdf")?
                Default True.
        with_doi (bool): Should a DOI be minted? (Includes test DOI.)
                Default True.
        update (bool): Has this submission been made before? If so, an update will be made
                to the previous submission. Test submissions and non-test submissions
                are separate.
    """
    import json
    import os
    from mdf_connect_client import MDFConnectClient

    mapping = {
        "custom.dynamic_mean_window_size": "xpcs.dynamic_mean_window_size",
        "custom.lld": "xpcs.lld",
        "custom.sigma": "xpcs.sigma",
        "custom.snophi": "xpcs.snophi",
        "custom.snoq": "xpcs.snoq"
    }
    mdfcc = MDFConnectClient()
    with open(local_json_path) as f:
        md = json.load(f)
    # DC block (title, authors, publisher, pub year, subjects)
    mdfcc.create_dc_block(
        title=os.path.basename(local_json_path).replace(".json", ""),
        authors=[creator["creatorName"] for creator in md["creators"]],
        publisher=md.get("publisher"),
        publication_year=md.get("publication_year"),
        subjects=[subject["subject"] for subject in md.get("subjects", [])])
    # Add data
    mdfcc.add_data_source(globus_uri)
    # Add JSON mapping
    mdfcc.add_index("json", mapping)
    # Set test flag
    mdfcc.set_test(test)
    # Add XPCS as organization
    mdfcc.add_organization("XPCS 8-ID")
    # Set group-by-dir flag
    mdfcc.set_conversion_config({"group_by_dir": True})
    # Add MDF Publish service
    if with_doi:
        mdfcc.add_service("mdf_publish")

    # Submit dataset
    sub_res = mdfcc.submit_dataset(update=update)
    if not sub_res["success"]:
        raise RuntimeError(sub_res["error"])
    else:
        print("Submission '{}' started".format(sub_res["source_id"]))
        return "Submission '{}' started".format(sub_res["source_id"])