コード例 #1
0
ファイル: dumbattr_test.py プロジェクト: timbertson/dumbattr
	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'})
コード例 #2
0
ファイル: cmd.py プロジェクト: ReXtoN/eog-rate
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]
コード例 #3
0
ファイル: dumbattr_test.py プロジェクト: timbertson/dumbattr
	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'}})
コード例 #4
0
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]
コード例 #5
0
ファイル: dumbattr_test.py プロジェクト: timbertson/dumbattr
	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'})
コード例 #6
0
ファイル: dumbattr_test.py プロジェクト: timbertson/dumbattr
	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'})
コード例 #7
0
ファイル: dumbattr_test.py プロジェクト: timbertson/dumbattr
	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)
コード例 #8
0
ファイル: plugin.py プロジェクト: ReXtoN/eog-rate
	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()))
コード例 #9
0
ファイル: plugin.py プロジェクト: Veyya/eog-rate
 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()))
コード例 #10
0
ファイル: dumbattr_test.py プロジェクト: timbertson/dumbattr
	def test_cant_load_file_in_nonexistant_path(self):
		self.assertRaises(OSError, lambda: dumbattr.load('/foo/bar/baz'))
コード例 #11
0
ファイル: dumbattr_test.py プロジェクト: timbertson/dumbattr
	def test_cant_load_nonexistant_file(self):
		self.assertRaises(OSError, lambda: dumbattr.load(self.file1 + "_not"))