From 92b9bce69d4925b2ce82bf00234625182be19abb Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Tom=C3=A1=C5=A1=20Valenta?= <git@imaniti.org>
Date: Tue, 23 Jan 2024 12:11:14 +0100
Subject: [PATCH] fix imports (date assignment)

---
 .../0020_alter_electionshomepage_content.py     |  2 +-
 shared/jekyll_import.py                         | 17 +++++++++++------
 shared/models/base.py                           |  5 +++++
 3 files changed, 17 insertions(+), 7 deletions(-)

diff --git a/elections/migrations/0020_alter_electionshomepage_content.py b/elections/migrations/0020_alter_electionshomepage_content.py
index b2eb4018..2131e7bd 100644
--- a/elections/migrations/0020_alter_electionshomepage_content.py
+++ b/elections/migrations/0020_alter_electionshomepage_content.py
@@ -1,9 +1,9 @@
 # Generated by Django 4.1.10 on 2024-01-21 19:46
 
-from django.db import migrations
 import wagtail.blocks
 import wagtail.fields
 import wagtail.images.blocks
+from django.db import migrations
 
 
 class Migration(migrations.Migration):
diff --git a/shared/jekyll_import.py b/shared/jekyll_import.py
index f95d2c45..786a3489 100644
--- a/shared/jekyll_import.py
+++ b/shared/jekyll_import.py
@@ -8,6 +8,7 @@ import urllib
 import xml.etree.ElementTree as ET
 import zipfile
 from datetime import date, datetime
+from datetime import timezone as datetime_timezone
 from http.client import InvalidURL
 from io import StringIO
 from typing import List
@@ -611,15 +612,16 @@ class JekyllArticleImporter:
 
         if meta.get("date", None):
             meta_date = meta["date"]
+
             if isinstance(meta_date, date):
-                article.date = meta_date
+                article.timestamp = datetime(
+                    meta_date.year, meta_date.month, meta_date.day
+                ).replace(tzinfo=datetime_timezone.utc)
             else:
                 parsed_date = meta["date"].split()[0]
-                article.date = (
-                    parsed_date[0:10] if parsed_date else timezone.now().date()
-                )
+                article.timestamp = parsed_date[0:10] if parsed_date else timezone.now()
         else:
-            article.date = timezone.now().date()
+            article.timestamp = timezone.now()
 
         article.title = meta["title"]
         article.author = meta.get("author", "Česká pirátská strana")
@@ -694,7 +696,10 @@ class JekyllArticleImporter:
 
             self.create_summary_log()
         finally:
-            os.remove(f"/tmp/.{self.article_parent_page_id}.import-lock")
+            import_lock_filename = f"/tmp/.{self.article_parent_page_id}.import-lock"
+
+            if os.path.exists(import_lock_filename):
+                os.remove(import_lock_filename)
 
     def process_article(self, file_name: str, file_path: str):
         match = re.match(r"(\d*)-(\d*)-(\d*)-(.*)\.(.*)", file_name)
diff --git a/shared/models/base.py b/shared/models/base.py
index 93a977ff..59d81415 100644
--- a/shared/models/base.py
+++ b/shared/models/base.py
@@ -9,6 +9,7 @@ from django.core.paginator import Paginator
 from django.db import models
 from django.db.models import Q
 from django.db.models.expressions import F, Subquery, Value
+from django.http import Http404
 from django.utils import timezone
 from modelcluster.fields import ParentalKey, ParentalManyToManyField
 from taggit.models import ItemBase, Tag, TagBase
@@ -803,6 +804,10 @@ class ArticlesMixin:
         articles = self.append_all_shared_articles_query(
             custom_article_query=lambda query: query.filter(slug=slug)
         )[:1]
+
+        if len(articles) == 0:
+            raise Http404
+
         return self.materialize_shared_articles_query(articles)[0]
 
     def setup_article_page_context(self, request):
-- 
GitLab