Регулярно требуется преобразовать какой-либо текст в максимально совместимый текст для URL, имени файла, имени объекта в каком-то софте и тд. Требования совместимости простые: в тексте должны быть только допустимые символы. Обычно это a-z, 0-9 и "_" или "-". То есть, только прописные буквы латинского алфавита и цифры (как пример).
Допустим, нам нужно название статьи в блоге преобразовать в slug для добавления его в URL этой статьи. Как это лучше всего сделать?
В Django по умолчанию есть готовая функция slugify для таких случаев.
Но я её никогда не использую. Почему? Потому что её недостаточно!
Приведём пример
>>> from django.utils.text import slugify
>>> slugify('This is a Title')
'this-is-a-title'
Пока всё отлично
>>> slugify('This is a "Title!"')
'this-is-a-title'
Спец символы удалились, всё хорошо.
>>> slugify('Это заголовок статьи')
''
Вот и приехали 😢. Если текст не английский то буквы просто игнорируются. Можно это поправить
>>> slugify('Это заголовок статьи', allow_unicode=True)
'это-заголовок-статьи'
Но тогда мы не вписываемся в условие. У нас появилась кириллица в тексте.
Так как я часто пишу сайты для русскоязычных пользователей эта проблема весьма актуальна. Я не использую стандартную функцию и всегда пишу свою.
Оригинал я не беру в расчёт и пишу полностью свою функцию. И так, по порядку:
🔸1. Исходный текст:
>>> text = 'Мой заголовок №10 😁!'
Взял специально посложней со специальными символами.
🔸2. Транслит
Необходимо сделать транслит всех символов в латиницу. Здесь очень выручает библиотека unidecode. Помимо простого транслита кириллицы в латиницу она умеет преобразовывать спец символы и иероглифы в текстовые аналоги.
from unidecode import unidecode
>>> unidecode("Ñ Σ ® µ ¶ ¼ 月 山")
'N S (r) u P 1/4 Yue Shan'
Очень крутая библиотека, советую👍
В нашем случае получаем такое преобразование:
>>> text = unidecode(text)
>>> print(text)
'Moi zagolovok No. 10 !'
Отличный транслит. Смайл просто удалился, хотя я ждал что-то вроде :). Ну и ладно, всë равно невалидные символы.
А еще наш код уже поддерживает любой язык, будь то хинди или корейский.
🔸4. Фильтр символов
Unidecode не занимается фильтрацией по недопустимым символам. Это мы делаем в следующем шаге через regex. Просто заменим все символы на "_" если они вне указанного диапазона.
>>> text = re.sub(r'[^a-zA-Z0-9]+', '_', text)
>>> print(text)
'Moi_zagolovok_No_10_'
Символ "+" в паттерне выручает когда несколько недопустимых символов идут рядом. Все они заменяются на один символ "_".
🔸5. Slugify
Осталось удалить лишние символы по краям и сделать нижний регистр
>>> text = text.strip('_').lower()
>>> print(text)
'moi_zagolovok_no_10'
Получаем отличный slug! 😎
🌎 Полный код в виде функции.
______________
PS. Проверку что в строке остался хоть один допустимый символ я бы вынес в отдельную функцию.
#libs#tricks#django
🔓👀#WLFI World Liberty Financial offered to unlock 62.3 billion WLFI tokens that were previously locked without a distribution schedule.
Founders, team members, advisors and partners holding 45.2 billion WLFI will face a two-year cap period and a three-year lock-up period, but will receive 10% of their quota, approximately 4.5 billion tokens. burned after this period.
#wlfi
🧐 Команда World Liberty Financial продолжает переводить WLFI на биржи.
Кошельки, связанные с компанией семьи Дональда Трампа отправили 20m WLFI (~$2,1m) на Gate и OKX.
Ранее: продают WLFI?
Crypto Headlines
#WLFI
World Liberty подает иск против Джастина Сана
World Liberty Financial заявила, что подает иск против Джастина Сана за клевету. По версии проекта, Сан запустил скоординированную кампанию против WLFI после заморозки его токенов.
В World Liberty утверждают, что в ноябре 2024 года связанная с Саном структура Blue Anthem купила токены WLFI, а позже его компании участвовали в запрещенных транзакциях, включая переводы WLFI на Binance.
После заморозки токенов Сан, по версии WLFI, начал публично обвинять проект в мошенничестве, наличии «черных ходов» и использовании сообщества как «банкомата». World Liberty также утверждает, что Сан привлек инфлюенсеров и ботов для распространения этих заявлений.
#WLFI
World Liberty Financial вынесла на голосование разблокировку 62,28 млрд WLFI
В governance проекта появилось предложение по токенам ранних сторонников, команды и партнеров.
Под него подпадают:
— 62,28 млрд WLFI всего
— 17,04 млрд WLFI — ранние сторонники
— 45,24 млрд WLFI — команда, фаундеры, партнеры
Голосование длится 7 дней, кворум — 1 млрд WLFI.
Что предлагают:
— Ранним сторонникам: 2 года cliff + 2 года линейный vesting (полная разблокировка к 4 году).
— Команде/фаундерам/партнёрам: сжечь 10% сразу (~4,52 млрд WLFI) + 2 года cliff + 3 года линейный vesting (полная разблокировка к 5 году).
Если не принять условия — токены останутся заблокированы, но продолжат использоваться для голосования в governance. Сжигание в этом случае не происходит.
Предложение появилось на фоне давления со стороны держателей:
— жалобы на длительные блокировки
— обсуждение возможных судебных претензий
— публичные конфликты вокруг контроля над токенами
Теперь проект пытается формализовать правила и убрать неопределенность по будущему предложению WLFI.
#WLFI
WLFI заняла десятки миллионов под залог собственного токена
Кошелек, который связывают с World Liberty Financial, внес на Dolomite около 3 млрд WLFI в качестве залога и занял под него не менее $65,4 млн в USD1 и $10,3 млн в USDC. После этого более $40 млн стейблкоинов ушли на Coinbase Prime.
Механика здесь простая: проект кладет свой токен как обеспечение и берет взамен ликвидные стейблкоины. Риск в том, что залогом выступает WLFI — токен с высокой оценкой на бумаге, но с ограниченной ликвидностью на рынке. Если такую позицию придется ликвидировать, быстро продать такой объем без сильного удара по цене будет сложно. Именно это и вызывает вопросы к безопасности кредиторов на Dolomite.
Отдельный повод для споров — перевод средств на Coinbase Prime незадолго до объявления о перемирии между США и Ираном, после которого рынок вырос. На этом фоне в сообществе обсуждают, могли ли заемные стейблкоины использоваться для лонгов.
#WLFI
World Liberty Financial столкнулась с вопросами после партнерства с AB DAO
World Liberty Financial оказалась под вниманием после сделки с AB DAO.
Проблема в том, что с проектом ранее были связаны лица, которые позже попали под санкции США и Великобритании.
В самой World Liberty Financial заявили, что провели должную проверку и не связаны с фигурантами дела.
Также там утверждают, что не знали о продвижении со стороны AB DAO курорта, связанного с камбоджийской Prince Group.
Американские власти ранее называли Prince Group крупной транснациональной преступной сетью.
#WLFI
WLFI продает “доступ к команде” за $5 млн
В WLFI прошло голосование по изменению механики управления: держателям, которые застейкают примерно $5 млн в WLFI на 6 месяцев, обещают гарантированный прямой доступ к руководителям по развитию бизнеса (формат “Super Node”). Голосование прошло с поддержкой около 99%. Более 76% токенов для голосования поступили всего с 10 кошельков.
Параллельно меняется логика governance: права голоса завязываются на стейкинг, что фактически усиливает роль крупных держателей. При этом проект отдельно уточнял, что “доступ” не означает прямой контакт с членами семьи Трампа, хотя они указаны в составе команды/сооснователей в материалах проекта.