Exemplo n.º 1
0
def get_user(request):
    """Based on django.contrib.auth.middleware.get_user

    Adds handling of anonymous user which is stored in database.
    """
    # pylint: disable=W0212
    if not hasattr(request, '_cached_user'):
        user = auth.get_user(request)
        if isinstance(user, AnonymousUser):
            user = get_anonymous()

        request._cached_user = user
    return request._cached_user
Exemplo n.º 2
0
    def wrapper(user, *args, **kwargs):
        if user is None:
            user = get_anonymous()
        target_object = None
        if args:
            target_object = args[0]
        elif kwargs:
            target_object = list(kwargs.values())[0]
        if target_object is None:
            obj_key = None
        else:
            obj_key = target_object.get_full_slug()

        if not hasattr(user, 'acl_permissions_cache'):
            user.acl_permissions_cache = {}

        key = (func.__name__, obj_key)

        if key not in user.acl_permissions_cache:
            user.acl_permissions_cache[key] = func(user, *args, **kwargs)

        return user.acl_permissions_cache[key]
Exemplo n.º 3
0
    def wrapper(user, *args, **kwargs):
        if user is None:
            user = get_anonymous()
        target_object = None
        if args:
            target_object = args[0]
        elif kwargs:
            target_object = list(kwargs.values())[0]
        if target_object is None:
            obj_key = None
        else:
            obj_key = '{}-{}'.format(
                target_object.__class__.__name__, target_object.pk
            )

        if not hasattr(user, 'acl_permissions_cache'):
            user.acl_permissions_cache = {}

        key = (func.__name__, obj_key)

        if key not in user.acl_permissions_cache:
            user.acl_permissions_cache[key] = func(user, *args, **kwargs)

        return user.acl_permissions_cache[key]
Exemplo n.º 4
0
    def cleanup_database(self):
        """Cleanup the database"""
        anonymous_user = get_anonymous()
        with transaction.atomic():
            projects = list(Project.objects.values_list('id', flat=True))
        for pk in projects:
            with transaction.atomic():
                # List all current unit content_hashs
                units = Unit.objects.filter(
                    translation__component__project__pk=pk
                ).values('content_hash').distinct()

                # Remove source comments referring to deleted units
                Comment.objects.filter(
                    language=None,
                    project__pk=pk
                ).exclude(
                    content_hash__in=units
                ).delete()

                # Remove source checks referring to deleted units
                Check.objects.filter(
                    language=None,
                    project__pk=pk
                ).exclude(
                    content_hash__in=units
                ).delete()

            for lang in Language.objects.all():
                with transaction.atomic():
                    # Remove checks referring to deleted or not translated
                    # units
                    translatedunits = Unit.objects.filter(
                        translation__language=lang,
                        state__gte=STATE_TRANSLATED,
                        translation__component__project__pk=pk
                    ).values('content_hash').distinct()
                    Check.objects.filter(
                        language=lang, project__pk=pk
                    ).exclude(
                        content_hash__in=translatedunits
                    ).delete()

                    # List current unit content_hashs
                    units = Unit.objects.filter(
                        translation__language=lang,
                        translation__component__project__pk=pk
                    ).values('content_hash').distinct()

                    # Remove suggestions referring to deleted units
                    Suggestion.objects.filter(
                        language=lang,
                        project__pk=pk
                    ).exclude(
                        content_hash__in=units
                    ).delete()

                    # Remove translation comments referring to deleted units
                    Comment.objects.filter(
                        language=lang,
                        project__pk=pk
                    ).exclude(
                        content_hash__in=units
                    ).delete()

                    # Process suggestions
                    all_suggestions = Suggestion.objects.filter(
                        language=lang,
                        project__pk=pk
                    )
                    for sug in all_suggestions.iterator():
                        # Remove suggestions with same text as real translation
                        units = Unit.objects.filter(
                            content_hash=sug.content_hash,
                            translation__language=lang,
                            translation__component__project__pk=pk,
                        )

                        if not units.exclude(target=sug.target).exists():
                            sug.delete_log(
                                anonymous_user,
                                Change.ACTION_SUGGESTION_CLEANUP
                            )
                            continue

                        # Remove duplicate suggestions
                        sugs = Suggestion.objects.filter(
                            content_hash=sug.content_hash,
                            language=lang,
                            project__pk=pk,
                            target=sug.target
                        ).exclude(
                            id=sug.id
                        )
                        if sugs.exists():
                            sug.delete_log(
                                anonymous_user,
                                Change.ACTION_SUGGESTION_CLEANUP
                            )