Mar 11, 2024
#374 Climbing the Python Web Mountain
Topics covered in this episode:
* 6 ways to improve the architecture of your Python project (using import-linter)
* Mountaineer
* Why Python's Integer Division Floors
* Hatchet
* Extras
* Joke Watch on YouTube
About the show
Sponsored by ScoutAPM: pythonbytes.fm/scout
Connect with the hosts
* Michael: @mkennedy@fosstodon.org
* Brian: @brianokken@fosstodon.org
* Show: @pythonbytes@fosstodon.org
Join us on YouTube at pythonbytes.fm/live to be part of the audience. Usually Tuesdays at 11am PT. Older video versions available there too.
Brian #1: 6 ways to improve the architecture of your Python project (using import-linter)
* Piglei
* Using import-linter to
* define architectural layers
* check to make sure imports don’t violate (import from upper layers)
* can also check for more contracts, such as
* forbidden - disallow a specific from/to import
* independence - list of modules that shouldn’t import from each other
* Fixing violations
* a process introduced to set exceptions for each violation in a config file
* then fix violations 1 at a time (nice approach)
* use the whole team if you can
* Common methods for fixing dependency issues
* Merging and splitting modules
* Dependency Injection, including using protocols to keep type hints without the need to import just for types
* Use simpler dependency types
* Delaying function implementations
* module global methods set by caller, or adding a simple plugin/callback system
* Configuration driven
* Setting import statements in a config file and using import_string() at runtime
* Replace function calls with event-driven approaches
Michael #2: Mountaineer
* Mountaineer is a batteries-included web framework for Python and React.
* Mountaineer focuses on developer productivity above all else, with production speed a close second.
* 📝 Typehints up and down the stack: frontend, backend, and database
* 🎙️ Trivially easy client[HTML_REMOVED]server communication, data binding, and function calling
* 🌎 Optimized server rendering for better accessibility and SEO
* 🏹 Static analysis of web pages for strong validation: link validity, data access, etc.
* 🤩 Skip the API or Node.js server just to serve frontend clients
Brian #3: Why Python's Integer Division Floors
* Guido van Rossum
* Integer division always floors (toward negative infinity) instead of truncating. (C truncates)
* 5//2 → 2
* -5//2 → -3
* 5//-2 → -3
* Reason,
* For nice mathematical relationships with // and % (modulo).
* a//b = quotient (q), a%b = remainder (r)
* such that b*q + r = a, and 0 <= r < b
* This works for both positive and negative a values
* For negative b, the second rule has to change to 0 >= r > b
* If you truncate (like C does), you have to use abs(r) for the first rule to work.
* Theory of why C doesn’t do it this way: Probably a hardware limitation at the time when C was designed, due to “sign + magnitude” integers instead of modern two’s compliment integers.
Michael #4: Hatchet
* Hatchet is a distributed, fault-tolerant task queue which replaces traditional message brokers and pub/sub systems.
* It’s built to solve problems like concurrency, fairness, and durability
* Concurrency, Fairness, and Rate limiting: Enable FIFO, LIFO, Round Robin, and Priority Queues with built-in strategies to avoid common pitfalls.
* Architected for Resiliency: Customizable retry policies and built-in error handling to recover from transient failures.
Extras
Brian:
* Charlie Marsh on uv in PythonTest episode 216
Michael:
* Build An Audio AI App Course [free!]
* Rock Solid Python with Python Typing Course
* Coolio
Joke: Breaking Prod