Skip to content

Commit

Permalink
Merge pull request #150 from ietf-tools/deploy/preview
Browse files Browse the repository at this point in the history
Deploy/preview
  • Loading branch information
kesara authored Nov 17, 2021
2 parents 27e7d32 + e3bd076 commit 1784a30
Show file tree
Hide file tree
Showing 25 changed files with 724 additions and 354 deletions.
1 change: 1 addition & 0 deletions constraints.txt
Original file line number Diff line number Diff line change
Expand Up @@ -52,6 +52,7 @@ typepy==0.2.5
Unidecode==1.1.1
urllib3==1.25.10
wagtail==2.11.6
wagtail-orderable==1.0.3
webencodings==0.5.1
Willow==1.4
xlrd==2.0.1
Expand Down
24 changes: 24 additions & 0 deletions ietf/blog/migrations/0003_auto_20211101_0113.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,24 @@
# Generated by Django 2.2.19 on 2021-11-01 01:13

from django.db import migrations
import wagtail.contrib.table_block.blocks
import wagtail.core.blocks
import wagtail.core.fields
import wagtail.embeds.blocks
import wagtail.images.blocks
import wagtailmarkdown.blocks


class Migration(migrations.Migration):

dependencies = [
('blog', '0002_auto_20210325_0442'),
]

operations = [
migrations.AlterField(
model_name='blogpage',
name='body',
field=wagtail.core.fields.StreamField([('heading', wagtail.core.blocks.CharBlock(icon='title')), ('paragraph', wagtail.core.blocks.RichTextBlock(icon='pilcrow')), ('image', wagtail.images.blocks.ImageChooserBlock(icon='image', template='includes/imageblock.html')), ('markdown', wagtailmarkdown.blocks.MarkdownBlock(icon='code')), ('embed', wagtail.embeds.blocks.EmbedBlock(icon='code')), ('raw_html', wagtail.core.blocks.RawHTMLBlock(icon='placeholder')), ('table', wagtail.contrib.table_block.blocks.TableBlock(table_options={'renderer': 'html'}, template='includes/tableblock.html'))]),
),
]
10 changes: 5 additions & 5 deletions ietf/blog/models.py
Original file line number Diff line number Diff line change
Expand Up @@ -29,7 +29,7 @@


