Python + Poetry
Purpose
Python is a popular multi-purpose programming language. Poetry is a project manager for python that enables many creature comforts found in the web development world (specifically comparing to nodejs and npm). Poetry ensures each developer works in the same virtual environment with the same package versions reducing development issues. Similar to a package lock in npm, poetry has a lock file which stores the hash of each version to help pip get the correct files. Poetry also offers build toolds for packaging the application as a distributable.
Why was it selected?
Streamlit is built on python making it a no brainer! Poetry simplified the build process and virtual environment management system for our team.
Streamlit
Purpose
Streamlit is a Python based website development framework with a focus on data science. It is a heavily opinionated framework which handles much of the styling and offers a library of common components typically required for working data. Streamlit offers a component system to create custom Javascript/html/css elements when needed.
Why was it selected?
Streamlit is focused around data science so it offers support and direct integration with many popular data analysis libraries such as Pandas, Matplotlib, Numpy, and much more. It offers items such as a file uploader and basic input form generation to allow us to spend less time designing and creating the user interface, and more time working on the backend data analsis tools. Streamlit's wide variety of components also enable additional functionality, one in particular was the AgGrid component which allowed us to integrate near the same functionality found in excel to a browser table viewer.
Flet
Purpose
Flet enabled building of a quick user interface for the distributable desktop application.
Why was it selected?
Flet is a python adaptation of flutter, a popular cross platform UI and application development library. Similar to streamlit, flet comes with many commonly used UI elements pre-styled and ready for use allowing us to focus more on the core business logic and less on the user interface.
Playwright
Purpose
Playwright is an end-to-end testing library which allows you to write tests automating the behavior of a user visiting your website in a headless browser. Playwright offers many debugging features including the ability to view the test running in real time within a browser. Playwright's python package integrates with PyTest allowing for the same fixtures and marker functionality pytest has.
Why was it selected?
Playwright offers many useful features for debugging such as a trace viewer which shows a recorded demo of the entire browser session and activity from start to end of a test for later review. Playwright also offers a codegen utility which will open a browser and allow you to use your website how you'd like the test to run, and it will generate all the actions you took from start to finish into playwright test code. Playwright allowed us to spend less time writing tests as it streamlined a lot of the process.
UnitTest
Purpose
Simple unittest library for python.
Why was it selected?
Something we were familiar with using.
PyLint
Purpose
Python code linter
Why was it selected?
Allows for easy to configure file for setting rules. Has a VS code integration to allow for linting while you code.
PyOxidizer
Purpose
Python packaging utility for creating executables and distributables.
Why was it selected?
PyOxidizer allows integration with Bazel files allowing for much more control over how distributables were made. Getting streamlit to run as a packaged application requires a lot of extra elements to bundled. Most packaging libraries will intelligently look through your code to see what it needs to bundle and what it doesn't. Since streamlit runs through a separate cli tool by default, many of streamlit's dependencies are missed by most automatic simple tools. PyOxidizer gives the ability to bundle an entire python executable helpful for running streamlit correctly.