|
|
|
@ -6,7 +6,7 @@ from django.db.models.signals import m2m_changed
|
|
|
|
|
from django.dispatch import receiver
|
|
|
|
|
|
|
|
|
|
from assets.models import Asset, Node
|
|
|
|
|
from common.const.signals import PRE_ADD, POST_REMOVE, PRE_CLEAR
|
|
|
|
|
from common.const.signals import PRE_CLEAR, POST_ADD, PRE_REMOVE
|
|
|
|
|
from common.decorators import on_transaction_commit, merge_delay_run
|
|
|
|
|
from common.utils import get_logger
|
|
|
|
|
from orgs.utils import tmp_to_org
|
|
|
|
@ -24,7 +24,8 @@ def on_node_asset_change(sender, action, instance, reverse, pk_set, **kwargs):
|
|
|
|
|
if action in refused:
|
|
|
|
|
raise ValueError
|
|
|
|
|
|
|
|
|
|
mapper = {PRE_ADD: add, POST_REMOVE: sub}
|
|
|
|
|
# 这里监听 post_add, pre_remove, 如果pre_add 和 post_remove, 那么 node_ids 就已经获取不到了
|
|
|
|
|
mapper = {POST_ADD: add, PRE_REMOVE: sub}
|
|
|
|
|
if action not in mapper:
|
|
|
|
|
return
|
|
|
|
|
|
|
|
|
@ -32,13 +33,14 @@ def on_node_asset_change(sender, action, instance, reverse, pk_set, **kwargs):
|
|
|
|
|
if reverse:
|
|
|
|
|
node_ids = [instance.id]
|
|
|
|
|
else:
|
|
|
|
|
node_ids = pk_set
|
|
|
|
|
node_ids = list(pk_set)
|
|
|
|
|
update_nodes_assets_amount(node_ids=node_ids)
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
@merge_delay_run(ttl=5)
|
|
|
|
|
def update_nodes_assets_amount(node_ids=()):
|
|
|
|
|
nodes = list(Node.objects.filter(id__in=node_ids))
|
|
|
|
|
nodes = Node.objects.filter(id__in=node_ids)
|
|
|
|
|
nodes = Node.get_ancestor_queryset(nodes)
|
|
|
|
|
logger.debug('Recv asset nodes change signal, recompute node assets amount')
|
|
|
|
|
logger.info('Update nodes assets amount: {} nodes'.format(len(node_ids)))
|
|
|
|
|
|
|
|
|
|