mirror of
https://github.com/sissbruecker/linkding.git
synced 2025-08-13 21:49:26 +02:00
Allow auto tagging rules to match URL fragments (#1045)
This commit is contained in:
@@ -11,10 +11,18 @@ def get_tags(script: str, url: str):
|
||||
return result
|
||||
|
||||
for line in script.lower().split("\n"):
|
||||
if "#" in line:
|
||||
i = line.index("#")
|
||||
line = line[:i]
|
||||
line = line.strip()
|
||||
|
||||
# Skip empty lines or lines that start with a comment
|
||||
if not line or line.startswith("#"):
|
||||
continue
|
||||
|
||||
# Remove trailing comment - only if # is preceded by whitespace
|
||||
comment_match = re.search(r"\s+#", line)
|
||||
if comment_match:
|
||||
line = line[: comment_match.start()]
|
||||
|
||||
# Ignore lines that don't contain a URL and a tag
|
||||
parts = line.split()
|
||||
if len(parts) < 2:
|
||||
continue
|
||||
@@ -36,6 +44,11 @@ def get_tags(script: str, url: str):
|
||||
):
|
||||
continue
|
||||
|
||||
if parsed_pattern.fragment and not _fragment_matches(
|
||||
parsed_pattern.fragment, parsed_url.fragment
|
||||
):
|
||||
continue
|
||||
|
||||
for tag in parts[1:]:
|
||||
result.add(tag)
|
||||
|
||||
@@ -65,3 +78,7 @@ def _qs_matches(expected_qs: str, actual_qs: str) -> bool:
|
||||
return False
|
||||
|
||||
return True
|
||||
|
||||
|
||||
def _fragment_matches(expected_fragment: str, actual_fragment: str) -> bool:
|
||||
return actual_fragment.startswith(expected_fragment)
|
||||
|
@@ -202,3 +202,44 @@ class AutoTaggingTestCase(TestCase):
|
||||
tags = auto_tagging.get_tags(script, url)
|
||||
|
||||
self.assertEqual(tags, {"tag1", "tag2"})
|
||||
|
||||
def test_auto_tag_with_url_fragment(self):
|
||||
script = """
|
||||
example.com/#/section/1 section1
|
||||
example.com/#/section/2 section2
|
||||
"""
|
||||
url = "https://example.com/#/section/1"
|
||||
|
||||
tags = auto_tagging.get_tags(script, url)
|
||||
|
||||
self.assertEqual(tags, {"section1"})
|
||||
|
||||
def test_auto_tag_with_url_fragment_partial_match(self):
|
||||
script = """
|
||||
example.com/#/section section
|
||||
"""
|
||||
url = "https://example.com/#/section/1"
|
||||
|
||||
tags = auto_tagging.get_tags(script, url)
|
||||
|
||||
self.assertEqual(tags, {"section"})
|
||||
|
||||
def test_auto_tag_with_url_fragment_ignores_case(self):
|
||||
script = """
|
||||
example.com/#SECTION section
|
||||
"""
|
||||
url = "https://example.com/#section"
|
||||
|
||||
tags = auto_tagging.get_tags(script, url)
|
||||
|
||||
self.assertEqual(tags, {"section"})
|
||||
|
||||
def test_auto_tag_with_url_fragment_and_comment(self):
|
||||
script = """
|
||||
example.com/#section1 section1 #This is a comment
|
||||
"""
|
||||
url = "https://example.com/#section1"
|
||||
|
||||
tags = auto_tagging.get_tags(script, url)
|
||||
|
||||
self.assertEqual(tags, {"section1"})
|
||||
|
Reference in New Issue
Block a user