コード例 #1
0
def test_relation_with_remove():
    tmp_dir = scratch_path / "relation_with_remove"
    dmf = DMF(path=tmp_dir, create=True)
    e1 = experiment.Experiment(dmf, name="1")
    n, added = 10, []
    for i in range(n):
        a = resource.Resource({"name": "foo"})
        e1.add(a)
        added.append(a)
    assert len(e1.v["relations"]) == n
    # remove, then update e1
    for a in added:
        dmf.remove(identifier=a.id)
        e1.update()
        # relation to removed 'a' should be gone
        n -= 1
        assert (len(e1.v["relations"])) == n
コード例 #2
0
def rm(identifier, yes, multiple, list_resources):
    _log.info(f"remove resource '{identifier}'")
    try:
        resource.identifier_str(identifier, allow_prefix=True)
    except ValueError as errmsg:
        click.echo(f"Invalid identifier. Details: {errmsg}")
        sys.exit(Code.INPUT_VALUE.value)
    rsrc_list = list(find_by_id(identifier))
    found_multiple = len(rsrc_list) > 1
    if found_multiple and not multiple:
        click.echo(
            f"Too many ({len(rsrc_list)}) resources match prefix '{identifier}'. "
            "Add option --multiple to allow multiple matches.")
        sys.exit(Code.DMF_OPER.value)
    fields = ["type", "desc", "modified"]  # "id" is prepended by _ls_basic()
    if list_resources:
        _print_resource_table(rsrc_list, fields, ["id"], False, False, True)
    if yes != "yes":
        if found_multiple:
            s = f"these {len(rsrc_list)} resources"
        else:
            s = "this resource"
        do_remove = click.confirm(f"Remove {s}",
                                  prompt_suffix="? ",
                                  default=False)
        if not do_remove:
            click.echo("aborted")
            sys.exit(Code.CANCELED.value)
    d = DMF()
    for r in rsrc_list:
        _log.debug(f"begin remove-resource id={r.id}")
        d.remove(identifier=r.id)
        _log.debug(f"end remove-resource id={r.id}")
    if found_multiple:
        s = f"{len(rsrc_list)} resources removed"
    else:
        s = "resource removed"
    click.echo(s)