Как стать автором
Обновить
481.53

Python *

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

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

Автоклейм токенов в Hamster Kombat и HOT Wallet

Возможно я уже кому-то надоел своими попытками автоматизации всякого web3 скама (а может и нет), но в этот раз я написал небольшую, и очень легковесную программу, которая занимается автоматическим клеймом токенов в Hamster Kombat и HOT Wallet. И, как начинающий программист, я не могу не поделиться своим 'шедевром'.

Функционал прост, раз в несколько часов она шлет POST-запросы на API указанных проектов и таким образом собирает монеты, плюс раз в час протапывает хомяка. Всё работает на обычных реквестах, так что для работы программы хватит ресурсов калькулятора. Возможно, кому-то будет интересно, как это работает, да и функционал можно значительно расширить под все возможные ресурсы API.

Репозиторий - autoclaimer

Пулл реквесты приветствуются.

Теги:
0
Комментарии0

Самый быстрый и простой способ развернуть докер контейнер со своим Python проектом.

Привет. Для того чтоб воспользоваться данным способом у вас должен быть:

  1. VPS сервер

  2. Написанный Python проект

  3. Установленный на сервере Docker

  4. Аккаунт на GitHub

Небольшие настройки.

Для начала в корне проекта необходимо создать Dockerfile. Вот мой пример:

FROM python

WORKDIR /usr/src/app

# Копируем и устанавливаем зависимости Python
COPY requirements.txt ./
RUN pip install --no-cache-dir -r requirements.txt

# Копируем все файлы из текущей директории в рабочую директорию контейнера
COPY . .

# Команда запуска контейнера
CMD ["/bin/bash", "-c", "python aiogram_run.py"]
  • Помещаем все данные проекта на свой репозиторий GIT.

  • Заходим на VPS сервер.

  • Создаем там папку

  • Выполняем PULL проекта с GitHub

  • Создаем свой именной образ:

docker build -t my_image_name .
  • Запускаем контейнер:

docker run -it -d --env-file .env --restart=unless-stopped --name container_name my_image_name

В данном примере я запускал телеграмм бота. Он использовал файл .env. Тут вы видите, как привязать env-file к рабочему контейнеру.

Для того чтоб посмотреть на консоль бота достаточно выполнить команду:

docker attach container_name

Для выхода из интерактивного режима воспользуйтесь комбинацией клавиш CTRL+P, CTRL+Q.

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

Теги:
+2
Комментарии0

Просто шутка.
Я уже 20 лет плохо сплю (ПТСР), и люблю засыпать под музыку/фильмы/лайв стримы/аудиокниги и пр. Но иногда оно меня будит по ночам. Решил исправить ситуацию. Написал коротенький скрипт, который постепенно сводит звук на ноль:

import re
import subprocess
from time import sleep


LOOK_FOR = re.compile(r'\[(\d+\%)\]')


def decrease_volume(percent) -> int:
    info = subprocess.check_output(
        ['amixer', '-D', 'pulse', 'set', 'Master', f'{percent}%-'],
    ).decode('utf-8')
    return int(LOOK_FOR.findall(info)[0][:-1])


def main() -> None:
    while True:
        print(f'Volume = {decrease_volume(1)}')
        sleep(10.0)


if __name__ == '__main__':
    main()

Ну, забавно, что постепенное затихание даже немного помогает заснуть. Я - на боковую. Всем спокойной ночи

Теги:
+9
Комментарии6

Возможно кому-то пригодится библиотека с общим интерфейсом к разным DSP (те которые "A demand-side platform"). PyPi - https://pypi.org/project/targeting-platform/

Пока реализовано только для Google DV360, Meta и The Trade Desk (TTD) получение каталогов плейсментов. В ближайшее время будет и непосредственно управление targeting на основе геоинформации (Uber H3 и lat/lng). Библиотека не решает проблемы выбора аудитории, она только поможет универсально выставлять таргетирование по локации и времени.

Библиотека это переосмысление более чем года работы на коммерческом проекте (код для всех операций уже есть - вопрос переноса в Open Source только вопрос времени). Будет дополнена документации и возможно пример приложения, но на данном этапе как это использовать можно увидеть в интеграционных тестах.

