Refactor slug generation to use slugify library

This commit is contained in:
Arash
2024-11-05 16:04:54 +01:00
parent 35db3c33db
commit 29479cd00a
2 changed files with 4 additions and 14 deletions
+2 -3
View File
@@ -46,6 +46,7 @@ from typing import (
)
import sqlalchemy
from slugify import slugify
from sqlalchemy.orm import Query
from sqlalchemy.orm.scoping import scoped_session
from typing_extensions import Protocol
@@ -1296,9 +1297,7 @@ def raise_filter_err(attr, op, val, msg):
def is_valid_slug(slug):
"""Returns true if slug is valid."""
VALID_SLUG_RE = re.compile(r"^[^/:?#]+$")
return VALID_SLUG_RE.match(slug)
return slugify(slug, allow_unicode=True) == slug
class SortableManager:
+2 -11
View File
@@ -20,6 +20,7 @@ from typing import (
Type,
)
from slugify import slugify
from sqlalchemy import (
exists,
false,
@@ -309,16 +310,6 @@ class SharableModelManager(
session.commit()
return item
def _slugify(self, start_with):
# Replace whitespace with '-'
slug_base = re.sub(r"\s+", "-", start_with)
# Remove all /:?# characters.
slug_base = re.sub(r"[/:?#]", "", slug_base)
# Remove trailing '-'.
if slug_base.endswith("-"):
slug_base = slug_base[:-1]
return slug_base
def _default_slug_base(self, item):
# override in subclasses
if hasattr(item, "title"):
@@ -334,7 +325,7 @@ class SharableModelManager(
# Setup slug base.
if cur_slug is None or cur_slug == "":
slug_base = self._slugify(self._default_slug_base(item))
slug_base = slugify(self._default_slug_base(item), allow_unicode=True)
else:
slug_base = cur_slug