Как сменить технологию и не закопаться в рефакторинге: опыт внедрения DDD в проект на FastAPI — Часть 2
https://ift.tt/8rYSbC2
Это вторая часть цикла о DDD. В ней расскажу, как добавить к проекту событийно-ориентированную архитектуру. Код подопытного приложения ищите в репозитории по ссылке.
Django: hoist repeated decorator definitions
https://ift.tt/utCnlpZ
Django provides us with a rich set of view decorators.In this post, we’ll look at a technique for hoisting repeated use of these decorators to reduce repetition.Repeated @cache_control callsHere are two public views with the same @cache_control decorator:from django.views.decorators.cache import cache_control@cache_control(max_age=60 * 60, public=True)def about(request): ...@cache_control(max_age=60 * 60, public=True)def contact_us(request): ...To avoid this repetition, we can call cache_control once at the top of the module and use that result as the decorator:from django.views.decorators.cache import cache_controlcache_public = cache_control(max_age=60 * 60, public=True)@cache_publicdef about(request): ...@cache_publicdef team(request): ...This works because cache_control is technically not a decorator but a function that returns a decorator.So we can separate the call of cache_control from the decorating.Aside from reducing redundant repetition, this technique also saves a tiny bit of time and memory when importing the module, because cache_control is only called once.Repeated @require_http_methods callsHere’s another example, instead using @require_http_methods:from django.views.decorators.http import require_http_methodsrequire_GET_POST = require_http_methods(("GET", "POST"))@require_GET_POSTdef contact_us(request): ...@require_GET_POSTdef store_feedback(request): ...(Actually, it would be neat if Django provided require_GET_POST out of the box…)Hoisting @method_decorator calls for class-based viewsThis technique is particularly beneficial for class-based views, where view decorators mostly need extra wrapping with method_decorator:from django.utils.decorators import method_decoratorfrom django.views.decorators.cache import cache_controlfrom django.views.generic import TemplateViewcache_public = method_decorator(cache_control(max_age=60 * 60, public=True))@cache_publicclass AboutView(TemplateView): ...@cache_publicclass TeamView(TemplateView): ...I also like to use this technique with decorators that don’t take arguments, such as the new @login_not_required from Django 5.1:from django.contrib.auth.decorators import login_not_requiredfrom django.utils.decorators import method_decoratorfrom django.views.generic import TemplateViewlogin_not_required_m = method_decorator(login_not_required, name="dispatch")@login_not_required_mclass AboutView(TemplateView): ...@login_not_required_mclass TeamView(TemplateView): ...I like adding an “m” suffix to the variable name to indicate that it’s a method decorator version of the original.Test decoratorsThis deduplication technique can also dramatically improve test readability, where many tests often need the same decorator applied.For example, third-party apps may mark version-restricted tests with unittest’s @skipIf or pytest’s @pytest.mark.skipif:from unittest import skipIfimport djangodjango_5_1_plus = skipIf(django.VERSION < (5, 1), "Django 5.1+ required")class AcmeAuthMiddlewareTests(TestCase): ... @django_5_1_plus def test_view_login_not_required(self): ... @django_5_1_plus def test_view_login_required(self): ...FinMay your decorators be DRYer than the Kalahari,—Adam
Обучающий телеграм бот. Пример задачника по математике
https://ift.tt/Oa9HwNn
Рассмотрим вариант телеграм бота, представляющего собой фрагмент задачника по математике для 4 класса.
WindowsHostsManager: Консольная утилита для работы с файлом hosts в Windows на Python
https://ift.tt/yEUzkWc
Иногда возникает необходимость внести изменения в файл hosts в Windows. Вместе с этой потребностью родилась идея создать небольшую утилиту на Python, которая бы упростила процесс редактирования этого файла. В результате появился WindowsHostsManager — инструмент, созданный всего за 30 минут и предназначенный для удобного управления файлом hosts.
Автоматизация сканирования открытых сетевых портов
https://ift.tt/EbLwUIH
С ростом числа кибератак и угроз безопасности информационных систем автоматизация процесса анализа уязвимостей становится критически важной задачей.С ростом объемов обрабатываемых данных, расширения информационных систем, сервисов и приложений возникает все больше проблем с точки зрения информационной безопасности. Исходя из этого встает острый вопрос о том, как это все контролировать, и преждевременно предотвращать угрозы информации.
Задача коммивояжёра в общем виде. Наибыстрейшее точное решение
https://ift.tt/li3pXWm
Эта работа является заключением пятилетнего марафона по поиску самого быстрого способа нахождения минимального точного решения для задачи коммивояжёра в общем виде.Тут я хочу подытожить все опробованные подходы и выбрать лучший по моему мнению.
#python #pydigest
IT-новости про Python перед вами.
Часть материалов из выпуска Python Дайджест:
- Винтик и Шпунтик осваивают квантовые вычисления
- Страсти опенсорса: мафия, стилеры и багхантинг проектов
- Как ускорить A/B тесты: несколько способов
- Проблемы вызова Python кода из C кода
- Шлепа — Большой Русский Бенчмарк
- Апи версионирование по-взрослому
- PromptMage - LLM Workflows
- Wave - Create Web Apps with Python
Заходите в гости - https://pythondigest.ru/issue/560/
Talk Python to Me: #476: Unified Python packaging with uv
https://ift.tt/5olbFiU
Audio
Страсти опенсорса: мафия, стилеры и багхантинг проектов «Яндекса»
https://ift.tt/d6hBugk
За последние две недели в Python Package Index произошло много занятного. Мы вооружились вердиктами модели машинного обучения сервиса PT PyAnalysis, дабы рассказать вам об интересных сработках.
Кратко про low-code библиотеку для ML Pycaret
https://ift.tt/azH14td
PyCaret — это open-source библиотека, которая предлагает low-code подход к созданию, обучению и внедрению моделей ML. Она позволяет провести весь процесс — от подготовки данных до развертывания модели в продакшн — всего за несколько строк кода.
cffi - 1.17.1
https://ift.tt/TdOkXcD
Интерфейс для вызова C-кода. Скачать можно по ссылке: https://pypi.python.org/pypi/cffi/
greenlet - 3.1.0
https://ift.tt/Xkxz1EU
Модуль для легковесных потоков в Python. Скачать можно по ссылке: https://pypi.python.org/pypi/greenlet/
pytest - 8.3.3
https://ift.tt/fkS3OJL
Простой мощный инструмент тестирования в Python. Скачать можно по ссылке: https://pypi.python.org/pypi/pytest/
Доплеровское Cмещение Несущей Спутников GPS
https://ift.tt/F3TtGUv
В этом тексте я намерен выяснить, как быстро меняется частота несущей спутников GPS в результате эффекта Доплера. Также намерен выяснить в каких диапазонах стоит ожидать варьирование значения несущей частоты для GPS спутников и почему. Задачу буду решать в упрощенном виде, численно. Для решения этой задачи достаточно обыкновенной школьной математики и физики.
django-cms - 3.11.7
https://ift.tt/lT6AdJX
Легкая в использовании и удобная для разработки CMS. Скачать можно по ссылке: https://pypi.python.org/pypi/django-cms/
Апи версионирование по-взрослому
https://ift.tt/NyISeD7
В разработке API вы рискуете сломать код ваших пользователей с каждым новым обновлением. Я расскажу на нашем примере, насколько глубока кроличья нора и как сильно можно упороться на пути к идеальному версионированию.
Сводка от pythonz 01.09.2024 — 08.09.2024
https://ift.tt/ZnUxBV0
А теперь о том, что происходило в последнее время на других ресурсах.
virtualenv - 20.26.4
https://ift.tt/RU3amVC
Инструмент создания виртуального рабочего окружения. Скачать можно по ссылке: https://pypi.python.org/pypi/virtualenv
SQLAlchemy - 1.4.54
https://ift.tt/LZPrWlo
Библиотека работы с базами данных. Скачать можно по ссылке: https://pypi.python.org/pypi/SQLAlchemy/
SQLAlchemy - 2.0.34
https://ift.tt/bH36OJX
Библиотека работы с базами данных. Скачать можно по ссылке: https://pypi.python.org/pypi/SQLAlchemy/
Проблемы вызова Python кода из C кода
https://ift.tt/Mj5znct
Давайте поговорим про одну из самых сложных частей интерпретатора CPython – вызов Python кода из C кода. Почему сложных? Потому что Python может резко и внезапно менять стейт всего кода на C. А особо злобный код на Python вообще часто приводит к [1] 88503 segmentation fault python