Compare commits
7 Commits
renovate/p
...
master
Author | SHA1 | Date | |
---|---|---|---|
009b4926a4 | |||
1822f1c4d5 | |||
a8fe244ab4 | |||
df84b28114 | |||
a25e83a0df | |||
46669c9b17 | |||
41a04af8dc |
@ -1,16 +1,11 @@
|
||||
{
|
||||
"$schema": "https://docs.renovatebot.com/renovate-schema.json",
|
||||
"extends": [
|
||||
"config:base"
|
||||
"config:base",
|
||||
"replacements:all",
|
||||
"workarounds:all"
|
||||
],
|
||||
"prConcurrentLimit": 0,
|
||||
"packageRules": [
|
||||
{
|
||||
"matchUpdateTypes": ["patch"],
|
||||
"schedule": ["every weekend"],
|
||||
"enabled": false
|
||||
}
|
||||
],
|
||||
"regexManagers": [
|
||||
{
|
||||
"fileMatch": ["^Dockerfile$"],
|
||||
@ -18,5 +13,6 @@
|
||||
"depNameTemplate": "just-containers/s6-overlay",
|
||||
"datasourceTemplate": "github-releases"
|
||||
}
|
||||
]
|
||||
],
|
||||
"dependencyDashboardApproval": true
|
||||
}
|
||||
|
@ -1,15 +1,15 @@
|
||||
Django==5.0.4
|
||||
Django==4.2.14
|
||||
wagtail==5.2.5
|
||||
django-environ==0.11.2
|
||||
whitenoise[brotli]==6.6.0
|
||||
Pygments==2.17.2
|
||||
Pygments==2.18.0
|
||||
beautifulsoup4
|
||||
lxml==5.2.1
|
||||
requests
|
||||
wagtail-generic-chooser==0.6
|
||||
django-redis==5.4.0
|
||||
gunicorn==22.0.0
|
||||
psycopg==3.2.1
|
||||
psycopg==3.1.18
|
||||
djangorestframework
|
||||
django-htmx==1.17.2
|
||||
wagtail-metadata==5.0.0
|
||||
|
@ -7,7 +7,7 @@ from django.db.models.functions import Cast, Coalesce
|
||||
from django.http import HttpRequest, HttpResponse, HttpResponsePermanentRedirect
|
||||
from django.utils import timezone
|
||||
from django.utils.functional import cached_property
|
||||
from metadata_parser import MetadataParser
|
||||
from metadata_parser import ParsedResult
|
||||
from modelcluster.fields import ParentalManyToManyField
|
||||
from wagtail.admin.panels import FieldPanel
|
||||
from wagtail.models import Page, PageQuerySet, Site
|
||||
@ -239,7 +239,7 @@ class ExternalBlogPostPage(BaseContentPage):
|
||||
return tags
|
||||
|
||||
@cached_property
|
||||
def metadata(self) -> MetadataParser:
|
||||
def metadata(self) -> ParsedResult:
|
||||
return get_page_metadata(self.external_url)
|
||||
|
||||
@cached_property
|
||||
|
@ -1,3 +1,5 @@
|
||||
import pickle
|
||||
|
||||
from django.test import TestCase
|
||||
from django.urls import reverse
|
||||
|
||||
@ -96,7 +98,9 @@ class ExternalBlogPostPageTestCase(TestCase):
|
||||
def setUpTestData(cls) -> None:
|
||||
cls.home_page = HomePage.objects.get()
|
||||
cls.blog_post_list_page = BlogPostListPageFactory(parent=cls.home_page)
|
||||
cls.page = ExternalBlogPostPageFactory(parent=cls.blog_post_list_page)
|
||||
cls.page = ExternalBlogPostPageFactory(
|
||||
parent=cls.blog_post_list_page, external_url="https://example.com"
|
||||
)
|
||||
|
||||
def test_redirects(self) -> None:
|
||||
with self.assertNumQueries(10):
|
||||
@ -107,3 +111,11 @@ class ExternalBlogPostPageTestCase(TestCase):
|
||||
status_code=301,
|
||||
fetch_redirect_response=False,
|
||||
)
|
||||
|
||||
def test_metadata(self) -> None:
|
||||
metadata = self.page.metadata
|
||||
|
||||
self.assertIsNone(metadata.soup)
|
||||
|
||||
# Confirm it can pickle
|
||||
pickle.dumps(metadata)
|
||||
|
@ -11,7 +11,7 @@ from django.http import QueryDict
|
||||
from django.http.request import HttpRequest
|
||||
from django.utils.text import slugify
|
||||
from django_cache_decorator import django_cache_decorator
|
||||
from metadata_parser import MetadataParser
|
||||
from metadata_parser import MetadataParser, ParsedResult
|
||||
from wagtail.models import Page, Site
|
||||
from wagtail.models import get_page_models as get_wagtail_page_models
|
||||
|
||||
@ -128,8 +128,13 @@ def get_ai_robots_txt() -> str:
|
||||
|
||||
|
||||
@django_cache_decorator(time=21600)
|
||||
def get_page_metadata(url: str) -> MetadataParser:
|
||||
return MetadataParser(url=url, search_head_only=True)
|
||||
def get_page_metadata(url: str) -> ParsedResult:
|
||||
metadata = MetadataParser(url=url, search_head_only=True).parsed_result
|
||||
|
||||
# HACK: BeautifulSoup doesn't pickle nicely, and so can't be cached
|
||||
metadata.soup = None
|
||||
|
||||
return metadata
|
||||
|
||||
|
||||
def extend_query_params(url: str, params: dict[str, Any]) -> str:
|
||||
|
@ -12,6 +12,14 @@ class TalksListPage(BaseListingPage):
|
||||
max_count = 1
|
||||
subpage_types = ["talks.TalkPage"]
|
||||
|
||||
def get_listing_pages(self) -> models.QuerySet:
|
||||
return (
|
||||
TalkPage.objects.live()
|
||||
.public()
|
||||
.descendant_of(self)
|
||||
.order_by("-date", "title")
|
||||
)
|
||||
|
||||
|
||||
class TalkPage(BaseContentPage):
|
||||
subpage_types: list[Any] = []
|
||||
|
@ -37,7 +37,7 @@ class TalksListPageTestCase(TestCase):
|
||||
self.assertEqual(len(response.context["listing_pages"]), 2)
|
||||
|
||||
def test_queries(self) -> None:
|
||||
with self.assertNumQueries(35):
|
||||
with self.assertNumQueries(34):
|
||||
self.client.get(self.page.url)
|
||||
|
||||
def test_feed_accessible(self) -> None:
|
||||
|
Loading…
Reference in New Issue
Block a user