|
|
|
@ -53,12 +53,16 @@ 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): |
|
|
|
|
|
|
|
return |
|
|
|
|
|
|
|
|
|
|
|
try: |
|
|
|
try: |
|
|
|
process_foreign_key_changes(sender, instance, **kwargs) |
|
|
|
process_foreign_key_changes(sender, instance, **kwargs) |
|
|
|
signal = kwargs.get('signal') |
|
|
|
signal = kwargs.get('signal') |
|
|
|
save_model_log_if_possible(instance, signal, created) |
|
|
|
save_model_log_if_possible(instance, signal, created) |
|
|
|
notify_impacted_users(instance) |
|
|
|
notify_impacted_users(instance) |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
# print(f'!!!!! related_users_registry.unregister for {instance.__class__.__name__} / {signal}') |
|
|
|
related_users_registry.unregister(instance.id) |
|
|
|
related_users_registry.unregister(instance.id) |
|
|
|
except Exception as e: |
|
|
|
except Exception as e: |
|
|
|
logger.info(f'*** ERROR2: {e}') |
|
|
|
logger.info(f'*** ERROR2: {e}') |
|
|
|
@ -68,6 +72,7 @@ def synchronization_notifications(sender, instance, created=False, **kwargs): |
|
|
|
def notify_impacted_users(instance): |
|
|
|
def notify_impacted_users(instance): |
|
|
|
device_id = device_registry.get_device_id(instance.id) |
|
|
|
device_id = device_registry.get_device_id(instance.id) |
|
|
|
users = related_users_registry.get_users(instance.id) |
|
|
|
users = related_users_registry.get_users(instance.id) |
|
|
|
|
|
|
|
# logger.info(f'>>> notify_impacted_users: {users} for {instance.id}') |
|
|
|
|
|
|
|
|
|
|
|
if users: |
|
|
|
if users: |
|
|
|
user_ids = [user.id for user in users] |
|
|
|
user_ids = [user.id for user in users] |
|
|
|
@ -275,6 +280,7 @@ def handle_shared_with_changes(sender, instance, action, pk_set, **kwargs): |
|
|
|
instance.create_access_log(users, 'REVOKED_ACCESS') |
|
|
|
instance.create_access_log(users, 'REVOKED_ACCESS') |
|
|
|
|
|
|
|
|
|
|
|
device_id = device_registry.get_device_id(instance.id) |
|
|
|
device_id = device_registry.get_device_id(instance.id) |
|
|
|
|
|
|
|
# logger.info(f'*** send message to : {pk_set}') |
|
|
|
websocket_sender.send_message(pk_set, device_id) |
|
|
|
websocket_sender.send_message(pk_set, device_id) |
|
|
|
|
|
|
|
|
|
|
|
# for user_id in pk_set: |
|
|
|
# for user_id in pk_set: |
|
|
|
@ -298,9 +304,12 @@ def data_access_post_save(sender, instance, **kwargs): |
|
|
|
|
|
|
|
|
|
|
|
@receiver(pre_delete, sender=DataAccess) |
|
|
|
@receiver(pre_delete, sender=DataAccess) |
|
|
|
def revoke_access_after_delete(sender, instance, **kwargs): |
|
|
|
def revoke_access_after_delete(sender, instance, **kwargs): |
|
|
|
|
|
|
|
# logger.info(f'.........PRE_DELETE DATAACCESS = {instance.id}..........') |
|
|
|
try: |
|
|
|
try: |
|
|
|
instance.cleanup_references() |
|
|
|
instance.cleanup_references() |
|
|
|
instance.create_revoke_access_log() |
|
|
|
instance.create_revoke_access_log() |
|
|
|
|
|
|
|
# logger.info(f'*** users to notify data access delete: {instance.shared_with.all()}') |
|
|
|
|
|
|
|
|
|
|
|
related_users_registry.register(instance.id, instance.shared_with.all()) |
|
|
|
related_users_registry.register(instance.id, instance.shared_with.all()) |
|
|
|
|
|
|
|
|
|
|
|
instance._user = instance.related_user |
|
|
|
instance._user = instance.related_user |
|
|
|
@ -321,6 +330,8 @@ def data_access_post_delete(sender, instance, **kwargs): |
|
|
|
logger.info(f'*** ERROR5: {e}') |
|
|
|
logger.info(f'*** ERROR5: {e}') |
|
|
|
logger.info(traceback.format_exc()) |
|
|
|
logger.info(traceback.format_exc()) |
|
|
|
raise |
|
|
|
raise |
|
|
|
|
|
|
|
# logger.info(f'.........POST_DELETE END DATAACCESS = {instance.id}..........') |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
def related_users(instance): |
|
|
|
def related_users(instance): |
|
|
|
users = set() |
|
|
|
users = set() |
|
|
|
|