()
| 17 | @NodeTreeUpdateLock() |
| 18 | @ensure_in_real_or_default_org |
| 19 | def check_node_assets_amount(): |
| 20 | logger.info(f'Check node assets amount {current_org}') |
| 21 | m2m_model = Asset.nodes.through |
| 22 | nodes = list(Node.objects.all().only('id', 'key', 'assets_amount')) |
| 23 | nodeid_assetid_pairs = list(m2m_model.objects.all().values_list('node_id', 'asset_id')) |
| 24 | |
| 25 | nodekey_assetids_mapper = defaultdict(set) |
| 26 | nodeid_nodekey_mapper = {} |
| 27 | for node in nodes: |
| 28 | nodeid_nodekey_mapper[node.id] = node.key |
| 29 | |
| 30 | for node_id, asset_id in nodeid_assetid_pairs: |
| 31 | if node_id not in nodeid_nodekey_mapper: |
| 32 | continue |
| 33 | node_key = nodeid_nodekey_mapper[node_id] |
| 34 | nodekey_assetids_mapper[node_key].add(asset_id) |
| 35 | |
| 36 | util = NodeAssetsUtil(nodes, nodekey_assetids_mapper) |
| 37 | util.generate() |
| 38 | |
| 39 | to_updates = [] |
| 40 | for node in nodes: |
| 41 | assets_amount = util.get_assets_amount(node.key) |
| 42 | if node.assets_amount != assets_amount: |
| 43 | logger.error(f'Node[{node.key}] assets amount error {node.assets_amount} != {assets_amount}') |
| 44 | node.assets_amount = assets_amount |
| 45 | to_updates.append(node) |
| 46 | Node.objects.bulk_update(to_updates, fields=('assets_amount',)) |
| 47 | |
| 48 | |
| 49 | def is_query_node_all_assets(request): |
no test coverage detected