Как перебрать все объекты View для всех маршрутов в django в модульном тесте?

По соображениям соответствия иногда возникает необходимость гарантировать, что все или некоторые представления должны иметь определенные атрибуты или поведение. Я хочу добавить тесты, чтобы убедиться, что это соблюдается, и, что более важно, что это будет соблюдаться в отношении будущих представлений, добавленных другими разработчиками.

Мне нужно уметь делать что-то вроде

def test_compliance_thing():
    for all possible views
       assert hasattr(view, 'some_compliance_thing')
from django.urls import get_resolver
def get_all_view_classes():
    return (x.callback.view_class for x in get_resolver().url_patterns if x.callback)

def test_compliance_thing():
    for view in get_all_view_classes():
        assert hasattr(view, 'some_compliance_thing')

Интересно, что я нашел другой способ сделать это, который, как мне кажется, дает тот же результат

>>> x1 = set([x.callback.view_class for x in get_resolver().url_patterns if x.callback])
>>> x2 = set([k.view_class for k in get_resolver().reverse_dict.keys() if type(k) != str])
>>> x1 == x2
True
Вернуться на верх