From 61cf60f141ee2d0a6acaf77571ad3a5cce397b5f Mon Sep 17 00:00:00 2001 From: nomisto Date: Tue, 28 Feb 2023 00:54:58 +0100 Subject: [PATCH 1/4] Added desktop notifications for wsl --- knockknock/desktop_sender.py | 43 ++++++++++++++++++++++++++++++++++-- 1 file changed, 41 insertions(+), 2 deletions(-) diff --git a/knockknock/desktop_sender.py b/knockknock/desktop_sender.py index 4aea957..8c8345b 100644 --- a/knockknock/desktop_sender.py +++ b/knockknock/desktop_sender.py @@ -5,18 +5,48 @@ import socket import subprocess import platform +import base64 +from platform import uname DATE_FORMAT = "%Y-%m-%d %H:%M:%S" def desktop_sender(title: str = "knockknock"): + + def in_wsl() -> bool: + return 'microsoft-standard' in uname().release + + def encode_powershell_command(text: str, title: str): + + if text.startswith("Your training has crashed"): + icon = "Error" + else: + icon = "Info" + + + ps_command = "\n".join([ + "Add-Type -AssemblyName System.Windows.Forms", + "$global:balloon = New-Object System.Windows.Forms.NotifyIcon", + "$path = (Get-Process -id $pid).Path", + "$balloon.Icon = [System.Drawing.Icon]::ExtractAssociatedIcon($path)", + "$balloon.BalloonTipIcon = [System.Windows.Forms.ToolTipIcon]::" + icon, + "$balloon.BalloonTipTitle = \"" + title + "\"", + "$balloon.BalloonTipText = \"" + text + "\"", + "$balloon.Visible = $true", + "$balloon.ShowBalloonTip(5000)" + ]) + return base64.b64encode(ps_command.encode("utf-16-le")) def show_notification(text: str, title: str): # Check the OS - if platform.system() == "Darwin": + if platform.system() == "Darwin": subprocess.run(["sh", "-c", "osascript -e 'display notification \"%s\" with title \"%s\"'" % (text, title)]) elif platform.system() == "Linux": - subprocess.run(["notify-send", title, text]) + if in_wsl(): + print() + subprocess.run(["powershell.exe", "-EncodedCommand", encode_powershell_command(text, title)]) + else: + subprocess.run(["notify-send", title, text]) elif platform.system() == "Windows": try: @@ -101,3 +131,12 @@ def wrapper_sender(*args, **kwargs): return wrapper_sender return decorator_sender + +if __name__ == "__main__": + @desktop_sender(title="Knockknock Desktop Notifier") + def train_your_nicest_model(your_nicest_parameters): + import time + time.sleep(10) + return {"loss": 0.9} + + train_your_nicest_model(0) \ No newline at end of file From 83f58725c76cdcf8d9236878767e99a1c0415a5f Mon Sep 17 00:00:00 2001 From: nomisto Date: Tue, 28 Feb 2023 01:00:43 +0100 Subject: [PATCH 2/4] Fix format --- knockknock/desktop_sender.py | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/knockknock/desktop_sender.py b/knockknock/desktop_sender.py index 8c8345b..9fef5e4 100644 --- a/knockknock/desktop_sender.py +++ b/knockknock/desktop_sender.py @@ -22,7 +22,6 @@ def encode_powershell_command(text: str, title: str): else: icon = "Info" - ps_command = "\n".join([ "Add-Type -AssemblyName System.Windows.Forms", "$global:balloon = New-Object System.Windows.Forms.NotifyIcon", @@ -38,7 +37,7 @@ def encode_powershell_command(text: str, title: str): def show_notification(text: str, title: str): # Check the OS - if platform.system() == "Darwin": + if platform.system() == "Darwin": subprocess.run(["sh", "-c", "osascript -e 'display notification \"%s\" with title \"%s\"'" % (text, title)]) elif platform.system() == "Linux": From 7395517065938e9fe2947b0ba28fadbb5e8c3ac9 Mon Sep 17 00:00:00 2001 From: nomisto Date: Tue, 28 Feb 2023 14:23:51 +0100 Subject: [PATCH 3/4] Remove main --- knockknock/desktop_sender.py | 11 +---------- 1 file changed, 1 insertion(+), 10 deletions(-) diff --git a/knockknock/desktop_sender.py b/knockknock/desktop_sender.py index 9fef5e4..ba87cdf 100644 --- a/knockknock/desktop_sender.py +++ b/knockknock/desktop_sender.py @@ -37,7 +37,7 @@ def encode_powershell_command(text: str, title: str): def show_notification(text: str, title: str): # Check the OS - if platform.system() == "Darwin": + if platform.system() == "Darwin": subprocess.run(["sh", "-c", "osascript -e 'display notification \"%s\" with title \"%s\"'" % (text, title)]) elif platform.system() == "Linux": @@ -130,12 +130,3 @@ def wrapper_sender(*args, **kwargs): return wrapper_sender return decorator_sender - -if __name__ == "__main__": - @desktop_sender(title="Knockknock Desktop Notifier") - def train_your_nicest_model(your_nicest_parameters): - import time - time.sleep(10) - return {"loss": 0.9} - - train_your_nicest_model(0) \ No newline at end of file From 42bcc9ecfcd872f9732e86dbcda6acc9ab239488 Mon Sep 17 00:00:00 2001 From: Simon Ott Date: Sun, 19 Mar 2023 17:23:12 +0100 Subject: [PATCH 4/4] Remove debug print --- knockknock/desktop_sender.py | 1 - 1 file changed, 1 deletion(-) diff --git a/knockknock/desktop_sender.py b/knockknock/desktop_sender.py index ba87cdf..9afd52d 100644 --- a/knockknock/desktop_sender.py +++ b/knockknock/desktop_sender.py @@ -42,7 +42,6 @@ def show_notification(text: str, title: str): elif platform.system() == "Linux": if in_wsl(): - print() subprocess.run(["powershell.exe", "-EncodedCommand", encode_powershell_command(text, title)]) else: subprocess.run(["notify-send", title, text])