|
|
from pathlib import Path |
|
|
import subprocess |
|
|
from importlib import import_module |
|
|
import time |
|
|
import sys |
|
|
|
|
|
message = """ |
|
|
- Ready! |
|
|
- Open VSCode on your laptop and open the command prompt |
|
|
- Select: 'Remote-Tunnels: Connect to Tunnel' to connect to colab |
|
|
""".strip() |
|
|
|
|
|
dir_path = "/etc/noteable/project" |
|
|
local_folder = '/etc/noteable/project' |
|
|
|
|
|
def start_tunnel() -> None: |
|
|
command = f"cd {dir_path} &&./code tunnel --accept-server-license-terms --random-name" |
|
|
p = subprocess.Popen( |
|
|
command, shell=True, stdout=subprocess.PIPE, stderr=subprocess.STDOUT |
|
|
) |
|
|
|
|
|
show_outputs = False |
|
|
while True: |
|
|
line = p.stdout.readline().decode("utf-8") |
|
|
if show_outputs: |
|
|
print(line.strip()) |
|
|
if "To grant access to the server" in line: |
|
|
print(line.strip()) |
|
|
if "Open this link" in line: |
|
|
print("Starting the tunnel") |
|
|
time.sleep(5) |
|
|
print(message) |
|
|
print("Logs:") |
|
|
show_outputs = True |
|
|
line = "" |
|
|
if line == "" and p.poll() is not None: |
|
|
break |
|
|
return None |
|
|
|
|
|
|
|
|
def run(command: str) -> None: |
|
|
process = subprocess.run(command.split()) |
|
|
if process.returncode == 0: |
|
|
print(f"Ran: {command}") |
|
|
|
|
|
def connect() -> None: |
|
|
|
|
|
Path(local_folder).mkdir(parents=True, exist_ok=True) |
|
|
|
|
|
print("Installing python libraries...") |
|
|
run("pip3 install --user flake8 black ipywidgets twine") |
|
|
run("pip3 install -U ipykernel") |
|
|
run("apt install htop -y") |
|
|
|
|
|
print("Installing vscode-cli...") |
|
|
run( |
|
|
f"curl -Lk https://code.visualstudio.com/sha/download?build=stable&os=cli-alpine-x64 -o {dir_path}/vscode_cli.tar.gz" |
|
|
) |
|
|
run(f"tar -xf {dir_path}/vscode_cli.tar.gz -C {dir_path}") |
|
|
|
|
|
print("Starting the tunnel") |
|
|
start_tunnel() |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
connect() |