Page Menu
Home
Phabricator
Search
Configure Global Search
Log In
Files
F34629767
reload script for datasette
No One
Actions
View File
Edit File
Delete File
View Transforms
Subscribe
Mute Notifications
Award Token
Flag For Later
Authored By
•
mmodell
Sep 2 2021, 9:46 PM
2021-09-02 21:46:08 (UTC+0)
Size
1 KB
Referenced Files
None
Subscribers
None
reload script for datasette
View Options
#!/bin/bash
# This is a script that can be used to reload datasette and refresh firefox when you save changes.
# Auto reload/refresh makes testing changes a lot easier/quicker.
#
# This is essentially an infinite loop that restarts datasette when datasette exits,
# then triggers firefox to refresh the current tab using xdotool (unix/xwindows only, sorry mac people)
#
# This script triggers a restart by sending a signal to the datasette process:
#
# SIGUSR1 causes datasette to exit and the loop below restarts it.
#
# To make this useful, I have a vs.code plugin set up to run this script every time
# I save a file in the data/ subdirectory. This avoids complex/resource limited filesystem watchers.
#
# run this script in a spare terminal to keep datasette running, then have your editor trigger
# this same script to restart datasette. The script doesn't go into an infinite loop if it finds
# and existing datasette process to kill. If no datasette process is founed then it loops.
# ctrl-c to end the infinite loop.
#
source
venv/bin/activate
PORT
=
8002
refresh
()
{
# refresh the active tab in the first visible firefox window that is found.
# if you have more than one firefox window, minimize all but one.
sleep
2
CURRENT_WID
=
$(
xdotool getwindowfocus
)
WID
=
$(
xdotool search --onlyvisible --limit
1
--name
"Mozilla Firefox"
)
xdotool windowactivate
$WID
xdotool key F5
xdotool windowactivate
$CURRENT_WID
exit
0
# don't run the infinite loop if we successfully killed a background process
}
# restart and refresh
pkill -f
"datasette.+
$PORT
"
-USR1
&&
refresh
;
# we only get this far if datasette wasn't already running, so start it and go into the loop:
command
=
"datasette -p
$PORT
-h 0.0.0.0 --reload
${
fileDirname
}
$@
"
echo
"running:
$command
"
cleanup
()
{
exit
0
;
}
trap
"cleanup"
SIGINT
# trap the SIGINT so that ctrl+c still works in the controlling terminal.
while
[
1
]
;
do
echo
$command
;
$command
;
done
echo
"Exiting..."
File Metadata
Details
Attached
Mime Type
text/plain; charset=utf-8
Storage Engine
blob
Storage Format
Raw Data
Storage Handle
9173059
Default Alt Text
reload script for datasette (1 KB)
Attached To
Mode
P17190 reload script for datasette
Attached
Detach File
Event Timeline
Log In to Comment