Разбейте его на несколько подкомпонентов, где это необходимо. Что касается того, где провести разделительные линии, это действительно зависит от вас. Несмотря на то, что огромная лестница условных операторов невелика, не является и массивным оператором if с таким количеством предикатов, что они заключают в себе несколько строк. Вместо этого попробуйте сгруппировать ваши условия в логические группы.
Вы могли бы написать это как:
if foo and bar and foobar:
...
if barfoo and foobarfoo and barfoobar:
...
Я также предлагаю ввести вспомогательные методы по пути. Даже если эти вспомогательные методы вызываются только из этого кода, это нормально.
def handle_bar():
if barfoo and foobarfoo and barfoobar:
...
if foo and bar and foobar:
...
handle_bar()
Если области видимости сбивают с толку, или вы обнаруживаете, что передаете слишком много состояния в качестве аргументов функции, поместите его в класс и используйте переменные-члены там, где это концептуально подходит.
В целом, мой совет - разделить концепции на отдельные части кода с соответствующей степенью детализации. Если вы вообще этого не сделаете, вы получите длинный кусок кода, который требует много прокрутки, чтобы увидеть общую картину. Если вы переусердствуете с этим, вы заставляете читателя слишком часто прыгать по вашему коду.