Как должна быть устроена качественная Python библиотека Недавно изучал исходники fast_bitrix24 для работы с api bitrix и был приятно удивлен — это пример того, как нужно писать серьезные библиотеки Сначала привлекла практическая польза — библиотека решает проблему работы с Битрикс24 API: лимиты, батчинг, обработка ошибок. Но когда заглянул в код, нашел несколько любопытных моментов Валидация на всех уровнях: @staticmethod @icontract.ensure( lambda result: result != "batch", "Method cannot be 'batch'. Use call_batch() instead.", ) def standardized_method(method: str): return method.lower().strip() Библиотека использует icontract для валидации условий. Ошибки ловятся на этапе вызова, а не во время выполнения Элегантное решение синхронности: class Bitrix(BitrixAsync): """Клиент для неасинхронных запросов к серверу Битрикс24. Имплементируется путем обертки всех методов родителя в неасинхронные методы. """ def sync_decorator(coroutine): ft.wraps(coroutine) def sync_wrapper(*args, **k