p08-seo-tweaks
This commit is contained in:
@@ -1,4 +1,5 @@
|
||||
import datetime
|
||||
import json
|
||||
|
||||
from sqlalchemy import and_, desc
|
||||
from sqlalchemy.orm import Session
|
||||
@@ -15,6 +16,11 @@ def create_news(
|
||||
source_url: str | None = None,
|
||||
image_url: str | None = None,
|
||||
image_credit: str | None = None,
|
||||
tldr_points: list[str] | None = None,
|
||||
summary_body: str | None = None,
|
||||
source_citation: str | None = None,
|
||||
summary_image_url: str | None = None,
|
||||
summary_image_credit: str | None = None,
|
||||
published_at: datetime.datetime | None = None,
|
||||
) -> NewsItem:
|
||||
item = NewsItem(
|
||||
@@ -23,6 +29,11 @@ def create_news(
|
||||
source_url=source_url,
|
||||
image_url=image_url,
|
||||
image_credit=image_credit,
|
||||
tldr_points=json.dumps(tldr_points) if tldr_points else None,
|
||||
summary_body=summary_body,
|
||||
source_citation=source_citation,
|
||||
summary_image_url=summary_image_url,
|
||||
summary_image_credit=summary_image_credit,
|
||||
published_at=published_at or datetime.datetime.utcnow(),
|
||||
)
|
||||
db.add(item)
|
||||
@@ -56,12 +67,18 @@ def create_translation(
|
||||
language: str,
|
||||
headline: str,
|
||||
summary: str,
|
||||
tldr_points: list[str] | None = None,
|
||||
summary_body: str | None = None,
|
||||
source_citation: str | None = None,
|
||||
) -> NewsTranslation:
|
||||
translation = NewsTranslation(
|
||||
news_item_id=news_item_id,
|
||||
language=language,
|
||||
headline=headline,
|
||||
summary=summary,
|
||||
tldr_points=json.dumps(tldr_points) if tldr_points else None,
|
||||
summary_body=summary_body,
|
||||
source_citation=source_citation,
|
||||
)
|
||||
db.add(translation)
|
||||
db.commit()
|
||||
@@ -101,6 +118,28 @@ def resolve_news_content(item: NewsItem, translation: NewsTranslation | None) ->
|
||||
return translation.headline, translation.summary
|
||||
|
||||
|
||||
def resolve_tldr_points(item: NewsItem, translation: NewsTranslation | None) -> list[str] | None:
|
||||
raw = translation.tldr_points if translation is not None else item.tldr_points
|
||||
if not raw:
|
||||
return None
|
||||
try:
|
||||
parsed = json.loads(raw)
|
||||
except json.JSONDecodeError:
|
||||
return None
|
||||
if isinstance(parsed, list):
|
||||
return [str(x) for x in parsed if str(x).strip()]
|
||||
return None
|
||||
|
||||
|
||||
def resolve_summary_fields(
|
||||
item: NewsItem, translation: NewsTranslation | None
|
||||
) -> tuple[list[str] | None, str | None, str | None]:
|
||||
tldr_points = resolve_tldr_points(item, translation)
|
||||
if translation is None:
|
||||
return tldr_points, item.summary_body, item.source_citation
|
||||
return tldr_points, translation.summary_body, translation.source_citation
|
||||
|
||||
|
||||
def normalize_language(language: str | None) -> str:
|
||||
if not language:
|
||||
return "en"
|
||||
|
||||
Reference in New Issue
Block a user