diff options
author | Deniz Turgut <dturgut@gmail.com> | 2020-04-21 00:26:00 +0300 |
---|---|---|
committer | Deniz Turgut <dturgut@gmail.com> | 2020-04-21 00:26:00 +0300 |
commit | bd699d34e88da469fa71e904e9ce3f7df6276c84 (patch) | |
tree | c8626955863a46134e463f77df0a49471f9c4e71 | |
parent | 97fe235e60a8f46346b35fa32a02ff9e1e5ba395 (diff) | |
download | pelican-bd699d34e88da469fa71e904e9ce3f7df6276c84.tar.gz |
Expose preserve_case option from slugify
-rw-r--r-- | docs/settings.rst | 6 | ||||
-rw-r--r-- | pelican/contents.py | 3 | ||||
-rw-r--r-- | pelican/settings.py | 1 | ||||
-rw-r--r-- | pelican/tests/test_contents.py | 35 | ||||
-rw-r--r-- | pelican/urlwrappers.py | 9 |
5 files changed, 42 insertions, 12 deletions
diff --git a/docs/settings.rst b/docs/settings.rst index 60e539d3..8c021563 100644 --- a/docs/settings.rst +++ b/docs/settings.rst @@ -628,6 +628,12 @@ corresponding ``*_URL`` setting as string, while others hard-code them: in auto-generated slugs. Otherwise, unicode characters will be replaced with ASCII equivalents. + +.. data:: SLUGIFY_PRESERVE_CASE = False + + Preserve uppercase characters in the slugs. Set ``True`` to keep the + uppercase characters in the ``SLUGIFY_SOURCE`` as is. + .. data:: SLUG_REGEX_SUBSTITUTIONS = [ (r'[^\\w\\s-]', ''), # remove non-alphabetical/whitespace/'-' chars (r'(?u)\\A\\s*', ''), # strip leading whitespace diff --git a/pelican/contents.py b/pelican/contents.py index b49e1f2e..d01b241f 100644 --- a/pelican/contents.py +++ b/pelican/contents.py @@ -102,7 +102,8 @@ class Content(object): self.slug = slugify( value, regex_subs=settings.get('SLUG_REGEX_SUBSTITUTIONS', []), - use_unicode=settings['SLUGIFY_USE_UNICODE']) + preserve_case=settings.get('SLUGIFY_PRESERVE_CASE', False), + use_unicode=settings.get('SLUGIFY_USE_UNICODE', False)) self.source_path = source_path self.relative_source_path = self.get_relative_source_path() diff --git a/pelican/settings.py b/pelican/settings.py index 0e0397c9..85cacbf0 100644 --- a/pelican/settings.py +++ b/pelican/settings.py @@ -156,6 +156,7 @@ DEFAULT_CONFIG = { 'INTRASITE_LINK_REGEX': '[{|](?P<what>.*?)[|}]', 'SLUGIFY_SOURCE': 'title', 'SLUGIFY_USE_UNICODE': False, + 'SLUGIFY_PRESERVE_CASE': False, 'CACHE_CONTENT': False, 'CONTENT_CACHING_LAYER': 'reader', 'CACHE_PATH': 'cache', diff --git a/pelican/tests/test_contents.py b/pelican/tests/test_contents.py index 2a377e75..ebde9c3c 100644 --- a/pelican/tests/test_contents.py +++ b/pelican/tests/test_contents.py @@ -135,16 +135,31 @@ class TestPage(LoggedTestCase): page = Page(**page_kwargs) self.assertEqual(page.slug, 'foo') - # test slug from unicode title - # slug doesn't use unicode - settings['SLUGIFY_SOURCE'] = "title" - page_kwargs['metadata']['title'] = '指導書' - page = Page(**page_kwargs) - self.assertEqual(page.slug, 'zhi-dao-shu') - # slug uses unicode - settings['SLUGIFY_USE_UNICODE'] = True - page = Page(**page_kwargs) - self.assertEqual(page.slug, '指導書') + # test slug from title with unicode and case + + inputs = ( + # (title, expected, preserve_case, use_unicode) + ('指導書', 'zhi-dao-shu', False, False), + ('指導書', 'Zhi-Dao-Shu', True, False), + ('指導書', '指導書', False, True), + ('指導書', '指導書', True, True), + ('Çığ', 'cig', False, False), + ('Çığ', 'Cig', True, False), + ('Çığ', 'çığ', False, True), + ('Çığ', 'Çığ', True, True), + ) + + settings = get_settings() + page_kwargs = self._copy_page_kwargs() + page_kwargs['settings'] = settings + + for title, expected, preserve_case, use_unicode in inputs: + settings['SLUGIFY_PRESERVE_CASE'] = preserve_case + settings['SLUGIFY_USE_UNICODE'] = use_unicode + page_kwargs['metadata']['title'] = title + page = Page(**page_kwargs) + self.assertEqual(page.slug, expected, + (title, preserve_case, use_unicode)) def test_defaultlang(self): # If no lang is given, default to the default one. diff --git a/pelican/urlwrappers.py b/pelican/urlwrappers.py index 86f9ef32..d01611ba 100644 --- a/pelican/urlwrappers.py +++ b/pelican/urlwrappers.py @@ -37,9 +37,11 @@ class URLWrapper(object): regex_subs = self.settings.get( class_key, self.settings.get('SLUG_REGEX_SUBSTITUTIONS', [])) + preserve_case = self.settings.get('SLUGIFY_PRESERVE_CASE', False) self._slug = slugify( self.name, regex_subs=regex_subs, + preserve_case=preserve_case, use_unicode=self.settings.get('SLUGIFY_USE_UNICODE', False) ) return self._slug @@ -66,7 +68,12 @@ class URLWrapper(object): class_key, self.settings.get('SLUG_REGEX_SUBSTITUTIONS', [])) use_unicode = self.settings.get('SLUGIFY_USE_UNICODE', False) - return slugify(key, regex_subs=regex_subs, use_unicode=use_unicode) + preserve_case = self.settings.get('SLUGIFY_PRESERVE_CASE', False) + return slugify( + key, + regex_subs=regex_subs, + preserve_case=preserve_case, + use_unicode=use_unicode) def __eq__(self, other): if isinstance(other, self.__class__): |