File size: 2,134 Bytes
bc37cf8
 
9d0f13c
bc37cf8
 
dd7318c
e0e84a7
dd7318c
e0e84a7
 
dd7318c
9d0f13c
bc37cf8
dd7318c
 
 
bc37cf8
 
 
 
 
 
 
e0e84a7
 
 
bc37cf8
 
 
e0e84a7
bc37cf8
e0e84a7
bc37cf8
e0e84a7
 
bc37cf8
 
 
e0e84a7
dd7318c
 
e0e84a7
 
 
 
 
 
 
 
 
 
 
bc37cf8
 
dd7318c
 
 
bc37cf8
 
dd7318c
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
# Filename: /home/user/app/app.py
# Version: 1691068773 (Unix timestamp at creation moment)

import os
import subprocess
from flask import Flask, redirect
import gradio as gr
from werkzeug.serving import WSGIRequestHandler

app = Flask(__name__)
log_file = "/home/user/app/app.log"

def install_packages():
    # Install necessary packages if they are not already installed
    with open(log_file, "a") as f:
        subprocess.run(['pip3', 'install', '--quiet', 'jupyterlab', 'flask', 'gradio'], check=True)

def configure_jupyter():
    # Generate Jupyter configuration
    jupyter_config_dir = os.path.expanduser('~/.jupyter')
    os.makedirs(jupyter_config_dir, exist_ok=True)
    
    config_file = os.path.join(jupyter_config_dir, 'jupyter_lab_config.py')
    jupyter_password = os.environ.get('JUPYPASS', '')
    password_config = f"c.ServerApp.password = u'{jupyter_password}'" if jupyter_password else ''
    
    with open(config_file, 'w') as f:
        f.write(f"""
c.ServerApp.ip = '0.0.0.0'
c.ServerApp.port = 8888
c.ServerApp.open_browser = False
{password_config}
c.ServerApp.root_dir = '/home/user/app'
c.ServerApp.terminado_settings = {{'shell_command': ['bash']}}
c.ServerApp.allow_root = True
        """)

def start_jupyter():
    # Start JupyterLab on port 8888 with autoreload
    with open(log_file, "a") as f:
        subprocess.Popen(['jupyter-lab', '--port', '8888', '--autoreload'], stdout=f, stderr=f)

@app.route('/')
def home():
    def greet(name):
        return f"Hello {name}!"
    iface = gr.Interface(fn=greet, inputs="text", outputs="text")
    return iface.launch(inline=True)

@app.route('/lab')
def lab():
    return redirect("http://localhost:8888", code=302)

if __name__ == "__main__":
    with open(log_file, "a") as f:
        f.write("===== Application Startup at {0} =====\n".format(subprocess.run(['date'], capture_output=True, text=True).stdout))
    
    install_packages()
    configure_jupyter()
    start_jupyter()
    
    # Disable logging for Flask
    WSGIRequestHandler.log_request = lambda self, *args, **kwargs: None
    
    app.run(host='0.0.0.0', port=7860, debug=False)