Spaces:
Paused
Paused
File size: 4,365 Bytes
6ca8ec7 6fe716c 6ca8ec7 6fe716c 6ca8ec7 6fe716c 6ca8ec7 6fe716c 6ca8ec7 6fe716c 6ca8ec7 6fe716c 6ca8ec7 6fe716c 6ca8ec7 6fe716c 6ca8ec7 6fe716c 6ca8ec7 6fe716c 6ca8ec7 6fe716c 6ca8ec7 |
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 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 |
import dash
from dash import dcc, html, Input, Output, State, callback
import dash_bootstrap_components as dbc
import uuid
import sqlite3
app = dash.Dash(__name__, external_stylesheets=[dbc.themes.BOOTSTRAP])
# Initialize SQLite database
DB_FILE = 'links.db'
def get_db_connection():
conn = sqlite3.connect(DB_FILE, check_same_thread=False)
conn.row_factory = sqlite3.Row
return conn
def init_db():
conn = get_db_connection()
c = conn.cursor()
c.execute('''CREATE TABLE IF NOT EXISTS links
(id TEXT PRIMARY KEY, name TEXT, url TEXT)''')
conn.commit()
# Initialize with some example URLs if the table is empty
c.execute("SELECT COUNT(*) FROM links")
if c.fetchone()[0] == 0:
initial_urls = [
{"id": str(uuid.uuid4()), "name": "Google", "url": "https://www.google.com"},
{"id": str(uuid.uuid4()), "name": "Bing", "url": "https://www.bing.com"},
]
c.executemany("INSERT INTO links VALUES (:id, :name, :url)", initial_urls)
conn.commit()
conn.close()
init_db()
# Function to get all links from the database
def get_links():
conn = get_db_connection()
c = conn.cursor()
c.execute("SELECT * FROM links")
links = [dict(row) for row in c.fetchall()]
conn.close()
return links
app.layout = dbc.Container([
dbc.Row([
# Left navigation column
dbc.Col([
html.H2("My URL App", className="mt-3 mb-4"),
html.Div(id='url-list'),
dbc.Input(id='new-url-name', placeholder="New URL Name", className="mb-2"),
dbc.Input(id='new-url-link', placeholder="New URL", className="mb-2"),
dbc.Button("Add URL", id='add-url-button', color="primary", className="mb-3"),
], width=3, className="bg-light p-3"),
# Main content column with iframe
dbc.Col([
html.Iframe(id='content-iframe', style={'width': '100%', 'height': '800px'})
], width=9)
])
], fluid=True)
@callback(
Output('url-list', 'children'),
Input('add-url-button', 'n_clicks'),
State('new-url-name', 'value'),
State('new-url-link', 'value')
)
def update_url_list(n_clicks, new_name, new_link):
ctx = dash.callback_context
if ctx.triggered_id == 'add-url-button' and new_name and new_link:
conn = get_db_connection()
c = conn.cursor()
new_id = str(uuid.uuid4())
c.execute("INSERT INTO links VALUES (?, ?, ?)", (new_id, new_name, new_link))
conn.commit()
conn.close()
links = get_links()
return [
dbc.Button(
link['name'],
id={'type': 'url-button', 'index': link['id']},
color="link",
className="d-block text-left mb-2"
) for link in links
] + [
dbc.Button(
"Delete",
id={'type': 'delete-button', 'index': link['id']},
color="danger",
size="sm",
className="mr-2 mb-2"
) for link in links
]
@callback(
Output('content-iframe', 'src'),
Input({'type': 'url-button', 'index': dash.ALL}, 'n_clicks')
)
def update_iframe(n_clicks):
ctx = dash.callback_context
if not ctx.triggered:
return dash.no_update
button_id = ctx.triggered[0]['prop_id'].split('.')[0]
clicked_id = eval(button_id)['index']
conn = get_db_connection()
c = conn.cursor()
c.execute("SELECT url FROM links WHERE id = ?", (clicked_id,))
result = c.fetchone()
conn.close()
if result:
return result['url']
return dash.no_update
@callback(
Output('url-list', 'children', allow_duplicate=True),
Input({'type': 'delete-button', 'index': dash.ALL}, 'n_clicks'),
prevent_initial_call=True
)
def delete_url(n_clicks):
ctx = dash.callback_context
if not ctx.triggered:
return dash.no_update
button_id = ctx.triggered[0]['prop_id'].split('.')[0]
delete_id = eval(button_id)['index']
conn = get_db_connection()
c = conn.cursor()
c.execute("DELETE FROM links WHERE id = ?", (delete_id,))
conn.commit()
conn.close()
return update_url_list(None, None, None)
if __name__ == '__main__':
print("Starting the Dash application...")
app.run(debug=True, host='0.0.0.0', port=7860)
print("Dash application has finished running.") |