Skip to content
Snippets Groups Projects
Commit e4d1e1a2 authored by Tomáš Valenta's avatar Tomáš Valenta
Browse files

fully functioning import

parent fba2fd0d
No related branches found
No related tags found
2 merge requests!882Release,!878Finally fix imports
Pipeline #16291 passed
from shared.forms import JekyllImportForm as SharedJekyllImportForm
import os
from django import forms
from django.utils.safestring import mark_safe
from wagtail.admin.forms import WagtailAdminPageForm
from wagtail.models.collections import Collection
from .tasks import import_jekyll_articles
from shared.jekyll_import import JekyllArticleImporter
class JekyllImportForm(WagtailAdminPageForm):
do_import = forms.BooleanField(
initial=False, required=False, label="Provést import z Jekyllu"
)
collection = forms.ModelChoiceField(
queryset=Collection.objects.all(), required=False, label="Kolekce obrázků"
)
dry_run = forms.BooleanField(
initial=True,
required=False,
label="Jenom na zkoušku",
help_text="Žádné články se neuloží, vypíše případné problémy či "
"již existující články - 'ostrému' importu existující "
"články nevadí, přeskočí je",
)
class JekyllImportForm(SharedJekyllImportForm):
use_git = forms.BooleanField(
initial=False,
required=False,
label="Použít Git",
help_text="Umožňuje jednodušší zpracování, ale vyžaduje nainstalovaný Git.",
)
jekyll_repo_url = forms.URLField(
max_length=512,
required=False,
help_text=mark_safe(
"V GitHubu tlačítko Code -> a odkaz z <strong>Download zip</strong>, "
"např. <em>https://github.com/pirati-web/cb.pirati.cz/archive/refs/heads/gh-pages.zip</em>. "
"Pokud máte nainstalovaný Git, zvolte <strong>Použít Git</strong> a vložte jednoduše "
"URL repozitáře, např. <em>https://github.com/pirati-web/cb.pirati.cz</em>."
),
)
readonly_log = forms.CharField(
disabled=True,
label="Log z posledního importu",
required=False,
widget=forms.Textarea,
)
def __init__(self, *args, **kwargs):
super().__init__(*args, **kwargs)
self.fields["readonly_log"].initial = self.instance.last_import_log
def clean(self):
cleaned_data = super().clean()
......@@ -54,16 +18,6 @@ class JekyllImportForm(WagtailAdminPageForm):
if not cleaned_data.get("do_import"):
return cleaned_data
if cleaned_data.get("do_import") and not self.instance.id:
self.add_error(
"do_import", "Import proveďte prosím až po vytvoření stránky"
)
if not cleaned_data.get("collection"):
self.add_error("collection", "Pro import je toto pole povinné")
if not cleaned_data.get("jekyll_repo_url"):
self.add_error("jekyll_repo_url", "Pro import je toto pole povinné")
if cleaned_data.get("use_git"):
if cleaned_data.get("jekyll_repo_url", "").endswith(".zip"):
self.add_error(
......@@ -81,19 +35,17 @@ class JekyllImportForm(WagtailAdminPageForm):
return cleaned_data
def handle_import(self):
from .models import DistrictArticlePage
lock_file_name = f"/tmp/.{self.instance.id}.import-lock"
if os.path.isfile(lock_file_name):
return
JekyllArticleImporter(
article_parent_page=self.instance,
open(lock_file_name, "w").close()
import_jekyll_articles.delay(
article_parent_page_id=self.instance.id,
collection_id=self.cleaned_data["collection"].id,
url=self.cleaned_data["jekyll_repo_url"],
dry_run=self.cleaned_data["dry_run"],
use_git=self.cleaned_data["use_git"],
page_model=DistrictArticlePage,
).perform_import()
def save(self, commit=True):
if self.cleaned_data.get("do_import"):
self.handle_import()
return super().save(commit=commit)
use_git=True,
)
import logging
from celery import shared_task
from shared.jekyll_import import JekyllArticleImporter
logger = logging.getLogger(__name__)
@shared_task()
def import_jekyll_articles(
article_parent_page_id,
collection_id,
url,
dry_run,
use_git,
):
from .models import DistrictArticlePage, DistrictArticlesPage
return JekyllArticleImporter(
article_parent_page_id=article_parent_page_id,
article_parent_page_model=DistrictArticlesPage,
collection_id=collection_id,
url=url,
dry_run=dry_run,
use_git=use_git,
page_model=DistrictArticlePage,
).perform_import()
from shared.forms import JekyllImportForm as SharedJekyllImportForm
import os
from .tasks import import_jekyll_articles
class JekyllImportForm(SharedJekyllImportForm):
def handle_import(self):
lock_file_name = f"/tmp/.{self.instance.id}.import-lock"
if os.path.isfile(lock_file_name):
return
open(lock_file_name, "w").close()
import_jekyll_articles.delay(
article_parent_page_id=self.instance.id,
collection_id=self.cleaned_data["collection"].id,
url=self.cleaned_data["jekyll_repo_url"],
dry_run=self.cleaned_data["dry_run"],
use_git=True,
)
......@@ -46,6 +46,7 @@ from shared.models import ( # MenuMixin,
)
from shared.utils import make_promote_panels, subscribe_to_newsletter
from tuning import admin_help
from .forms import JekyllImportForm
from . import blocks
......@@ -118,6 +119,8 @@ class ElectionsHomePage(MainHomePageMixin):
class ElectionsArticlesPage(MainArticlesPageMixin):
base_form_class = JekyllImportForm
parent_page_types = ["elections.ElectionsHomePage"]
subpage_types = ["elections.ElectionsArticlePage"]
......
import logging
from celery import shared_task
from shared.jekyll_import import JekyllArticleImporter
logger = logging.getLogger(__name__)
@shared_task()
def import_jekyll_articles(
article_parent_page_id,
collection_id,
url,
dry_run,
use_git,
):
from .models import ElectionsArticlePage, ElectionsArticlesPage
return JekyllArticleImporter(
article_parent_page_id=article_parent_page_id,
article_parent_page_model=ElectionsArticlesPage,
collection_id=collection_id,
url=url,
dry_run=dry_run,
use_git=use_git,
page_model=ElectionsArticlePage,
).perform_import()
from shared.forms import JekyllImportForm as SharedJekyllImportForm
import os
from .tasks import import_jekyll_articles
class JekyllImportForm(SharedJekyllImportForm):
def handle_import(self):
lock_file_name = f"/tmp/.{self.instance.id}.import-lock"
if os.path.isfile(lock_file_name):
return
open(lock_file_name, "w").close()
import_jekyll_articles.delay(
article_parent_page_id=self.instance.id,
collection_id=self.cleaned_data["collection"].id,
url=self.cleaned_data["jekyll_repo_url"],
dry_run=self.cleaned_data["dry_run"],
use_git=True,
)
......@@ -46,6 +46,7 @@ from shared.models import ( # MenuMixin,
)
from shared.utils import make_promote_panels, subscribe_to_newsletter
from tuning import admin_help
from .forms import JekyllImportForm
from . import blocks
......@@ -132,6 +133,8 @@ class MainHomePage(MainHomePageMixin):
class MainArticlesPage(MainArticlesPageMixin):
base_form_class = JekyllImportForm
parent_page_types = ["main.MainHomePage"]
subpage_types = ["main.MainArticlePage"]
......
File moved
from django import forms
from wagtail.admin.forms import WagtailAdminPageForm
from wagtail.models.collections import Collection
from .tasks import import_jekyll_articles
import os
class SubscribeForm(forms.Form):
......@@ -65,21 +64,6 @@ class JekyllImportForm(WagtailAdminPageForm):
return cleaned_data
def handle_import(self):
# TODO: Portable function
print("handling import")
print(
import_jekyll_articles.delay(
article_parent_page_id=self.instance.id,
collection_id=self.cleaned_data["collection"].id,
url=self.cleaned_data["jekyll_repo_url"],
dry_run=self.cleaned_data["dry_run"],
use_git=True,
)
)
def save(self, commit=True):
if self.cleaned_data.get("do_import"):
self.handle_import()
......
......@@ -13,6 +13,7 @@ from io import StringIO
from typing import List
from urllib.error import HTTPError
from uuid import uuid4
import os
import bleach
import markdown.serializers
......@@ -665,6 +666,7 @@ class JekyllArticleImporter:
Začne vyčištěním logu.
"""
try:
self.article_parent_page.last_import_log = ""
self.article_parent_page.save()
......@@ -689,6 +691,8 @@ class JekyllArticleImporter:
self.page_log += "{}\n\n".format(msg)
self.create_summary_log()
finally:
os.remove(f"/tmp/.{self.article_parent_page_id}.import-lock")
def process_article(self, file_name: str, file_path: str):
match = re.match(r"(\d*)-(\d*)-(\d*)-(.*)\.(.*)", file_name)
......
......@@ -41,7 +41,7 @@ from shared.blocks import (
TwoTextColumnBlock,
)
from shared.const import MONTH_NAMES
from shared.forms import JekyllImportForm, SubscribeForm
from shared.forms import SubscribeForm
from shared.utils import make_promote_panels, subscribe_to_newsletter
from tuning import admin_help
......@@ -438,8 +438,6 @@ class MainArticlesPageMixin(
### OTHERS
base_form_class = JekyllImportForm
class Meta:
verbose_name = "Rozcestník článků"
abstract = True
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment