Skip to content

Commit e9da91d

Browse files
Slugify series title in a receiver
1 parent d5f5bde commit e9da91d

File tree

7 files changed

+23
-14
lines changed

7 files changed

+23
-14
lines changed

MangAdventure/templates/layout.html

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@
55
<meta charset="UTF-8">
66
<meta name="viewport" content="width=device-width, initial-scale=1.0">
77
<meta name="generator" content="MangAdventure v{{ MANGADV_VERSION }}">
8+
<meta name="license" content="MIT">
89
{% endcache %}
910
{% block color %}
1011
<meta name="theme-color" content="{{ config.ALTER_BG_COLOR }}">

config/urls.py

Lines changed: 2 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -23,11 +23,8 @@
2323

2424
if settings.DEBUG: # pragma: no cover
2525
from django.conf.urls.static import static
26-
urlpatterns += static(
27-
settings.MEDIA_URL, document_root=settings.MEDIA_ROOT
28-
)
29-
urlpatterns += static(
30-
settings.STATIC_URL, document_root=settings.STATIC_ROOT
26+
urlpatterns.extend(
27+
static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT)
3128
)
3229
if find_spec('debug_toolbar'):
3330
from debug_toolbar import urls as djdt_urls

reader/models.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -293,8 +293,8 @@ def sitemap_images(self) -> List[str]:
293293

294294
def save(self, *args, **kwargs):
295295
"""Save the current instance."""
296-
# TODO: move this to a receiver?
297-
self.slug = slugify(self.slug or self.title)
296+
if not self.slug:
297+
self.slug = slugify(self.title)
298298
super().save(*args, **kwargs)
299299

300300
def __str__(self) -> str:

reader/receivers.py

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,7 @@
1515
from django.http.request import QueryDict
1616
from django.urls.base import resolve
1717
from django.urls.exceptions import Resolver404
18+
from django.utils.text import slugify
1819

1920
from .models import Chapter, Page, Series
2021

@@ -46,6 +47,10 @@ def redirect_series(sender: Type[Series], instance: Series, **kwargs):
4647
current = Series.objects.get(id=instance.id)
4748
except Series.DoesNotExist:
4849
return
50+
# update the slug while we're at it
51+
if current.title != instance.title and \
52+
current.slug == instance.slug == slugify(current.title):
53+
instance.slug = slugify(instance.title)
4954
if current.slug != instance.slug:
5055
old_path = current.get_absolute_url()
5156
old_dir = current.get_directory()

reader/tests/test_models.py

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -70,6 +70,7 @@ def create_series(title: str = 'My Series', **kwargs):
7070
def test_create(self):
7171
series = self.create_series()
7272
assert str(series) == 'My Series'
73+
assert series.slug == 'my-series'
7374

7475
def test_get_absolute_url(self):
7576
series = self.create_series()

reader/tests/test_receivers.py

Lines changed: 10 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -21,22 +21,27 @@ class TestRedirectSeries(ReaderTestBase):
2121
def setup_method(self):
2222
super().setup_method()
2323
self.series = Series.objects.create(
24-
title='series', slug='old-slug', cover=get_test_image()
24+
title='Old Slug', slug='old-slug', cover=get_test_image()
2525
)
2626
self.chapter = self.series.chapters.create(
2727
title='Chapter', number=1, file=get_valid_zip_file()
2828
)
2929

30+
def test_slug(self):
31+
self.series.title = 'New Slug'
32+
self.series.save(update_fields=('title', 'slug'))
33+
assert self.series.slug == 'new-slug'
34+
3035
def test_redirect(self):
3136
url1 = self.series.get_absolute_url()
3237

3338
self.series.slug = 'new-slug'
34-
self.series.save()
39+
self.series.save(update_fields=('slug',))
3540
url2 = self.series.get_absolute_url()
3641
assert get_redirect_list() == [(url1, url2)]
3742

3843
self.series.slug = 'another-slug'
39-
self.series.save()
44+
self.series.save(update_fields=('slug',))
4045
url3 = self.series.get_absolute_url()
4146
assert get_redirect_list() == [(url2, url3), (url1, url3)]
4247

@@ -45,7 +50,7 @@ def test_redirect(self):
4550
assert name not in self.chapter.pages.first().image.name
4651

4752
self.series.slug = 'old-slug'
48-
self.series.save()
53+
self.series.save(update_fields=('slug',))
4954
assert get_redirect_list() == [(url3, url1), (url2, url1)]
5055

5156

@@ -62,7 +67,7 @@ def setup_method(self):
6267
def test_redirect(self):
6368
self.chapter.number = 2
6469
self.chapter.volume = 2
65-
self.chapter.save()
70+
self.chapter.save(update_fields=('number', 'volume'))
6671
series_path = settings.MEDIA_ROOT / self.series.get_directory()
6772
assert (series_path / '2' / '2').exists()
6873
assert not (series_path / '0' / '1').exists()

requirements.txt

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
1-
django~=4.1.9
1+
django~=4.1.10
22
djangorestframework>=3.14
33
django-allauth>=0.54
4-
Pillow>=9.5
4+
Pillow>=10.0
55
libsass-bin>=0.22
66
yaenv~=1.4.3; python_version=='3.8'
77
yaenv~=1.5.2; python_version=='3.9'

0 commit comments

Comments
 (0)