Adds a custom database wrapper to workaround an incompatibility between Django 4.2 and Spatailite 5.
Re-imagines plugins
What do I mean by re-imagining plugins? Initially plugins were designed around a Wordpress-style plugin interface. Drag a python module to a directory on your VPS, refresh the page, and click enable. Tanzawa would then restart the process and run migrations on start up so users wouldn't need to manually do anything with the database.
This isn't possible in the new reality of running Tanzawa on fly.io beause there's instances of the app running on multiple servers and restarting the parent process on one doesn't restart them all.
As such this PR will embrace fly.io and move all migrations to be running on deploy. As a bonus, this will allow us to remove a lot of the complexity / hacks in the plugin system. Instead of having active / deactivate links, we will include the commands to run them instead.
This PR fixes a couple of different issues:
What do I mean by re-imagining plugins? Initially plugins were designed around a Wordpress-style plugin interface. Drag a python module to a directory on your VPS, refresh the page, and click enable. Tanzawa would then restart the process and run migrations on start up so users wouldn't need to manually do anything with the database.
This isn't possible in the new reality of running Tanzawa on fly.io beause there's instances of the app running on multiple servers and restarting the parent process on one doesn't restart them all.
As such this PR will embrace fly.io and move all migrations to be running on deploy. As a bonus, this will allow us to remove a lot of the complexity / hacks in the plugin system. Instead of having active / deactivate links, we will include the commands to run them instead.