diff options
author | Reza Moradi <mrezzamoradi@gmail.com> | 2022-02-16 23:36:00 +0100 |
---|---|---|
committer | GitHub <noreply@github.com> | 2022-02-16 17:36:00 -0500 |
commit | dce218991ddf16d916501fb6f72980f9ca0c892a (patch) | |
tree | f3e4ae6a9b204515c894e92417ee2dc6da9ca5d7 | |
parent | b2aaccd0b0e8ac4780ff29221d7d0fe915aa3f0d (diff) | |
download | python-slugify-dce218991ddf16d916501fb6f72980f9ca0c892a.tar.gz |
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 <fahhem@users.noreply.github.com>
Co-authored-by: Val Neekman (AvidCoder) <un33kvu@gmail.com>
-rw-r--r-- | README.md | 2 | ||||
-rw-r--r-- | slugify/__main__.py | 2 | ||||
-rw-r--r-- | slugify/slugify.py | 15 |
3 files changed, 8 insertions, 11 deletions
@@ -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 |