def associate_asset()

in functions/source/association-updater/association_converter.py [0:0]


    def associate_asset(self, asset_cache, child_asset_cache):
        if asset_cache is None:
            logger.error(f"No parent asset found for {child_asset_cache.get('Id')}")
            return None

        if asset_cache.get('AssetId') != child_asset_cache.get('ParentAssetId'):
            if child_asset_cache.get('ParentAssetId') is not None:
                self.sitewise_client.disassociate(child_asset_cache['ParentAssetId'], 
                                                    child_asset_cache['ParentHierarchyId'], 
                                                    child_asset_cache['AssetId'])

            asset_description = self.sitewise_client.describe(asset_cache['AssetId'])
            hierarchy_ids = [item['id'] for item in asset_description['assetHierarchies'] if item.get('name')==child_asset_cache['HierarchyName']]
            
            if len(hierarchy_ids) < 1:
                # TODO change to error when addin the rest of device types
                logger.error(f"No hierarchy found for {child_asset_cache['HierarchyName']}")
                return

            if len(hierarchy_ids) > 1:
                # TODO change to error when addin the rest of device types
                logger.error(f"More than one hierarchy found for {child_asset_cache['HierarchyName']}")
                return

            self.sitewise_client.associate(asset_cache['AssetId'], hierarchy_ids[0], child_asset_cache['AssetId'])
            
            child_asset_cache['ParentAssetId'] = asset_cache['AssetId']
            child_asset_cache['ParentHierarchyId'] = hierarchy_ids[0]
            self.assets_cache.save(child_asset_cache)

        return child_asset_cache