Adds ModelLog creation for DataAccess to be shared between concerned users

mailing
Laurent 1 month ago
parent 0074548dd4
commit 5d60993748
  1. 12
      sync/signals.py
  2. 2
      sync/utils.py
  3. 6
      sync/views.py

@ -24,7 +24,7 @@ def presave_handler(sender, instance, **kwargs):
try: try:
# some other classes are excluded in settings_app.py: SYNC_APPS # some other classes are excluded in settings_app.py: SYNC_APPS
if not isinstance(instance, (BaseModel, User)) or isinstance(instance, DataAccess): if not isinstance(instance, (BaseModel, User)):
return return
signal = kwargs.get('signal') signal = kwargs.get('signal')
@ -53,8 +53,8 @@ def synchronization_notifications(sender, instance, created=False, **kwargs):
# some classes are excluded in settings_app.py: SYNC_APPS # some classes are excluded in settings_app.py: SYNC_APPS
if not isinstance(instance, BaseModel) and not isinstance(instance, User): if not isinstance(instance, BaseModel) and not isinstance(instance, User):
return return
if isinstance(instance, DataAccess): # if isinstance(instance, DataAccess):
return # return
try: try:
process_foreign_key_changes(sender, instance, **kwargs) process_foreign_key_changes(sender, instance, **kwargs)
@ -273,6 +273,8 @@ def handle_shared_with_changes(sender, instance, action, pk_set, **kwargs):
# print(f'm2m changed = {pk_set}') # print(f'm2m changed = {pk_set}')
users = User.objects.filter(id__in=pk_set) users = User.objects.filter(id__in=pk_set)
save_model_log(users, ModelOperation.PUT, DataAccess.__name__, instance.id, None)
with transaction.atomic(): with transaction.atomic():
if action == "post_add": if action == "post_add":
instance.create_access_log(users, 'SHARED_ACCESS') instance.create_access_log(users, 'SHARED_ACCESS')
@ -344,8 +346,8 @@ def related_users(instance):
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)
users.update(data_access.shared_with.all()) users.update(data_access.shared_with.all())
if isinstance(instance, DataAccess):
users.update(instance.shared_with.all()) # print(f'find users for {instance.__class__.__name__}, count = {len(users)}')
return {user for user in users if user is not None} return {user for user in users if user is not None}

@ -42,7 +42,7 @@ def get_data(model_name, model_id):
def get_serialized_data_by_id(model_name, model_id): def get_serialized_data_by_id(model_name, model_id):
# print(f'model_name = {model_name}') # print(f'model_name = {model_name}')
model = model_registry.get_model(model_name) model = model_registry.get_model(model_name)
logger.info(f'model for {model_name} = {model}') # logger.info(f'model for {model_name} = {model}')
instance = model.objects.get(id=model_id) instance = model.objects.get(id=model_id)
serializer = get_serializer(instance, model_name) serializer = get_serializer(instance, model_name)
return serializer.data return serializer.data

@ -387,17 +387,17 @@ class LogProcessingResult:
# First, collect all revocations # First, collect all revocations
for model_name, items in self.revoke_info.items(): for model_name, items in self.revoke_info.items():
revocations[model_name].extend(items) revocations[model_name].extend(items)
logger.info(f'$$$ process_revocations for {model_name}, items = {len(items)}') # logger.info(f'$$$ process_revocations for {model_name}, items = {len(items)}')
# Process parent hierarchies for each revoked item # Process parent hierarchies for each revoked item
model = model_registry.get_model(model_name) model = model_registry.get_model(model_name)
for item in items: for item in items:
logger.info(f'$$$ item revoked = {item}') # logger.info(f'$$$ item revoked = {item}')
try: try:
instance = model.objects.get(id=item['model_id']) instance = model.objects.get(id=item['model_id'])
logger.info(f'$$$ process revoked item parents of {model_name} : {item['model_id']}') # logger.info(f'$$$ process revoked item parents of {model_name} : {item['model_id']}')
revocated_relations_organizer.add_relations(instance) revocated_relations_organizer.add_relations(instance)
except model.DoesNotExist: except model.DoesNotExist:

Loading…
Cancel
Save