72 lines
2.1 KiB
Python
72 lines
2.1 KiB
Python
"""
|
|
accessibility/signals.py
|
|
"""
|
|
|
|
import threading
|
|
|
|
from django.core.cache import cache
|
|
from django.db.models.signals import post_save
|
|
from django.dispatch import receiver
|
|
|
|
from accessibility.middlewares import ACCESSIBILITY_CACHE_USER_KEYS
|
|
from accessibility.models import DefaultAccessibility
|
|
from employee.models import EmployeeWorkInformation
|
|
from horilla.signals import post_bulk_update
|
|
|
|
|
|
def _clear_accessibility_cache():
|
|
for _user_id, cache_keys in ACCESSIBILITY_CACHE_USER_KEYS.copy().items():
|
|
for key in cache_keys:
|
|
cache.delete(key)
|
|
|
|
|
|
def _clear_bulk_employees_cache(queryset):
|
|
for instance in queryset:
|
|
cache_key = None
|
|
if instance.employee_id and instance.employee_id.employee_user_id:
|
|
cache_key = ACCESSIBILITY_CACHE_USER_KEYS.get(
|
|
instance.employee_id.employee_user_id.id
|
|
)
|
|
if cache_key:
|
|
cache.delete(cache_key)
|
|
|
|
|
|
@receiver(post_save, sender=EmployeeWorkInformation)
|
|
def monitor_employee_update(sender, instance, created, **kwargs):
|
|
"""
|
|
This method tracks updates to an employee's work information instance.
|
|
"""
|
|
|
|
_sender = sender
|
|
_created = created
|
|
|
|
if instance.employee_id and instance.employee_id.employee_user_id:
|
|
user_id = instance.employee_id.employee_user_id.id
|
|
cache_keys = ACCESSIBILITY_CACHE_USER_KEYS.get(user_id, [])
|
|
|
|
for key in cache_keys:
|
|
cache.delete(key)
|
|
|
|
|
|
@receiver(post_save, sender=DefaultAccessibility)
|
|
def monitor_accessibility_update(sender, instance, created, **kwargs):
|
|
"""
|
|
This method is used to track accessibility updates
|
|
"""
|
|
_sender = sender
|
|
_created = created
|
|
_instance = instance
|
|
thread = threading.Thread(target=_clear_accessibility_cache)
|
|
thread.start()
|
|
|
|
|
|
@receiver(post_bulk_update, sender=EmployeeWorkInformation)
|
|
def monitor_employee_bulk_update(sender, queryset, *args, **kwargs):
|
|
"""
|
|
This method is used to track accessibility updates
|
|
"""
|
|
_sender = sender
|
|
_queryset = queryset
|
|
thread = threading.Thread(target=_clear_bulk_employees_cache(queryset))
|
|
thread.start()
|