Область применения достаточно специфическая и требует наличия доступов к платформам. Получить самим (индивидуально) такие доступы можно только к Meta; DV360 и TTD только через Technical Account Manager платформ (только если вы уже такие имеете - сможете их использовать).

Пока комментарии и пожелания не принимаются :), но будут учитываться. (Сейчас это полностью синхронная библиотека, реализация максимально ориентировано на работоспособность, а не показать "как я пишу идеальный код". Если будет кем-либо использоваться библиотека, то реализация получит развитие и улучшения, и возможно новые DSP.)

Теги:
+3
Комментарии0

Энтузиаст с помощью отладчика Telink RP2040 запустил Micropython на невероятно дешёвых умных часах LT716 за $3.

Устройство работает на процессоре Telink TC32 с тактовой частотой 24 МГц, имеет 512 КБ флэш-памяти и 16 КБ ОЗУ, оснащено экраном разрешением 80x160, поддерживает BLE.

Теги:
+4
Комментарии0

Обновление библиотеки asyncpg-lite до версии 0.3.1.1

Рад сообщить, что библиотека asyncpg-lite обновлена до версии 0.3.1. Все предыдущие версии были удалены и больше не доступны для установки. Для корректной работы, пожалуйста, удалите старые версии с помощью следующей команды:

pip uninstall asyncpg-lite

Чтобы установить последнюю версию, используйте:

pip install --upgrade asyncpg-lite

Актуальная версия: 0.3.1.1

Вы можете найти страницу библиотеки на GitHub по следующему адресу: asyncpg-lite на GitHub.

Что нового в версии 0.3.1.1

В этой версии все методы библиотеки были переписаны. Если ранее библиотека работала исключительно с чистым asyncpg, то теперь asyncpg используется как асинхронный драйвер для взаимодействия с PostgreSQL, а все запросы выполняются через SQLAlchemy.

Причины обновления

Основная причина переписывания библиотеки — улучшение безопасности. Старые версии имели определенные уязвимости, которые теперь устранены.

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

Благодарю за ваше внимание и поддержку!

Теги:
+3
Комментарии0

Все те кто пользовался библиотекой asyncpg-lite. Сообщаю, что завтра вечером будет выпущено обновление библиотеки asyncpg-lite. В новой версии библиотека будет полностью переписана с использованием SQLAlchemy и asyncpg (в старой версии использовался чистый asyncpg), при этом базовый синтаксис останется практически неизменным.

Такое решение принято из-за ограничений чистого asyncpg в предотвращении SQL-инъекций. Вместо разработки собственного решения я решил воспользоваться проверенными инструментами ORM, которые предоставляет SQLAlchemy, но, при этом, я постарюсь максимально сохранить ту простоту в использовании, которая была в старых версиях asyncpg-lite.

Начиная с версии asyncpg-lite 0.3, библиотека будет основываться на SQLAlchemy и драйвере asyncpg для работы с PostgreSQL. Версии ниже 0.3 будут сняты с доступности для скачивания и установки с завтрашнего дня.

С выходом asyncpg-lite 0.3 настоятельно рекомендуем удалить старые версии библиотеки и установить актуальную.

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

Благодарю за внимание! 🚀

Теги:
+3
Комментарии0

Защищенный контент в 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)

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

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

Теги:
+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() 

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

Теги:
+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

Создание фейковых данных пользователя на русском языке с использованием 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', чтобы генерировать данные на русском языке. Результат будет включать в себя все необходимое для тестирования ваших приложений и сервисов.

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

Теги:
+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 (так как число не найдено)

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

Теги:
+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
Комментарии3

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

Summer Merge
Дата28 – 30 июня
Время11:00
Место
Ульяновская область

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

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

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

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

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

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

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

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

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

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

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

Теги:
+3
Комментарии0

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

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

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

Теги:
+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.

Теги:
Всего голосов 20: ↑11 и ↓9+2
Комментарии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

Вклад авторов

Работа

Python разработчик
133 вакансии
Data Scientist
83 вакансии