[HN Gopher] Datasette Lite: a server-side Python web application... ___________________________________________________________________ Datasette Lite: a server-side Python web application running in a browser Author : simonw Score : 143 points Date : 2022-05-04 15:22 UTC (7 hours ago) (HTM) web link (simonwillison.net) (TXT) w3m dump (simonwillison.net) | tomatowurst wrote: | absolutely insane. seems like its installing pip packages and | running localhost in the browser? I don't 100% grasp what is | happening underneath the hood. But usually you would launch the | local server, browse over to http://localhost to view it in your | browser. This is running the web server inside Web Assembly | inside your browser? Is it then possible to expose that local web | server inside web assembly to the internet? Crazy stuff! looks | like its possible to speed up the initial load time by using web | workers, very much eager to see that in action. | Loading... distutils already loaded from default channel | Loading micropip, pyparsing, packaging Loaded micropip, | pyparsing, packaging Loading ssl, openssl Loaded | ssl, openssl distutils already loaded from default | channel pyparsing already loaded from default channel | Loading setuptools Loaded setuptools | simonw wrote: | That's pretty much what it's doing! | | It runs everything in a web worker at the moment, not sure if | there are optimizations I could make by running more of them in | parallel? | | It doesn't exactly run a localhost server. It uses a mechanism | from Datasette's internals that lets you simulate an HTTP | request through the Datasette application and get back the | result. Then it sends that result back as a message from the | worker to the parent page. | | It's using this API here for that: | https://docs.datasette.io/en/stable/internals.html#datasette... | [deleted] | detaro wrote: | Please re-read the site guidelines and don't do this: | https://twitter.com/simonw/status/1521878251848683520 | simonw wrote: | For anyone wondering, my tweet here (which I deleted just | before I saw this comment) was asking for help with votes on | Hacker News. | pstuart wrote: | SQLite is so beloved that it's a natural for upvotes here ;-) | tomatowurst wrote: | I don't see anything wrong with this. We regularly see YC | companies getting upvoted. | pseudosavant wrote: | Really cool idea and implementation! It is really making me think | about if this can be done in a service worker so that you could | expose what would look like a standard (REST?) API? | | It seems like a client-side non-JS server backend would be | incredibly useful. Just drop the service worker in and point it | at your data source. | simonw wrote: | I tried building this with a Service Worker first and it didn't | work, because Pyodide needs XMLHttpRequest. | | I opened an issue about that here: | https://github.com/pyodide/pyodide/issues/2432 | rmnclmnt wrote: | Pyodide is unlocking a new era for the Python data ecosystem! So | awesome Datasette is jumping on the train! | nineteen999 wrote: | I wondered for a moment why it was named after the Commodore | Datasette: | | https://en.wikipedia.org/wiki/Commodore_Datasette | | I hadn't heared of datasette.io before. Looks like an interesting | product. | thadk wrote: | How close is Python SQLite and Datasette Lite to accessing a | hosted SQL database using HTTP range requests as can be done in | sql.js like https://github.com/phiresky/sql.js-httpvfs? | | I put together a Pyodide-based web app where users need a few | indexed queries from a 600mb SQLite database but it isn't very | practical for them to download the whole thing into the browser. | I would datasettify it and access it by API, if I wasn't relying | on a pyodide library that needs direct SQLite access. | | https://observablehq.com/@thadk/life | simonw wrote: | I have an open issue for that here: | https://github.com/simonw/datasette-lite/issues/28 | | My initial hunch is that this will be really difficult - | probably require a fork of something like | https://github.com/coleifer/pysqlite3 then compiled for | WebAssembly. | | I'm confident it's feasible, but I don't have the skills to | figure it out myself. | db65edfc7996 wrote: | This was also my immediate thought. Being able to statically | deploy larger databases without a server process would be an | absolute dream. Approaching dangerously high levels of dark | magic. | gavinray wrote: | It really blows my mind that you could (mostly) just up and shove | the Datasette code into a browser. What a time to be alive. | simonw wrote: | Yeah, ditto! | [deleted] | almost wrote: | That's really cool | andrewmcwatters wrote: | The datasette tools are really great. I use them for pulling | GitHub statistics, such as the distribution of GitHub followers, | from their REST API into an SQLite database with sqlite- | utils(1).[1] | | Simon is in the 99th percentile (PR=0.998, n>25,000+) of GitHub | users by followers. | | Thanks for such great tools, Simon! | | [1]: https://github.com/andrewmcwattersandco/github-statistics | simonw wrote: | Wow, I didn't know SQLite databases could compress that well: | | github-users.tzst - 96MB | | Uncompressed: | | github-users.db - 992MB | rodcodes wrote: | eatonphil wrote: | My biggest issue with Pyodide (which is of course an awesome | project/build on its own) is the long wait times. I haven't | figured out a way around a ~5 second load time _where the entire | UI hangs_ every single time you load the page. | | My app (similar to Simon's, a lite mode of a data IDE): | https://app.datastation.multiprocess.io. | | My code: | https://github.com/multiprocessio/datastation/blob/main/shar.... | StreakyCobra wrote: | If you use it in a web worker the UI does not hang. It requires | a bit more setup though: | | https://pyodide.org/en/stable/usage/webworker.html | | Edit: typo | kencausey wrote: | Related: https://news.ycombinator.com/item?id=31259027 | gavinray wrote: | Damn, I had an idea to build a very similar thing since last | week. There's nothing new under the sun. | | Really impressive app though, great job. | simonw wrote: | Running in a Web Worker can help a lot here - you can at least | avoid locking the main browser UI thread and show your own | loading indicator. | simonw wrote: | You can try it out here: https://simonw.github.io/datasette-lite/ | | Or if you have a SQLite database hosted online somewhere with | open CORS headers you can feed it the URL using ?url=... - like | this: | | https://simonw.github.io/datasette-lite/?url=https%3A%2F%2Fc... | riyadparvez wrote: | Hi Simon, thank you for the great work. Do you have any plan to | support DuckDB in future? | simonw wrote: | I am seriously considering adding a plugin hook to support | alternative database backends - PostgreSQL and DuckDB are the | two I'm most interested in for that. | tomthe wrote: | Hi, I work in an academic setting and I found datasette always | interesting to publish datasets, but it is hard to host a | python web application on institutional servers (would have to | convince several people who would have to maintain this). | Hosting static files is very easy - time to try datassete! | simonw wrote: | Awesome! I'm really keen to see Datasette used more in | academia, I hadn't thought about how much easier it would be | to deploy static files in that context. ___________________________________________________________________ (page generated 2022-05-04 23:00 UTC)