def get_mixins(func, ignored_modules=None):
    ignored_modules = ignored_modules if ignored_modules else []
    mixins = []
    # Django class-based views are used by calling .as_view() which creates a nested function that
    # has a 'cls' attribute which is the actual class
    if hasattr(func, 'cls'):
        for klass in func.cls.mro():
            if klass != func.cls and klass.__module__.split('.')[0] not in ignored_modules:
                mixins.append("{}.{}".format(klass.__module__, get_func_name(klass)))

    return mixins


# This is copied from django.contrib.admindocs.views, but improved to deal with non-capturing
# groups within the group.
# TODO: submit this as a patch to Django.
Callback run when the experiment is started.
dataset/ETHPy150Open potatolondon/djangae/djangae/contrib/security/commands_utils.py/get_mixins--crossover with--dataset/ETHPy150Open weblabdeusto/weblabdeusto/server/src/experiments/robot_movement.py/RobotMovement.do_start_experiment