Skip to content

Commit

Permalink
Browse files Browse the repository at this point in the history
 into omega-51-contentrepo-export-broken-in-prod-instance
  • Loading branch information
Buhle79 committed Feb 27, 2024
2 parents cf1dedf + d6149fd commit 2a1cfab
Show file tree
Hide file tree
Showing 8 changed files with 409 additions and 153 deletions.
2 changes: 1 addition & 1 deletion .github/workflows/build.yml
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,7 @@ jobs:
runs-on: ubuntu-latest
strategy:
matrix:
postgres_version: ['12', '13', '14']
postgres_version: ['14']
python-version: [3.10.6]
redis-version: ['7.2']
services:
Expand Down
23 changes: 22 additions & 1 deletion home/api.py
Original file line number Diff line number Diff line change
Expand Up @@ -146,12 +146,33 @@ class OrderedContentSetViewSet(BaseAPIViewSet):
listing_default_fields = BaseAPIViewSet.listing_default_fields + [
"name",
"profile_fields",
"pages",
]
known_query_parameters = BaseAPIViewSet.known_query_parameters.union(["page"])
known_query_parameters = BaseAPIViewSet.known_query_parameters.union(["page", "qa"])
pagination_class = PageNumberPagination
search_fields = ["name", "profile_fields"]
filter_backends = (SearchFilter,)

def get_queryset(self):
qa = self.request.query_params.get("qa")

if qa:
# return the latest revision for each OrderedContentSet
queryset = OrderedContentSet.objects.all().order_by("latest_revision_id")
for ocs in queryset:
latest_revision = ocs.revisions.order_by("-created_at").first()
if latest_revision:
latest_revision = latest_revision.as_object()
ocs.name = latest_revision.name
ocs.pages = latest_revision.pages
ocs.profile_fields = latest_revision.profile_fields

else:
queryset = OrderedContentSet.objects.filter(live=True).order_by(
"last_published_at"
)
return queryset


api_router = WagtailAPIRouter("wagtailapi")

Expand Down
89 changes: 89 additions & 0 deletions home/migrations/0049_orderedcontentset_expire_at_and_more.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,89 @@
# Generated by Django 4.1.13 on 2024-02-06 12:25

import django.db.models.deletion
from django.db import migrations, models


class Migration(migrations.Migration):

dependencies = [
("home", "0048_alter_contentpage_whatsapp_body"),
]

operations = [
migrations.AddField(
model_name="orderedcontentset",
name="expire_at",
field=models.DateTimeField(
blank=True, null=True, verbose_name="expiry date/time"
),
),
migrations.AddField(
model_name="orderedcontentset",
name="expired",
field=models.BooleanField(
default=False, editable=False, verbose_name="expired"
),
),
migrations.AddField(
model_name="orderedcontentset",
name="first_published_at",
field=models.DateTimeField(
blank=True, db_index=True, null=True, verbose_name="first published at"
),
),
migrations.AddField(
model_name="orderedcontentset",
name="go_live_at",
field=models.DateTimeField(
blank=True, null=True, verbose_name="go live date/time"
),
),
migrations.AddField(
model_name="orderedcontentset",
name="has_unpublished_changes",
field=models.BooleanField(
default=False, editable=False, verbose_name="has unpublished changes"
),
),
migrations.AddField(
model_name="orderedcontentset",
name="last_published_at",
field=models.DateTimeField(
editable=False, null=True, verbose_name="last published at"
),
),
migrations.AddField(
model_name="orderedcontentset",
name="latest_revision",
field=models.ForeignKey(
blank=True,
editable=False,
null=True,
on_delete=django.db.models.deletion.SET_NULL,
related_name="+",
to="wagtailcore.revision",
verbose_name="latest revision",
),
),
migrations.AddField(
model_name="orderedcontentset",
name="live",
field=models.BooleanField(
default=True, editable=False, verbose_name="live"
),
),
migrations.AddField(
model_name="orderedcontentset",
name="live_revision",
field=models.ForeignKey(
blank=True,
editable=False,
null=True,
on_delete=django.db.models.deletion.SET_NULL,
related_name="+",
to="wagtailcore.revision",
verbose_name="live revision",
),
),
]
35 changes: 30 additions & 5 deletions home/models.py
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@
import re

