airflow/_vendor/slugify/slugify.py
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=()):
    """
    Make a slug from the given text.
    :param text (str): initial text
    :param entities (bool):
    :param decimal (bool):
    :param hexadecimal (bool):
    :param max_length (int): output string length
    :param word_boundary (bool):
    :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 lowercase (bool): activate case sensitivity by setting it to False
    :param replacements (iterable): list of replacement rules e.g. [['|', 'or'], ['%', 'percent']]
    :return (str):
    """

    # user-specific replacements
    if replacements:
        for old, new in replacements:
            text = text.replace(old, new)

    # ensure text is unicode
    if not isinstance(text, _unicode_type):
        text = _unicode(text, 'utf-8', 'ignore')

    # replace quotes with dashes - pre-process
    text = QUOTE_PATTERN.sub(DEFAULT_SEPARATOR, text)

    # decode unicode
    text = unidecode.unidecode(text)

    # ensure text is still in unicode
    if not isinstance(text, _unicode_type):
        text = _unicode(text, 'utf-8', 'ignore')

    # character entity reference
    if entities:
        text = CHAR_ENTITY_PATTERN.sub(lambda m: unichr(name2codepoint[m.group(1)]), text)

    # decimal character reference
    if decimal:
        try:
            text = DECIMAL_PATTERN.sub(lambda m: unichr(int(m.group(1))), text)
        except Exception:
            pass

    # hexadecimal character reference
    if hexadecimal:
        try:
            text = HEX_PATTERN.sub(lambda m: unichr(int(m.group(1), 16)), text)
        except Exception:
            pass

    # translate
    text = unicodedata.normalize('NFKD', text)

    # make the text lowercase (optional)
    if lowercase:
        text = text.lower()

    # remove generated quotes -- post-process
    text = QUOTE_PATTERN.sub('', text)

    # cleanup numbers
    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
    text = re.sub(pattern, DEFAULT_SEPARATOR, text)

    # remove redundant
    text = DUPLICATE_DASH_PATTERN.sub(DEFAULT_SEPARATOR, text).strip(DEFAULT_SEPARATOR)

    # remove stopwords
    if stopwords:
        if lowercase:
            stopwords_lower = [s.lower() for s in stopwords]
            words = [w for w in text.split(DEFAULT_SEPARATOR) if w not in stopwords_lower]
        else:
            words = [w for w in text.split(DEFAULT_SEPARATOR) if w not in stopwords]
        text = DEFAULT_SEPARATOR.join(words)

    # finalize user-specific replacements
    if replacements:
        for old, new in replacements:
            text = text.replace(old, new)

    # smart truncate if requested
    if max_length > 0:
        text = smart_truncate(text, max_length, word_boundary, DEFAULT_SEPARATOR, save_order)

    if separator != DEFAULT_SEPARATOR:
        text = text.replace(DEFAULT_SEPARATOR, separator)

    return text
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=()):
    """
    Make a slug from the given text.
    :param text (str): initial text
    :param entities (bool):
    :param decimal (bool):
    :param hexadecimal (bool):
    :param max_length (int): output string length
    :param word_boundary (bool):
    :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 lowercase (bool): activate case sensitivity by setting it to False
    :param replacements (iterable): list of replacement rules e.g. [['|', 'or'], ['%', 'percent']]
    :return (str):
    """

    # user-specific replacements
    if replacements:
        for old, new in replacements:
            text = text.replace(old, new)

    # ensure text is unicode
    if not isinstance(text, _unicode_type):
        text = _unicode(text, 'utf-8', 'ignore')

    # replace quotes with dashes - pre-process
    text = QUOTE_PATTERN.sub(DEFAULT_SEPARATOR, text)

    # decode unicode
    text = unidecode.unidecode(text)

    # ensure text is still in unicode
    if not isinstance(text, _unicode_type):
        text = _unicode(text, 'utf-8', 'ignore')

    # character entity reference
    if entities:
        text = CHAR_ENTITY_PATTERN.sub(lambda m: unichr(name2codepoint[m.group(1)]), text)

    # decimal character reference
    if decimal:
        try:
            text = DECIMAL_PATTERN.sub(lambda m: unichr(int(m.group(1))), text)
        except Exception:
            pass

    # hexadecimal character reference
    if hexadecimal:
        try:
            text = HEX_PATTERN.sub(lambda m: unichr(int(m.group(1), 16)), text)
        except Exception:
            pass

    # translate
    text = unicodedata.normalize('NFKD', text)

    # make the text lowercase (optional)
    if lowercase:
        text = text.lower()

    # remove generated quotes -- post-process
    text = QUOTE_PATTERN.sub('', text)

    # cleanup numbers
    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
    text = re.sub(pattern, DEFAULT_SEPARATOR, text)

    # remove redundant
    text = DUPLICATE_DASH_PATTERN.sub(DEFAULT_SEPARATOR, text).strip(DEFAULT_SEPARATOR)

    # remove stopwords
    if stopwords:
        if lowercase:
            stopwords_lower = [s.lower() for s in stopwords]
            words = [w for w in text.split(DEFAULT_SEPARATOR) if w not in stopwords_lower]
        else:
            words = [w for w in text.split(DEFAULT_SEPARATOR) if w not in stopwords]
        text = DEFAULT_SEPARATOR.join(words)

    # finalize user-specific replacements
    if replacements:
        for old, new in replacements:
            text = text.replace(old, new)

    # smart truncate if requested
    if max_length > 0:
        text = smart_truncate(text, max_length, word_boundary, DEFAULT_SEPARATOR, save_order)

    if separator != DEFAULT_SEPARATOR:
        text = text.replace(DEFAULT_SEPARATOR, separator)

    return text
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 = ( ) ) : # user-specific replacements if replacements : for old , new in replacements : text = text . replace ( old , new ) # ensure text is unicode if not isinstance ( text , _unicode_type ) : text = _unicode ( text , 'utf-8' , 'ignore' ) # replace quotes with dashes - pre-process text = QUOTE_PATTERN . sub ( DEFAULT_SEPARATOR , text ) # decode unicode text = unidecode . unidecode ( text ) # ensure text is still in unicode if not isinstance ( text , _unicode_type ) : text = _unicode ( text , 'utf-8' , 'ignore' ) # character entity reference if entities : text = CHAR_ENTITY_PATTERN . sub ( lambda m : unichr ( name2codepoint [ m . group ( 1 ) ] ) , text ) # decimal character reference if decimal : try : text = DECIMAL_PATTERN . sub ( lambda m : unichr ( int ( m . group ( 1 ) ) ) , text ) except Exception : pass # hexadecimal character reference if hexadecimal : try : text = HEX_PATTERN . sub ( lambda m : unichr ( int ( m . group ( 1 ) , 16 ) ) , text ) except Exception : pass # translate text = unicodedata . normalize ( 'NFKD' , text ) # make the text lowercase (optional) if lowercase : text = text . lower ( ) # remove generated quotes -- post-process text = QUOTE_PATTERN . sub ( '' , text ) # cleanup numbers 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 text = re . sub ( pattern , DEFAULT_SEPARATOR , text ) # remove redundant text = DUPLICATE_DASH_PATTERN . sub ( DEFAULT_SEPARATOR , text ) . strip ( DEFAULT_SEPARATOR ) # remove stopwords if stopwords : if lowercase : stopwords_lower = [ s . lower ( ) for s in stopwords ] words = [ w for w in text . split ( DEFAULT_SEPARATOR ) if w not in stopwords_lower ] else : words = [ w for w in text . split ( DEFAULT_SEPARATOR ) if w not in stopwords ] text = DEFAULT_SEPARATOR . join ( words ) # finalize user-specific replacements if replacements : for old , new in replacements : text = text . replace ( old , new ) # smart truncate if requested if max_length > 0 : text = smart_truncate ( text , max_length , word_boundary , DEFAULT_SEPARATOR , save_order ) if separator != DEFAULT_SEPARATOR : text = text . replace ( DEFAULT_SEPARATOR , separator ) return text
Make a slug from the given text.
    :param text (str): initial text
    :param entities (bool):
    :param decimal (bool):
    :param hexadecimal (bool):
    :param max_length (int): output string length
    :param word_boundary (bool):
    :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 lowercase (bool): activate case sensitivity by setting it to False
    :param replacements (iterable): list of replacement rules e.g. [['|', 'or'], ['%', 'percent']]
    :return (str):
Make a slug from the given text . : param text ( str ) : initial text : param entities ( bool ) : : param decimal ( bool ) : : param hexadecimal ( bool ) : : param max_length ( int ) : output string length : param word_boundary ( bool ) : : 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 lowercase ( bool ) : activate case sensitivity by setting it to False : param replacements ( iterable ) : list of replacement rules e . g . [[ | or ] [ % percent ]] : return ( str ) :