Test and implement org-use-tag-inheritance.
Some checks failed
Testing / pytest (push) Has been cancelled
Testing / mypy (push) Has been cancelled
Testing / style-formatting (push) Has been cancelled
Testing / style-sorted-imports (push) Has been cancelled
Testing / stability-extra-test (push) Has been cancelled

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

View File

@ -754,7 +754,14 @@ class Headline:
@property
def tags(self) -> list[str]:
parent_tags = self.parent.tags
if self.doc.environment.get('org-tags-exclude-from-inheritance'):
if self.doc.environment.get('org-use-tag-inheritance'):
accepted_tags = []
for tag in self.doc.environment.get('org-use-tag-inheritance'):
if tag in parent_tags:
accepted_tags.append(tag)
parent_tags = accepted_tags
elif 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)

View File

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