🛠️ CRUDAdmin — генератор админок на Python за минуты
🔹 Поддержка Flask и FastAPI
🔹 Автоматическая генерация CRUD-интерфейсов
🔹 Простая настройка и кастомизация форм
🔹 Поддержка авторизации и управления доступом
🔹 Пагинация, поиск, фильтры — всё из коробки
📦 Установка:
🔗 GitHub
@pythonl
crudadmin
— это фреймворк на Python для моментальной генерации интерфейсов на основе SQLAlchemy-моделей.🔹 Поддержка Flask и FastAPI
🔹 Автоматическая генерация CRUD-интерфейсов
🔹 Простая настройка и кастомизация форм
🔹 Поддержка авторизации и управления доступом
🔹 Пагинация, поиск, фильтры — всё из коробки
📦 Установка:
pip install crudadmin
🔗 GitHub
@pythonl
Forwarded from Machinelearning
Теперь у всех есть пример, как сделать продакшн-агентов с маршрутизацией, безопасностью и интерфейсом — от запроса до ответа.
Что это такое:
• Многоагентная система для поддержки клиентов (например: бронирование мест, отмена рейса, статус рейса, FAQ)
• Демка написана на Python + Next.js
• Использует OpenAI Agents SDK
• Встроены guardrails: защита от неуместных запросов и попыток обхода правил
• UI: внутри готовый интерфейс чат-бота
Как работает:
1. Пользователь пишет запрос
2. Система выбирает подходящего агента (например, `SeatBooking`)
3. Агент отвечает или передаёт диалог другому
4. Есть fallback на человека, если нужно
Как запустить:
# Backend
cd python-backend
python -m venv .venv && source .venv/bin/activate
pip install -r requirements.txt
uvicorn api:app --reload --port 8000
# Frontend
cd ui
npm install
npm run dev
Далее открываем:
https://localhost:3000
Особенности
• MIT-лицензия — можно адаптировать под свои задачи
• Удобно расширять: добавлять новых агентов, инструменты, правила
• Простой код, всё задокументировано
• Рабочий кейс от OpenAI
🔗 GitHub: github.com/openai/openai-cs-agents-demo
Если вы хотите собрать систему из агентов — это отличная точка старта.
@ai_machinelearning_big_data
#chatgpt #openai #aiagents #ai
Please open Telegram to view this post
VIEW IN TELEGRAM
Иногда проще показать, как не надо, чем объяснять, как надо.
Вот список «правил», которые помогут вам гарантированно испортить любой Python-проект.
1. 🔒 Используйте непонятные имена переменных
Называйте переменные
x
, y
, a
, thing
. Абстракция — залог путаницы.
def f(x, y, z=None):
a = x * 2
b = y + a if z else y - a
c = [i for i in range(a) if i % 2]
return sum(c) + b
2.🧠 Пихайте максимум логики в одну строку
Сложные тернарные выражения и вложенные list comprehension — всё в одной строке.
result = [x if x > 0 else (y if y < 0 else z) for x in data if x or y and not z]
3.⚠️ Используйте eval() и exec()
Это медленно, небезопасно и глупо — но зато эффектно.
eval("d['" + key + "']")
4.🔁 Переиспользуйте переменные с разными типами
Пусть одна переменная будет и строкой, и числом, и списком — динамическая типизация же!
value = "42"
value = int(value)
value = [value] * value
5.🌍 Используйте глобальные переменные
Изменяйте состояние приложения откуда угодно. Особенно изнутри функций.
counter = 0
def increment():
global counter
counter += 1
6.🔮 Используйте магические числа и строки
Без пояснений. Пусть коллеги гадают, почему именно 42 или "xyz".
if user.role == "xyz" and user.level > 42:
access_granted()
7.📏 Игнорируйте стиль и отступы
Никаких PEP8, никаких правил. Пиши, как хочешь.
def foo():print("start")
if True:
print("yes")
else:
print("no")
8.🧱 Копируйте код из Stack Overflow, не вникая
Ctrl+C — это тоже разработка.
def complex_logic(x):
return (lambda y: (lambda z: z**2)(y + 1))(x)
9.🧩 Придумывайте абстракции без надобности
Вместо простой функции — классы, фабрики и стратегии.
class HandlerFactory:
def get_handler(self):
class Handler:
def handle(self, x): return x
return Handler()
10. 💤 Добавляйте мёртвый код
Никогда не удаляй — вдруг пригодится. И пусть он грузится в каждый запуск.
def legacy_feature():
print("This feature is deprecated")
return
# нигде не вызывается
11.🔀 Не пишите документацию
Комментарии только мешают. Кто захочет — разберётся.
def a(x): return x+1
12.🧪 Пиши без тестов
Если код работает — зачем его проверять?
# Просто запускай и смотри глазами
process_user(data)
13. 🤖 Не используй AI и автодополнение
Только ручной кодинг, без подсказок. Ошибки — путь мастера.
🧠 Заключение
Все эти советы — примеры того, как не стоит писать код.
Если вы узнали себя — пора остановиться. Ведь Python задуман как язык, где важна читаемость, простота и явность.
"Beautiful is better than ugly.
Explicit is better than implicit.
Readability counts."
— The Zen of Python
@pythonl
Please open Telegram to view this post
VIEW IN TELEGRAM
Что отличает настоящих профессионалов в аналитике данных?
Настоящие профессионалы в аналитике данных выделяются не просто техническими навыками, а глубоким пониманием бизнес-контекста. Они видят, как сухие цифры превращаются в стратегические решения, влияющие на прибыль компании и ее развитие.
Многие зацикливаются на изучении инструментов, упуская из виду главное — для чего эти инструменты нужны. Можно идеально владеть Python и SQL, но так и не научиться решать реальные бизнес-задачи.
Где учат аналитике, которая нужна бизнесу? В магистратуре НИУ ВШЭ и Karpov Courses «Аналитика больших данных». Посмотрите бесплатный вводный курс и узнайте, как строится программа и что даст вам диплом..
Спикеры курса — эксперты с реальным опытом: Анатолий Карпов (ex-VK, самый популярный эксперт в сфере аналитике, по данным NEWHR), Нерсес Багиян (Head of DS в Raiffeisen CIB) и другие.
Реклама. ООО "КАРПОВ КУРСЫ". ИНН 7811764627. erid: 2W5zFJaLkFa
Настоящие профессионалы в аналитике данных выделяются не просто техническими навыками, а глубоким пониманием бизнес-контекста. Они видят, как сухие цифры превращаются в стратегические решения, влияющие на прибыль компании и ее развитие.
Многие зацикливаются на изучении инструментов, упуская из виду главное — для чего эти инструменты нужны. Можно идеально владеть Python и SQL, но так и не научиться решать реальные бизнес-задачи.
Где учат аналитике, которая нужна бизнесу? В магистратуре НИУ ВШЭ и Karpov Courses «Аналитика больших данных». Посмотрите бесплатный вводный курс и узнайте, как строится программа и что даст вам диплом..
Спикеры курса — эксперты с реальным опытом: Анатолий Карпов (ex-VK, самый популярный эксперт в сфере аналитике, по данным NEWHR), Нерсес Багиян (Head of DS в Raiffeisen CIB) и другие.
Реклама. ООО "КАРПОВ КУРСЫ". ИНН 7811764627. erid: 2W5zFJaLkFa
🎨 MonsterUI — стильный UI для FastHTML на Python (от Answer.AI)
MonsterUI — это высокоуровневый слой поверх FastHTML, который позволяет быстро создавать красивые веб-интерфейсы на чистом Python без писанины HTML/CSS.
⚙️ Проблема
FastHTML и так упрощает фронтенд, но стильность UI требует громоздких классов или CSS-фреймворков (Tailwind, Bootstrap).
MonsterUI решает это, предоставляя готовые компоненты и умные настройки по умолчанию.
✨ Главные возможности
• Полюбившиеся Tailwind/FrankenUI/DaisyUI скрылки под капотом
• Удобные базовые компоненты:
• Семантический текст и стили (H1, P, Blockquote, etc.), оформленные по умолчанию
• Умные layout-хелперы:
• «Высокоуровневые» компоненты: навбар, модалка, таблицы — готовые шаблоны
• Автоматический рендер Markdown и подсветка кода
• Темы с выбором цветовой схемы, поддержкой light/dark режимов
🚀 Пример компонента
Всё чисто, семантично, без CSS-уродства и классов.
🔧 Старт
✅ Преимущества:
• Быстрый старт с современным UI
• Чистый, читаемый Python-код
• Гибкость в кастомизации через Tailwind
• Подтверждённая пригодность в продакшене
🔗 Подробнее: https://www.answer.ai/posts/2025/01/15/monsterui.html
@pythonl
#Python #WebDev #FastHTML #MonsterUI #Tailwind #HTMX #UI #OpenSource
MonsterUI — это высокоуровневый слой поверх FastHTML, который позволяет быстро создавать красивые веб-интерфейсы на чистом Python без писанины HTML/CSS.
⚙️ Проблема
FastHTML и так упрощает фронтенд, но стильность UI требует громоздких классов или CSS-фреймворков (Tailwind, Bootstrap).
MonsterUI решает это, предоставляя готовые компоненты и умные настройки по умолчанию.
✨ Главные возможности
• Полюбившиеся Tailwind/FrankenUI/DaisyUI скрылки под капотом
• Удобные базовые компоненты:
Button
, Card
, LabelInput
и др. • Семантический текст и стили (H1, P, Blockquote, etc.), оформленные по умолчанию
• Умные layout-хелперы:
DivVStacked
, Grid
, DivFullySpaced
и другие • «Высокоуровневые» компоненты: навбар, модалка, таблицы — готовые шаблоны
• Автоматический рендер Markdown и подсветка кода
• Темы с выбором цветовой схемы, поддержкой light/dark режимов
🚀 Пример компонента
def TeamCard(name, role, location="Remote"):
icons = ("mail", "linkedin", "github")
return Card(
DivLAligned(
DiceBearAvatar(name, h=24, w=24),
Div(H3(name), P(role))),
footer=DivFullySpaced(
DivHStacked(UkIcon("map-pin", height=16), P(location)),
DivHStacked(*(UkIconLink(icon, height=16) for icon in icons))))
Всё чисто, семантично, без CSS-уродства и классов.
🔧 Старт
pip install MonsterUI
from fasthtml.common import *
from monsterui.all import *
app, rt = fast_app(hdrs=Theme.blue.headers())
@rt
def index():
return Card(H1("Hello MonsterUI"), P("Приложение готово!"))
serve()
✅ Преимущества:
• Быстрый старт с современным UI
• Чистый, читаемый Python-код
• Гибкость в кастомизации через Tailwind
• Подтверждённая пригодность в продакшене
🔗 Подробнее: https://www.answer.ai/posts/2025/01/15/monsterui.html
@pythonl
#Python #WebDev #FastHTML #MonsterUI #Tailwind #HTMX #UI #OpenSource
🐍 Python-задача: что выведет этот код с вложенными генераторами?
🔍 Варианты:
• a)
• b)
• c)
• d)
💡 Разбор:
- `gen = (x for x in range(3))` — генератор 0, 1, 2
- `wrap(gen)` — создаёт **новый генератор**, который берёт значения из `gen` и умножает на 2
Но генераторы **исчерпаемы**: после первого полного прохода `list(gen)` → `gen` становится пустым
Значит:
- `list(gen)` → `[0, 1, 2]`
- `gen2 = wrap(gen)` теперь ссылается на **пустой** `gen`
- `list(gen2)` → `[]`
✅ **Правильный ответ: b) `[0, 1, 2]`, `[]`**
🧠 **Вывод:** если оборачиваешь генератор — не "прожигай" его до передачи дальше. Генераторы нельзя перезапустить или "перемотать".
🛠️ Совет: если данные нужны повторно — сохрани их в список:
``` python
data = list(gen)
```
или используй для разветвления итератора.
@pythonl
gen = (x for x in range(3))
def wrap(g):
return (x * 2 for x in g)
gen2 = wrap(gen)
print(list(gen))
print(list(gen2))
🔍 Варианты:
• a)
[0, 1, 2]
, [0, 2, 4]
• b)
[0, 1, 2]
, []
• c)
[]
, [0, 2, 4]
• d)
[0, 1, 2]
, Ошибка💡 Разбор:
- `wrap(gen)` — создаёт **новый генератор**, который берёт значения из `gen` и умножает на 2
Но генераторы **исчерпаемы**: после первого полного прохода `list(gen)` → `gen` становится пустым
Значит:
- `list(gen)` → `[0, 1, 2]`
- `gen2 = wrap(gen)` теперь ссылается на **пустой** `gen`
- `list(gen2)` → `[]`
✅ **Правильный ответ: b) `[0, 1, 2]`, `[]`**
🧠 **Вывод:** если оборачиваешь генератор — не "прожигай" его до передачи дальше. Генераторы нельзя перезапустить или "перемотать".
🛠️ Совет: если данные нужны повторно — сохрани их в список:
```
data = list(gen)
```
itertools.tee
This media is not supported in your browser
VIEW IN TELEGRAM
alphaXiv упрощает работу с научными статьями (arXiv, bioRxiv, PDF):
● чат с ИИ прямо в документе: выделение текста открывает диалог
● ссылки на другие статье через “@” для быстрого вызова статей
● позволяет генерировать блог одним кликом: иллюстрации к статьям, ключевые идеи, перевод
● закладки и автоматические BibTeX-цитаты для хранения и ссылок
https://chromewebstore.google.com/detail/alphaxiv-understand-resea/liihfcjialakefgidmaadhajjikbjjab
@pythonl
Please open Telegram to view this post
VIEW IN TELEGRAM
Первая часть - Как написать худший возможный Python-код здесь.
Если тебе показалось, что хуже уже некуда — ты просто не включал всё сразу.
Вот продолжение правил, которые гарантируют страдания будущих читателей твоего кода.
14. Используй side‑effects везде
Изменяй список внутри функции, возвращай
None
, пусть никто не знает, что произошло.
def corrupt(data):
for i in range(len(data)):
data[i] = None
15. Ломай SRP (Single Responsibility Principle)
Пусть одна функция отправляет запрос, пишет лог, делает retry, парсит ответ и сохраняет в БД.
def handle_user_request(request):
log_request(request)
try:
response = requests.post(...)
save_to_db(json.loads(response.text)["data"])
except:
retry_later(request)
16. Используй вложенные функции ради хаоса
Функции в функциях в функциях. Замыкания? Да, но не ради пользы, а ради анархии.
def outer():
def middle():
def inner():
print("deep")
inner()
middle()
17. Импортируй всё звёздочкой
Пусть никто не знает, откуда приходят функции. Магия.
from somewhere.unknown import *
18. Используй случайную логику
Добавь random в бизнес-функции. Почему бы и нет?
import random
def calculate_discount():
return random.choice([0, 5, 10, 50])
19. Используй структуры не по назначению
Сохраняй все данные в строках. JSON, XML, дата, числа — всё строкой.
user = {
"name": "Alice",
"age": "27",
"is_active": "true",
"joined": "2023-12-01"
}
20. Игнорируй ошибки
Тихо, мирно, try/except без except. Или просто pass. Не паникуй.
try:
do_critical_operation()
except:
pass
21. Логируй всё подряд
Каждый шаг. Каждую переменную. Каждую мысль.
print("entering loop")
print("value of x:", x)
print("loop end")
22. Используй глобальные настройки через переменные
Никаких config-файлов. Пусть все настройки — глобальные переменные.
DEBUG_MODE = True
RETRY_COUNT = 3
23. Пиши асинхронный код синхронно
async с time.sleep, await с requests.get. Главное — выглядеть современно.
import time
async def fetch_data():
time.sleep(3)
return "data"
24. Храни всё в одной функции
1000 строк? Один def main(). Абсолютно всё. Другие функции — для слабаков.
def main():
# 600 строк бизнес-логики
pass
🧠 Заключение
Если ты следуешь этим правилам — ты либо пишешь код, который никто не осмелится менять,
либо работаешь на тёмной стороне. Но лучше всё же пересмотреть подход.
"Simple is better than complex.
Complex is better than complicated.
Readability counts."
— The Zen of Python
@pythonl
Please open Telegram to view this post
VIEW IN TELEGRAM
📦 InvenTree — умная система учета для мастерских и инженерных проектов. Этот open-source инструмент — достойная замена Excel, которая поможет вам перестать страдать от перегруженных корпоративных систем.
Инструмент предлагает продуманный баланс между простотой и функциональностью: отслеживание деталей, управление несколькими складами, работа с партиями и серийными номерами — всё в одном месте.
📌 Особенности проекта:
— Гибкая интеграция через REST API и Python-модули
— Мобильные приложения для iOS/Android со сканированием штрих-кодов
— Плагинная система для кастомизации под конкретные нужды
— Простой деплой — от Docker до однострочной установки на Linux
🤖 GitHub
@pythonl
Инструмент предлагает продуманный баланс между простотой и функциональностью: отслеживание деталей, управление несколькими складами, работа с партиями и серийными номерами — всё в одном месте.
📌 Особенности проекта:
— Гибкая интеграция через REST API и Python-модули
— Мобильные приложения для iOS/Android со сканированием штрих-кодов
— Плагинная система для кастомизации под конкретные нужды
— Простой деплой — от Docker до однострочной установки на Linux
🤖 GitHub
@pythonl