Регулярно требуется преобразовать какой-либо текст в максимально совместимый текст для 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
🚨🚨Celsius' wallet 0x4A87 received 428,105 $ETH ($784M) unstaked from #Lido Finance 10 hrs ago.
➡️ Lido Finance transferred the full amount of $ETH 22 hours after Celsius's request.
➡️ There are 274 $stETH left pending to be withdrawn in the Lido withdrawal queue.
⚠️ Keep an eye on Celsius's next move with this substantial amount of available $ETH.
👉 Addresses:
1. Celsius 0x4a87
2. Lido withdrawal queue
🌟 A savvy trader, who once amassed millions profit, just moved 1,901 $ETH at $1,826($3.47M) to #Binance 14 hours ago.
➡️ Previously earned an estimatedprofit of $2.06M (ROI: 25%).
➡️ This latest trade yielded a modest $20K profit.
🤔 Speculation arises that the ability to convert $stETH to $ETH from #lido v2 may have influenced his decision.
👉 More details: https://twitter.com/spotonchain/status/1658728334367551489
🗣 Новый день, новый Governance Voting в котором я принимаю участие, прокачивая свои DAO скиллы и неся свободу и децентрализацию в наш бренный #Web3 мир. Этот 2023 год можно точно назвать #bullrun для всех децентрализованных protocol governance и #DAO. Вся интеллектуальная активность в сети, аирдропы и пользователи сейчас здесь.
База: большие протоколы/блокчейны управляются сообществом владельцев токенов и их делегатами. Делегат - это пользователь (кошелек) у которого может и не быть токенов протокола, но он получил делегацию "голосов" от других участников и может теперь представлять их интересы при голосовании за предложения (чем-то похоже на депутата от народа).
Процесс #DAO следующий:
- активный участник делает детальное предложение и выносит его на обсуждение. Место: форум проекта.
- после обсуждения проекта, предложение выносится на голосование оффчейн (без проведения транзакции, а только с помощью отправки подписи). Место: snapshot.org
- после принятие предложения на snapshot оно переносится уже на onchain голосование и после исполняется. Место: tally.xyz
Основные задачи управления ДАО - это обновление протокола (экономические параметры), перенос протокола на новую сеть (лицензионные параметры), управление казначейством (распределение нажитого имущества или токенов проекта в целях поощрения сообщества протокола). В частных случаях это еще и координация управления операционной, юридической и политической активностью протокола.
Список #DAO в которых я не последний человек принимаю участие:
- Uniswap $UNI - Forum / Snapshot [treasury - $1.5B]
- Arbitrum $ARB - Forum / Snapshot [treasury - $2.8B]
- Optimism $OP - Forum / Snapshot [treasury - $1.5B]
- Frax $FXS - Forum / Snapshot [mcap - $1.4B]
Далее в моем списке: #Lido, #AAVE, #Straknet, #MakerDAO
… [ч1] продолжение в следующем посте 🟢
Trump Family Spends Big on Crypto
The Trump family crypto project, World Liberty Financial (WLFI), made significant moves in the crypto market:
- Purchased 10.61 million TRX for 2.65 million USDT.
- Acquired 3,079 ETH for 10 million USDC.
- Converted and staked 4,700 ETH into stETH via Lido, totaling 14,701.58 ETH worth about $49 million.
Check more details here: Onchain Lens.
Additionally, the SEC has rescinded the controversial accounting guidance SAB 121 that affected Bitcoin custody by banks. More insights at Leviathan News and The Block.
#Crypto#Bitcoin#SEC#TRX#ETH#USDC#Ethereum#WorldLibertyFinancial#Lido#stETH#Trump#SAB121#Accounting#Finance#USD#WhaleAlert#USDT
Major ETH Transfer and Lido V3 Launch
🚨 29,250 #ETH (~$77.8M) transferred from #Binance to an unknown wallet, according to Whale Alert. In other news, Lido has launched V3 with customizable ‘stVaults,’ enhancing Ethereum staking flexibility. More details can be found here.
🔍 Analysts from Merkle Science report that in 2024, investors lost over $500M due to fraud linked to meme tokens, primarily through social engineering attacks on platforms like X and YouTube.
📈#HongKong now recognizes $BTC and $ETH for investment visa applications, positioning itself as a competitive hub for crypto investors.
💰 DeFi platform Legend has secured $15M from Andreessen Horowitz and Coinbase Ventures.
Stay informed! 🔗Lido V3 Announcement
## Keywords: #ETH#Lido#Binance#Crypto#MemeToken#HongKong#BTC#VC#DeFi#Legend#InvestmentVisa#WhaleAlert#Fraud#SocialEngineering#Ethereum#Investment#CryptoNews#Blockchain#Finance#CryptoInvestors#DecentralizedFinance
#ETH#Lido#Binance#Crypto#MemeToken#HongKong#BTC#VC#DeFi#Legend#InvestmentVisa#WhaleAlert#Fraud#SocialEngineering#Ethereum#Investment#CryptoNews#Blockchain#Finance#CryptoInvestors#DecentralizedFinance