def prepare_test_runner(*args, **kwargs): """ Configures a test runner based on Django version to maintain backward compatibility. """ import django test_runner = None if django_17(): django.setup() from django.test.runner import DiscoverRunner test_runner = DiscoverRunner( pattern='test*.py', verbosity=kwargs.get('verbosity', 1), interactive=kwargs.get('interactive', False), failfast=kwargs.get('failfast'), ) else: from django.test.simple import DjangoTestSuiteRunner test_runner = DjangoTestSuiteRunner( verbosity=kwargs.get('verbosity', 1), interactive=kwargs.get('interactive', False), failfast=kwargs.get('failfast') ) return test_runner
def test_all_app_containing_moderator_module_should_be_registered(self): auto_discover() if django_17(): self.assertTrue("tests.moderator" in sys.modules.keys()) else: from moderation import moderation self.assertTrue(Book in moderation._registered_models)
def get_queryset(self): query_set = None if django_17(): query_set = super(ModerationObjectsManager, self).get_queryset() else: query_set = super(ModerationObjectsManager, self).get_query_set() if self.moderator.visibility_column: return self.exclude_objs_by_visibility_col(query_set) return self.filter_moderated_objects(query_set)
def filter_moderated_objects(self, query_set): from moderation.models import MODERATION_READY_STATE exclude_pks = [] from .models import ModeratedObject mobjs_set = ModeratedObject.objects.filter( content_type=ContentType.objects.get_for_model(query_set.model), object_pk__in=query_set.values_list('pk', flat=True)) # TODO: Load this query in chunks to avoid huge RAM usage spikes mobjects = {} for mobject in mobjs_set: if mobject.object_pk in mobjects: # No sensible default action here. You need to override # filter_moderated_objects() to handle this as you see fit. raise self.MultipleModerations(mobject) else: mobjects[mobject.object_pk] = mobject full_query_set = None if django_17(): full_query_set = super(ModerationObjectsManager, self).get_queryset()\ .filter(pk__in=query_set.values_list('pk', flat=True)) else: full_query_set = super(ModerationObjectsManager, self).get_query_set()\ .filter(pk__in=query_set.values_list('pk', flat=True)) for obj in full_query_set: try: # We cannot use dict.get() here! mobject = mobjects[obj.pk] if obj.pk in mobjects else \ obj.moderated_object if mobject.moderation_state != MODERATION_READY_STATE: exclude_pks.append(obj.pk) except ObjectDoesNotExist: pass return query_set.exclude(pk__in=exclude_pks)
def get_queryset(self): if django_17(): query_set = super(WomenManager, self).get_queryset() else: query_set = super(WomenManager, self).get_query_set() return query_set.filter(gender=0)
class ModerationObjectsManager(Manager): class MultipleModerations(Exception): def __init__(self, base_object): self.base_object = base_object super(ModerationObjectsManager.MultipleModerations, self).__init__( "Multiple moderations found for a single object, %s" % base_object) def __call__(self, base_manager, *args, **kwargs): return MetaClass(self.__class__.__name__, (self.__class__, base_manager), {'use_for_related_fields': True}) def filter_moderated_objects(self, query_set): from moderation.models import MODERATION_READY_STATE exclude_pks = [] from .models import ModeratedObject mobjs_set = ModeratedObject.objects.filter( content_type=ContentType.objects.get_for_model(query_set.model), object_pk__in=query_set.values_list('pk', flat=True)) # TODO: Load this query in chunks to avoid huge RAM usage spikes mobjects = {} for mobject in mobjs_set: if mobject.object_pk in mobjects: # No sensible default action here. You need to override # filter_moderated_objects() to handle this as you see fit. raise self.MultipleModerations(mobject) else: mobjects[mobject.object_pk] = mobject full_query_set = None if django_17(): full_query_set = super(ModerationObjectsManager, self).get_queryset()\ .filter(pk__in=query_set.values_list('pk', flat=True)) else: full_query_set = super(ModerationObjectsManager, self).get_query_set()\ .filter(pk__in=query_set.values_list('pk', flat=True)) for obj in full_query_set: try: # We cannot use dict.get() here! mobject = mobjects[obj.pk] if obj.pk in mobjects else \ obj.moderated_object if mobject.moderation_state != MODERATION_READY_STATE: exclude_pks.append(obj.pk) except ObjectDoesNotExist: pass return query_set.exclude(pk__in=exclude_pks) def exclude_objs_by_visibility_col(self, query_set): from moderation.models import MODERATION_STATUS_REJECTED kwargs = {} kwargs[self.moderator.visibility_column] =\ bool(MODERATION_STATUS_REJECTED) return query_set.exclude(**kwargs) def get_queryset(self): query_set = None if django_17(): query_set = super(ModerationObjectsManager, self).get_queryset() else: query_set = super(ModerationObjectsManager, self).get_query_set() if self.moderator.visibility_column: return self.exclude_objs_by_visibility_col(query_set) return self.filter_moderated_objects(query_set) if not django_17(): get_query_set = get_queryset del get_queryset @property def moderator(self): from moderation import moderation return moderation.get_moderator(self.model)
class Meta: model = model_class if django_17(): fields = '__all__'
class Meta: model = UserProfile if django_17(): fields = '__all__'
class Meta: if django_17(): exclude = '__all__'