mirror of
https://github.com/RobbieHan/sandboxMP.git
synced 2026-02-03 10:53:15 +08:00
46 lines
1.6 KiB
Python
46 lines
1.6 KiB
Python
import os
|
|
|
|
from django.dispatch import receiver
|
|
from django.db.models.signals import post_delete, post_save
|
|
|
|
from .models import DeviceFile, DeviceInfo, ConnectionInfo
|
|
from utils.db_utils import MongodbDriver
|
|
|
|
|
|
@receiver(post_delete, sender=DeviceFile)
|
|
def auto_delete_file(sender, instance, **kwargs):
|
|
if instance.file_content:
|
|
if os.path.isfile(instance.file_content.path):
|
|
os.remove(instance.file_content.path)
|
|
|
|
|
|
@receiver(post_save, sender=DeviceInfo)
|
|
def auto_compare_diff(sender, instance, **kwargs):
|
|
record = instance.history.latest()
|
|
prev_record = record.prev_record
|
|
ope_type = {'~': 'update', '+': 'create', '-': 'delete'}
|
|
compare_result = {
|
|
'id': record.id,
|
|
'changed_by': record.changed_by.name,
|
|
'history_type': ope_type[record.history_type],
|
|
'history_date': record.history_date
|
|
}
|
|
changes = {}
|
|
if prev_record is not None:
|
|
delta = record.diff_against(prev_record)
|
|
for change in delta.changes:
|
|
changes[change.field] = [change.old, change.new]
|
|
compare_result['changes'] = changes
|
|
if compare_result['changes'] or compare_result['history_type'] == 'create':
|
|
try:
|
|
mongo = MongodbDriver(collection='change_compare')
|
|
mongo.insert(compare_result)
|
|
except Exception as e:
|
|
pass
|
|
|
|
|
|
@receiver(post_delete, sender=DeviceInfo)
|
|
def auto_delete_connection(sender, instance, **kwargs):
|
|
dev_connection = getattr(instance, 'dev_connection')
|
|
if dev_connection:
|
|
ConnectionInfo.objects.filter(id=dev_connection).delete() |