#374: Climbing the Python Web Mountain
Published Mon, Mar 11, 2024,
recorded Mon, Mar 11, 2024
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
- Setting import statements in a config file and using
- 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:
Michael:
Joke: Breaking Prod