def setup_model()

in functions/source/asset-model-converter/model_converter.py [0:0]


    def setup_model(self, model_description):
        models = {item['Name']:item for item in self.models_dynamo.get_all()}
        cached_model = models.get(model_description['assetModelName'])

        if cached_model is None:
            hierarchies = []
            if 'assetModelHierarchies' in model_description:
                for item in model_description['assetModelHierarchies']:
                    hierarchies.append({ 'name': item['name'], 
                                         'childAssetModelId': models.get(item['childAssetModel'])['AssetModelId'] 
                                        })

            asset_model = self.sitewise_client.create_asset_model( model_description['assetModelName'],
                                                                    model_description['assetModelDescription'], 
                                                                    model_description['assetModelProperties'], 
                                                                    hierarchies)
               
            dynamo_item = SitewiseModelsCache.item(model_description['assetModelName'], asset_model['assetModelId'], asset_model['assetModelHierarchies'], asset_model['assetModelProperties'])
            self.models_dynamo.save(dynamo_item)

            return dynamo_item
        else:
            hierarchies = []
            if 'assetModelHierarchies' in model_description:
                for hierarchy in model_description['assetModelHierarchies']:
                    cached_hierarchy_ids = [item['id'] for item in cached_model.get('AssetModelHierarchies',[]) if item.get('name')==hierarchy.get('name')]
                    
                    hierarchy_to_update = { 'name': hierarchy['name'], 'childAssetModelId': models.get(hierarchy['childAssetModel'])['AssetModelId']}
                    if len(cached_hierarchy_ids) == 1:
                        hierarchy_to_update['id'] = cached_hierarchy_ids[0] 

                    hierarchies.append(hierarchy_to_update)

            properties = []
            if 'assetModelProperties' in model_description:
                for prop in model_description['assetModelProperties']:
                    cached_property_ids = [item['id'] for item in cached_model.get('AssetModelProperties',[]) if item.get('name')==prop.get('name')]
                    if len(cached_property_ids) == 1:
                        prop['id'] = cached_property_ids[0]
                        
                    properties.append(prop)

            asset_model = self.sitewise_client.update_asset_model( cached_model['AssetModelId'],
                                                                    model_description['assetModelName'],
                                                                    model_description['assetModelDescription'], 
                                                                    properties, 
                                                                    hierarchies)

            cached_model['AssetModelHierarchies'] = asset_model['assetModelHierarchies']
            cached_model['AssetModelProperties'] = asset_model['assetModelProperties']
            self.models_dynamo.save(cached_model)

            return cached_model