From d2a57b329b331b6864e7ae2ec3b2feb74ece9e78 Mon Sep 17 00:00:00 2001 From: punix <polunga40@unity-mail.de> Date: Thu, 24 Apr 2025 23:04:34 +0200 Subject: [PATCH] Class LxTools expands wg_set to set_file renamed --- __pycache__/cls_mth_fc.cpython-312.pyc | Bin 22727 -> 23194 bytes cls_mth_fc.py | 224 +++++++++++++------------ wirepy.py | 41 +++-- 3 files changed, 136 insertions(+), 129 deletions(-) diff --git a/__pycache__/cls_mth_fc.cpython-312.pyc b/__pycache__/cls_mth_fc.cpython-312.pyc index 604aa1f922a23fb84a7819951e01c6d85be5503f..f2b87c1cee3128a5553e7ec4b4586ef07ce98bcd 100644 GIT binary patch delta 5775 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 delta 5317 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 L@*i^ms;T}Ls)JUo diff --git a/cls_mth_fc.py b/cls_mth_fc.py index 9179d64..ef09142 100755 --- a/cls_mth_fc.py +++ b/cls_mth_fc.py @@ -23,7 +23,7 @@ gettext.bindtextdomain(APP, LOCALE_DIR) gettext.textdomain(APP) _ = gettext.gettext -wg_set = Path(Path.home() / ".config/wire_py/settings") +#wg_set = Path(Path.home() / ".config/wire_py/settings") class Create: @@ -135,30 +135,30 @@ class LxTools(tk.Tk): super().__init__(*args, **kwargs) - def theme_change_light(self): + def theme_change_light(self, file=None): """ Set light theme """ if self.tk.call("ttk::style", "theme", "use") == "water-dark": self.tk.call("set_theme", "light") - with open(wg_set, "r", encoding="utf-8") as theme_set2: + with open(file, "r", encoding="utf-8") as theme_set2: lines3 = theme_set2.readlines() lines3[3] = "light\n" - with open(wg_set, "w", encoding="utf-8") as theme_set2: + with open(file, "w", encoding="utf-8") as theme_set2: theme_set2.writelines(lines3) self.color_label() - def theme_change_dark(self): + def theme_change_dark(self, file=None): """ Set dark theme """ if not self.tk.call("ttk::style", "theme", "use") == "water-dark": self.tk.call("set_theme", "dark") - with open(wg_set, "r", encoding="utf-8") as theme_set2: + with open(file, "r", encoding="utf-8") as theme_set2: lines4 = theme_set2.readlines() lines4[3] = "dark\n" - with open(wg_set, "w", encoding="utf-8") as theme_set2: + with open(file, "w", encoding="utf-8") as theme_set2: theme_set2.writelines(lines4) self.color_label() @@ -176,6 +176,106 @@ class LxTools(tk.Tk): with open(file, "w", encoding="utf-8") as f: f.write(logname) + @staticmethod + def clean_files(dirname=None, path=None): + if dirname != None: + shutil.rmtree(dirname) + if path != None: + Path.unlink(f"{path}") + + @staticmethod + def if_tip(path): + """ + method that writes in file whether tooltip is displayed or not + """ + with open(path, "r", encoding="utf-8") as set_f2: + lines2 = set_f2.readlines() + if "False\n" in lines2: + tip = False + else: + tip = True + return tip + + @staticmethod + def msg_window(img_w, img_i, w_title, w_txt, txt2=None, com=None): + """ + Method for different message windows for the user. with 4 arguments to be passed. + To create messages with your own images, icons, and titles. + As an alternative to Python Messagebox. + Paths to images must be specified: r'/usr/share/icons/lx-icons/64/info.png' + img_w = Image for Tk Window + img_i = Image for Icon + w_title = Windows Title + w_txt = Text for Tk Window + txt2 = Text for Button two + com = function for Button command + """ + msg = tk.Toplevel() + msg.resizable(width=False, height=False) + msg.title(w_title) + msg.configure(pady=15, padx=15) + msg.img = tk.PhotoImage(file=img_w) + msg.i_window = tk.Label(msg, image=msg.img) + + label = tk.Label(msg, text=w_txt) + + label.grid(column=1, row=0) + + if txt2 is not None and com is not None: + label.config(font=("Ubuntu", 11), padx=15, justify="left") + msg.i_window.grid(column=0, row=0, sticky="nw") + button2 = ttk.Button(msg, text=f"{txt2}", command=com, padding=4) + button2.grid(column=0, row=1, sticky="e", columnspan=2) + button = ttk.Button(msg, text="OK", command=msg.destroy, padding=4) + button.grid(column=0, row=1, sticky="w", columnspan=2) + + else: + label.config(font=("Ubuntu", 11), padx=15) + msg.i_window.grid(column=0, row=0) + button = ttk.Button(msg, text="OK", command=msg.destroy, padding=4) + button.grid(column=0, columnspan=2, row=1) + + img_i = tk.PhotoImage(file=img_i) + msg.iconphoto(True, img_i) + msg.columnconfigure(0, weight=1) + msg.rowconfigure(0, weight=1) + msg.winfo_toplevel() + + @staticmethod + def sigi(dirname=None, path=None): + """ + function for clean up after break + """ + + def signal_handler(signum, frame): + """ + Determine clear text names for signal numbers + """ + signals_to_names_dict = dict( + (getattr(signal, n), n) + for n in dir(signal) + if n.startswith("SIG") and "_" not in n + ) + signame = signals_to_names_dict.get(signum, f"Unnamed signal: {signum}") + + # End program for certain signals, report to others only reception + if signum in (signal.SIGINT, signal.SIGTERM): + exit_code = 1 + print( + f"\nSignal {signame} {(signum)} received. => Aborting with exit code {exit_code}." + ) + LxTools.clean_files(dirname) + print("Breakdown by user...") + sys.exit(exit_code) + else: + print(f"Signal {signum} received and ignored.") + LxTools.clean_files(dirname) + print("Process unexpectedly ended...") + + signal.signal(signal.SIGINT, signal_handler) + signal.signal(signal.SIGTERM, signal_handler) + signal.signal(signal.SIGHUP, signal_handler) + class GiteaUpdate: """ @@ -185,7 +285,7 @@ class GiteaUpdate: """ @staticmethod - def api_down(update_api_url, version): + def api_down(update_api_url, version, file=None): """ Calling api_down requests the URL and the version of the running script. Example: version = 'v. 1.1.1.1' GiteaUpdate.api_down(http://example.de, version) @@ -194,7 +294,7 @@ class GiteaUpdate: response = requests.get(update_api_url, timeout=10) response_dict = response.json() response_dict = response_dict[0] - with open(wg_set, "r", encoding="utf-8") as set_f: + with open(file, "r", encoding="utf-8") as set_f: set_f = set_f.read() if "on\n" in set_f: if version[3:] != response_dict["tag_name"]: @@ -224,7 +324,7 @@ class GiteaUpdate: ii = down_ok_image wt = _("Download Successful") msg_t = _("Your zip file is in home directory") - msg_window(iw, ii, wt, msg_t) + LxTools.msg_window(iw, ii, wt, msg_t) else: @@ -233,7 +333,8 @@ class GiteaUpdate: ii = down_not_ok_image wt = _("Download error") msg_t = _("Download failed! Please try again") - msg_window(iw, ii, wt, msg_t) + LxTools.msg_window(iw, ii, wt, msg_t) + except subprocess.CalledProcessError: # img_w, img_i, w_title, w_txt hand over @@ -241,52 +342,7 @@ class GiteaUpdate: ii = down_not_ok_image wt = _("Download error") msg_t = _("Download failed! No internet connection!") - msg_window(iw, ii, wt, msg_t) - - -def msg_window(img_w, img_i, w_title, w_txt, txt2=None, com=None): - """ - Function for different message windows for the user. with 4 arguments to be passed. - To create messages with your own images, icons, and titles. - As an alternative to Python Messagebox. - Paths to images must be specified: r'/usr/share/icons/lx-icons/64/info.png' - img_w = Image for Tk Window - img_i = Image for Icon - w_title = Windows Title - w_txt = Text for Tk Window - txt2 = Text for Button two - com = function for Button command - """ - msg = tk.Toplevel() - msg.resizable(width=False, height=False) - msg.title(w_title) - msg.configure(pady=15, padx=15) - msg.img = tk.PhotoImage(file=img_w) - msg.i_window = tk.Label(msg, image=msg.img) - - label = tk.Label(msg, text=w_txt) - - label.grid(column=1, row=0) - - if txt2 is not None and com is not None: - label.config(font=("Ubuntu", 11), padx=15, justify="left") - msg.i_window.grid(column=0, row=0, sticky="nw") - button2 = ttk.Button(msg, text=f"{txt2}", command=com, padding=4) - button2.grid(column=0, row=1, sticky="e", columnspan=2) - button = ttk.Button(msg, text="OK", command=msg.destroy, padding=4) - button.grid(column=0, row=1, sticky="w", columnspan=2) - - else: - label.config(font=("Ubuntu", 11), padx=15) - msg.i_window.grid(column=0, row=0) - button = ttk.Button(msg, text="OK", command=msg.destroy, padding=4) - button.grid(column=0, columnspan=2, row=1) - - img_i = tk.PhotoImage(file=img_i) - msg.iconphoto(True, img_i) - msg.columnconfigure(0, weight=1) - msg.rowconfigure(0, weight=1) - msg.winfo_toplevel() + LxTools.msg_window(iw, ii, wt, msg_t) class Tunnel: @@ -393,7 +449,7 @@ class Tunnel: ii = r"/usr/share/icons/lx-icons/48/wg_vpn.png" wt = _("Export Successful") msg_t = _("Your zip file is in home directory") - msg_window(iw, ii, wt, msg_t) + LxTools.msg_window(iw, ii, wt, msg_t) else: @@ -402,7 +458,7 @@ class Tunnel: ii = r"/usr/share/icons/lx-icons/48/wg_msg.png" wt = _("Export error") msg_t = _("Export failed! Please try again") - msg_window(iw, ii, wt, msg_t) + LxTools.msg_window(iw, ii, wt, msg_t) else: @@ -411,60 +467,12 @@ class Tunnel: ii = r"/usr/share/icons/lx-icons/48/wg_msg.png" wt = _("Select tunnel") msg_t = _("Please first import tunnel") - msg_window(iw, ii, wt, msg_t) + LxTools.msg_window(iw, ii, wt, msg_t) except TypeError: pass -def sigi(dirname): - """ - function for clean up after break - """ - - def signal_handler(signum, frame): - """ - Determine clear text names for signal numbers - """ - signals_to_names_dict = dict( - (getattr(signal, n), n) - for n in dir(signal) - if n.startswith("SIG") and "_" not in n - ) - signame = signals_to_names_dict.get(signum, f"Unnamed signal: {signum}") - - # End program for certain signals, report to others only reception - if signum in (signal.SIGINT, signal.SIGTERM): - exit_code = 1 - print( - f"\nSignal {signame} {(signum)} received. => Aborting with exit code {exit_code}." - ) - shutil.rmtree(dirname) - Path.unlink("/tmp/.loguser") - print("Breakdown by user...") - sys.exit(exit_code) - else: - print(f"Signal {signum} received and ignored.") - shutil.rmtree(dirname) - Path.unlink("/tmp/.loguser") - print("Process unexpectedly ended...") - - signal.signal(signal.SIGINT, signal_handler) - signal.signal(signal.SIGTERM, signal_handler) - signal.signal(signal.SIGHUP, signal_handler) - - -def if_tip(path): - """ - method that writes in file whether tooltip is displayed or not - """ - with open(path, "r", encoding="utf-8") as set_f2: - lines2 = set_f2.readlines() - if "False\n" in lines2: - tip = False - else: - tip = True - return tip class Tooltip: diff --git a/wirepy.py b/wirepy.py index 0560043..d3056c8 100755 --- a/wirepy.py +++ b/wirepy.py @@ -14,8 +14,7 @@ from pathlib import Path from subprocess import check_call from tkinter import TclError, filedialog, ttk -from cls_mth_fc import (Create, GiteaUpdate, Tooltip, Tunnel, if_tip, - LxTools, msg_window, sigi) +from cls_mth_fc import (Create, GiteaUpdate, Tooltip, Tunnel, LxTools) LxTools.uos() Create.dir_and_files() @@ -23,15 +22,16 @@ Create.make_dir() Create.decrypt() tcl_path = Path("/usr/share/TK-Themes") -wg_set = Path(Path.home() / ".config/wire_py/settings") -tips = if_tip(wg_set) +set_file = Path(Path.home() / ".config/wire_py/settings") +tips = LxTools.if_tip(set_file) dirname = Path("/tmp/tlecdcwg/") +userfile = Path("/tmp/.loguser") # 1 = 1. Year, 09 = Month of the Year, 2924 = Day and Year of the Year VERSION = "v. 2.04.1725" res = GiteaUpdate.api_down( - "https://git.ilunix.de/api/v1/repos/punix/Wire-Py/releases", VERSION + "https://git.ilunix.de/api/v1/repos/punix/Wire-Py/releases", VERSION, set_file ) # Translate @@ -42,7 +42,7 @@ gettext.bindtextdomain(APP, LOCALE_DIR) gettext.textdomain(APP) _ = gettext.gettext -sigi(dirname) +LxTools.sigi(dirname, userfile) class Wirepy(tk.Tk): @@ -168,7 +168,7 @@ class FrameWidgets(ttk.Frame): txt2 = _("Go to Wire-Py git") com = link_btn - msg_window(iw, ii, wt, msg_t, txt2, com) + LxTools.msg_window(iw, ii, wt, msg_t, txt2, com) # Frame for Menu self.menu_frame = ttk.Frame(self) @@ -197,8 +197,8 @@ class FrameWidgets(ttk.Frame): self.settings.add_checkbutton( label=_("Disable Tooltips"), command=tooltip, variable=set_tip ) - self.settings.add_command(label=_("Light"), command=lambda: LxTools.theme_change_light(self)) - self.settings.add_command(label=_("Dark"), command=lambda: LxTools.theme_change_dark(self)) + self.settings.add_command(label=_("Light"), command=lambda: LxTools.theme_change_light(self, set_file)) + self.settings.add_command(label=_("Dark"), command=lambda: LxTools.theme_change_dark(self, set_file)) # About BTN Menu / Label self.about_btn = ttk.Button( @@ -427,7 +427,7 @@ class FrameWidgets(ttk.Frame): ii = r"/usr/share/icons/lx-icons/48/wg_msg.png" wt = _("Select tunnel") msg_t = _("Please select a tunnel from the list") - msg_window(iw, ii, wt, msg_t) + LxTools.msg_window(iw, ii, wt, msg_t) else: @@ -436,7 +436,7 @@ class FrameWidgets(ttk.Frame): ii = r"/usr/share/icons/lx-icons/48/wg_msg.png" wt = _("Select tunnel") msg_t = _("Please first import tunnel") - msg_window(iw, ii, wt, msg_t) + LxTools.msg_window(iw, ii, wt, msg_t) # Button Trash self.btn_tr = ttk.Button( @@ -500,7 +500,7 @@ class FrameWidgets(ttk.Frame): ii = r"/usr/share/icons/lx-icons/48/wg_msg.png" wt = _("Renaming not possible") msg_t = _("The new name may contain only 12 characters") - msg_window(iw, ii, wt, msg_t) + LxTools.msg_window(iw, ii, wt, msg_t) elif len(self.lb_rename.get()) == 0: @@ -509,7 +509,7 @@ class FrameWidgets(ttk.Frame): ii = r"/usr/share/icons/lx-icons/48/wg_msg.png" wt = _("Renaming not possible") msg_t = _("At least one character must be entered") - msg_window(iw, ii, wt, msg_t) + LxTools.msg_window(iw, ii, wt, msg_t) elif any(ch in special_characters for ch in self.lb_rename.get()): @@ -520,7 +520,7 @@ class FrameWidgets(ttk.Frame): msg_t = _( "No valid sign. These must not be used.\nBlank, Slash, Backslash and { }\n" ) - msg_window(iw, ii, wt, msg_t) + LxTools.msg_window(iw, ii, wt, msg_t) else: @@ -572,7 +572,7 @@ class FrameWidgets(ttk.Frame): ii = r"/usr/share/icons/lx-icons/48/wg_msg.png" wt = _("Renaming not possible") msg_t = _("Please select a tunnel from the list") - msg_window(iw, ii, wt, msg_t) + LxTools.msg_window(iw, ii, wt, msg_t) # Button Rename self.btn_rename = ttk.Button( @@ -678,7 +678,7 @@ class FrameWidgets(ttk.Frame): msg_t = _( "Tunnel already available!\nPlease use another file for import" ) - msg_window(iw, ii, wt, msg_t) + LxTools.msg_window(iw, ii, wt, msg_t) else: @@ -827,7 +827,7 @@ class FrameWidgets(ttk.Frame): msg_t = _( "Oh... no valid Wireguard File!\nPlease select a valid Wireguard File" ) - msg_window(iw, ii, wt, msg_t) + LxTools.msg_window(iw, ii, wt, msg_t) except EOFError as e: print(e) @@ -1056,7 +1056,7 @@ class FrameWidgets(ttk.Frame): ii = r"/usr/share/icons/lx-icons/48/wg_msg.png" wt = _("Select tunnel") msg_t = _("Please select a tunnel from the list") - msg_window(iw, ii, wt, msg_t) + LxTools.msg_window(iw, ii, wt, msg_t) else: @@ -1065,7 +1065,7 @@ class FrameWidgets(ttk.Frame): ii = r"/usr/share/icons/lx-icons/48/wg_msg.png" wt = _("Select tunnel") msg_t = _("Please first import tunnel") - msg_window(iw, ii, wt, msg_t) + LxTools.msg_window(iw, ii, wt, msg_t) if __name__ == "__main__": @@ -1081,6 +1081,5 @@ if __name__ == "__main__": window.tk.call("set", "::tk::dialog::file::showHiddenVar", "0") window.mainloop() -shutil.rmtree(dirname) -Path.unlink("/tmp/.loguser") +LxTools.clean_files(dirname, userfile) sys.exit(0)