Forwarded from Python Daily
Dispatchery: Type-aware, multi-arg function dispatch for complex and nested Python types
Links: [Github](https://github.com/bolaft/dispatchery/), [PyPI](https://pypi.org/project/dispatchery/)
**What it does:**
*dispatchery* is a lightweight Python package for function dispatching inspired by the standard *singledispatch* decorator, but with support for complex, nested, parameterized types, like for example *tuple[str, dict[str, int | float]]*.
**Comparison**:
Unlike *singledispatch*, *dispatchery* can dispatch based on:
- Generic parameterized types (e.g. *list[int]*)
- Nested types (e.g. *tuple[str, dict[str, int | float]]*)
- Union types (e.g. *int | str* or *Union[int, str]*)
- Multiple arg and kwarg values, not just the first one
**Target Audience:**
Python developers who don't like having a bunch of *if isinstance* checks everywhere in their code.
**Example :**
from dispatchery import dispatchery
@dispatchery
def my_func(value):
return "Standard stuff."
@my_func.register(list[str])
def _(value):
return "Strings!"
@my_func.register(list[int] | list[float])
def _(value):
return "Numbers!"
@my_func.register(str, int | float, option=str)
def _(value1, value2, option):
return "Two values and a kwarg!"
/r/Python
https://redd.it/1grszm2
Links: [Github](https://github.com/bolaft/dispatchery/), [PyPI](https://pypi.org/project/dispatchery/)
**What it does:**
*dispatchery* is a lightweight Python package for function dispatching inspired by the standard *singledispatch* decorator, but with support for complex, nested, parameterized types, like for example *tuple[str, dict[str, int | float]]*.
**Comparison**:
Unlike *singledispatch*, *dispatchery* can dispatch based on:
- Generic parameterized types (e.g. *list[int]*)
- Nested types (e.g. *tuple[str, dict[str, int | float]]*)
- Union types (e.g. *int | str* or *Union[int, str]*)
- Multiple arg and kwarg values, not just the first one
**Target Audience:**
Python developers who don't like having a bunch of *if isinstance* checks everywhere in their code.
**Example :**
from dispatchery import dispatchery
@dispatchery
def my_func(value):
return "Standard stuff."
@my_func.register(list[str])
def _(value):
return "Strings!"
@my_func.register(list[int] | list[float])
def _(value):
return "Numbers!"
@my_func.register(str, int | float, option=str)
def _(value1, value2, option):
return "Two values and a kwarg!"
/r/Python
https://redd.it/1grszm2
GitHub
GitHub - bolaft/dispatchery: A Python package for advanced function dispatching and method overloading based on complex, nested…
A Python package for advanced function dispatching and method overloading based on complex, nested, and parameterized types. Inspired by functools' singledispatch decorator. - bolaft/dispatchery
Forwarded from Data Whisperer
Lineage для кода: Визуализация зависимостей в Python-проектах
В мире данных мы привыкли к инструментам вроде dbt и datahub, которые отлично справляются с построением графов зависимостей для таблиц в базах данных. Но что делать, когда нужно разобраться в структуре кодовой базы?
Проблема
Недавно я столкнулся с задачей анализа старого проекта, где:
- Множество взаимосвязанных модулей
- Отсутствие тестов
- Сложная логика взаимодействия компонентов
Решение: pydeps 🛠
В поисках инструмента для визуализации зависимостей я обнаружил pydeps - Python-модуль, который:
- Анализирует структуру проекта
- Строит наглядный граф зависимостей
- Экспортирует результат в SVG-формат
Преимущества использования
- Быстрое понимание архитектуры проекта
- Визуальное отслеживание зависимостей
- Помощь в рефакторинге и написании тестов
💡 Этот инструмент особенно полезен при работе с legacy-кодом или при погружении в новый проект.
В мире данных мы привыкли к инструментам вроде dbt и datahub, которые отлично справляются с построением графов зависимостей для таблиц в базах данных. Но что делать, когда нужно разобраться в структуре кодовой базы?
Проблема
Недавно я столкнулся с задачей анализа старого проекта, где:
- Множество взаимосвязанных модулей
- Отсутствие тестов
- Сложная логика взаимодействия компонентов
Решение: pydeps 🛠
В поисках инструмента для визуализации зависимостей я обнаружил pydeps - Python-модуль, который:
- Анализирует структуру проекта
- Строит наглядный граф зависимостей
- Экспортирует результат в SVG-формат
Преимущества использования
- Быстрое понимание архитектуры проекта
- Визуальное отслеживание зависимостей
- Помощь в рефакторинге и написании тестов
💡 Этот инструмент особенно полезен при работе с legacy-кодом или при погружении в новый проект.
pip install pydeps
pydeps your_project_path
Forwarded from Книголюб | Литература
Декоратор override
Это может быть полезно для:
— Повышения читабельности кода, так как сразу видно, какие методы переопределены.
— Выявления ошибок: если имя метода в дочернем классе не совпадает с именем в родительском, будет выдана ошибка.
— Проверки типов аргументов: декоратор гарантирует, что типы аргументов совпадают с базовым методом.
#python #decorators
@override
используется для переопределения методов в классах-наследниках. Он позволяет указать, что метод в подклассе переопределяет метод базового класса.Это может быть полезно для:
— Повышения читабельности кода, так как сразу видно, какие методы переопределены.
— Выявления ошибок: если имя метода в дочернем классе не совпадает с именем в родительском, будет выдана ошибка.
— Проверки типов аргументов: декоратор гарантирует, что типы аргументов совпадают с базовым методом.
#python #decorators
Summarize300Bot, [Dec 5, 2024 at 12:13]
Link
Обработка новых исправимых ошибок
• Код должен исправить ошибку и продолжить работу.Link
• Пример: установка значения year равным unknown для записи в базу данных.Link
Обработка всплывающих исправляемых ошибок
• Код, вызвавший функцию, должен устранить ошибку и продолжить работу.Link
• Пример: использование EAFP для обнаружения и устранения ошибки.Link
Обработка ошибок в Python
• Функция может возвращать исполнителя из базы данных, но иногда это приводит к сбою.Link
• Используется EAFP для перехвата ошибки NotFound и добавления неизвестного исполнителя в базу данных.Link
• Код знает, как настроить состояние приложения для продолжения работы.Link
Обработка новых неисправимых ошибок
• Если ошибка не может быть исправлена, создается исключение для уведомления вызывающей стороны.Link
• Исключение может стать исправимым, достигнув высокой позиции в стеке вызовов.Link
• Пример: отсутствие названия песни является неисправимой ошибкой.Link
Обработка всплывающих неисправимых ошибок
Link
Обработка новых исправимых ошибок
• Код должен исправить ошибку и продолжить работу.Link
• Пример: установка значения year равным unknown для записи в базу данных.Link
Обработка всплывающих исправляемых ошибок
• Код, вызвавший функцию, должен устранить ошибку и продолжить работу.Link
• Пример: использование EAFP для обнаружения и устранения ошибки.Link
Обработка ошибок в Python
• Функция может возвращать исполнителя из базы данных, но иногда это приводит к сбою.Link
• Используется EAFP для перехвата ошибки NotFound и добавления неизвестного исполнителя в базу данных.Link
• Код знает, как настроить состояние приложения для продолжения работы.Link
Обработка новых неисправимых ошибок
• Если ошибка не может быть исправлена, создается исключение для уведомления вызывающей стороны.Link
• Исключение может стать исправимым, достигнув высокой позиции в стеке вызовов.Link
• Пример: отсутствие названия песни является неисправимой ошибкой.Link
Обработка всплывающих неисправимых ошибок