diff --git a/src/context/service/database/Device.py b/src/context/service/database/Device.py index e40c28e699af539c8886986d18ed0aa477e00842..07d1c76061d8b228cf39ddc06d358190bfce48fd 100644 --- a/src/context/service/database/Device.py +++ b/src/context/service/database/Device.py @@ -136,23 +136,25 @@ def device_set(db_engine : Engine, request : Device) -> Tuple[Dict, bool]: created_at,updated_at = session.execute(stmt).fetchone() updated = updated_at > created_at - stmt = insert(EndPointModel).values(endpoints_data) - stmt = stmt.on_conflict_do_update( - index_elements=[EndPointModel.endpoint_uuid], - set_=dict( - name = stmt.excluded.name, - endpoint_type = stmt.excluded.endpoint_type, - kpi_sample_types = stmt.excluded.kpi_sample_types, - updated_at = stmt.excluded.updated_at, + if len(endpoints_data) > 0: + stmt = insert(EndPointModel).values(endpoints_data) + stmt = stmt.on_conflict_do_update( + index_elements=[EndPointModel.endpoint_uuid], + set_=dict( + name = stmt.excluded.name, + endpoint_type = stmt.excluded.endpoint_type, + kpi_sample_types = stmt.excluded.kpi_sample_types, + updated_at = stmt.excluded.updated_at, + ) ) - ) - stmt = stmt.returning(EndPointModel.created_at, EndPointModel.updated_at) - endpoint_updates = session.execute(stmt).fetchall() - updated = updated or any([(updated_at > created_at) for created_at,updated_at in endpoint_updates]) - - session.execute(insert(TopologyDeviceModel).values(related_topologies).on_conflict_do_nothing( - index_elements=[TopologyDeviceModel.topology_uuid, TopologyDeviceModel.device_uuid] - )) + stmt = stmt.returning(EndPointModel.created_at, EndPointModel.updated_at) + endpoint_updates = session.execute(stmt).fetchall() + updated = updated or any([(updated_at > created_at) for created_at,updated_at in endpoint_updates]) + + if len(related_topologies) > 0: + session.execute(insert(TopologyDeviceModel).values(related_topologies).on_conflict_do_nothing( + index_elements=[TopologyDeviceModel.topology_uuid, TopologyDeviceModel.device_uuid] + )) configrule_updates = upsert_config_rules(session, config_rules, device_uuid=device_uuid) updated = updated or any([(updated_at > created_at) for created_at,updated_at in configrule_updates]) diff --git a/src/context/service/database/Link.py b/src/context/service/database/Link.py index 2621e73dc62d70751c8040078968dbf4b2ad78d3..2d9e80894b47b1e935453e09820134181f5b936c 100644 --- a/src/context/service/database/Link.py +++ b/src/context/service/database/Link.py @@ -100,16 +100,18 @@ def link_set(db_engine : Engine, request : Link) -> Tuple[Dict, bool]: created_at,updated_at = session.execute(stmt).fetchone() updated = updated_at > created_at - # TODO: manage add/remove of endpoints; manage changes in relations with topology - stmt = insert(LinkEndPointModel).values(link_endpoints_data) - stmt = stmt.on_conflict_do_nothing( - index_elements=[LinkEndPointModel.link_uuid, LinkEndPointModel.endpoint_uuid] - ) - session.execute(stmt) + if len(link_endpoints_data) > 0: + # TODO: manage add/remove of endpoints; manage changes in relations with topology + stmt = insert(LinkEndPointModel).values(link_endpoints_data) + stmt = stmt.on_conflict_do_nothing( + index_elements=[LinkEndPointModel.link_uuid, LinkEndPointModel.endpoint_uuid] + ) + session.execute(stmt) - session.execute(insert(TopologyLinkModel).values(related_topologies).on_conflict_do_nothing( - index_elements=[TopologyLinkModel.topology_uuid, TopologyLinkModel.link_uuid] - )) + if len(related_topologies) > 0: + session.execute(insert(TopologyLinkModel).values(related_topologies).on_conflict_do_nothing( + index_elements=[TopologyLinkModel.topology_uuid, TopologyLinkModel.link_uuid] + )) return updated