from django import forms from wagtail.admin.forms import WagtailAdminPageForm from wagtail.core.models.collections import Collection from .jekyll_import import perform_import 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", ) 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="V GitHubu tlačítko Code -> a odkaz z Download zip" "např. 'https://github.com/pirati-web/cb.pirati.cz/archive/refs/heads/gh-pages.zip'," "pokud máte nainstalovaný Git, zvolte Použít Git a vložte" "jednoduše URL repozitáře " "např. 'https://github.com/pirati-web/cb.pirati.cz'", ) # def __init__(self): # pass def clean(self): cleaned_data = super().clean() if not cleaned_data.get("do_import"): return cleaned_data else: 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( "jekyll_repo_url", "Vložte odkaz pouze na repozitář, ne na zip" ) else: if not cleaned_data.get("jekyll_repo_url", "").endswith(".zip"): self.add_error("jekyll_repo_url", "Odkaz nesměřuje na soubor '.zip'") if len(self.errors): return cleaned_data if cleaned_data.get("dry_run"): error_list = perform_import( article_parent_page=self.instance, collection=self.cleaned_data["collection"], url=self.cleaned_data["jekyll_repo_url"], dry_run=True, use_git=self.cleaned_data["use_git"], ) # self.instance.import_error_list = error_list for error in error_list: self.add_error("jekyll_repo_url", error) return cleaned_data def save(self, commit=True): if self.cleaned_data.get("do_import") and not self.cleaned_data["dry_run"]: error_list = perform_import( article_parent_page=self.instance, collection=self.cleaned_data["collection"], url=self.cleaned_data["jekyll_repo_url"], dry_run=False, use_git=self.cleaned_data["use_git"], ) self.instance.import_error_list = error_list return super().save(commit=commit)