services.py 2.05 KiB
import json
import logging
from typing import TYPE_CHECKING
import requests
from main.models import MainArticlePage, MainArticlesPage
from shared.utils import create_image_from_url
if TYPE_CHECKING:
pass
logger = logging.getLogger()
class TimelineArticleDownloadService:
api_url = "https://piratipracuji.cz/api/"
@staticmethod
def get_existing_articles_slugs() -> list[str]:
return MainArticlePage.objects.values_list("slug", flat=True)
def get_articles_response(self):
response = requests.get(self.api_url)
data = json.loads(response.text)
return data
def perform_update(self):
existing_articles_slug_list = self.get_existing_articles_slugs()
parent = MainArticlesPage.objects.all().first()
if not parent:
RuntimeError("No MainArticlesPage to import to")
for article in self.get_articles_response():
if article["slug"] not in existing_articles_slug_list:
if "thumbnail" in article:
img_filename = "article-" + str(article["id"]) + ".jpg"
img_obj = create_image_from_url(
url=article["thumbnail"], filename=img_filename
)
else:
img_obj = None
article_to_save = MainArticlePage(
title=article["title"],
slug=article["slug"],
perex=article["description"].replace(" ", " "),
author="ČESKÁ PIRÁTSKÁ STRANA",
date=article["start_date"],
image=img_obj,
is_black=article["isFeatured"],
content=json.dumps(
[
{
"type": "text",
"value": article["content"].replace("</p>", "</p><br>"),
}
]
),
)
parent.add_child(instance=article_to_save)