kiwitcms/Kiwi

View on GitHub
tcms/utils/user.py

Summary

Maintainability
A
0 mins
Test Coverage
# -*- coding: utf-8 -*-
from django.db import transaction


def delete_user(user):
    """
    Delete user across DB schemas.
    """
    if hasattr(user, "tenant_set"):
        from django_tenants.utils import schema_context  # pylint: disable=E0401, C0415

        user_id = user.pk

        # using transactions b/c multiple schemas can refer to the same
        # user ID as FK references!
        with transaction.atomic():
            # delete user and all of its data across tenants
            for tenant in user.tenant_set.all():
                with schema_context(tenant.schema_name):
                    user.delete()
                    # reassign the ID b/c delete() sets it to None
                    user.pk = user_id

            # then delete everything from the public schema
            with schema_context("public"):
                user.delete()

    else:
        user.delete()