コード例 #1
0
ファイル: test_cli.py プロジェクト: RhetTbull/osxmetadata
def test_cli_verbose_short_opts(temp_file):
    from osxmetadata import OSXMetaData, Tag
    from osxmetadata.__main__ import cli

    TESTDIR = None
    source_file = NamedTemporaryFile(dir=TESTDIR)
    source_filename = source_file.name

    meta_source = OSXMetaData(source_filename)
    meta_source.tags = [Tag("bar")]
    meta_source.keywords = ["foo"]
    meta_source.findercomment = "Bar"
    meta_source.comment = "Foo"

    runner = CliRunner()
    result = runner.invoke(
        cli,
        [
            "-X",
            "-s",
            "keywords",
            "test",
            "-l",
            "-g",
            "keywords",
            "-c",
            "keywords",
            "-r",
            "keywords",
            "test",
            "-u",
            "keywords",
            "foo",
            "-m",
            "keywords",
            "tags",
            "-V",
            "-B",
            "-f",
            source_filename,
            temp_file,
        ],
    )
    assert result.exit_code == 0
    output = result.output
    assert "Processing file" in output
    assert "No metadata to wipe from" in output
    assert "Copying attributes from" in output
    assert "Copying com.apple.metadata:_kMDItemUserTags" in output
    assert "Copying com.apple.metadata:kMDItemComment" in output
    assert "Copying com.apple.metadata:kMDItemKeywords" in output
    assert "Copying com.apple.metadata:kMDItemFinderComment" in output
    assert "Clearing keywords" in output
    assert "Setting keywords=test" in output
    assert "Updating keywords=foo" in output
    assert "Removing keywords" in output
    assert "Mirroring keywords tags" in output
    assert "Backing up attribute data" in output

    source_file.close()
コード例 #2
0
ファイル: test_cli.py プロジェクト: RhetTbull/osxmetadata
def test_list_attributes(temp_file, attribute):
    from osxmetadata import ATTRIBUTES, OSXMetaData, Tag
    from osxmetadata.__main__ import cli
    from osxmetadata.constants import _TAGS_NAMES

    runner = CliRunner()
    result = runner.invoke(cli, [
        "--set", attribute, "Foo", "--set", attribute, "Bar", "--list",
        temp_file
    ])
    assert result.exit_code == 0
    output = parse_cli_output(result.stdout)
    attr_short_name = ATTRIBUTES[attribute].name
    assert output[attr_short_name] == "['Foo', 'Bar']"
    meta = OSXMetaData(temp_file)
    if attribute in [*_TAGS_NAMES]:
        assert meta.get_attribute(attribute) == [Tag("Foo"), Tag("Bar")]
    else:
        assert meta.get_attribute(attribute) == ["Foo", "Bar"]

    result = runner.invoke(
        cli,
        [
            "--append",
            attribute,
            "Green",
            "--remove",
            attribute,
            "Foo",
            "--list",
            temp_file,
        ],
    )
    assert result.exit_code == 0
    output = parse_cli_output(result.stdout)
    attr_short_name = ATTRIBUTES[attribute].name
    if attr_short_name == "tags":
        assert output[attr_short_name] == "['Bar', 'Green,Green']"
    else:
        assert output[attr_short_name] == "['Bar', 'Green']"
コード例 #3
0
def test_stationarypad(temp_file):
    """Test stationarypad attribute"""
    from osxmetadata import OSXMetaData

    meta = OSXMetaData(temp_file)
    assert not meta.stationarypad

    meta.stationarypad = True
    assert meta.stationarypad

    meta.stationarypad = 0
    assert not meta.stationarypad

    meta.stationarypad = 1
    assert meta.stationarypad

    meta.stationarypad = False
    assert not meta.stationarypad
    assert not meta.get_attribute("stationarypad")
    
    meta.set_attribute("stationarypad", True)
    assert meta.get_attribute("stationarypad")
