sync3
Laurent 5 months ago
parent b503f7cb33
commit dd62e2f11e
  1. 12
      sync/models/base.py
  2. 21
      sync/signals.py
  3. 17
      sync/views.py

@ -40,9 +40,15 @@ class BaseModel(models.Model):
def update_data_access_list(self):
related_instances = self.sharing_related_instances()
data_access_ids = [instance.data_access_ids for instance in related_instances if isinstance(instance, BaseModel)]
data_access_ids.extend(self.data_access_ids)
self.data_access_ids = data_access_ids
data_access_ids = {}
for instance in related_instances:
if isinstance(instance, BaseModel) and instance.data_access_ids:
data_access_ids.append(instance.data_access_ids)
# print(f'related_instances = {related_instances}')
# data_access_ids = [instance.data_access_ids for instance in related_instances if isinstance(instance, BaseModel)]
# data_access_ids.extend(self.data_access_ids)
self.data_access_ids = list(data_access_ids)
# DataAccess = apps.get_model('sync', 'DataAccess')
# data_accesses = DataAccess.objects.filter(model_id__in=related_ids)

@ -11,7 +11,6 @@ from .ws_sender import websocket_sender
from .registry import device_registry, related_users_registry
import logging
import sys
import traceback
logger = logging.getLogger(__name__)
@ -34,29 +33,13 @@ def presave_handler(sender, instance, **kwargs):
return
users = related_users(instance)
related_users_registry.register(instance.id, users)
if signal == pre_save:
detect_foreign_key_changes_for_shared_instances(sender, instance)
sig_type = 'pre_save'
elif signal == pre_delete:
# if hasattr(instance, 'id'):
# try:
# data_access_list = DataAccess.objects.filter(model_id=instance.id)
# if data_access_list:
# logger.info(f'>>> {instance.__class__.__name__} {instance.id} : delete {data_access_list.count()} DataAccess')
# data_access_list.delete()
# except Exception as e:
# logger.info(f'*** ERRRRRRR: {e}')
# logger.info(traceback.format_exc())
# raise
sig_type = 'pre_delete'
# logger.info(f'* {sig_type} : {instance.__class__.__name__} > impacted users = {users}')
except Exception as e:
logger.info(f'*** ERROR: {e}')
logger.info(f'*** presave_handler ERROR: {e}')
raise
@receiver([post_save, post_delete])
@ -344,12 +327,10 @@ def related_users(instance):
elif isinstance(instance, BaseModel):
users.add(instance.related_user)
data_access_list = DataAccess.objects.filter(id__in=instance.data_access_ids)
# print(f'instance = {instance.__class__.__name__}, data access count = {len(data_access_list)}')
for data_access in data_access_list:
users.add(data_access.related_user)
users.update(data_access.shared_with.all())
if isinstance(instance, DataAccess):
users.update(instance.shared_with.all())

@ -340,14 +340,17 @@ class LogProcessingResult:
shared = defaultdict(dict)
grants = defaultdict(dict)
try:
# Process each grant instance
for model_name, instances in self.shared_instances.items():
for model_id, instance in instances.items():
serializer = get_serializer(instance, model_name)
shared[model_name][model_id] = serializer.data
for model_name, instances in self.shared_instances.items():
for model_id, instance in instances.items():
serializer = get_serializer(instance, model_name)
shared[model_name][model_id] = serializer.data
add_children_hierarchy(instance, grants)
add_parents_recursively(instance, grants)
add_children_hierarchy(instance, grants)
add_parents_recursively(instance, grants)
except Exception as e:
print(f'ERR = {e}')
# Convert to lists
for model_name in shared:
@ -363,7 +366,7 @@ class LogProcessingResult:
revocations_parents_organizer = HierarchyOrganizer()
# logger.info(f'$$$ process_revocations: {len(self.revoke_info)}')
sync_models = getattr(settings, 'SYNC_MODEL_CHILDREN_SHARING', {})
# sync_models = getattr(settings, 'SYNC_MODEL_CHILDREN_SHARING', {})
# First, collect all revocations
for model_name, items in self.revoke_info.items():

Loading…
Cancel
Save