48 lines
1.3 KiB
Python
48 lines
1.3 KiB
Python
"""
|
|
accessibility/methods.py
|
|
"""
|
|
|
|
from django.core.cache import cache
|
|
|
|
from accessibility.accessibility import ACCESSBILITY_FEATURE
|
|
from accessibility.filters import AccessibilityFilter
|
|
from accessibility.models import DefaultAccessibility
|
|
from horilla.horilla_middlewares import _thread_locals
|
|
|
|
|
|
def check_is_accessible(feature, cache_key, employee):
|
|
"""
|
|
Method to check the employee is accessible for the feature or not
|
|
"""
|
|
if not employee:
|
|
return False
|
|
|
|
accessibility = DefaultAccessibility.objects.filter(
|
|
feature=feature, is_enabled=True
|
|
).first()
|
|
|
|
if accessibility and accessibility.exclude_all:
|
|
return False
|
|
if not feature or not accessibility:
|
|
return True
|
|
|
|
data: dict = cache.get(cache_key, default={})
|
|
if data and data.get(feature) is not None:
|
|
return data.get(feature)
|
|
|
|
employees = accessibility.employees.all()
|
|
accessible = employee in employees
|
|
return accessible
|
|
|
|
|
|
def update_employee_accessibility_cache(cache_key, employee):
|
|
"""
|
|
Cache for get all the queryset
|
|
"""
|
|
feature_accessible = {}
|
|
for accessibility, _display in ACCESSBILITY_FEATURE:
|
|
feature_accessible[accessibility] = check_is_accessible(
|
|
accessibility, cache_key, employee
|
|
)
|
|
cache.set(cache_key, feature_accessible)
|