remove CoreClient.modified_service_node. When a new CORE node is created, assign default services right away (instead of leaving it empty), therefore no more confusion whether [] means empty service or means CORE node with default services

This commit is contained in:
Huy Pham 2020-04-30 13:47:45 -07:00
parent 4037da49c2
commit 580641f5d9
3 changed files with 6 additions and 55 deletions

View file

@ -85,7 +85,6 @@ class CoreClient:
self.handling_events = None self.handling_events = None
self.xml_dir = None self.xml_dir = None
self.xml_file = None self.xml_file = None
self.modified_service_nodes = set()
@property @property
def client(self): def client(self):
@ -112,7 +111,6 @@ class CoreClient:
self.links.clear() self.links.clear()
self.hooks.clear() self.hooks.clear()
self.emane_config = None self.emane_config = None
self.modified_service_nodes.clear()
for mobility_player in self.mobility_players.values(): for mobility_player in self.mobility_players.values():
mobility_player.handle_close() mobility_player.handle_close()
self.mobility_players.clear() self.mobility_players.clear()
@ -815,6 +813,7 @@ class CoreClient:
if NodeUtils.is_custom(node_type, model): if NodeUtils.is_custom(node_type, model):
services = NodeUtils.get_custom_node_services(self.app.guiconfig, model) services = NodeUtils.get_custom_node_services(self.app.guiconfig, model)
node.services[:] = services node.services[:] = services
# assign default services to CORE node
else: else:
services = self.default_services.get(model, None) services = self.default_services.get(model, None)
if services: if services:
@ -840,7 +839,6 @@ class CoreClient:
logging.error("unknown node: %s", node_id) logging.error("unknown node: %s", node_id)
continue continue
del self.canvas_nodes[node_id] del self.canvas_nodes[node_id]
self.modified_service_nodes.discard(node_id)
for edge in canvas_node.edges: for edge in canvas_node.edges:
if edge in edges: if edge in edges:
continue continue
@ -1056,9 +1054,6 @@ class CoreClient:
) )
return dict(config) return dict(config)
def service_been_modified(self, node_id: int) -> bool:
return node_id in self.modified_service_nodes
def execute_script(self, script): def execute_script(self, script):
response = self.client.execute_script(script) response = self.client.execute_script(script)
logging.info("execute python script %s", response) logging.info("execute python script %s", response)

View file

@ -3,11 +3,10 @@ core node services
""" """
import tkinter as tk import tkinter as tk
from tkinter import messagebox, ttk from tkinter import messagebox, ttk
from typing import TYPE_CHECKING, Any, Set from typing import TYPE_CHECKING, Any
from core.gui.dialogs.dialog import Dialog from core.gui.dialogs.dialog import Dialog
from core.gui.dialogs.serviceconfig import ServiceConfigDialog from core.gui.dialogs.serviceconfig import ServiceConfigDialog
from core.gui.nodeutils import NodeUtils
from core.gui.themes import FRAME_PAD, PADX, PADY from core.gui.themes import FRAME_PAD, PADX, PADY
from core.gui.widgets import CheckboxList, ListboxScroll from core.gui.widgets import CheckboxList, ListboxScroll
@ -17,13 +16,7 @@ if TYPE_CHECKING:
class NodeServiceDialog(Dialog): class NodeServiceDialog(Dialog):
def __init__( def __init__(self, master: Any, app: "Application", canvas_node: "CanvasNode"):
self,
master: Any,
app: "Application",
canvas_node: "CanvasNode",
services: Set[str] = None,
):
title = f"{canvas_node.core_node.name} Services" title = f"{canvas_node.core_node.name} Services"
super().__init__(master, app, title, modal=True) super().__init__(master, app, title, modal=True)
self.app = app self.app = app
@ -32,24 +25,7 @@ class NodeServiceDialog(Dialog):
self.groups = None self.groups = None
self.services = None self.services = None
self.current = None self.current = None
if services is None: services = set(canvas_node.core_node.services)
services = canvas_node.core_node.services
model = canvas_node.core_node.model
if len(services) == 0:
# not custom node type and node's services haven't been modified before
if not NodeUtils.is_custom(
canvas_node.core_node.type, canvas_node.core_node.model
) and not self.app.core.service_been_modified(self.node_id):
services = set(self.app.core.default_services[model])
# services of default type nodes were modified to be empty
elif canvas_node.core_node.id in self.app.core.modified_service_nodes:
services = set()
else:
services = set(
NodeUtils.get_custom_node_services(self.app.guiconfig, model)
)
else:
services = set(services)
self.current_services = services self.current_services = services
self.draw() self.draw()
@ -103,7 +79,7 @@ class NodeServiceDialog(Dialog):
button.grid(row=0, column=1, sticky="ew", padx=PADX) button.grid(row=0, column=1, sticky="ew", padx=PADX)
button = ttk.Button(frame, text="Remove", command=self.click_remove) button = ttk.Button(frame, text="Remove", command=self.click_remove)
button.grid(row=0, column=2, sticky="ew", padx=PADX) button.grid(row=0, column=2, sticky="ew", padx=PADX)
button = ttk.Button(frame, text="Cancel", command=self.click_cancel) button = ttk.Button(frame, text="Cancel", command=self.destroy)
button.grid(row=0, column=3, sticky="ew") button.grid(row=0, column=3, sticky="ew")
# trigger group change # trigger group change
@ -154,22 +130,7 @@ class NodeServiceDialog(Dialog):
def click_save(self): def click_save(self):
core_node = self.canvas_node.core_node core_node = self.canvas_node.core_node
# custom type node or CORE node with custom services
if (
core_node.model not in self.app.core.default_services
or self.current_services != self.app.core.default_services[core_node.model]
):
core_node.services[:] = self.current_services core_node.services[:] = self.current_services
self.app.core.modified_service_nodes.add(core_node.id)
# custom services CORE node but modified back to having default services
# or just CORE nodes that don't get any change
else:
core_node.services[:] = self.current_services
self.app.core.modified_service_nodes.discard(core_node.id)
self.destroy()
def click_cancel(self):
self.current_services = None
self.destroy() self.destroy()
def click_remove(self): def click_remove(self):

View file

@ -936,11 +936,6 @@ class CanvasGraph(tk.Canvas):
node.service_file_configs = deepcopy(canvas_node.service_file_configs) node.service_file_configs = deepcopy(canvas_node.service_file_configs)
node.config_service_configs = deepcopy(canvas_node.config_service_configs) node.config_service_configs = deepcopy(canvas_node.config_service_configs)
# add new node to modified_service_nodes set if that set contains the
# to_copy node
if self.core.service_been_modified(core_node.id):
self.core.modified_service_nodes.add(copy.id)
copy_map[canvas_node.id] = node.id copy_map[canvas_node.id] = node.id
self.core.canvas_nodes[copy.id] = node self.core.canvas_nodes[copy.id] = node
self.nodes[node.id] = node self.nodes[node.id] = node