Add tests and implement org-tags-exclude-from-inheritance.

This commit is contained in:
Sergio Martínez Portela 2024-09-01 23:46:10 +02:00
parent 852f472374
commit 92078617fc
2 changed files with 27 additions and 2 deletions

View File

@ -752,8 +752,13 @@ class Headline:
return times return times
@property @property
def tags(self): def tags(self) -> list[str]:
return list(self.shallow_tags) + self.parent.tags parent_tags = self.parent.tags
if 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:
parent_tags.remove(tag)
return list(self.shallow_tags) + parent_tags
def add_tag(self, tag: str): def add_tag(self, tag: str):
self.shallow_tags.append(tag) self.shallow_tags.append(tag)
@ -2234,6 +2239,7 @@ class OrgDoc:
): ):
self.todo_keywords = [HeadlineState(name=kw) for kw in DEFAULT_TODO_KEYWORDS] self.todo_keywords = [HeadlineState(name=kw) for kw in DEFAULT_TODO_KEYWORDS]
self.done_keywords = [HeadlineState(name=kw) for kw in DEFAULT_DONE_KEYWORDS] self.done_keywords = [HeadlineState(name=kw) for kw in DEFAULT_DONE_KEYWORDS]
self.environment = environment
keywords_set_in_file = False keywords_set_in_file = False
for keyword in keywords: for keyword in keywords:

View File

@ -906,6 +906,25 @@ class TestSerde(unittest.TestCase):
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):
with open(os.path.join(DIR, "13-tags.org")) as f:
orig = f.read()
doc = loads(orig, {
'org-tags-exclude-from-inheritance': ('h1tag', 'otherh2tag')
})
self.assertEqual(doc.tags, ['filetag'])
h1_1, h1_2 = doc.getTopHeadlines()
self.assertEqual(sorted(h1_1.tags), ['filetag', 'h1tag'])
self.assertEqual(sorted(h1_2.tags), ['filetag', 'otherh1tag'])
h1_1_h2 = h1_1.children[0]
self.assertEqual(sorted(h1_1_h2.tags), ['filetag', 'h2tag'])
h1_2_h2 = h1_2.children[0]
self.assertEqual(sorted(h1_2_h2.tags), ['filetag', 'otherh1tag', '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:
print(" " * indentation * 2, "EL:", element) print(" " * indentation * 2, "EL:", element)