Source code for eclypse.builders.application.deathstarbench.social_network.rest_services.text

"""REST endpoints for text parsing and enrichment."""

import re

from eclypse.remote.communication import rest
from eclypse.remote.service import RESTService
from eclypse.utils import format_log_kv

_MENTION_RE = re.compile(r"@([a-zA-Z0-9_]+)")
_URL_RE = re.compile(r"https?://[^\\s]+")


[docs] class TextService(RESTService): """Extract mentions and URLs from post text."""
[docs] @rest.endpoint("/compose", "POST") async def compose(self, text: str, **payload): """Parse the post text and forward enriched state downstream.""" self.logger.info("Received request | " + format_log_kv(text=text)) mentions = _MENTION_RE.findall(text) urls = _URL_RE.findall(text) response = await self.rest.post( "UserMentionService/compose", **payload, text=text, mentions=mentions, urls=urls, ) self.logger.info( "Received response | " + format_log_kv(source="UserMentionService", body=response.body) ) return 200, response.body