🧩 Удобная библиотека для логирования с контекстом
Unilogging упрощает процесс логирования в Python-приложениях, используя Dependency Injection для управления контекстом логов. Это позволяет легко отслеживать события, связанные с конкретными запросами, без необходимости передавать данные через все уровни приложения.
🚀Основные моменты:
- Логирование с использованием контекста для упрощения отслеживания запросов.
- Поддержка Dependency Injection для гибкости и удобства.
- Минимизация дублирования кода при передаче данных логирования.
- Интеграция с FastAPI и другими фреймворками.
📌 GitHub: https://github.com/goduni/unilogging
@pythonl
Unilogging упрощает процесс логирования в Python-приложениях, используя Dependency Injection для управления контекстом логов. Это позволяет легко отслеживать события, связанные с конкретными запросами, без необходимости передавать данные через все уровни приложения.
🚀Основные моменты:
- Логирование с использованием контекста для упрощения отслеживания запросов.
- Поддержка Dependency Injection для гибкости и удобства.
- Минимизация дублирования кода при передаче данных логирования.
- Интеграция с FastAPI и другими фреймворками.
📌 GitHub: https://github.com/goduni/unilogging
@pythonl
❤7👍4🔥2
Как обучить свою первую ML-модель — и не утонуть в теории?
Машинное обучение звучит сложно — пока вы не попробуете на практике. 24 ноября в 18:00 МСК на открытом уроке вы обучите модель для задачи классификации прямо во время занятия.
Разберём:
– как работает алгоритм дерева решений;
– как решать задачи классификации на Python;
– что нужно, чтобы перейти от экспериментов к реальной работе с ML.
Вы шаг за шагом создадите первую модель, увидите, как она принимает решения, и поймёте, как из простого кода рождается интеллект.
➡️ Открытый урок проходит в преддверии старта курса «Machine Learning. Basic». Регистрируйтесь — начните путь в Data Science с практики, а не с теории:
https://otus.pw/iOTK/?erid=2W5zFJdCjix
Реклама. ООО "ОТУС ОНЛАЙН-ОБРАЗОВАНИЕ". ИНН 9705100963.
Машинное обучение звучит сложно — пока вы не попробуете на практике. 24 ноября в 18:00 МСК на открытом уроке вы обучите модель для задачи классификации прямо во время занятия.
Разберём:
– как работает алгоритм дерева решений;
– как решать задачи классификации на Python;
– что нужно, чтобы перейти от экспериментов к реальной работе с ML.
Вы шаг за шагом создадите первую модель, увидите, как она принимает решения, и поймёте, как из простого кода рождается интеллект.
➡️ Открытый урок проходит в преддверии старта курса «Machine Learning. Basic». Регистрируйтесь — начните путь в Data Science с практики, а не с теории:
https://otus.pw/iOTK/?erid=2W5zFJdCjix
Реклама. ООО "ОТУС ОНЛАЙН-ОБРАЗОВАНИЕ". ИНН 9705100963.
❤8😁1
This media is not supported in your browser
VIEW IN TELEGRAM
⚡️ Хитрый трюк по работе со статикой
Если заранее посчитать ETag для статических файлов, сервер сможет мгновенно отвечать 304 Not Modified без чтения с диска. Это резко ускоряет отдачу статики на Python.
Если заранее посчитать ETag для статических файлов, сервер сможет мгновенно отвечать 304 Not Modified без чтения с диска. Это резко ускоряет отдачу статики на Python.
import os, hashlib
from http.server import SimpleHTTPRequestHandler, HTTPServer
STATIC = "static"
etag = {f: hashlib.md5(open(os.path.join(STATIC, f),"rb").read()).hexdigest()
for f in os.listdir(STATIC)}
class H(SimpleHTTPRequestHandler):
def end_headers(self):
name = self.path.lstrip("/")
if name in etag:
self.send_header("ETag", etag[name])
super().end_headers()
HTTPServer(("0.0.0.0", 8000), H).serve_forever()
❤17🔥5👍4😁3
This media is not supported in your browser
VIEW IN TELEGRAM
Чтобы сильно упростить очистку Python-кода, вынеси мелкие предикаты, фильтры и маппинги в именованные функции. Это делает пайплайны короче, уменьшает вложенность и ускоряет отладку. Такой приём особенно полезен, когда список операций растёт и становится нечитаемым. Подписывайся, больше фишек каждый день !
def is_valid(user):
return user.get("active") and user.get("role") != "banned"
def normalize(user):
user["name"] = user["name"].strip().title()
return user
def enrich(user):
user["score"] = user.get("score", 0) + 10
return user
users = [... ] # внешний источник
cleaned = [enrich(normalize(u)) for u in users if is_valid(u)]
print(cleaned)
Please open Telegram to view this post
VIEW IN TELEGRAM
❤15👍7😁3🤩2
Эмма Смит и Кирилл Подопригора из core-team Python опубликовали предварительное предложение (Pre-PEP), в котором описывается план постепенного внедрения Rust в кодовую базу CPython.
На первом этапе Rust хотят использовать для необязательных модулей стандартной библиотеки, находящихся в каталоге Modules/.
Дальше — больше: если эксперимент окажется успешным, то к выходу Python 3.17 Rust может стать обязательной сборочной зависимостью. Это позволит улучшить безопасность, производительность и надёжность низкоуровневых частей интерпретатора.
Подробнее: https://peps.python.org/pep-0011/
@pythonl
Please open Telegram to view this post
VIEW IN TELEGRAM
❤15😱9👍5🔥3😁1
🚀 django-keel - мощный стартовый шаблон для Django-проектов
💡 Что это такое
Готовый современный каркас для Django-приложений, который позволяет запускать новый проект за минуты — с правильной архитектурой, CI, Docker и продуманной конфигурацией.
🔥 Что внутри
- Поддержка Python 3.12+ и Django 5.2+
- Несколько видов проектов: SaaS, API-backend, web-app, internal tools
- Docker + Docker Compose
- Настроенные линтеры, тесты, coverage и GitHub Actions
- 12-factor конфигурация, разделённые settings (dev/test/prod)
- Варианты API: DRF или GraphQL
- Поддержка фронта: Next.js или HTMX + Tailwind
🎯 Почему стоит использовать
- Экономит недели рутинной настройки
- Даёт единообразную и поддерживаемую архитектуру
- Ускоряет разработку MVP, внутренних сервисов и SaaS-продуктов
🛠 Быстрый старт
Репозиторий: https://github.com/CuriousLearner/django-keel
@pythonl
💡 Что это такое
Готовый современный каркас для Django-приложений, который позволяет запускать новый проект за минуты — с правильной архитектурой, CI, Docker и продуманной конфигурацией.
🔥 Что внутри
- Поддержка Python 3.12+ и Django 5.2+
- Несколько видов проектов: SaaS, API-backend, web-app, internal tools
- Docker + Docker Compose
- Настроенные линтеры, тесты, coverage и GitHub Actions
- 12-factor конфигурация, разделённые settings (dev/test/prod)
- Варианты API: DRF или GraphQL
- Поддержка фронта: Next.js или HTMX + Tailwind
🎯 Почему стоит использовать
- Экономит недели рутинной настройки
- Даёт единообразную и поддерживаемую архитектуру
- Ускоряет разработку MVP, внутренних сервисов и SaaS-продуктов
🛠 Быстрый старт
copier copy gh:CuriousLearner/django-keel my-project
Репозиторий: https://github.com/CuriousLearner/django-keel
@pythonl
❤9👍5🔥2
🚀 GigaChat Ultra & Lightning — новые MoE-модели от Сбера
💡 Что это такое
Две открытые модели нового поколения, обученные с нуля — без чужих весов. Созданы, чтобы ускорять разработку, уменьшать рутину и быть удобным напарником для разработчиков.
🔥 Что внутри
- Ultra: 702B параметров, контекст до 131k, стабильная работа экспертов
- Lightning: 10B параметров, контекст до 256k, лёгкая и быстрая
- Генерация нескольких токенов одновременно
- Экономия памяти, оптимизация KV-кеша
- Совместимость с Hugging Face, vLLM и SGLang
🎯 Почему стоит использовать
- Сбер снимает часть технических забот, чтобы сосредоточиться на экспериментах
- Ускоряет локальное прототипирование и работу с AI-помощниками
- Подходит для масштабных решений и небольших проектов
@pythonl
💡 Что это такое
Две открытые модели нового поколения, обученные с нуля — без чужих весов. Созданы, чтобы ускорять разработку, уменьшать рутину и быть удобным напарником для разработчиков.
🔥 Что внутри
- Ultra: 702B параметров, контекст до 131k, стабильная работа экспертов
- Lightning: 10B параметров, контекст до 256k, лёгкая и быстрая
- Генерация нескольких токенов одновременно
- Экономия памяти, оптимизация KV-кеша
- Совместимость с Hugging Face, vLLM и SGLang
🎯 Почему стоит использовать
- Сбер снимает часть технических забот, чтобы сосредоточиться на экспериментах
- Ускоряет локальное прототипирование и работу с AI-помощниками
- Подходит для масштабных решений и небольших проектов
@pythonl
❤13👍5🔥5
🚀 myfy - модульный Python-фреймворк с фронтендом «из коробки»
Зачем он нужен: FastAPI - идеален для API, но без нормального фронта.
myfy берёт лучшее из FastAPI и добавляет полноценную модульность, DI и встроенный UI.
🔥 Главное
- Модульная архитектура с жизненным циклом (`start/stop`)
- Type-based DI без скрытой магии
- Фронтенд сразу из коробки:
Jinja2 + DaisyUI + Tailwind + Vite + HMR
Можно делать UI без React/Vue, идеально для внутренних тулов
- Чистая структура проекта, минимум бойлерплейта
🚀 Быстрый старт
https://github.com/psincraian/myfy
@pythonl
Зачем он нужен: FastAPI - идеален для API, но без нормального фронта.
myfy берёт лучшее из FastAPI и добавляет полноценную модульность, DI и встроенный UI.
🔥 Главное
- Модульная архитектура с жизненным циклом (`start/stop`)
- Type-based DI без скрытой магии
- Фронтенд сразу из коробки:
Jinja2 + DaisyUI + Tailwind + Vite + HMR
Можно делать UI без React/Vue, идеально для внутренних тулов
- Чистая структура проекта, минимум бойлерплейта
🚀 Быстрый старт
pip install myfy
myfy init
myfy frontend init
myfy run
https://github.com/psincraian/myfy
@pythonl
❤16👍6🔥3😁2
This media is not supported in your browser
VIEW IN TELEGRAM
🔥 10 однострочных Python-функций, которые экономят время каждый день
Держи небольшой набор из 10 функций-однострочников, которые полезно просто закинуть в свой utils.py.
Они помогают быстро работать со списками, файлами, JSON, статистикой и частотами, без лишнего шума в коде.
Скопируй блок целиком и используй нужные функции по месту.
@pythonl
Держи небольшой набор из 10 функций-однострочников, которые полезно просто закинуть в свой utils.py.
Они помогают быстро работать со списками, файлами, JSON, статистикой и частотами, без лишнего шума в коде.
Скопируй блок целиком и используй нужные функции по месту.
from pathlib import Path
from collections import Counter
import json, statistics as stats
chunks = lambda it, n: [it[i:i + n] for i in range(0, len(it), n)]
flatten = lambda lst: [x for sub in lst for x in sub]
unique = lambda seq: list(dict.fromkeys(seq))
sliding = lambda it, n: [it[i:i + n] for i in range(len(it) - n + 1)]
freqs = lambda seq: Counter(seq)
read_text = lambda p: Path(p).read_text(encoding="utf-8")
write_text = lambda p, text: Path(p).write_text(text, encoding="utf-8")
read_json = lambda p: json.loads(Path(p).read_text(encoding="utf-8"))
write_json = lambda p, obj: Path(p).write_text(json.dumps(obj, ensure_ascii=False, indent=2), encoding="utf-8")
mean_std = lambda xs: (stats.mean(xs), stats.pstdev(xs))
@pythonl
❤8👍4🔥2😁2