|
|
|
@ -96,7 +96,14 @@ def notify_impacted_users(instance): |
|
|
|
def save_model_log_if_possible(instance, signal, created): |
|
|
|
def save_model_log_if_possible(instance, signal, created): |
|
|
|
|
|
|
|
|
|
|
|
users = related_users_registry.get_users(instance.id) |
|
|
|
users = related_users_registry.get_users(instance.id) |
|
|
|
# print(f'*** save_model_log >>> users = {users}, instance = {instance}') |
|
|
|
logger.debug(f'*** save_model_log_if_possible >>> users from registry = {users}, instance = {instance}') |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
if not users: |
|
|
|
|
|
|
|
logger.warning(f'!!! Registry returned empty users for instance {instance.id} ({instance.__class__.__name__})') |
|
|
|
|
|
|
|
# Try to recalculate users as fallback |
|
|
|
|
|
|
|
users = related_users(instance) |
|
|
|
|
|
|
|
logger.info(f'!!! Recalculated users for fallback: {users}') |
|
|
|
|
|
|
|
|
|
|
|
if users: |
|
|
|
if users: |
|
|
|
if signal == post_save or signal == pre_save: |
|
|
|
if signal == post_save or signal == pre_save: |
|
|
|
if created: |
|
|
|
if created: |
|
|
|
@ -128,8 +135,11 @@ def save_model_log(users, model_operation, model_name, model_id, store_id): |
|
|
|
|
|
|
|
|
|
|
|
logger.info(f'*** creating ModelLogs for: {model_operation} {model_name} : {users}') |
|
|
|
logger.info(f'*** creating ModelLogs for: {model_operation} {model_name} : {users}') |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
try: |
|
|
|
with transaction.atomic(): |
|
|
|
with transaction.atomic(): |
|
|
|
|
|
|
|
created_logs = [] |
|
|
|
for user in users: |
|
|
|
for user in users: |
|
|
|
|
|
|
|
logger.debug(f'Creating ModelLog for user {user.id} ({user.username})') |
|
|
|
model_log = ModelLog( |
|
|
|
model_log = ModelLog( |
|
|
|
user=user, |
|
|
|
user=user, |
|
|
|
operation=model_operation, |
|
|
|
operation=model_operation, |
|
|
|
@ -139,6 +149,21 @@ def save_model_log(users, model_operation, model_name, model_id, store_id): |
|
|
|
device_id=device_id |
|
|
|
device_id=device_id |
|
|
|
) |
|
|
|
) |
|
|
|
model_log.save() |
|
|
|
model_log.save() |
|
|
|
|
|
|
|
created_logs.append(model_log.id) |
|
|
|
|
|
|
|
logger.debug(f'Successfully created ModelLog {model_log.id}') |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
logger.info(f'*** Successfully created {len(created_logs)} ModelLogs: {created_logs}') |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
# Verify ModelLogs were actually persisted |
|
|
|
|
|
|
|
persisted_count = ModelLog.objects.filter(id__in=created_logs).count() |
|
|
|
|
|
|
|
if persisted_count != len(created_logs): |
|
|
|
|
|
|
|
logger.error(f'*** PERSISTENCE VERIFICATION FAILED! Created {len(created_logs)} ModelLogs but only {persisted_count} were persisted to database') |
|
|
|
|
|
|
|
else: |
|
|
|
|
|
|
|
logger.debug(f'*** PERSISTENCE VERIFIED: All {persisted_count} ModelLogs successfully persisted') |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
except Exception as e: |
|
|
|
|
|
|
|
logger.error(f'*** FAILED to create ModelLogs for: {model_operation} {model_name}, users: {[u.id for u in users]}, error: {e}', exc_info=True) |
|
|
|
|
|
|
|
raise |
|
|
|
|
|
|
|
|
|
|
|
# with transaction.atomic(): |
|
|
|
# with transaction.atomic(): |
|
|
|
# for user in users: |
|
|
|
# for user in users: |
|
|
|
|