Coverage for src / platform_adapter / twitter_adapter.py: 100%
25 statements
« prev ^ index » next coverage.py v7.13.4, created at 2026-02-13 20:29 +0800
« prev ^ index » next coverage.py v7.13.4, created at 2026-02-13 20:29 +0800
1from __future__ import annotations
3from typing import Any
5from src.platform_adapter.base_adapter import BaseAdapter, PlatformContent
8class TwitterAdapter(BaseAdapter):
9 def get_max_length(self) -> int:
10 return 280
12 def format_content(self, content: str, **kwargs: Any) -> PlatformContent:
13 if kwargs.get("format") == "thread":
14 return self._create_thread(content)
15 truncated = self.truncate_content(content)
16 return PlatformContent(title=None, body=truncated, metadata={"platform": "twitter"})
18 def _create_thread(self, content: str) -> PlatformContent:
19 tweets = []
20 sentences = content.replace("\n", " ").split(". ")
21 current = ""
22 for s in sentences:
23 if len(current) + len(s) < 270:
24 current += " " + s if current else s
25 else:
26 if current:
27 tweets.append(current)
28 current = s
29 if current:
30 tweets.append(current)
31 numbered = [f"{i+1}/{len(tweets)} {t}" for i, t in enumerate(tweets)]
32 return PlatformContent(
33 title=None,
34 body="\n\n---\n\n".join(numbered),
35 metadata={"tweet_count": len(tweets), "is_thread": True},
36 )