From dce218991ddf16d916501fb6f72980f9ca0c892a Mon Sep 17 00:00:00 2001 From: Reza Moradi Date: Wed, 16 Feb 2022 23:36:00 +0100 Subject: Fix misleading pattern name and documentation (#109) * Add better typing for slugify.slugify Currently, mypy understands the type as `Iterable[str]`, which doesn't match what should actually be passed in, which is `Iterable[Iterable[str]]` or, ideally, `Iterable[Tuple[str, str]]` * whitespace around = * fix misleading pattern name and documentation * fix README.md and cli doc as well Co-authored-by: Fahrzin Hemmati Co-authored-by: Val Neekman (AvidCoder) --- README.md | 2 +- slugify/__main__.py | 2 +- slugify/slugify.py | 15 ++++++--------- 3 files changed, 8 insertions(+), 11 deletions(-) diff --git a/README.md b/README.md index af10080..11e20da 100644 --- a/README.md +++ b/README.md @@ -55,7 +55,7 @@ def slugify( :param save_order (bool): if parameter is True and max_length > 0 return whole words in the initial order :param separator (str): separator between words :param stopwords (iterable): words to discount - :param regex_pattern (str): regex pattern for allowed characters + :param regex_pattern (str): regex pattern for disallowed characters :param lowercase (bool): activate case sensitivity by setting it to False :param replacements (iterable): list of replacement rules e.g. [['|', 'or'], ['%', 'percent']] :return (str): slugify text diff --git a/slugify/__main__.py b/slugify/__main__.py index ffdfd5f..5a888fe 100644 --- a/slugify/__main__.py +++ b/slugify/__main__.py @@ -31,7 +31,7 @@ def parse_args(argv): parser.add_argument("--stopwords", nargs='+', help="Words to discount") parser.add_argument("--regex-pattern", - help="Python regex pattern for allowed characters") + help="Python regex pattern for disallowed characters") parser.add_argument("--no-lowercase", action='store_false', dest='lowercase', default=True, help="Activate case sensitivity") parser.add_argument("--replacements", nargs='+', diff --git a/slugify/slugify.py b/slugify/slugify.py index f38df10..190ea92 100644 --- a/slugify/slugify.py +++ b/slugify/slugify.py @@ -1,6 +1,7 @@ import re -import unicodedata import sys +import typing +import unicodedata from html.entities import name2codepoint try: @@ -15,8 +16,7 @@ CHAR_ENTITY_PATTERN = re.compile(r'&(%s);' % '|'.join(name2codepoint)) DECIMAL_PATTERN = re.compile(r'&#(\d+);') HEX_PATTERN = re.compile(r'&#x([\da-fA-F]+);') QUOTE_PATTERN = re.compile(r'[\']+') -ALLOWED_CHARS_PATTERN = re.compile(r'[^-a-z0-9]+') -ALLOWED_CHARS_PATTERN_WITH_UPPERCASE = re.compile(r'[^-a-zA-Z0-9]+') +DISALLOWED_CHARS_PATTERN = re.compile(r'[^-a-zA-Z0-9]+') DUPLICATE_DASH_PATTERN = re.compile(r'-{2,}') NUMBERS_PATTERN = re.compile(r'(?<=\d),(?=\d)') DEFAULT_SEPARATOR = '-' @@ -66,7 +66,7 @@ def smart_truncate(string, max_length=0, word_boundary=False, separator=' ', sav def slugify(text, entities=True, decimal=True, hexadecimal=True, max_length=0, word_boundary=False, separator=DEFAULT_SEPARATOR, save_order=False, stopwords=(), regex_pattern=None, lowercase=True, - replacements=()): + replacements: typing.Iterable[typing.Iterable[str]] = ()): """ Make a slug from the given text. :param text (str): initial text @@ -78,7 +78,7 @@ def slugify(text, entities=True, decimal=True, hexadecimal=True, max_length=0, w :param save_order (bool): if parameter is True and max_length > 0 return whole words in the initial order :param separator (str): separator between words :param stopwords (iterable): words to discount - :param regex_pattern (str): regex pattern for allowed characters + :param regex_pattern (str): regex pattern for disallowed characters :param lowercase (bool): activate case sensitivity by setting it to False :param replacements (iterable): list of replacement rules e.g. [['|', 'or'], ['%', 'percent']] :return (str): @@ -137,10 +137,7 @@ def slugify(text, entities=True, decimal=True, hexadecimal=True, max_length=0, w text = NUMBERS_PATTERN.sub('', text) # replace all other unwanted characters - if lowercase: - pattern = regex_pattern or ALLOWED_CHARS_PATTERN - else: - pattern = regex_pattern or ALLOWED_CHARS_PATTERN_WITH_UPPERCASE + pattern = regex_pattern or DISALLOWED_CHARS_PATTERN text = re.sub(pattern, DEFAULT_SEPARATOR, text) # remove redundant -- cgit v1.2.1