type hint some files

This commit is contained in:
Huy Pham 2020-01-10 15:32:16 -08:00
parent 0e74212c43
commit a8a0255624
13 changed files with 643 additions and 62 deletions

View file

@ -1,7 +1,9 @@
from tkinter import messagebox
import grpc
def show_grpc_error(e):
def show_grpc_error(e: grpc.RpcError):
title = [x.capitalize() for x in e.code().name.lower().split("_")]
title = " ".join(title)
title = f"GRPC {title}"

View file

@ -1,6 +1,7 @@
import logging
import tkinter as tk
from tkinter.font import Font
from typing import Tuple
from core.gui import themes
from core.gui.dialogs.linkconfig import LinkConfigurationDialog
@ -13,7 +14,7 @@ EDGE_COLOR = "#ff0000"
class CanvasWirelessEdge:
def __init__(self, token, position, src, dst, canvas):
def __init__(self, token: Tuple[int, int], position, src: int, dst: int, canvas):
self.token = token
self.src = src
self.dst = dst
@ -31,7 +32,7 @@ class CanvasEdge:
Canvas edge class
"""
def __init__(self, x1, y1, x2, y2, src, canvas):
def __init__(self, x1: int, y1: int, x2: int, y2: int, src: int, canvas):
"""
Create an instance of canvas edge object
:param int x1: source x-coord

View file

@ -9,7 +9,7 @@ class Images:
images = {}
@classmethod
def create(cls, file_path, width, height=None):
def create(cls, file_path: str, width: int, height: int = None):
if height is None:
height = width
image = Image.open(file_path)
@ -22,12 +22,12 @@ class Images:
cls.images[image.stem] = str(image)
@classmethod
def get(cls, image_enum, width, height=None):
def get(cls, image_enum, width: int, height: int = None):
file_path = cls.images[image_enum.value]
return cls.create(file_path, width, height)
@classmethod
def get_custom(cls, name, width, height=None):
def get_custom(cls, name: str, width: int, height: int = None):
file_path = cls.images[name]
return cls.create(file_path, width, height)

View file

