Feat: Complete tags property #10

Merged
kenkeiras merged 6 commits from feat/consider-file-tags-on-headlines into develop 2024-09-03 18:33:04 +00:00
2 changed files with 39 additions and 32 deletions
Showing only changes of commit 78bc57e55d - Show all commits

View File

@ -754,15 +754,15 @@ class Headline:
@property @property
def tags(self) -> list[str]: def tags(self) -> list[str]:
parent_tags = self.parent.tags parent_tags = self.parent.tags
if self.doc.environment.get('org-use-tag-inheritance'): if self.doc.environment.get("org-use-tag-inheritance"):
accepted_tags = [] accepted_tags = []
for tag in self.doc.environment.get('org-use-tag-inheritance'): for tag in self.doc.environment.get("org-use-tag-inheritance"):
if tag in parent_tags: if tag in parent_tags:
accepted_tags.append(tag) accepted_tags.append(tag)
parent_tags = accepted_tags parent_tags = accepted_tags
elif self.doc.environment.get('org-tags-exclude-from-inheritance'): elif self.doc.environment.get("org-tags-exclude-from-inheritance"):
for tag in self.doc.environment.get('org-tags-exclude-from-inheritance'): for tag in self.doc.environment.get("org-tags-exclude-from-inheritance"):
if tag in parent_tags: if tag in parent_tags:
parent_tags.remove(tag) parent_tags.remove(tag)
return list(self.shallow_tags) + parent_tags return list(self.shallow_tags) + parent_tags
@ -2294,7 +2294,7 @@ class OrgDoc:
def tags(self) -> list[str]: def tags(self) -> list[str]:
for kw in self.keywords: for kw in self.keywords:
if kw.key == "FILETAGS": if kw.key == "FILETAGS":
return kw.value.strip(':').split(':') return kw.value.strip(":").split(":")
return [] return []
@property @property

View File

@ -877,73 +877,80 @@ class TestSerde(unittest.TestCase):
orig = f.read() orig = f.read()
doc = loads(orig) doc = loads(orig)
self.assertEqual(doc.tags, ['filetag']) self.assertEqual(doc.tags, ["filetag"])
h1_1, h1_2 = doc.getTopHeadlines() h1_1, h1_2 = doc.getTopHeadlines()
self.assertEqual(sorted(h1_1.tags), ['filetag', 'h1tag']) self.assertEqual(sorted(h1_1.tags), ["filetag", "h1tag"])
self.assertEqual(sorted(h1_2.tags), ['filetag', 'otherh1tag']) self.assertEqual(sorted(h1_2.tags), ["filetag", "otherh1tag"])
h1_1_h2 = h1_1.children[0] h1_1_h2 = h1_1.children[0]
self.assertEqual(sorted(h1_1_h2.tags), ['filetag', 'h1tag', 'h2tag']) self.assertEqual(sorted(h1_1_h2.tags), ["filetag", "h1tag", "h2tag"])
h1_2_h2 = h1_2.children[0] h1_2_h2 = h1_2.children[0]
self.assertEqual(sorted(h1_2_h2.tags), ['filetag', 'otherh1tag', 'otherh2tag']) self.assertEqual(sorted(h1_2_h2.tags), ["filetag", "otherh1tag", "otherh2tag"])
def test_shallow_tag_property_read_13(self): def test_shallow_tag_property_read_13(self):
with open(os.path.join(DIR, "13-tags.org")) as f: with open(os.path.join(DIR, "13-tags.org")) as f:
orig = f.read() orig = f.read()
doc = loads(orig) doc = loads(orig)
self.assertEqual(doc.shallow_tags, ['filetag']) self.assertEqual(doc.shallow_tags, ["filetag"])
h1_1, h1_2 = doc.getTopHeadlines() h1_1, h1_2 = doc.getTopHeadlines()
self.assertEqual(sorted(h1_1.shallow_tags), ['h1tag']) self.assertEqual(sorted(h1_1.shallow_tags), ["h1tag"])
self.assertEqual(sorted(h1_2.shallow_tags), ['otherh1tag']) self.assertEqual(sorted(h1_2.shallow_tags), ["otherh1tag"])
h1_1_h2 = h1_1.children[0] h1_1_h2 = h1_1.children[0]
self.assertEqual(sorted(h1_1_h2.shallow_tags), ['h2tag']) self.assertEqual(sorted(h1_1_h2.shallow_tags), ["h2tag"])
h1_2_h2 = h1_2.children[0] h1_2_h2 = h1_2.children[0]
self.assertEqual(sorted(h1_2_h2.shallow_tags), ['otherh2tag']) self.assertEqual(sorted(h1_2_h2.shallow_tags), ["otherh2tag"])
def test_exclude_tags_from_inheritance_property_read_13(self): def test_exclude_tags_from_inheritance_property_read_13(self):
with open(os.path.join(DIR, "13-tags.org")) as f: with open(os.path.join(DIR, "13-tags.org")) as f:
orig = f.read() orig = f.read()
doc = loads(orig, { doc = loads(
'org-tags-exclude-from-inheritance': ('h1tag', 'otherh2tag'), orig,
}) {
"org-tags-exclude-from-inheritance": ("h1tag", "otherh2tag"),
},
)
self.assertEqual(doc.tags, ['filetag']) self.assertEqual(doc.tags, ["filetag"])
h1_1, h1_2 = doc.getTopHeadlines() h1_1, h1_2 = doc.getTopHeadlines()
self.assertEqual(sorted(h1_1.tags), ['filetag', 'h1tag']) self.assertEqual(sorted(h1_1.tags), ["filetag", "h1tag"])
self.assertEqual(sorted(h1_2.tags), ['filetag', 'otherh1tag']) self.assertEqual(sorted(h1_2.tags), ["filetag", "otherh1tag"])
h1_1_h2 = h1_1.children[0] h1_1_h2 = h1_1.children[0]
self.assertEqual(sorted(h1_1_h2.tags), ['filetag', 'h2tag']) self.assertEqual(sorted(h1_1_h2.tags), ["filetag", "h2tag"])
h1_2_h2 = h1_2.children[0] h1_2_h2 = h1_2.children[0]
self.assertEqual(sorted(h1_2_h2.tags), ['filetag', 'otherh1tag', 'otherh2tag']) self.assertEqual(sorted(h1_2_h2.tags), ["filetag", "otherh1tag", "otherh2tag"])
def test_select_tags_to_inheritance_property_read_13(self): def test_select_tags_to_inheritance_property_read_13(self):
with open(os.path.join(DIR, "13-tags.org")) as f: with open(os.path.join(DIR, "13-tags.org")) as f:
orig = f.read() orig = f.read()
doc = loads(orig, { doc = loads(
'org-tags-exclude-from-inheritance': ('h1tag', 'otherh2tag'), orig,
'org-use-tag-inheritance': ('h1tag',), {
}) "org-tags-exclude-from-inheritance": ("h1tag", "otherh2tag"),
"org-use-tag-inheritance": ("h1tag",),
},
)
self.assertEqual(doc.tags, ['filetag']) self.assertEqual(doc.tags, ["filetag"])
h1_1, h1_2 = doc.getTopHeadlines() h1_1, h1_2 = doc.getTopHeadlines()
self.assertEqual(sorted(h1_1.tags), ['h1tag']) self.assertEqual(sorted(h1_1.tags), ["h1tag"])
self.assertEqual(sorted(h1_2.tags), ['otherh1tag']) self.assertEqual(sorted(h1_2.tags), ["otherh1tag"])
h1_1_h2 = h1_1.children[0] h1_1_h2 = h1_1.children[0]
self.assertEqual(sorted(h1_1_h2.tags), ['h1tag', 'h2tag']) self.assertEqual(sorted(h1_1_h2.tags), ["h1tag", "h2tag"])
h1_2_h2 = h1_2.children[0] h1_2_h2 = h1_2.children[0]
self.assertEqual(sorted(h1_2_h2.tags), ['otherh2tag']) self.assertEqual(sorted(h1_2_h2.tags), ["otherh2tag"])
def print_tree(tree, indentation=0, headline=None): def print_tree(tree, indentation=0, headline=None):
for element in tree: for element in tree: