Обновить
834.84

Python *

Высокоуровневый язык программирования

Сначала показывать
Порог рейтинга

Защищенный контент в Telegram боте с использованием aiogram 3.x

Если вы создаете Telegram бота и хотите обеспечить защиту контента от сохранения, копирования или пересылки, вы можете использовать новую функциональность библиотеки aiogram 3.x. Это особенно полезно, если ваш контент представляет ценность и вы хотите контролировать его дальнейшее распространение.

Для включения защиты контента достаточно установить флаг protect_content=True при отправке сообщений через ваш Telegram бот. Например:

await message.answer("Ваш текст или контент", protect_content=True)
await bot.send_message(chat_id=message.from_user.id, protect_content=True)
await message.answer_photo(photo=photo_id, caption='Мое описание фото', protect_content=True)

Этот флаг применяется ко всем типам сообщений, включая текстовые сообщения, фотографии, видео и другие медиафайлы. Таким образом, пользователи вашего бота не смогут сохранять изображения, видео или копировать текст непосредственно из диалогов с ботом.

Не забудьте подписаться и поставить лайк, если этот пост оказался полезным для вас!

Теги:
Всего голосов 1: ↑1 и ↓0+3
Комментарии2

GPT-4o в командной строке бесплатно.

 pip install g4f 
from g4f.client import Client 
 
client = Client() 
 
 
def answer(question: str) -> str: 
 
    response = client.chat.completions.create( 
        model="gpt-4o", 
        messages=[{"role": "user", "content": question}], 
    ) 
    return response.choices[0].message.content 
 
def main(): 
    while True: 
        question = input('\nВведите ваш вопрос > ') 
        print(answer(question)) 
 
 
if __name__ == '__main__': 
    main() 

Если что-то непонятно, запустите скрипт и задайте свой вопрос.

Теги:
Всего голосов 5: ↑5 и ↓0+7
Комментарии3

Корректно пишем главный файл телеграмм бота на Aiogram 3.x

Друзья, если вы читали серию моих статей про разработку ботов через aiogram 3, то видели что я там делился структурой своего бота, в частности главным файлом. Внес в него некоторые корректировки:

async def set_commands(commands):
    await bot.set_my_commands(commands, BotCommandScopeDefault())


async def start_bot():
    await set_commands()
    await bot.send_message(amin.id, 'я запущен и готов к работе')


async def stop_bot():
    await bot.send_message(amin.id, 'бот остановлен')


async def main():
    # регистрация роутера
    dp.include_router(start_router)

    # регистрация функций
    dp.startup.register(start_bot)
    dp.shutdown.register(stop_bot)

    try:
        await bot.delete_webhook(drop_pending_updates=True)
        await dp.start_polling(bot, allowed_updates=dp.resolve_used_update_types())
    finally:
        await bot.session.close()
      

Функция, которая запускается при старте бота:

async def start_bot():
    # регистрация командного меню
    await set_commands()
    await bot.send_message(amin.id, 'я запущен и готов к работе')

Функция, которая запускается при завершении сессии:

async def stop_bot():
    await bot.send_message(amin.id, 'бот остановлен')

После функции нужно зарегистрировать:

dp.startup.register(start_bot)
dp.shutdown.register(stop_bot)

И затем корректно закрыть сессию с ботом.

Благодарю за внимание. Подписывайтесь и ставьте лайки, если инфорамция была для вас полезной.

Теги:
Всего голосов 3: ↑2 и ↓1+3
Комментарии2

Создание фейковых данных пользователя на русском языке с использованием Python Faker

Для реализации этой задачи будем использовать замечательный модуль python - Faker.

Устанавливаем:

pip install faker

С помощью Faker можно легко создать фейковые имена, адреса, адреса электронной почты, номера телефонов и многое другое. Вот пример функции, которая генерирует такого рода данные:

from faker import Faker


def generate_fake_user():
    fake = Faker('ru_RU')

    return {
        'name': fake.name(),
        'address': fake.address(),
        'email': fake.email(),
        'phone_number': fake.phone_number(),
        'birth_date': fake.date_of_birth(),
        'company': fake.company(),
        'job': fake.job()
    }

Эта функция использует локализацию 'ru_RU', чтобы генерировать данные на русском языке. Результат будет включать в себя все необходимое для тестирования ваших приложений и сервисов.

Если информация представленная выше была вам полезной - добавляйте ее в закладки и ставьте лайки! Ваши отзывы и поддержка мотивируют меня и далее делиться с вами своими знаниями.

Теги:
Всего голосов 3: ↑3 и ↓0+6
Комментарии0

Как просто извлечь число из строки с помощью Python и регулярных выражений.

Если вам нужно извлечь число из текста, используйте функцию extract_number с помощью библиотеки re:

import re

def extract_number(text):
    match = re.search(r'\b(\d+)\b', text)
    if match:
        return int(match.group(1))
    else:
        return None

Примеры использования:

# Пример 1:
input_text = "Возраст: 30 лет"
number = extract_number(input_text)
print(number)  # Выведет: 30

# Пример 2:
input_text = "Тебе 25?"
number = extract_number(input_text)
print(number)  # Выведет: 25

# Пример 3:
input_text = "Я не знаю сколько ему лет"
number = extract_number(input_text)
print(number)  # Выведет: None (так как число не найдено)

Если было полезно - добавляйте в закладки и ставьте лайки.

Теги:
Всего голосов 6: ↑5 и ↓1+7
Комментарии5

Группировка списка словарей по ключу с помощью Python

Решил поделиться с вами простым, но мощным решением, которое пригодится вам, если вам когда-либо потребуется преобразовать список словарей в один большой словарь с группировкой по одному общему ключу.

Давайте напишем код:

from collections import defaultdict
from datetime import date
from typing import List, Dict, Any


def group_dicts_by_key(data_list_dict: List[Dict[str, Any]], key_group: str) -> dict:
    """
    Функция для группировки списка словарей по указанному ключу.

    Args:
    data_list_dict (list): Исходный список словарей.
    key_group (str): Ключ для группировки.

    Returns:
    dict: Словарь со сгрупированными значениями.
    """
    grouped_dict = defaultdict(list)

    for item in data_list_dict:
        order = item[key_group]
        grouped_dict[order].append(item)

    return dict(grouped_dict)

Пример использования:

if __name__ == "__main__":
    data = [
        {'art': '123das', 'order_number_1': 472931549},
        {'art': 'dasdw', 'order_number_1': 474286313},
        {'art': 'cxzcz', 'order_number_1': 474269428},
        {'art': 'wezsa', 'order_number_1': 474286312},
        {'art': 'fasqw', 'order_number_1': 474286313}
    ]

    result_dict = group_dicts_by_key(data, 'order_number_1')
    print(result_dict)

Сохраняйте в закладки, чтоб не потерять и ставьте лайк, если было полезно.

Теги:
Всего голосов 3: ↑2 и ↓1+3
Комментарии3

asyncpg-lite обновлена до версии 0.2.2.1!

В новой версии:

  • Убран флаг dsn_flag (теперь достаточно не передавать данные в параметр dns и состояние этого флага будет автоматически сброшено на dsn_flag = False)

  • Параметр deletion_password теперь обязательный (это сделано для безопасного выполнения критических операций - используйте надежный пароль)

  • Добавлен флаг debug: bool во все методы (по умолчанию его значение False)

  • Исрпавлены ошибки и улучшены логи (теперь там больше полезной информации)

Зачем нужен флаг debug?

Установив этот флаг в методе вы сможете вывести в консоль дополнительную информацию, такую как параметры запроса и сам SQL-запрос.

На уровень всего класса DatabaseManager не выводил, чтоб не перегружать консоль информацией.

С библиотекой вы сможете ознакомиться тут: asynpg-lite: Простой асинхронный менеджер для PostgreSQL на Python

Благодарю за обратную связь. Обязательно оставляйте свои замечания и пожелания к новым дополнениям к библиотеке.

Теги:
Всего голосов 1: ↑1 и ↓0+3
Комментарии0

В США разработчикам в экспериментальных целях платят, чтобы они программировали в режиме изменённого сознания (фактически накуренными). В Университете Мичигана проводят исследование «Накуренный во время программирования».

В рамках этого мероприятия планируется изучить влияние определенных веществ на продуктивность. За это платят $80. Для участия надо быть старше 21 года и знать Python.

Ранее исследование показало, что 59% респондентов уже кодили на работе под кайфом или в состоянии алкогольного опьянения.

Теги:
Всего голосов 2: ↑2 и ↓0+6
Комментарии1

Задача о связных списках для начинающих Python-разработчиков ?‍?

Дима — начинающий Python-разработчик. Он совсем недавно устроился в новую компанию и теперь пишет программу для анализа данных.

Однажды Дима пришел на работу и заметил, что в программе начали появляться дубликаты данных. Беда! Повторяющиеся элементы могут исказить результаты анализа, ведь некоторые характеристики учитываются дважды, а это влияет на точность выводов.

Задача

Помогите Диме доработать код. Напишите функцию, которая принимает на вход несортированный связный список и удаляет из него все дубликаты.

Делитесь в комментариях своими ответами! А мы в Академии Selectel показываем два решения и сравниваем сложность каждого способа.

Теги:
Всего голосов 28: ↑28 и ↓0+31
Комментарии1
Спасибо за подсказку, pre-commit
Спасибо за подсказку, pre-commit

Привет, я Иван Елфимов, Developer Advocate в Островке. Расскажу про самые полезные open source решения, которые использую я сам и Команда партнерских интеграций.

  • Вообще, трудно назвать не open source решение, которое бы использовал Островок в своей разработке. Используем большей частью опенсорс с подходящими лицензиями.

  • Один из самых малоизвестных и узкопрофильных компонентов, который мы используем: django-chronograph. Это приложение, позволяющее запускать management-команды из админки. Эта библиотека давно не поддерживается, поэтому мы форкнули её к себе доработали. Возможно когда-нибудь выложим в Open Source.

  • Компания Astral создает (точнее пересоздает) отдельные инструменты для питона на языке Rust, заставляя их работать в разы быстрее. Мы уже начали пользоваться и ruff и uv.

  • Личная рекомендация от меня: pre-commit. Инструмент очень мощный и полезный, хотя даже там встречается юмор от разработчиков. К примеру, скрипт проверки кода на случайно оставленный print называется «oops, I print it again!»

  • Островок готовит к выпуску свой техрадар. Пока он работает в закрытом режиме только для сотрудников, но в планах вынести его наружу. В техрадаре будет информация о библиотеках, прошедших через тесты команды Островка. Они будут сгруппированы по направлениям (frontend, backend, ios/android, аналитика, QA, devops) и каждая из библиотек будет иметь свою стадию: adopt, trial, assess и hold.

Теги:
Всего голосов 19: ↑11 и ↓8+3
Комментарии5

Привет, я Иван Елфимов, Developer Advocate в Ostrovok.ru. Расскажу про наш переход на Django 5.0.

4 марта вышел третий security release, когда мы обычно переходим на новые версии библиотек. Мы были готовы к переходу: проверили на декабрьском 5.0.0. что могло сломаться. Из-за некоторых обновлений нам пришлось менять код:

  • Раньше мы использовали nulls_last=False. Теперь nulls_first и nulls_last могут быть True или None, поэтому в некоторых местах вместо значений по умолчанию теперь nulls_last = None:

  - nulls_last = False
  + nulls_last = None
    if ordering_by == OrderingField.FIELD_START_AT:
        nulls_last = True
  • В сигналах появился новый тип асинхронных ресиверов  (async_receivers), мы добавили его во вспомогательный класс SignalBlocker, которым временно выключаем сигналы.

  • Теперь надо явно указывать USE_TZ = False, но это не проблема, мы не используем таймзоны в нашем сервисе.

  • Если после refresh_from_db надо дальше по коду использовать закешированные значения из базы данных, появился такой хак:

my_model_obj._meta.private_fields = []
my_model_obj.refresh_from_db()

Новинка, которой воспользуемся в будущем, — расчетные поля по умолчанию (default) в БД. Есть сценарии, где нужно, чтобы поле по умолчанию было не скаляром, а содержало расчётное значение на основе других полей.

Теги:
Всего голосов 16: ↑14 и ↓2+12
Комментарии6

Питонисты! В 19:00 начинаем транслировать Selectel Python Meetup.

Присоединяйтесь к митапу, задавайте вопросы спикерам и общайтесь в чате с коллегами, работающими с сетевыми технологиями.

Смотрите трансляцию прямо в этом посте или переходите на YouTube.

Теги:
Всего голосов 8: ↑8 и ↓0+8
Комментарии0

Ближайшие события

ЭФФЕКТ ДОПЛЕРА против БРЮСА ЛИ - для теста нужен лишь Андроид

Этот пост - предвварительная проверка идеи или концепта и, может быть, НИОКР и/или попытка предварительного анализа востребованности, реакции читателей Хабра.

Концепт приложения для "диванных" каратистов - измерение скорости удара

Навеяно старым приложением (сейчас не могу его найти в google play) от известного бойца ММА. Старое видео на youtube >> Quinton "Rampage" Jackson demos his new app Rampage Punch

Приложение Джексона использовало интегрирование показаний акселерометра. Это проблемы с низкой частотой сэмплирования (не все хорошо по Найквисту-Котельникову), ограниченным динамическим диапазоном, калибровкой и дрейфом.

Существуют игровые автоматы для измерения силы удара. Но с ними есть проблема.

Известный боец смешанных единоборств Конор Макгрегор рассмешил фанатов своим ударом по силомеру. Об этом сообщило издание Tengri Sport. Ирландская звезда ММА решил показать сокрушительную мощь удара, но выбил лишь 1 очко из 999 возможных. >> Видео - лучшая анти-реклама измерителя силы удара

Я попробовал сделать >> ВИДЕО прототип измерителя скорости удара на основе эффекта Доплера, particle FFT на python и/или готовых "кубиков" (других приложений)

Ничего не продается и не рекламируется. В законченном виде его не существует. Нигде ничего скачать нельзя.
Ничего не продается и не рекламируется. В законченном виде его не существует. Нигде ничего скачать нельзя.

Теги:
Всего голосов 6: ↑4 и ↓2+2
Комментарии7

28 марта в 19:00 мы проведем Selectel Python Meetup для разработчиков, техлидов и тимлидов разработки. Соберем экспертов из Selectel, Банка Точка и Yandex.Cloud. Обсудим «еще один» быстрый фреймворк, плюсы и минусы чистой архитектуры, опыт перехода с Python на Go.

Темы докладов:

  • «Черная овечка на фоне FastAPI»,

  • «Слоистая архитектура в Python-приложениях: гибкость кода vs оптимизация»,

  • «Перешел с Python на Go. Лучше стало?».

Регистрируйтесь на митап — будем ждать вас в онлайн-трансляции или в офисе Selectel.

Регистрация →

Теги:
Всего голосов 7: ↑7 и ↓0+7
Комментарии0

OpenAI блокирует доступ к своим продуктам на территории РФ. В какой-то момент стало невозможным открыть даже документацию.

Доступ через VPN пока работает, но мы с друзьями подумали, что это неудобно, и опубликовали документацию OpenAI у себя:

https://openai-docs.ru

Более того, с помощью GPT-4 мы перевели содержание на русский язык и где возможно, заменили ссылки на дополнительные статьи (Wikipedia и подобные) на русскоязычные версии. За бесплатный доступ к GPT-4 для нашего проекта благодарим  ProxyAPI — доступ к OpenAI API в России

Мы продолжаем работать над проектом, будем дополнять документацию время от времени. Но уже сейчас все основные методы и гайды у нас доступны. Приглашаем всех желающих ознакомиться!

Теги:
Всего голосов 11: ↑11 и ↓0+11
Комментарии5

Обработка исключений в Python: только новое исключение

def divide(x=1, y=0):
    try:
        return x / y
    except ZeroDivisionError:
        raise ValueError("Pattern 3 error.") from None
divide()

Отличие от простого вызова нового исключения, использование from None подавляет исходное исключение ZeroDivisionError. В данном случае трассировка не будет включать исходную ошибку ZeroDivisionError, а только исключение ValueError и сообщение об ошибке. Это полезно, когда вы хотите скрыть от пользователя детали исходного исключения или внутреннее исключение используемой библиотеки:

try:
  # библиотека, в которой могут быть внутренние исключения
    result = library_function(data) 
except InternalException as e:
    raise ExternalException("An error has occurred") from None

В данном примере мы дополнительно ловим внутреннее исключения библиотеки library_function, но вызываем только ExternalException. Это может пригодиться, когда пользователям не нужно понимать или обрабатывать внутренние исключения этой библиотеки.

Частичный перевод этой статьи из блога jerrynsh.com

Теги:
Всего голосов 8: ↑8 и ↓0+8
Комментарии0

Обработка исключений в Python: новое исключение

def divide(x=1, y=0):
    try:
        return x / y # первый вызов исключения
    except ZeroDivisionError:
        raise ValueError("Pattern 2 error.") # повторный вызов, новое исключение

divide()

В этом примере вызывается новое исключение с сообщением, при этом сохраняется трассировка исходного исключения. Если возникает ошибка ZeroDivisionError, поднимается новая ошибка ValueError с пользовательским сообщением.

Этот паттерн полезен, когда вы хотите вызвать другой (более значимый) тип исключения, чтобы указать на конкретное состояние ошибки. При этом сохраняется трассировка исходного исключения.

Частичный перевод этой статьи из блога jerrynsh.com

Теги:
Всего голосов 3: ↑3 и ↓0+3
Комментарии0

Как передать 'enableVNC': True для selenoid при вызове webdriver.Remote на Python Selenium 4 и выше

На Selenium до 4 версии у webdriver.Remote был параметр desired_capabilities, который принимал словарь с настройками браузера для удалённого вызова.

Но начиная с версии 4 этот параметр устарел и перестал поддерживаться, вместо него теперь - options. И в них можно встроенными методами класса передать название браузера или его версию, но вот 'enableVNC': True потерялся.

Selenoid стал хитро поддерживать его на своей стороне через передачу разных параметров в словарике с ключом 'selenoid:options'. В нём можно передать и разрешение браузера по необходимости.

А теперь, собственно, сабж

from selenium import webdriver

webdriver.DesiredCapabilities.CHROME['selenoid:options'] = {'enableVNC': True}
options = webdriver.ChromeOptions()
driver = webdriver.Remote(command_executor=remote_server, options=options)

Теги:
Всего голосов 3: ↑3 и ↓0+3
Комментарии0

Полезные библиотеки Python список из более 100 мини - проектов⁠⁠

Всем привет! Хочу поделиться интересным сборником проектов от уровня "Hello World" до создания ботов WhatsApp.

Python-Mini-Projects — большой сборник(более 100) мини проектов на Python, подойдет как новичкам так и программистам с опытом.

На основе мини проектов можно делать свои более серьезные проекты или дорабатывать код))

Список всех мини программ сборника - клик

Сcылка на GitHub - клик

(Кстати если вы интересуетесь Python и хотите узнать больше об этом языке программирования, то приглашаю вас подписаться на мой канал! https://t.me/python_scrypt полезные материалы, уроки и новости из мира программирования)

Теги:
Всего голосов 10: ↑5 и ↓50
Комментарии0