@ -3,8 +3,10 @@ The actions taken when each menubar option is clicked
"""
import logging
import tkinter as tk
import webbrowser
from tkinter import filedialog, messagebox
from typing import Optional
from core.gui.appconfig import XMLS_PATH
from core.gui.dialogs.about import AboutDialog
@ -30,14 +32,14 @@ class MenuAction:
self.app = app
self.canvas = app.canvas
def cleanup_old_session(self, quitapp=False):
def cleanup_old_session(self, quitapp: bool = False):
logging.info("cleaning up old session")
self.app.core.stop_session()
self.app.core.delete_session()
# if quitapp:
# self.app.quit()
def prompt_save_running_session(self, quitapp=False):
def prompt_save_running_session(self, quitapp: bool = False):
"""
Prompt use to stop running session before application is closed
@ -56,7 +58,7 @@ class MenuAction:
elif quitapp:
self.app.quit()
def on_quit(self, event=None):
def on_quit(self, event: Optional[tk.Event] = None):
"""
Prompt user whether so save running session, and then close the application
@ -64,7 +66,7 @@ class MenuAction:
"""
self.prompt_save_running_session(quitapp=True)
def file_save_as_xml(self, event=None):
def file_save_as_xml(self, event: Optional[tk.Event] = None):
logging.info("menuaction.py file_save_as_xml()")
file_path = filedialog.asksaveasfilename(
initialdir=str(XMLS_PATH),
@ -75,7 +77,7 @@ class MenuAction:
if file_path:
self.app.core.save_xml(file_path)
def file_open_xml(self, event=None):
def file_open_xml(self, event: Optional[tk.Event] = None):
logging.info("menuaction.py file_open_xml()")
file_path = filedialog.askopenfilename(
initialdir=str(XMLS_PATH),
@ -141,11 +143,11 @@ class MenuAction:
else:
self.app.core.cancel_throughputs()
def copy(self, event=None):
def copy(self, event: Optional[tk.Event] = None):
logging.debug("copy")
self.app.canvas.copy()
def paste(self, event=None):
def paste(self, event: Optional[tk.Event] = None):
logging.debug("paste")
self.app.canvas.paste()

View file

@ -149,7 +149,7 @@ class Menubar(tk.Menu):
view_menu.add_command(label="Zoom out", accelerator="-", state=tk.DISABLED)
self.add_cascade(label="View", menu=view_menu)
def create_show_menu(self, view_menu):
def create_show_menu(self, view_menu: tk.Menu):
"""
Create the menu items in View/Show
@ -169,7 +169,7 @@ class Menubar(tk.Menu):
menu.add_command(label="API Messages", state=tk.DISABLED)
view_menu.add_cascade(label="Show", menu=menu)
def create_experimental_menu(self, tools_menu):
def create_experimental_menu(self, tools_menu: tk.Menu):
"""
Create experimental menu item and the sub menu items inside
@ -182,7 +182,7 @@ class Menubar(tk.Menu):
menu.add_command(label="Topology partitioning...", state=tk.DISABLED)
tools_menu.add_cascade(label="Experimental", menu=menu)
def create_random_menu(self, topology_generator_menu):
def create_random_menu(self, topology_generator_menu: tk.Menu):
"""
Create random menu item and the sub menu items inside
@ -197,7 +197,7 @@ class Menubar(tk.Menu):
menu.add_command(label=label, state=tk.DISABLED)
topology_generator_menu.add_cascade(label="Random", menu=menu)
def create_grid_menu(self, topology_generator_menu):
def create_grid_menu(self, topology_generator_menu: tk.Menu):
"""
Create grid menu item and the sub menu items inside
@ -212,7 +212,7 @@ class Menubar(tk.Menu):
menu.add_command(label=label, state=tk.DISABLED)
topology_generator_menu.add_cascade(label="Grid", menu=menu)
def create_connected_grid_menu(self, topology_generator_menu):
def create_connected_grid_menu(self, topology_generator_menu: tk.Menu):
"""
Create connected grid menu items and the sub menu items inside
@ -229,7 +229,7 @@ class Menubar(tk.Menu):
menu.add_cascade(label=label, menu=submenu)
topology_generator_menu.add_cascade(label="Connected Grid", menu=menu)
def create_chain_menu(self, topology_generator_menu):
def create_chain_menu(self, topology_generator_menu: tk.Menu):
"""
Create chain menu item and the sub menu items inside
@ -244,7 +244,7 @@ class Menubar(tk.Menu):
menu.add_command(label=label, state=tk.DISABLED)
topology_generator_menu.add_cascade(label="Chain", menu=menu)
def create_star_menu(self, topology_generator_menu):
def create_star_menu(self, topology_generator_menu: tk.Menu):
"""
Create star menu item and the sub menu items inside
@ -257,7 +257,7 @@ class Menubar(tk.Menu):
menu.add_command(label=label, state=tk.DISABLED)
topology_generator_menu.add_cascade(label="Star", menu=menu)
def create_cycle_menu(self, topology_generator_menu):
def create_cycle_menu(self, topology_generator_menu: tk.Menu):
"""
Create cycle menu item and the sub items inside
@ -270,7 +270,7 @@ class Menubar(tk.Menu):
menu.add_command(label=label, state=tk.DISABLED)
topology_generator_menu.add_cascade(label="Cycle", menu=menu)
def create_wheel_menu(self, topology_generator_menu):
def create_wheel_menu(self, topology_generator_menu: tk.Menu):
"""
Create wheel menu item and the sub menu items inside
@ -283,7 +283,7 @@ class Menubar(tk.Menu):
menu.add_command(label=label, state=tk.DISABLED)
topology_generator_menu.add_cascade(label="Wheel", menu=menu)
def create_cube_menu(self, topology_generator_menu):
def create_cube_menu(self, topology_generator_menu: tk.Menu):
"""
Create cube menu item and the sub menu items inside
@ -296,7 +296,7 @@ class Menubar(tk.Menu):
menu.add_command(label=label, state=tk.DISABLED)
topology_generator_menu.add_cascade(label="Cube", menu=menu)
def create_clique_menu(self, topology_generator_menu):
def create_clique_menu(self, topology_generator_menu: tk.Menu):
"""
Create clique menu item and the sub menu items inside
@ -309,7 +309,7 @@ class Menubar(tk.Menu):
menu.add_command(label=label, state=tk.DISABLED)
topology_generator_menu.add_cascade(label="Clique", menu=menu)
def create_bipartite_menu(self, topology_generator_menu):
def create_bipartite_menu(self, topology_generator_menu: tk.Menu):
"""
Create bipartite menu item and the sub menu items inside
@ -328,7 +328,7 @@ class Menubar(tk.Menu):
temp = temp - 1
topology_generator_menu.add_cascade(label="Bipartite", menu=menu)
def create_topology_generator_menu(self, tools_menu):
def create_topology_generator_menu(self, tools_menu: tk.Menu):
"""
Create topology menu item and its sub menu items
@ -371,7 +371,7 @@ class Menubar(tk.Menu):
menu.add_command(label="Debugger...", state=tk.DISABLED)
self.add_cascade(label="Tools", menu=menu)
def create_observer_widgets_menu(self, widget_menu):
def create_observer_widgets_menu(self, widget_menu: tk.Menu):
"""
Create observer widget menu item and create the sub menu items inside
@ -409,7 +409,7 @@ class Menubar(tk.Menu):
)
widget_menu.add_cascade(label="Observer Widgets", menu=menu)
def create_adjacency_menu(self, widget_menu):
def create_adjacency_menu(self, widget_menu: tk.Menu):
"""
Create adjacency menu item and the sub menu items inside

View file

@ -68,9 +68,5 @@ class StatusBar(ttk.Frame):
dialog = AlertsDialog(self.app, self.app)
dialog.show()
def set_status(self, message):
def set_status(self, message: str):
self.statusvar.set(message)
def stop_session_callback(self, cleanup_time):
self.progress_bar.stop()
self.statusvar.set(f"Stopped in {cleanup_time:.3f} seconds")

View file

@ -33,7 +33,7 @@ class Colors:
listboxbg = "#f2f1f0"
def load(style):
def load(style: ttk.Style):
style.theme_create(
THEME_DARK,
"clam",
@ -141,13 +141,13 @@ def load(style):
)
def theme_change_menu(event):
def theme_change_menu(event: tk.Event):
if not isinstance(event.widget, tk.Menu):
return
style_menu(event.widget)
def style_menu(widget):
def style_menu(widget: ttk.Widget):
style = ttk.Style()
bg = style.lookup(".", "background")
fg = style.lookup(".", "foreground")
@ -159,7 +159,7 @@ def style_menu(widget):
)
def style_listbox(widget):
def style_listbox(widget: ttk.Widget):
style = ttk.Style()
bg = style.lookup(".", "background")
fg = style.lookup(".", "foreground")
@ -176,7 +176,7 @@ def style_listbox(widget):
)
def theme_change(event):
def theme_change(event: tk.Event):
style = ttk.Style()
style.configure(Styles.picker_button, font=("TkDefaultFont", 8, "normal"))
style.configure(

View file

@ -5,6 +5,7 @@ from functools import partial
from tkinter import messagebox, ttk
from tkinter.font import Font
from core.api.grpc import core_pb2
from core.gui.dialogs.customnodes import CustomNodesDialog
from core.gui.dialogs.marker import MarkerDialog
from core.gui.graph.enums import GraphMode
@ -100,7 +101,7 @@ class Toolbar(ttk.Frame):
self.create_network_button()
self.create_annotation_button()
def design_select(self, button):
def design_select(self, button: ttk.Button):
logging.info("selecting design button: %s", button)
self.select_button.state(["!pressed"])
self.link_button.state(["!pressed"])
@ -109,7 +110,7 @@ class Toolbar(ttk.Frame):
self.annotation_button.state(["!pressed"])
button.state(["pressed"])
def runtime_select(self, button):
def runtime_select(self, button: ttk.Button):
logging.info("selecting runtime button: %s", button)
self.runtime_select_button.state(["!pressed"])
self.stop_button.state(["!pressed"])
@ -185,7 +186,7 @@ class Toolbar(ttk.Frame):
0, lambda: self.show_picker(self.node_button, self.node_picker)
)
def show_picker(self, button, picker):
def show_picker(self, button: ttk.Button, picker: ttk.Frame):
x = self.winfo_width() + 1
y = button.winfo_rooty() - picker.master.winfo_rooty() - 1
picker.place(x=x, y=y)
@ -195,7 +196,7 @@ class Toolbar(ttk.Frame):
self.wait_window(picker)
self.app.unbind_all("<ButtonRelease-1>")
def create_picker_button(self, image, func, frame, label):
def create_picker_button(self, image, func, frame: ttk.Frame, label: str):
"""
Create button and put it on the frame
@ -212,7 +213,7 @@ class Toolbar(ttk.Frame):
button.bind("<ButtonRelease-1>", lambda e: func())
button.grid(pady=1)
def create_button(self, frame, image, func, tooltip):
def create_button(self, frame: ttk.Frame, image, func, tooltip: str):
button = ttk.Button(frame, image=image, command=func)
button.image = image
button.grid(sticky="ew")
@ -243,7 +244,7 @@ class Toolbar(ttk.Frame):
task = BackgroundTask(self, self.app.core.start_session, self.start_callback)
task.start()
def start_callback(self, response):
def start_callback(self, response: core_pb2.StartSessionResponse):
self.app.statusbar.progress_bar.stop()
total = time.perf_counter() - self.time
message = f"Start ran for {total:.3f} seconds"
@ -275,7 +276,7 @@ class Toolbar(ttk.Frame):
dialog = CustomNodesDialog(self.app, self.app)
dialog.show()
def update_button(self, button, image, node_draw):
def update_button(self, button: ttk.Button, image, node_draw):
logging.info("update button(%s): %s", button, node_draw)
self.hide_pickers()
button.configure(image=image)
@ -426,7 +427,7 @@ class Toolbar(ttk.Frame):
task = BackgroundTask(self, self.app.core.stop_session, self.stop_callback)
task.start()
def stop_callback(self, response):
def stop_callback(self, response: core_pb2.StopSessionResponse):
self.app.statusbar.progress_bar.stop()
self.set_design()
total = time.perf_counter() - self.time
@ -436,7 +437,7 @@ class Toolbar(ttk.Frame):
if not response.result:
messagebox.showerror("Stop Error", "Errors stopping session")
def update_annotation(self, image, shape_type):
def update_annotation(self, image, shape_type: str):
logging.info("clicked annotation: ")
self.hide_pickers()
self.annotation_button.configure(image=image)

View file

@ -1,5 +1,6 @@
import tkinter as tk
from tkinter import ttk
from typing import Optional
from core.gui.themes import Styles
@ -9,7 +10,7 @@ class Tooltip(object):
Create tool tip for a given widget
"""
def __init__(self, widget, text="widget info"):
def __init__(self, widget: tk.Widget, text: str = "widget info"):
self.widget = widget
self.text = text
self.widget.bind("<Enter>", self.on_enter)
@ -18,10 +19,10 @@ class Tooltip(object):
self.id = None
self.tw = None
def on_enter(self, event=None):
def on_enter(self, event: Optional[tk.Event] = None):
self.schedule()
def on_leave(self, event=None):
def on_leave(self, event: Optional[tk.Event] = None):
self.unschedule()
self.close(event)
@ -35,7 +36,7 @@ class Tooltip(object):
if id_:
self.widget.after_cancel(id_)
def enter(self, event=None):
def enter(self, event: Optional[tk.Event] = None):
x, y, cx, cy = self.widget.bbox("insert")
x += self.widget.winfo_rootx()
y += self.widget.winfo_rooty() + 32
@ -50,6 +51,6 @@ class Tooltip(object):
label = ttk.Label(frame, text=self.text, style=Styles.tooltip)
label.grid()
def close(self, event=None):
def close(self, event: Optional[tk.Event] = None):
if self.tw:
self.tw.destroy()

View file

@ -27,7 +27,7 @@ class InputValidation:
self.rgb = self.master.register(self.check_rbg)
self.hex = self.master.register(self.check_hex)
def ip_focus_out(self, event):
def ip_focus_out(self, event: tk.Event):
value = event.widget.get()
try:
IPNetwork(value)
@ -35,12 +35,12 @@ class InputValidation:
event.widget.delete(0, tk.END)
event.widget.insert(tk.END, "invalid")
def focus_out(self, event, default):
def focus_out(self, event: tk.Event, default: str):
value = event.widget.get()
if value == "":
event.widget.insert(tk.END, default)
def check_positive_int(self, s):
def check_positive_int(self, s: str):
if len(s) == 0:
return True
try:
@ -51,7 +51,7 @@ class InputValidation:
except ValueError:
return False
def check_positive_float(self, s):
def check_positive_float(self, s: str):
if len(s) == 0:
return True
try:
@ -62,7 +62,7 @@ class InputValidation:
except ValueError:
return False
def check_node_name(self, s):
def check_node_name(self, s: str):
if len(s) < 0:
return False
if len(s) == 0:
@ -72,7 +72,7 @@ class InputValidation:
return False
return True
def check_canvas_int(sefl, s):
def check_canvas_int(self, s: str):
if len(s) == 0:
return True
try:
@ -83,7 +83,7 @@ class InputValidation:
except ValueError:
return False
def check_canvas_float(self, s):
def check_canvas_float(self, s: str):
if not s:
return True
try:
@ -94,7 +94,7 @@ class InputValidation:
except ValueError:
return False
def check_ip4(self, s):
def check_ip4(self, s: str):
if not s:
return True
pat = re.compile("^([0-9]+[.])*[0-9]*$")
@ -113,7 +113,7 @@ class InputValidation:
else:
return False
def check_rbg(self, s):
def check_rbg(self, s: str):
if not s:
return True
if s.startswith("0") and len(s) >= 2:
@ -127,7 +127,7 @@ class InputValidation:
except ValueError:
return False
def check_hex(self, s):
def check_hex(self, s: str):
if not s:
return True
pat = re.compile("^([#]([0-9]|[a-f])+)$|^[#]$")