|
|
|
@ -6,11 +6,14 @@ from .models import DataAccess, ModelLog, ModelOperation, BaseModel, SideStoreMo |
|
|
|
from authentication.models import Device |
|
|
|
from authentication.models import Device |
|
|
|
|
|
|
|
|
|
|
|
from django.contrib.auth import get_user_model |
|
|
|
from django.contrib.auth import get_user_model |
|
|
|
from django.utils import timezone |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
from .ws_sender import websocket_sender |
|
|
|
from .ws_sender import websocket_sender |
|
|
|
from .registry import device_registry, related_users_registry |
|
|
|
from .registry import device_registry, related_users_registry |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
import logging |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
logger = logging.getLogger(__name__) |
|
|
|
|
|
|
|
|
|
|
|
User = get_user_model() |
|
|
|
User = get_user_model() |
|
|
|
|
|
|
|
|
|
|
|
### Sync |
|
|
|
### Sync |
|
|
|
@ -28,7 +31,9 @@ def presave_handler(sender, instance, **kwargs): |
|
|
|
return |
|
|
|
return |
|
|
|
|
|
|
|
|
|
|
|
users = related_users(instance) |
|
|
|
users = related_users(instance) |
|
|
|
# print(f'* impacted users = {users}') |
|
|
|
|
|
|
|
|
|
|
|
logger.info(f'* {signal} : {instance.__class__.__name__} > impacted users = {users}') |
|
|
|
|
|
|
|
|
|
|
|
related_users_registry.register(instance.id, users) |
|
|
|
related_users_registry.register(instance.id, users) |
|
|
|
# user_ids = [user.id for user in users] |
|
|
|
# user_ids = [user.id for user in users] |
|
|
|
|
|
|
|
|
|
|
|
@ -129,7 +134,7 @@ def save_model_log(users, model_operation, model_name, model_id, store_id): |
|
|
|
device_id=device_id |
|
|
|
device_id=device_id |
|
|
|
) |
|
|
|
) |
|
|
|
for user in users |
|
|
|
for user in users |
|
|
|
if user.can_synchronize |
|
|
|
# if user.can_synchronize |
|
|
|
] |
|
|
|
] |
|
|
|
|
|
|
|
|
|
|
|
with transaction.atomic(): |
|
|
|
with transaction.atomic(): |
|
|
|
@ -302,18 +307,8 @@ def related_users(instance): |
|
|
|
users.add(instance) |
|
|
|
users.add(instance) |
|
|
|
elif isinstance(instance, BaseModel): |
|
|
|
elif isinstance(instance, BaseModel): |
|
|
|
users.add(instance.related_user) |
|
|
|
users.add(instance.related_user) |
|
|
|
# users.add(instance.last_updated_by) |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
# look in hierarchy |
|
|
|
|
|
|
|
# related_instances = instance.related_instances() |
|
|
|
|
|
|
|
# print(f'related_instances = {related_instances}') |
|
|
|
|
|
|
|
# related_users = [ri.related_user for ri in related_instances if isinstance(ri, BaseModel)] |
|
|
|
|
|
|
|
# users.update(related_users) |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
data_access_list = DataAccess.objects.filter(id__in=instance.data_access_ids) |
|
|
|
data_access_list = DataAccess.objects.filter(id__in=instance.data_access_ids) |
|
|
|
|
|
|
|
|
|
|
|
# look in related DataAccess |
|
|
|
|
|
|
|
# data_access_list = instances_related_data_access(instance, related_instances) |
|
|
|
|
|
|
|
# print(f'instance = {instance.__class__.__name__}, data access count = {len(data_access_list)}') |
|
|
|
# print(f'instance = {instance.__class__.__name__}, data access count = {len(data_access_list)}') |
|
|
|
for data_access in data_access_list: |
|
|
|
for data_access in data_access_list: |
|
|
|
users.add(data_access.related_user) |
|
|
|
users.add(data_access.related_user) |
|
|
|
|