from django.conf import settings
from django.contrib.contenttypes.fields import GenericRelation
from django.core.exceptions import ValidationError
from django.core.validators import MaxLengthValidator
from django.db import models
Expand All @@ -19,7 +20,7 @@
from wagtail.documents.blocks import DocumentChooserBlock
from wagtail.fields import StreamField
from wagtail.images.blocks import ImageChooserBlock
from wagtail.models import Page, Revision
from wagtail.models import DraftStateMixin, Page, Revision, RevisionMixin
from wagtail.models.sites import Site
from wagtail.search import index
from wagtail_content_import.models import ContentImportMixin
Expand Down Expand Up @@ -989,26 +990,42 @@ def update_embedding(sender, instance, *args, **kwargs):
instance.embedding = embedding


class OrderedContentSet(index.Indexed, models.Model):
class OrderedContentSet(DraftStateMixin, RevisionMixin, index.Indexed, models.Model):
revisions = GenericRelation(
"wagtailcore.Revision", related_query_name="orderedcontentset"
)
name = models.CharField(
max_length=255, help_text="The name of the ordered content set."
)

def get_gender(self):
for item in self.profile_fields.raw_data:
for item in self.get_latest_revision_as_object().profile_fields.raw_data:
if item["type"] == "gender":
return item["value"]

def get_age(self):
for item in self.profile_fields.raw_data:
for item in self.get_latest_revision_as_object().profile_fields.raw_data:
if item["type"] == "age":
return item["value"]

def get_relationship(self):
for item in self.profile_fields.raw_data:
for item in self.get_latest_revision_as_object().profile_fields.raw_data:
if item["type"] == "relationship":
return item["value"]

def profile_field(self):
return [
f"{x.block_type}:{x.value}"
for x in self.get_latest_revision_as_object().profile_fields
]

profile_field.short_description = "Profile Fields"

def latest_draft_profile_fields(self):
return self.get_latest_revision_as_object().profile_fields

latest_draft_profile_fields.short_description = "Profile Fields"

profile_fields = StreamField(
[
("gender", blocks.ChoiceBlock(choices=get_gender_choices)),
Expand Down Expand Up @@ -1076,6 +1093,14 @@ def get_relationship(self):
null=True,
)

def num_pages(self):
return len(self.pages)

num_pages.short_description = "Number of Pages"

def status(self):
return "Live" if self.live else "Draft"

panels = [
FieldPanel("name"),
FieldPanel("profile_fields"),
Expand Down
4 changes: 2 additions & 2 deletions home/serializers.py
Original file line number Diff line number Diff line change
Expand Up @@ -399,7 +399,7 @@ def to_representation(self, instance):
pages = []
for member in instance.pages:
page = self.get_page_as_content_page(member.value.get("contentpage"))
title = page.title
title = page.title if page else ""
if "whatsapp" in request.GET and page.enable_whatsapp is True:
if page.whatsapp_title:
title = page.whatsapp_title
Expand All @@ -416,7 +416,7 @@ def to_representation(self, instance):
if page.viber_title:
title = page.viber_title
page_data = {
"id": page.id,
"id": page.id if page else "",
"title": title,
"time": member.value.get("time"),
"unit": member.value.get("unit"),
Expand Down
5 changes: 4 additions & 1 deletion home/tests/page_builder.py
Original file line number Diff line number Diff line change
Expand Up @@ -226,6 +226,7 @@ def build_cp(
whatsapp_template_name: str | None = None,
whatsapp_template_category: str | None = None,
translated_from: ContentPage | None = None,
publish: bool = True,
) -> ContentPage:
builder = cls.cp(parent, slug, title).add_bodies(*bodies)
if web_body:
Expand All @@ -242,13 +243,15 @@ def build_cp(
builder = builder.set_whatsapp_template_category(whatsapp_template_category)
if translated_from:
builder = builder.translated_from(translated_from)
return builder.build()
return builder.build(publish=publish)

def build(self, publish: bool = True) -> TPage:
self.parent.add_child(instance=self.page)
rev = self.page.save_revision()
if publish:
rev.publish()
else:
self.page.unpublish()
# The page instance is out of date after revision operations, so reload.
self.page.refresh_from_db()
return self.page
Expand Down
Loading

0 comments on commit 2a1cfab

Please sign in to comment.