Exemple #1
0
def get_bundle_record_with_id(bundle_id):
    """
    Returns a record given bundle_id
    """

    expand = True if flask.request.args.get("expand") == "true" else False

    ret = blueprint.index_driver.get_with_nonstrict_prefix(bundle_id)

    ret = bundle_to_drs(ret, expand=expand, is_content=False)

    return flask.jsonify(ret), 200
Exemple #2
0
def post_bundle():
    """
    Create a new bundle
    """
    auth.authorize("create", ["/services/indexd/bundles"])
    try:
        jsonschema.validate(flask.request.json, BUNDLE_SCHEMA)
    except jsonschema.ValidationError as err:
        raise UserError(err)

    name = flask.request.json.get("name")
    bundles = flask.request.json.get("bundles")
    bundle_id = flask.request.json.get("bundle_id")
    size = flask.request.json.get("size") if flask.request.json.get("size") else 0
    description = (
        flask.request.json.get("description")
        if flask.request.json.get("description")
        else ""
    )
    version = (
        flask.request.json.get("version") if flask.request.json.get("version") else ""
    )
    aliases = (
        flask.request.json.get("aliases") if flask.request.json.get("aliases") else []
    )

    if len(bundles) == 0:
        raise UserError("Bundle data required.")

    if len(bundles) != len(set(bundles)):
        raise UserError("Duplicate GUID in bundles.")

    if bundle_id in bundles:
        raise UserError("Bundle refers to itself.")

    bundle_data = []
    checksums = []

    # TODO: Remove this after updating to jsonschema>=3.0.0
    if flask.request.json.get("checksums"):
        hashes = {
            checksum["type"]: checksum["checksum"]
            for checksum in flask.request.json.get("checksums")
        }
        validate_hashes(**hashes)

    # get bundles/records that already exists and add it to bundle_data
    for bundle in bundles:
        data = get_index_record(bundle)[0]
        data = data.json
        size += data["size"] if not flask.request.json.get("size") else 0
        checksums.append(get_checksum(data))
        data = bundle_to_drs(data, expand=True, is_content=True)
        bundle_data.append(data)
    checksum = (
        flask.request.json.get("checksums")
        if flask.request.json.get("checksums")
        else [compute_checksum(checksums)]
    )

    ret = blueprint.index_driver.add_bundle(
        bundle_id=bundle_id,
        name=name,
        size=size,
        bundle_data=json.dumps(bundle_data),
        checksum=json.dumps(checksum),
        description=description,
        version=version,
        aliases=json.dumps(aliases),
    )

    return flask.jsonify({"bundle_id": ret[0], "name": ret[1], "contents": ret[2]}), 200