コード例 #4
0
ファイル: test_cli.py プロジェクト: RhetTbull/osxmetadata
def test_cli_mirror(temp_file):
    import datetime

    from osxmetadata import OSXMetaData, Tag
    from osxmetadata.__main__ import cli

    runner = CliRunner()
    result = runner.invoke(
        cli,
        [
            "--set",
            "comment",
            "Foo",
            "--set",
            "findercomment",
            "Bar",
            "--set",
            "keywords",
            "foo",
            "--set",
            "tags",
            "bar",
            "--list",
            temp_file,
        ],
    )
    assert result.exit_code == 0
    meta = OSXMetaData(temp_file)
    assert meta.tags == [Tag("bar")]
    assert meta.keywords == ["foo"]
    assert meta.findercomment == "Bar"
    assert meta.comment == "Foo"

    result = runner.invoke(
        cli,
        [
            "--mirror",
            "keywords",
            "tags",
            "--mirror",
            "comment",
            "findercomment",
            temp_file,
        ],
    )

    assert result.exit_code == 0
    assert meta.keywords == ["bar", "foo"]
    assert meta.tags == [Tag("bar"), Tag("foo")]
    assert meta.findercomment == "Bar"
    assert meta.comment == "Bar"
コード例 #5
0
ファイル: test_cli.py プロジェクト: RhetTbull/osxmetadata
def test_cli_walk(temp_dir):
    """test --walk"""
    import os
    import pathlib

    from osxmetadata import OSXMetaData, Tag
    from osxmetadata.__main__ import cli

    dirname = pathlib.Path(temp_dir)
    os.makedirs(dirname / "temp" / "subfolder1")
    os.makedirs(dirname / "temp" / "subfolder2")
    create_file(dirname / "temp" / "temp1.txt")
    create_file(dirname / "temp" / "subfolder1" / "sub1.txt")

    runner = CliRunner()
    result = runner.invoke(cli, ["--set", "tags", "FOO", "--walk", temp_dir])
    assert result.exit_code == 0

    md = OSXMetaData(dirname / "temp" / "subfolder1" / "sub1.txt")
    assert md.tags == [Tag("FOO")]

    md = OSXMetaData(dirname / "temp" / "subfolder2")
    assert md.tags == [Tag("FOO")]
コード例 #6
0
def test_duedate(temp_file):
    """test functions on one of the datetime attributes"""
    from osxmetadata import OSXMetaData

    meta = OSXMetaData(temp_file)
    meta.duedate = "2021-07-08"
    assert meta.duedate == datetime.datetime(2021, 7, 8)
    assert meta.get_attribute("duedate") == datetime.datetime(2021, 7, 8)

    meta.duedate = None
    assert meta.duedate is None
    assert meta.get_attribute("duedate") is None

    meta.duedate = datetime.datetime(2021, 7, 8)
    assert meta.duedate == datetime.datetime(2021, 7, 8)
    assert meta.get_attribute("duedate") == datetime.datetime(2021, 7, 8)
コード例 #7
0
def test_rating(temp_file):
    """test int functions on one of the int attributes"""
    from osxmetadata import OSXMetaData

    meta = OSXMetaData(temp_file)
    meta.rating = 4
    assert meta.rating == 4
    assert meta.get_attribute("rating") == 4

    meta.rating += 1
    assert meta.rating == 5
    assert meta.get_attribute("rating") == 5

    meta.rating = None
    assert meta.rating is None
    assert meta.get_attribute("rating") is None

    meta.rating = 5
    assert meta.rating == 5
    assert meta.get_attribute("rating") == 5
コード例 #8
0
def test_description(temp_file):
    """ test string functions on one of the str attributes """
    from osxmetadata import OSXMetaData

    meta = OSXMetaData(temp_file)
    meta.description = "Foo"
    assert meta.description == "Foo"
    assert meta.get_attribute("description") == "Foo"

    meta.description += " Bar"
    assert meta.description == "Foo Bar"
    assert meta.get_attribute("description") == "Foo Bar"

    meta.description = None
    assert meta.description == None
    assert meta.get_attribute("description") == None

    meta.description = "Foo"
    assert meta.description == "Foo"
    assert meta.get_attribute("description") == "Foo"
コード例 #9
0
def test_finderinfo_colorid(temp_file):

    from osxmetadata import OSXMetaData, Tag
    from osxmetadata.constants import _MAX_FINDER_COLOR
    from osxmetadata.findertags import get_tag_color_name

    meta = OSXMetaData(temp_file)

    # check each color combo.  Setting 0 doesn't work -- the attribute gets deleted
    for color_id in range(_MAX_FINDER_COLOR + 1, _MAX_FINDER_COLOR + 1):
        meta.finderinfo.color = color_id
        color_got = meta.finderinfo.color
        assert color_got == color_id
        color_name = get_tag_color_name(color_id)
        assert meta.tags == [Tag(color_name, color_id)]
