v0.9.0 🚀 Breaking changes: - Massive refactoring across the entire library. lib.data has moved to lib.remote, lib.sql has been split between lib.connections, lib.local, and lib.util.sql, and lib.util split up into the latter sql as well as cleanup and data. The only remaining major refactor is to move lib.national into lib.local and set up as a National class. - Harcoded data has been eliminated from the source code. config.yaml should now specify values for file servers and potential backups, a path for reference and template files, and SQL server & database strings. Additionally, all bin/* scripts that require a configuration file should save those files in REPORT_HOME/configs. New features: - Cleaning NA columns for Excel output as well as .pivot_table creation is now available through lib.util.cleanup.na(). - lib.util.data.subtotal() works for multiple aggregate functions as well as allows for pivot table margins. - Both the GUI and lib.remote.run() implement the filename argument from lib.remote.File in order to override auto-generated filename (or the configurated one) and automatically versions filenames with the same name as opposed to the previous overwrite. - Both the GUI and lib.remote.run() now implement the open_file argument from lib.remote.File in order to automatically open the output Excel file instead of running it in the background. Bug fixes: - SQLAlchemy use instead of pyodbc in order to consolidate into a library fully supported by pandas. - lib.util.sql.operator() now casts a value passed to it to a string as there is no longer a dependence on pydantic. - An AssertionError is no longer raised when trying to send an email with an empty Email struct. - DataFrame.append calls have been changed to pd.concat as per the pandas depreciation warning. - The makefile path to change into the correct directory before running install.bat has been corrected. Other: - README has been split and made general, while detailed usage information is available in the wiki https://man.sr.ht/~savoy/ade-wiki/