mirror of
https://github.com/MODSetter/SurfSense.git
synced 2026-04-25 16:56:22 +02:00
Rename comments files to chat_comments and add mention parser utility
This commit is contained in:
parent
7d43f1fb8f
commit
c793e2d621
6 changed files with 573 additions and 5 deletions
62
surfsense_backend/app/utils/chat_comments.py
Normal file
62
surfsense_backend/app/utils/chat_comments.py
Normal file
|
|
@ -0,0 +1,62 @@
|
|||
"""
|
||||
Utility functions for chat comments, including mention parsing.
|
||||
"""
|
||||
|
||||
import re
|
||||
from uuid import UUID
|
||||
|
||||
# Pattern to match @[uuid] mentions in comment content
|
||||
MENTION_PATTERN = re.compile(r"@\[([0-9a-fA-F-]{36})\]")
|
||||
|
||||
|
||||
def parse_mentions(content: str) -> list[UUID]:
|
||||
"""
|
||||
Extract user UUIDs from @[uuid] mentions in content.
|
||||
|
||||
Args:
|
||||
content: Comment text that may contain @[uuid] mentions
|
||||
|
||||
Returns:
|
||||
List of unique user UUIDs found in the content
|
||||
"""
|
||||
matches = MENTION_PATTERN.findall(content)
|
||||
unique_uuids = []
|
||||
seen = set()
|
||||
|
||||
for match in matches:
|
||||
try:
|
||||
uuid = UUID(match)
|
||||
if uuid not in seen:
|
||||
seen.add(uuid)
|
||||
unique_uuids.append(uuid)
|
||||
except ValueError:
|
||||
# Invalid UUID format, skip
|
||||
continue
|
||||
|
||||
return unique_uuids
|
||||
|
||||
|
||||
def render_mentions(content: str, user_names: dict[UUID, str]) -> str:
|
||||
"""
|
||||
Replace @[uuid] mentions with @DisplayName in content.
|
||||
|
||||
Args:
|
||||
content: Comment text with @[uuid] mentions
|
||||
user_names: Dict mapping user UUIDs to display names
|
||||
|
||||
Returns:
|
||||
Content with mentions rendered as @DisplayName
|
||||
"""
|
||||
|
||||
def replace_mention(match: re.Match) -> str:
|
||||
try:
|
||||
uuid = UUID(match.group(1))
|
||||
name = user_names.get(uuid)
|
||||
if name:
|
||||
return f"@{name}"
|
||||
# Keep original format if user not found
|
||||
return match.group(0)
|
||||
except ValueError:
|
||||
return match.group(0)
|
||||
|
||||
return MENTION_PATTERN.sub(replace_mention, content)
|
||||
Loading…
Add table
Add a link
Reference in a new issue