コード例 #10
0
def test_cli_backup_restore(temp_file):
    import pathlib
    from osxmetadata import OSXMetaData, ATTRIBUTES, Tag
    from osxmetadata.constants import _BACKUP_FILENAME
    from osxmetadata.__main__ import cli

    runner = CliRunner()
    result = runner.invoke(
        cli,
        [
            "--set",
            "tags",
            "Foo",
            "--set",
            "tags",
            "Bar",
            "--set",
            "comment",
            "Hello World!",
            "--list",
            temp_file,
        ],
    )
    assert result.exit_code == 0
    output = parse_cli_output(result.stdout)
    assert output["tags"] == "['Foo', 'Bar']"
    meta = OSXMetaData(temp_file)
    assert meta.get_attribute("tags") == [Tag("Foo"), Tag("Bar")]
    assert meta.get_attribute("comment") == "Hello World!"

    # test creation of backup file
    result = runner.invoke(cli, ["--backup", temp_file])
    assert result.exit_code == 0
    backup_file = pathlib.Path(pathlib.Path(temp_file).parent) / _BACKUP_FILENAME
    assert backup_file.exists()

    # clear the attributes to see if they can be restored
    meta.clear_attribute("tags")
    meta.clear_attribute("comment")
    assert meta.tags == []
    assert meta.comment == None

    result = runner.invoke(cli, ["--restore", temp_file])
    assert result.exit_code == 0
    assert meta.tags == [Tag("Foo"), Tag("Bar")]
    assert meta.comment == "Hello World!"
コード例 #11
0
def test_tags_clear(temp_file):

    from osxmetadata import OSXMetaData, Tag
    from osxmetadata.constants import kMDItemUserTags

    attribute = kMDItemUserTags

    # update tags
    meta = OSXMetaData(temp_file)
    tagset = [Tag("Test"), Tag("Green")]

    meta.set_attribute(attribute, tagset)
    tags = meta.get_attribute(attribute)
    assert tags == tagset

    meta.clear_attribute(attribute)
    tags = meta.get_attribute(attribute)
    assert tags == []
コード例 #12
0
def test_tags(temp_file):

    from osxmetadata import OSXMetaData, Tag

    # update tags
    meta = OSXMetaData(temp_file)
    tagset = [Tag("Test"), Tag("Green")]
    meta.tags.extend(tagset)
    assert meta.tags == tagset

    # extend
    meta.tags.extend([Tag("Foo")])
    assert meta.tags == [Tag("Test"), Tag("Green"), Tag("Foo")]

    # add tags
    meta.tags.append(Tag("Hello"))
    assert meta.tags != tagset
    assert meta.tags == [Tag("Test"), Tag("Green"), Tag("Foo"), Tag("Hello")]

    # __iadd__
    meta.tags += [Tag("Bar")]
    assert meta.tags == [
        Tag("Test"),
        Tag("Green"),
        Tag("Foo"),
        Tag("Hello"),
        Tag("Bar"),
    ]

    # __repr__
    # TODO

    # remove tags
    meta.tags.remove(Tag("Test"))
    assert meta.tags == [Tag("Green"), Tag("Foo"), Tag("Hello"), Tag("Bar")]

    # remove tag that doesn't exist, raises KeyError
    with pytest.raises(ValueError):
        assert meta.tags.remove(Tag("FooBar"))

    # len
    assert len(meta.tags) == 4

    # clear tags
    meta.tags.clear()
    assert meta.tags == []
コード例 #13
0
def test_cli_wipe_2(temp_file):
    # test wipe then set
    from osxmetadata import OSXMetaData, Tag
    from osxmetadata.__main__ import cli

    runner = CliRunner()
    result = runner.invoke(
        cli,
        [
            "--set",
            "comment",
            "Foo",
            "--set",
            "findercomment",
            "Bar",
            "--set",
            "keywords",
            "foo",
            "--set",
            "tags",
            "bar",
            "--list",
            temp_file,
        ],
    )
    assert result.exit_code == 0
    meta = OSXMetaData(temp_file)
    assert meta.tags == [Tag("bar")]
    assert meta.keywords == ["foo"]
    assert meta.findercomment == "Bar"
    assert meta.comment == "Foo"

    result = runner.invoke(
        cli, ["--wipe", "--set", "comment", "Hello World!", temp_file]
    )
    assert result.exit_code == 0
    assert meta.tags == []
    assert meta.keywords == []
    assert meta.findercomment is None
    assert meta.comment == "Hello World!"