def ordered_live_annotated_blogs(sibling=None):
blogs = BlogPage.objects.live()
blogs = BlogPage.objects.live().prefetch_related('authors')
if sibling:
blogs = blogs.sibling_of(sibling)
blogs = blogs.annotate(
Expand Down Expand Up @@ -187,14 +187,14 @@ def date(self):
def next(self):
if not self.date:
return None
after = sorted([p for p in self.siblings.exclude(pk=self.pk) if p.date > self.date], key=lambda o:o.date)
after = sorted([p for p in self.siblings if p.date > self.date], key=lambda o:o.date)
return after and after[0] or None

@property
def previous(self):
if not self.date:
return None
before = sorted([p for p in self.siblings.exclude(pk=self.pk) if p.date < self.date], key=lambda o:o.date, reverse=True)
before = sorted([p for p in self.siblings if p.date < self.date], key=lambda o:o.date, reverse=True)
return before and before[0] or None

def coalesced_published_date(self):
Expand All @@ -207,7 +207,7 @@ def feed_text(self):
@functional.cached_property
def siblings(self):
"""Published siblings that match filter_topic, most recent first"""
qs = self.__class__.objects.live().sibling_of(self).annotate(
qs = self.__class__.objects.live().sibling_of(self).exclude(pk=self.pk).annotate(
d=Coalesce('date_published', 'first_published_at')
).order_by('-d')
if self.filter_topic:
Expand Down Expand Up @@ -358,7 +358,7 @@ def redirect_first(self, request, slug=None, *args, **kwargs):
if slug:
self.filter_topic = Topic.objects.filter(slug=slug).first()
if not self.filter_topic:
blog_page = get_object_or_404(BlogPage,slug=slug)
blog_page = get_object_or_404(BlogPage.objects.prefetch_related('authors'), slug=slug)
return blog_page.serve(request, *args, **kwargs)

blogs = ordered_live_annotated_blogs()
Expand Down
75 changes: 47 additions & 28 deletions ietf/blog/tests.py
Original file line number Diff line number Diff line change
@@ -1,14 +1,14 @@
from django.test import TestCase
from datetime import datetime, timedelta

from .models import BlogPage, BlogIndexPage
from ..home.models import HomePage

from wagtail.core.models import Page, Site

class BlogTests(TestCase):

def test_blog(self):

class BlogTests(TestCase):
def setUp(self):
root = Page.get_first_root_node()

home = HomePage(
Expand All @@ -31,53 +31,72 @@ def test_blog(self):
site_name='testingsitename',
)

blogindex = BlogIndexPage(
self.blog_index = BlogIndexPage(
slug = 'blog',
title = 'blog index title',
)
home.add_child(instance = blogindex)
home.add_child(instance = self.blog_index)

nextblog = BlogPage(
slug = 'nextpost',
title = 'next title',
introduction = 'next introduction',
body = 'next body'
)
blogindex.add_child(instance = nextblog)
now = datetime.utcnow()

otherblog = BlogPage(
self.otherblog = BlogPage(
slug = 'otherpost',
title = 'other title',
introduction = 'other introduction',
body = 'other body'
body = 'other body',
date_published = (now - timedelta(minutes = 10))
)
blogindex.add_child(instance = otherblog)
self.blog_index.add_child(instance = self.otherblog)
self.otherblog.save

prevblog = BlogPage(
self.prevblog = BlogPage(
slug = 'prevpost',
title = 'prev title',
introduction = 'prev introduction',
body = 'prev body'
body = 'prev body',
date_published = (now - timedelta(minutes = 5))
)
blogindex.add_child(instance = prevblog)
self.blog_index.add_child(instance = self.prevblog)
self.prevblog.save()

blog = BlogPage(

self.blog = BlogPage(
slug = 'blogpost',
title = 'blog title',
introduction = 'blog introduction',
body = 'blog body'
body = 'blog body',
first_published_at = (now + timedelta(minutes=1))
)
blogindex.add_child(instance = blog)
self.blog_index.add_child(instance = self.blog)
self.blog.save()

r = self.client.get(path=blogindex.url)
self.nextblog = BlogPage(
slug = 'nextpost',
title = 'next title',
introduction = 'next introduction',
body = 'next body',
first_published_at = (now + timedelta(minutes=5))
)
self.blog_index.add_child(instance = self.nextblog)
self.nextblog.save()

def test_blog(self):
r = self.client.get(path=self.blog_index.url)
self.assertEqual(r.status_code, 200)

r = self.client.get(path=blog.url)
r = self.client.get(path=self.blog.url)
self.assertEqual(r.status_code, 200)

self.assertIn(blog.title.encode(), r.content)
self.assertIn(blog.introduction.encode(), r.content)
self.assertIn(self.blog.title.encode(), r.content)
self.assertIn(self.blog.introduction.encode(), r.content)
# self.assertIn(blog.body.raw_text.encode(), r.content)
self.assertIn(('href="%s"' % nextblog.url).encode(), r.content)
self.assertIn(('href="%s"' % prevblog.url).encode(), r.content)
self.assertIn(('href="%s"' % otherblog.url).encode(), r.content)
self.assertIn(('href="%s"' % self.nextblog.url).encode(), r.content)
self.assertIn(('href="%s"' % self.prevblog.url).encode(), r.content)
self.assertIn(('href="%s"' % self.otherblog.url).encode(), r.content)

def test_previous_next_links_correct(self):
self.assertTrue(self.prevblog.date < self.blog.date)
self.assertTrue(self.nextblog.date > self.blog.date)
blog = BlogPage.objects.get(pk=self.blog.pk)
self.assertEquals(self.prevblog, blog.previous)
self.assertEquals(self.nextblog, blog.next)
24 changes: 18 additions & 6 deletions ietf/context_processors.py
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@

from ietf.blog.models import BlogIndexPage
from ietf.home.models import HomePage
from ietf.utils.models import MenuItem


def home_page():
Expand All @@ -20,12 +21,23 @@ def menu():
return items


def secondary_menu():
items = (
MenuItem.objects.order_by("sort_order")
.all()
.select_related("page")
.prefetch_related("sub_menu_items")
)
return items


def global_pages(request):
return {
'HOME': home_page(),
'BLOG_INDEX': BlogIndexPage.objects.first(),
'MENU': menu(),
'BASE_URL': getattr(settings, 'BASE_URL', ""),
'DEBUG': getattr(settings, 'DEBUG', ""),
'FB_APP_ID': getattr(settings, 'FB_APP_ID', ""),
"HOME": home_page(),
"BLOG_INDEX": BlogIndexPage.objects.first(),
"MENU": menu(),
"SECONDARY_MENU": secondary_menu(),
"BASE_URL": getattr(settings, "BASE_URL", ""),
"DEBUG": getattr(settings, "DEBUG", ""),
"FB_APP_ID": getattr(settings, "FB_APP_ID", ""),
}
2 changes: 1 addition & 1 deletion ietf/documents/apps.py
Original file line number Diff line number Diff line change
Expand Up @@ -2,4 +2,4 @@


class DocumentsConfig(AppConfig):
name = 'documents'
name = 'ietf.documents'
24 changes: 24 additions & 0 deletions ietf/events/migrations/0004_auto_20211101_0113.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,24 @@
# Generated by Django 2.2.19 on 2021-11-01 01:13

from django.db import migrations
import wagtail.contrib.table_block.blocks
import wagtail.core.blocks
import wagtail.core.fields
import wagtail.embeds.blocks
import wagtail.images.blocks
import wagtailmarkdown.blocks


class Migration(migrations.Migration):

dependencies = [
('events', '0003_auto_20210704_2343'),
]

operations = [
migrations.AlterField(
model_name='eventpage',
name='body',
field=wagtail.core.fields.StreamField([('heading', wagtail.core.blocks.CharBlock(icon='title')), ('paragraph', wagtail.core.blocks.RichTextBlock(icon='pilcrow')), ('image', wagtail.images.blocks.ImageChooserBlock(icon='image', template='includes/imageblock.html')), ('markdown', wagtailmarkdown.blocks.MarkdownBlock(icon='code')), ('embed', wagtail.embeds.blocks.EmbedBlock(icon='code')), ('raw_html', wagtail.core.blocks.RawHTMLBlock(icon='placeholder')), ('table', wagtail.contrib.table_block.blocks.TableBlock(table_options={'renderer': 'html'}, template='includes/tableblock.html'))]),
),
]
61 changes: 47 additions & 14 deletions ietf/forms/models.py
Original file line number Diff line number Diff line change
@@ -1,13 +1,26 @@
from logging import Logger

from django.contrib import messages
from django.views.defaults import server_error
from modelcluster.fields import ParentalKey
from wagtail.admin.edit_handlers import (
FieldPanel, InlinePanel, MultiFieldPanel
)
from wagtail.core.fields import RichTextField
from wagtail.admin.edit_handlers import FieldPanel, InlinePanel, MultiFieldPanel
from wagtail.contrib.forms.models import AbstractEmailForm, AbstractFormField
from wagtail.core.fields import RichTextField

from ietf.views import server_error

logger = Logger(__name__)


class EmailException(Exception):
def __init__(self, message="Error sending email", code=500, params=None):
super().__init__(message, code, params)
self.message = message
self.code = code


class FormField(AbstractFormField):
page = ParentalKey('FormPage', related_name='form_fields')
page = ParentalKey("FormPage", related_name="form_fields")

@classmethod
def _migrate_legacy_clean_name(cls):
Expand All @@ -18,14 +31,34 @@ class FormPage(AbstractEmailForm):
intro = RichTextField(blank=True)
thank_you_text = RichTextField(blank=True)

def send_mail(self, form):
try:
super().send_mail(form)
except Exception as ex:
logger.error("Failed to send email with exception: {}".format(ex))
raise EmailException

def serve(self, request, *args, **kwargs):
try:
return super().serve(request, *args, **kwargs)
except EmailException as Ex:
messages.add_message(
request, messages.ERROR, message="Failed to send email"
)
raise EmailException


FormPage.content_panels = [
FieldPanel('title', classname="full title"),
FieldPanel('intro', classname="full"),
InlinePanel('form_fields', label="Form fields"),
FieldPanel('thank_you_text', classname="full"),
MultiFieldPanel([
FieldPanel('to_address', classname="full"),
FieldPanel('from_address', classname="full"),
FieldPanel('subject', classname="full"),
], "Email")
FieldPanel("title", classname="full title"),
FieldPanel("intro", classname="full"),
InlinePanel("form_fields", label="Form fields"),
FieldPanel("thank_you_text", classname="full"),
MultiFieldPanel(
[
FieldPanel("to_address", classname="full"),
FieldPanel("from_address", classname="full"),
FieldPanel("subject", classname="full"),
],
"Email",
),
]
31 changes: 15 additions & 16 deletions ietf/forms/tests.py
Original file line number Diff line number Diff line change
@@ -1,42 +1,41 @@
from django.test import TestCase
from wagtail.core.models import Page, Site

from .models import FormPage
from ..home.models import HomePage
from .models import FormPage

from wagtail.core.models import Page, Site

class FormPageTests(TestCase):

def test_form_page(self):

root = Page.get_first_root_node()

home = HomePage(
slug = 'homepageslug',
title = 'home page title',
heading = 'home page heading',
introduction = 'home page introduction',
request_for_comments_section_body = 'rfc section body',
working_groups_section_body = 'wg section body',
slug="homepageslug",
title="home page title",
heading="home page heading",
introduction="home page introduction",
request_for_comments_section_body="rfc section body",
working_groups_section_body="wg section body",
)

root.add_child(instance=home)

Site.objects.all().delete()

Site.objects.create(
hostname='localhost',
root_page = home,
hostname="localhost",
root_page=home,
is_default_site=True,
site_name='testingsitename',
site_name="testingsitename",
)

form = FormPage(
slug = 'form',
title = 'form title',
intro = 'form introduction',
slug="form",
title="form title",
intro="form introduction",
)
home.add_child(instance = form)
home.add_child(instance=form)

r = self.client.get(path=form.url)
self.assertEqual(r.status_code, 200)
Expand Down
Loading

0 comments on commit 1784a30

Please sign in to comment.