def test_symlink_attrs_are_saved_only_in_metadata(self): dumbattr.set(self.link_target, 'kind', 'target') dumbattr.set(self.link, 'kind', 'link') self.assertEqual(self.serialized_metadata(), { 'link': {'kind': 'link'}, 'link_target': {'kind': 'target'}, }) self.assertEqual(self.all_xattrs(self.link_target, nofollow=True), {b'kind':b'target'}) self.assertEqual(self.all_xattrs(self.link, nofollow=True), {}) self.assertEqual(dumbattr.load(self.link_target).copy(), {'kind':'target'}) self.assertEqual(dumbattr.load(self.link).copy(), {'kind':'link'})
def modify(opts, paths): cache = dumbattr.CachingAttributeStore() for path in paths: attrs = dumbattr.load(path) tags = util.get_tags(attrs) orig_tags = tags.copy() if opts.set_tags is not None: tags = util.parse_tag_str(opts.set_tags) else: tags.update(opts.add_tags) tags.difference_update(opts.remove_tags) if tags != orig_tags: if tags: attrs[TAGS] = util.render_tags(tags) else: del attrs[TAGS] # print "Updated tags to %r for %s" % (tags, path) if opts.set_rating is not None: if opts.set_rating: attrs[RATING] = str(opts.set_rating) else: del attrs[RATING] # print "Updated rating to %r for %s" % (rating, path) if opts.set_comment is not None: if opts.set_comment: attrs[COMMENT] = opts.set_comment else: del attrs[COMMENT]
def test_xattrs_with_no_serialized_value_are_kept(self): dumbattr.set(self.file1, "test1", "1") xattr.set(self.file1, "test2", "2", namespace=xattr.NS_USER) self.assertEqual(self.serialized_metadata(), {'file1': {'test1':'1'}}) self.assertEqual(dumbattr.load(self.file1).copy(), {'test1': '1', 'test2':'2'}) self.assertEqual(self.serialized_metadata(), {'file1': {'test1': '1', 'test2':'2'}})
def test_xattrs_overriden_by_serialized_attrs(self): dumbattr.set(self.file1, "test1", "1") xattr.set(self.file1, "test1", "2", namespace=xattr.NS_USER) self.assertEqual(self.serialized_metadata(), {'file1': {'test1':'1'}}) # load() has the side effect of fixing any discrepancies, just like `fix()` self.assertEqual(dumbattr.load(self.file1).copy(), {'test1': '1'}) self.assertEqual(self.all_xattrs(self.file1), {b'test1': b'1'})
def test_loading_attr_ensures_all_xattrs_are_set(self): dumbattr.set(self.file1, "file_1", "1") xattr.remove(self.file1, "file_1", namespace=xattr.NS_USER) self.assertEqual(self.all_xattrs(self.file1), {}) self.assertEqual(dumbattr.load(self.file1).copy(), {'file_1':'1'}) self.assertEqual(self.all_xattrs(self.file1), {b'file_1':b'1'})
def test_attr_removal(self): dumbattr.set(self.file1, 'test1', '1') dumbattr.set(self.file1, 'test2', '2') dumbattr.remove(self.file1, 'test1') self.assertEqual(dumbattr.load(self.file1).copy(), {'test2':'2'}) self.assertEqual(self.serialized_metadata(), {'file1':{'test2':'2'}}) dumbattr.remove(self.file1, 'test2') self.assertEqual(self.serialized_metadata(), None)
def current_attrs(self, window): thumbview = window.get_thumb_view() img = thumbview.get_first_selected_image() f = img.get_file() return dumbattr.load(os.path.realpath(f.get_path()))
def test_cant_load_file_in_nonexistant_path(self): self.assertRaises(OSError, lambda: dumbattr.load('/foo/bar/baz'))
def test_cant_load_nonexistant_file(self): self.assertRaises(OSError, lambda: dumbattr.load(self.file1 + "_not"))