コード例 #14
0
def test_cli_copy_from_2(temp_file):
    # test copy from source file with setting etc
    from osxmetadata import OSXMetaData, Tag
    from osxmetadata.__main__ import cli

    TESTDIR = None
    source_file = NamedTemporaryFile(dir=TESTDIR)
    source_filename = source_file.name

    meta_source = OSXMetaData(source_filename)
    meta_source.tags = [Tag("bar")]
    meta_source.keywords = ["foo"]
    meta_source.findercomment = "Bar"
    meta_source.comment = "Foo"

    runner = CliRunner()
    result = runner.invoke(
        cli,
        [
            "--copyfrom",
            source_filename,
            temp_file,
            "--set",
            "tags",
            "FOOBAR",
            "--append",
            "findercomment",
            "Foo",
        ],
    )
    assert result.exit_code == 0
    meta = OSXMetaData(temp_file)
    assert meta.tags == [Tag("FOOBAR")]
    assert meta.keywords == ["foo"]
    assert meta.findercomment == "BarFoo"
    assert meta.comment == "Foo"

    source_file.close()
コード例 #15
0
def test_finderinfo_stationarypad_set_get_clear(temp_file):
    """Test ability to set_attribute, get_attribute, clear_attribute on finderinfo"""
    from osxmetadata import OSXMetaData, Tag

    meta = OSXMetaData(temp_file)

    assert meta.finderinfo.stationarypad == 0
    meta.finderinfo.stationarypad = True
    assert meta.finderinfo.stationarypad

    assert {"stationarypad": True}.items() <= meta.get_attribute("finderinfo").items()

    meta.set_attribute("finderinfo", {"stationarypad": True})
    assert meta.finderinfo.stationarypad

    meta.clear_attribute("finderinfo")
    assert not meta.finderinfo.stationarypad

    meta.finderinfo.stationarypad = None
    assert not meta.finderinfo.stationarypad

    # test string to bool
    meta.finderinfo.stationarypad = "True"
    assert meta.finderinfo.stationarypad
コード例 #16
0
def test_str_attribute(temp_file, attribute):
    """test set_attribute, get_attribute, etc"""
    from osxmetadata import OSXMetaData
    from osxmetadata.constants import _FINDER_COMMENT_NAMES

    meta = OSXMetaData(temp_file)
    expected = datetime.datetime(2021, 7, 8)
    meta.set_attribute(attribute, expected)
    got = meta.get_attribute(attribute)
    assert expected == got

    meta.clear_attribute(attribute)
    assert meta.get_attribute(attribute) == None

    # test setting empty string
    meta.set_attribute(attribute, "")
    assert meta.get_attribute(attribute) is None

    with pytest.raises(TypeError):
        meta.update_attribute(attribute, "foo")

    with pytest.raises(TypeError):
        meta.discard_attribute(attribute, "foo")

    with pytest.raises(TypeError):
        meta.remove_attribute(attribute, "foo")
コード例 #17
0
def test_str_attribute(temp_file, attribute):
    """test set_attribute, get_attribute, etc"""
    from osxmetadata import OSXMetaData
    from osxmetadata.constants import _FINDER_COMMENT_NAMES

    meta = OSXMetaData(temp_file)
    expected = True
    meta.set_attribute(attribute, expected)
    got = meta.get_attribute(attribute)
    assert expected == got

    meta.set_attribute(attribute, not expected)
    assert not meta.get_attribute(attribute)

    meta.clear_attribute(attribute)
    assert meta.get_attribute(attribute) is None

    # test setting empty string
    # setting finder comment to empty string clears it
    # but other fields get set to empty string
    # this mirrors the way finder comments work in mdls
    meta.set_attribute(attribute, "")
    assert not meta.get_attribute(attribute)

    with pytest.raises(AttributeError):
        meta.update_attribute(attribute, "foo")

    with pytest.raises(TypeError):
        meta.discard_attribute(attribute, "foo")

    with pytest.raises(TypeError):
        meta.remove_attribute(attribute, "foo")
コード例 #18
0
ファイル: test_cli.py プロジェクト: RhetTbull/osxmetadata
def test_cli_backup_restore(temp_file):
    import pathlib

    from osxmetadata import ATTRIBUTES, OSXMetaData, Tag
    from osxmetadata.__main__ import cli
    from osxmetadata.constants import (
        _BACKUP_FILENAME,
        FINDER_COLOR_GREEN,
        FINDER_COLOR_NONE,
    )

    runner = CliRunner()
    result = runner.invoke(
        cli,
        [
            "--set",
            "tags",
            "Foo",
            "--set",
            "tags",
            "Bar",
            "--set",
            "comment",
            "Hello World!",
            "--list",
            "--set",
            "finderinfo",
            "color:green",
            temp_file,
        ],
    )
    assert result.exit_code == 0
    output = parse_cli_output(result.stdout)
    assert output["tags"] == "['Foo', 'Bar', 'Green,Green']"
    meta = OSXMetaData(temp_file)
    assert meta.get_attribute("tags") == [
        Tag("Foo"),
        Tag("Bar"),
        Tag("Green", FINDER_COLOR_GREEN),
    ]
    assert meta.get_attribute("comment") == "Hello World!"
    assert meta.finderinfo.color == FINDER_COLOR_GREEN

    # test creation of backup file
    result = runner.invoke(cli, ["--backup", temp_file])
    assert result.exit_code == 0
    backup_file = pathlib.Path(
        pathlib.Path(temp_file).parent) / _BACKUP_FILENAME
    assert backup_file.exists()

    # clear the attributes to see if they can be restored
    meta.clear_attribute("tags")
    meta.clear_attribute("comment")
    meta.clear_attribute("finderinfo")
    assert meta.tags == []
    assert meta.comment is None
    assert meta.finderinfo.color == FINDER_COLOR_NONE

    result = runner.invoke(cli, ["--restore", temp_file])
    assert result.exit_code == 0
    assert meta.tags == [
        Tag("Foo"), Tag("Bar"),
        Tag("Green", FINDER_COLOR_GREEN)
    ]
    assert meta.comment == "Hello World!"
    assert meta.finderinfo.color == FINDER_COLOR_GREEN
コード例 #19
0
def test_str_attribute(temp_file, attribute):
    """test set_attribute, get_attribute, etc"""
    from osxmetadata import OSXMetaData
    from osxmetadata.constants import _FINDER_COMMENT_NAMES

    meta = OSXMetaData(temp_file)
    expected = 2
    meta.set_attribute(attribute, expected)
    got = meta.get_attribute(attribute)
    assert expected == got

    expected += 1
    meta.append_attribute(attribute, 1)
    assert meta.get_attribute(attribute) == expected

    meta.clear_attribute(attribute)
    assert meta.get_attribute(attribute) is None

    with pytest.raises(TypeError):
        meta.set_attribute(attribute, "")

    with pytest.raises(TypeError):
        meta.update_attribute(attribute, "foo")

    with pytest.raises(TypeError):
        meta.discard_attribute(attribute, "foo")

    with pytest.raises(TypeError):
        meta.remove_attribute(attribute, "foo")
コード例 #20
0
def test_restore(temp_file):
    from osxmetadata import OSXMetaData, Tag, kMDItemComment

    meta = OSXMetaData(temp_file)
    meta.tags = [Tag("foo"), Tag("bar")]
    meta.set_attribute(kMDItemComment, "Hello World!")
    attr_dict = meta._to_dict()
    meta.tags = []
    meta.clear_attribute(kMDItemComment)

    assert meta.tags == []
    assert meta.comment is None

    meta._restore_attributes(attr_dict)
    assert meta.tags == [Tag("foo"), Tag("bar")]
    assert meta.get_attribute(kMDItemComment) == "Hello World!"
コード例 #21
0
def test_cli_1(temp_file):
    import datetime
    from osxmetadata import OSXMetaData, kMDItemDownloadedDate
    from osxmetadata.__main__ import cli

    runner = CliRunner()
    result = runner.invoke(
        cli,
        [
            "--set",
            "description",
            "Foo",
            "--append",
            "description",
            "Bar",
            "--list",
            temp_file,
        ],
    )
    assert result.exit_code == 0
    output = parse_cli_output(result.stdout)
    assert output["description"] == "FooBar"
    meta = OSXMetaData(temp_file)
    assert meta.description == "FooBar"

    result = runner.invoke(
        cli,
        [
            "--update",
            "keywords",
            "foo",
            "--update",
            "keywords",
            "bar",
            "--remove",
            "keywords",
            "foo",
            "--list",
            temp_file,
        ],
    )
    assert result.exit_code == 0
    output = parse_cli_output(result.stdout)
    assert output["keywords"] == "['bar']"
    meta = OSXMetaData(temp_file)
    assert meta.keywords == ["bar"]

    dt = "2020-02-23"
    result = runner.invoke(cli, ["--set", "downloadeddate", dt, "--list", temp_file])
    assert result.exit_code == 0
    output = parse_cli_output(result.stdout)
    assert output["downloadeddate"] == "['2020-02-23T00:00:00']"
    expected_dt = datetime.datetime.fromisoformat(dt)
    meta = OSXMetaData(temp_file)
    assert meta.get_attribute(kMDItemDownloadedDate) == [expected_dt]
    assert meta.downloadeddate == [expected_dt]

    result = runner.invoke(cli, ["--clear", "description", temp_file])
    assert result.exit_code == 0
    meta = OSXMetaData(temp_file)
    assert meta.description is None
コード例 #22
0
def test_finder_comments_2(temp_file):
    """ test get/set attribute """

    from osxmetadata import OSXMetaData
    from osxmetadata.constants import kMDItemFinderComment

    attribute = kMDItemFinderComment

    meta = OSXMetaData(temp_file)
    fc = "This is my new comment"
    meta.set_attribute(attribute, fc)
    assert meta.findercomment == fc
    meta.findercomment += ", foo"
    fc += ", foo"
    assert meta.findercomment == fc

    # set finder comment to "" results in null string but not deleted
    meta.set_attribute(attribute, "")
    assert meta.get_attribute(attribute) == ""

    meta.set_attribute(attribute, "foo")
    assert meta.get_attribute(attribute) == "foo"

    # set finder comment to None deletes it
    meta.set_attribute(attribute, "")
    assert meta.get_attribute(attribute) == ""

    meta.clear_attribute(attribute)
    assert meta.get_attribute(attribute) == None

    # can we set findercomment after is was set to None?
    meta.set_attribute(attribute, "bar")
    assert meta.get_attribute(attribute) == "bar"
コード例 #23
0
def test_list_attribute(temp_file, attribute):
    """test set_attribute, get_attribute, etc for list items"""
    from osxmetadata import OSXMetaData

    meta = OSXMetaData(temp_file)
    expected = ["Foo"]
    meta.set_attribute(attribute, expected)
    got = meta.get_attribute(attribute)
    assert expected == got

    expected += ["Bar"]
    meta.append_attribute(attribute, ["Bar"])
    assert meta.get_attribute(attribute) == expected

    expected.remove("Bar")
    meta.remove_attribute(attribute, "Bar")
    assert meta.get_attribute(attribute) == expected

    with pytest.raises(ValueError):
        meta.remove_attribute(attribute, "Bar")

    expected += ["Flooz"]
    meta.update_attribute(attribute, ["Flooz"])
    assert meta.get_attribute(attribute) == expected

    meta.discard_attribute(attribute, "foo")
    assert meta.get_attribute(attribute) == expected

    meta.clear_attribute(attribute)
    assert meta.get_attribute(attribute) is None

    expected = ["Foo"]
    meta.set_attribute(attribute, expected)
    got = meta.get_attribute(attribute)
    assert expected == got
コード例 #24
0
def test_finder_comments_2(temp_file):
    """ test get/set attribute """

    from osxmetadata import OSXMetaData
    from osxmetadata.constants import kMDItemFinderComment

    attribute = kMDItemFinderComment

    meta = OSXMetaData(temp_file)
    fc = "This is my new comment"
    meta.set_attribute(attribute, fc)
    assert meta.findercomment == fc
    meta.findercomment += ", foo"
    fc += ", foo"
    assert meta.findercomment == fc

    # set finder comment to "" deletes it as this mirrors mdls and Finder
    meta.set_attribute(attribute, "")
    assert meta.get_attribute(attribute) is None

    meta.set_attribute(attribute, "foo")
    assert meta.get_attribute(attribute) == "foo"

    # set finder comment to None deletes it
    meta.set_attribute(attribute, None)
    assert meta.get_attribute(attribute) is None

    meta.clear_attribute(attribute)
    assert meta.get_attribute(attribute) is None

    # can we set findercomment after is was set to None?
    meta.set_attribute(attribute, "bar")
    assert meta.get_attribute(attribute) == "bar"