{"title":"PyCoder\u2019s Weekly","link":[{"@attributes":{"href":"https:\/\/pycoders.com\/feed\/ixo1S0ty","rel":"self"}},{"@attributes":{"href":"https:\/\/pycoders.com\/"}}],"updated":"2026-03-31T19:30:00+00:00","id":"https:\/\/pycoders.com\/","author":{"name":"PyCoder\u2019s Weekly"},"entry":[{"title":"Issue #728: Django With Alpine, Friendly Classes, SQLAlchemy, and More (March 31, 2026)","id":"https:\/\/pycoders.com\/issues\/728","link":{"@attributes":{"href":"https:\/\/pycoders.com\/issues\/728"}},"updated":"2026-03-31T19:30:00+00:00","content":"\n         <p> <span>#728 \u2013 MARCH 31, 2026<\/span><br> <span><a href=\"https:\/\/pycoders.com\/issues\/728\/feed\">View in Browser \u00bb<\/a><\/span> <\/p> <p><a href=\"https:\/\/pycoders.com\"><img alt=\"The PyCoder&rsquo;s Weekly Logo\" src=\"https:\/\/cdn.pycoders.com\/37bdf31dc645f968ffb90196e5d38ff5\" style=\"max-width: 100%;\"><\/a><\/p> <hr> <div> <h3 style=\"margin-bottom: 0;\"><a href=\"https:\/\/pycoders.com\/link\/16215\/feed\" target=\"_blank\">Django Apps With Alpine AJAX, Revisited<\/a><\/h3> <p style=\"margin-bottom: 0;\"> The author has been modifying his approach to Django projects with Alpine AJAX over the last nine months. This post describes what he&rsquo;s changed and how his process has improved.<br> <span style=\"color: #AAAAAA;font-weight: normal;text-decoration: none;word-wrap: break-word;-ms-text-size-adjust: 100%;-webkit-text-size-adjust: 100%;font-size:0.8em;text-transform:normal;\"><a href=\"https:\/\/pycoders.com\/link\/16215\/feed\" style=\"color: #AAAAAA;font-weight: normal;text-decoration: none;word-wrap: break-word;-ms-text-size-adjust: 100%;-webkit-text-size-adjust: 100%;\" target=\"_blank\">LOOPWERK<\/a><\/span> <\/p> <\/div> <div> <h3 style=\"margin-bottom: 0;\"><a href=\"https:\/\/pycoders.com\/link\/16213\/feed\" target=\"_blank\">Making Friendly Classes<\/a><\/h3> <p style=\"margin-bottom: 0;\"> What&rsquo;s a friendly class? One that accepts sensible arguments, has a nice string representation, and supports equality checks. Read on to learn how to write them.<br> <span style=\"color: #AAAAAA;font-weight: normal;text-decoration: none;word-wrap: break-word;-ms-text-size-adjust: 100%;-webkit-text-size-adjust: 100%;font-size:0.8em;text-transform:normal;\"><a href=\"https:\/\/pycoders.com\/link\/16213\/feed\" style=\"color: #AAAAAA;font-weight: normal;text-decoration: none;word-wrap: break-word;-ms-text-size-adjust: 100%;-webkit-text-size-adjust: 100%;\" target=\"_blank\">TREY HUNNER<\/a><\/span> <\/p> <\/div> <div> <h3 style=\"margin-bottom: 0;\"><a href=\"https:\/\/pycoders.com\/link\/16187\/feed\" target=\"_blank\">Right-Size Your Celery &amp; RQ Workers<\/a><\/h3> <a href=\"https:\/\/pycoders.com\/link\/16187\/feed\" target=\"_blank\"><img style=\"float:right; margin-left: 16px; margin-top: 7px; width: 17%;\" src=\"https:\/\/cdn.pycoders.com\/4373666f0f4efd84fc5ff93afe6c4c06\" alt><\/a> <p style=\"margin-bottom: 0;\"> CPU doesn&rsquo;t tell you if tasks are piling up. Queue latency does. Autoscale your workers based on <a href=\"https:\/\/pycoders.com\/link\/16187\/feed\" target=\"_blank\">the metric that matters \u2192<\/a><br> <span style=\"color: #AAAAAA;font-weight: normal;text-decoration: none;word-wrap: break-word;-ms-text-size-adjust: 100%;-webkit-text-size-adjust: 100%;font-size:0.8em;text-transform:normal;\"><a href=\"https:\/\/pycoders.com\/link\/16187\/feed\" style=\"color: #AAAAAA;font-weight: normal;text-decoration: none;word-wrap: break-word;-ms-text-size-adjust: 100%;-webkit-text-size-adjust: 100%;\" target=\"_blank\">JUDOSCALE<\/a><\/span> <span style=\"color: #AAAAAA;text-transform:uppercase;padding:1px 4px;border:1px solid #dddddd;margin-left:4px;font-size:0.8em;border-radius:2px;background-color:#ffffe0;\">sponsor<\/span> <\/p> <\/div> <div> <h3 style=\"margin-bottom: 0;\"><a href=\"https:\/\/pycoders.com\/link\/16198\/feed\" target=\"_blank\">Understanding CRUD Operations in SQL<\/a><\/h3> <p style=\"margin-bottom: 0;\"> Learn how CRUD operations work in SQL by writing raw SQL queries with SQLite and using SQLAlchemy as an ORM in Python.<br> <span style=\"color: #AAAAAA;font-weight: normal;text-decoration: none;word-wrap: break-word;-ms-text-size-adjust: 100%;-webkit-text-size-adjust: 100%;font-size:0.8em;text-transform:normal;\"><a href=\"https:\/\/pycoders.com\/link\/16198\/feed\" style=\"color: #AAAAAA;font-weight: normal;text-decoration: none;word-wrap: break-word;-ms-text-size-adjust: 100%;-webkit-text-size-adjust: 100%;\" target=\"_blank\">REAL PYTHON<\/a><\/span> <span style=\"color: #AAAAAA;text-transform:uppercase;padding:1px 4px;border:1px solid #dddddd;margin-left:4px;font-size:0.8em;border-radius:2px;\">course<\/span> <\/p> <\/div> <div> <h3 style=\"margin-bottom: 0;\"><a href=\"https:\/\/pycoders.com\/link\/16194\/feed\" target=\"_blank\">Starlette 1.0 Released<\/a><\/h3> <p style=\"margin-bottom: 0;\"> <span style=\"color: #AAAAAA;font-weight: normal;text-decoration: none;word-wrap: break-word;-ms-text-size-adjust: 100%;-webkit-text-size-adjust: 100%;font-size:0.8em;text-transform:normal;\"><a href=\"https:\/\/pycoders.com\/link\/16194\/feed\" style=\"color: #AAAAAA;font-weight: normal;text-decoration: none;word-wrap: break-word;-ms-text-size-adjust: 100%;-webkit-text-size-adjust: 100%;\" target=\"_blank\">MARCELOTRYLE.COM<\/a><\/span> <\/p> <\/div> <div> <h3 style=\"margin-bottom: 0;\"><a href=\"https:\/\/pycoders.com\/link\/16220\/feed\" target=\"_blank\">PyCon Austria April 19-20, Registrations Open<\/a><\/h3> <p style=\"margin-bottom: 0;\"> <span style=\"color: #AAAAAA;font-weight: normal;text-decoration: none;word-wrap: break-word;-ms-text-size-adjust: 100%;-webkit-text-size-adjust: 100%;font-size:0.8em;text-transform:normal;\"><a href=\"https:\/\/pycoders.com\/link\/16220\/feed\" style=\"color: #AAAAAA;font-weight: normal;text-decoration: none;word-wrap: break-word;-ms-text-size-adjust: 100%;-webkit-text-size-adjust: 100%;\" target=\"_blank\">PYCON.AT<\/a> \u2022 Shared by Horst JENS<\/span> <\/p> <\/div> <div> <h3 style=\"margin-bottom: 0;\"><a href=\"https:\/\/pycoders.com\/link\/16197\/feed\" target=\"_blank\">PyOhio 2026 Call for Proposals Now Open!<\/a><\/h3> <p style=\"margin-bottom: 0;\"> <span style=\"color: #AAAAAA;font-weight: normal;text-decoration: none;word-wrap: break-word;-ms-text-size-adjust: 100%;-webkit-text-size-adjust: 100%;font-size:0.8em;text-transform:normal;\"><a href=\"https:\/\/pycoders.com\/link\/16197\/feed\" style=\"color: #AAAAAA;font-weight: normal;text-decoration: none;word-wrap: break-word;-ms-text-size-adjust: 100%;-webkit-text-size-adjust: 100%;\" target=\"_blank\">PRETALX.COM<\/a> \u2022 Shared by Anurag Saxena<\/span> <\/p> <\/div> <h2>Articles &amp; Tutorials<\/h2> <div> <h3 style=\"margin-bottom: 0;\"><a href=\"https:\/\/pycoders.com\/link\/16200\/feed\" target=\"_blank\">When Vectorized Arrays Aren&rsquo;t Enough<\/a><\/h3> <p style=\"margin-bottom: 0;\"> This is a deep dive post about vectorized arrays in NumPy and how some optimizations work and some do not. There is also a follow-up as well: <a href=\"https:\/\/pycoders.com\/link\/16199\/feed\" target=\"_blank\">Vectorized Hardware Instructions Rule Everything Around Me<\/a>.<br> <span style=\"color: #AAAAAA;font-weight: normal;text-decoration: none;word-wrap: break-word;-ms-text-size-adjust: 100%;-webkit-text-size-adjust: 100%;font-size:0.8em;text-transform:normal;\"><a href=\"https:\/\/pycoders.com\/link\/16200\/feed\" style=\"color: #AAAAAA;font-weight: normal;text-decoration: none;word-wrap: break-word;-ms-text-size-adjust: 100%;-webkit-text-size-adjust: 100%;\" target=\"_blank\">NRPOSNER<\/a><\/span> <\/p> <\/div> <div> <h3 style=\"margin-bottom: 0;\"><a href=\"https:\/\/pycoders.com\/link\/16218\/feed\" target=\"_blank\">Zensical: A Modern Static Site Generator<\/a><\/h3> <p style=\"margin-bottom: 0;\"> Talk Python interviews Martin Donath a contributor to MKDocs and recent creator of the new Zensical package. They talk about why he has built something new and what lessons he&rsquo;s applied to the new project.<br> <span style=\"color: #AAAAAA;font-weight: normal;text-decoration: none;word-wrap: break-word;-ms-text-size-adjust: 100%;-webkit-text-size-adjust: 100%;font-size:0.8em;text-transform:normal;\"><a href=\"https:\/\/pycoders.com\/link\/16218\/feed\" style=\"color: #AAAAAA;font-weight: normal;text-decoration: none;word-wrap: break-word;-ms-text-size-adjust: 100%;-webkit-text-size-adjust: 100%;\" target=\"_blank\">TALK PYTHON<\/a><\/span> <span style=\"color: #AAAAAA;text-transform:uppercase;padding:1px 4px;border:1px solid #dddddd;margin-left:4px;font-size:0.8em;border-radius:2px;\">podcast<\/span> <\/p> <\/div> <div> <h3 style=\"margin-bottom: 0;\"><a href=\"https:\/\/pycoders.com\/link\/16188\/feed\" target=\"_blank\">Dignified Python: 10 Rules to Improve your LLM Agents<\/a><\/h3> <a href=\"https:\/\/pycoders.com\/link\/16188\/feed\" target=\"_blank\"><img style=\"float:right; margin-left: 16px; margin-top: 7px; width: 17%;\" src=\"https:\/\/cdn.pycoders.com\/1f2ba5720af984e0eb8518d608c755d7\" alt><\/a> <p style=\"margin-bottom: 0;\"> At Dagster, we created \u201cDignified Python\u201d to improve LLM-generated code by embedding clear coding principles into prompts. Instead of messy, pattern-based output, our agents produce code that reflects intent, consistency, and team standards. <a href=\"https:\/\/pycoders.com\/link\/16188\/feed\" target=\"_blank\">Here are the 10 rules from our Claude prompt \u2192<\/a><br> <span style=\"color: #AAAAAA;font-weight: normal;text-decoration: none;word-wrap: break-word;-ms-text-size-adjust: 100%;-webkit-text-size-adjust: 100%;font-size:0.8em;text-transform:normal;\"><a href=\"https:\/\/pycoders.com\/link\/16188\/feed\" style=\"color: #AAAAAA;font-weight: normal;text-decoration: none;word-wrap: break-word;-ms-text-size-adjust: 100%;-webkit-text-size-adjust: 100%;\" target=\"_blank\">DAGSTER LABS<\/a><\/span> <span style=\"color: #AAAAAA;text-transform:uppercase;padding:1px 4px;border:1px solid #dddddd;margin-left:4px;font-size:0.8em;border-radius:2px;background-color:#ffffe0;\">sponsor<\/span> <\/p> <\/div> <div> <h3 style=\"margin-bottom: 0;\"><a href=\"https:\/\/pycoders.com\/link\/16206\/feed\" target=\"_blank\">Smello for HTTP Requests<\/a><\/h3> <p style=\"margin-bottom: 0;\"> Roman built Smello, an open-source tool that captures outgoing HTTP requests from your Python code and displays them in a local web dashboard. Learn why he did it and how he uses it to debug API access.<br> <span style=\"color: #AAAAAA;font-weight: normal;text-decoration: none;word-wrap: break-word;-ms-text-size-adjust: 100%;-webkit-text-size-adjust: 100%;font-size:0.8em;text-transform:normal;\"><a href=\"https:\/\/pycoders.com\/link\/16206\/feed\" style=\"color: #AAAAAA;font-weight: normal;text-decoration: none;word-wrap: break-word;-ms-text-size-adjust: 100%;-webkit-text-size-adjust: 100%;\" target=\"_blank\">ROMAN IMANKULOV<\/a><\/span> <\/p> <\/div> <div> <h3 style=\"margin-bottom: 0;\"><a href=\"https:\/\/pycoders.com\/link\/16211\/feed\" target=\"_blank\">Gotchas With SQLite in Production<\/a><\/h3> <p style=\"margin-bottom: 0;\"> What you need to know before putting a Django project that uses SQLite in production. This is part 5 of a series that includes information on write-ahead logging, locking errors, performance, and more.<br> <span style=\"color: #AAAAAA;font-weight: normal;text-decoration: none;word-wrap: break-word;-ms-text-size-adjust: 100%;-webkit-text-size-adjust: 100%;font-size:0.8em;text-transform:normal;\"><a href=\"https:\/\/pycoders.com\/link\/16211\/feed\" style=\"color: #AAAAAA;font-weight: normal;text-decoration: none;word-wrap: break-word;-ms-text-size-adjust: 100%;-webkit-text-size-adjust: 100%;\" target=\"_blank\">AN\u017dE<\/a><\/span> <\/p> <\/div> <div> <h3 style=\"margin-bottom: 0;\"><a href=\"https:\/\/pycoders.com\/link\/16214\/feed\" target=\"_blank\">Comparing Portable DataFrame Tools in Python<\/a><\/h3> <p style=\"margin-bottom: 0;\"> This article explores three tools for DataFrame portability in Python: Ibis, Narwhals, and Fugue. Learn when to use each to write code that runs across multiple backends.<br> <span style=\"color: #AAAAAA;font-weight: normal;text-decoration: none;word-wrap: break-word;-ms-text-size-adjust: 100%;-webkit-text-size-adjust: 100%;font-size:0.8em;text-transform:normal;\"><a href=\"https:\/\/pycoders.com\/link\/16214\/feed\" style=\"color: #AAAAAA;font-weight: normal;text-decoration: none;word-wrap: break-word;-ms-text-size-adjust: 100%;-webkit-text-size-adjust: 100%;\" target=\"_blank\">CODECUT.AI<\/a> \u2022 Shared by <a href=\"https:\/\/pycoders.com\/link\/16202\/feed\" style=\"color: #AAAAAA;font-weight: normal;text-decoration: none;word-wrap: break-word;-ms-text-size-adjust: 100%;-webkit-text-size-adjust: 100%;\" target=\"_blank\">Khuyen Tran<\/a><\/span> <\/p> <\/div> <div> <h3 style=\"margin-bottom: 0;\"><a href=\"https:\/\/pycoders.com\/link\/16216\/feed\" target=\"_blank\">Lessons From Pyre That Shaped Pyrefly<\/a><\/h3> <p style=\"margin-bottom: 0;\"> Pyrefly is a Python type checker from the same team that developed pyre. This article discusses lessons from developing Pyre that influenced how they designed Pyrefly.<br> <span style=\"color: #AAAAAA;font-weight: normal;text-decoration: none;word-wrap: break-word;-ms-text-size-adjust: 100%;-webkit-text-size-adjust: 100%;font-size:0.8em;text-transform:normal;\"><a href=\"https:\/\/pycoders.com\/link\/16216\/feed\" style=\"color: #AAAAAA;font-weight: normal;text-decoration: none;word-wrap: break-word;-ms-text-size-adjust: 100%;-webkit-text-size-adjust: 100%;\" target=\"_blank\">PYREFLY<\/a><\/span> <\/p> <\/div> <div> <h3 style=\"margin-bottom: 0;\"><a href=\"https:\/\/pycoders.com\/link\/16209\/feed\" target=\"_blank\">Connecting MongoDB to Python<\/a><\/h3> <p style=\"margin-bottom: 0;\"> This tutorial is a hands-on introduction to connecting MongoDB with Python using PyMongo, guiding readers through the essential first steps in just 10 minutes.<br> <span style=\"color: #AAAAAA;font-weight: normal;text-decoration: none;word-wrap: break-word;-ms-text-size-adjust: 100%;-webkit-text-size-adjust: 100%;font-size:0.8em;text-transform:normal;\"><a href=\"https:\/\/pycoders.com\/link\/16209\/feed\" style=\"color: #AAAAAA;font-weight: normal;text-decoration: none;word-wrap: break-word;-ms-text-size-adjust: 100%;-webkit-text-size-adjust: 100%;\" target=\"_blank\">ANAIYA RAISINGHANI<\/a> \u2022 Shared by Tony Kim<\/span> <\/p> <\/div> <div> <h3 style=\"margin-bottom: 0;\"><a href=\"https:\/\/pycoders.com\/link\/16193\/feed\" target=\"_blank\">How Do Large Companies Manage CI\/CD at Scale?<\/a><\/h3> <p style=\"margin-bottom: 0;\"> What changes for CI\/CD when your company grows to hundreds of developers, dozens of services, and thousands of daily builds?<br> <span style=\"color: #AAAAAA;font-weight: normal;text-decoration: none;word-wrap: break-word;-ms-text-size-adjust: 100%;-webkit-text-size-adjust: 100%;font-size:0.8em;text-transform:normal;\"><a href=\"https:\/\/pycoders.com\/link\/16193\/feed\" style=\"color: #AAAAAA;font-weight: normal;text-decoration: none;word-wrap: break-word;-ms-text-size-adjust: 100%;-webkit-text-size-adjust: 100%;\" target=\"_blank\">PETE MILORAVAC<\/a><\/span> <\/p> <\/div> <div> <h3 style=\"margin-bottom: 0;\"><a href=\"https:\/\/pycoders.com\/link\/16189\/feed\" target=\"_blank\">Apply to Join the PSF Meetup Pro Network<\/a><\/h3> <p style=\"margin-bottom: 0;\"> The PSF helps support approved Python Meetup groups and the process to become one has recently been re-opened.<br> <span style=\"color: #AAAAAA;font-weight: normal;text-decoration: none;word-wrap: break-word;-ms-text-size-adjust: 100%;-webkit-text-size-adjust: 100%;font-size:0.8em;text-transform:normal;\"><a href=\"https:\/\/pycoders.com\/link\/16189\/feed\" style=\"color: #AAAAAA;font-weight: normal;text-decoration: none;word-wrap: break-word;-ms-text-size-adjust: 100%;-webkit-text-size-adjust: 100%;\" target=\"_blank\">PYTHON SOFTWARE FOUNDATION<\/a><\/span> <\/p> <\/div> <div> <h3 style=\"margin-bottom: 0;\"><a href=\"https:\/\/pycoders.com\/link\/16219\/feed\" target=\"_blank\">Inspect a Lazy Import in Python 3.15<\/a><\/h3> <p style=\"margin-bottom: 0;\"> This quick &ldquo;things I learned&rdquo; post shows you how to inspect a lazy import object in Python 3.15.<br> <span style=\"color: #AAAAAA;font-weight: normal;text-decoration: none;word-wrap: break-word;-ms-text-size-adjust: 100%;-webkit-text-size-adjust: 100%;font-size:0.8em;text-transform:normal;\"><a href=\"https:\/\/pycoders.com\/link\/16219\/feed\" style=\"color: #AAAAAA;font-weight: normal;text-decoration: none;word-wrap: break-word;-ms-text-size-adjust: 100%;-webkit-text-size-adjust: 100%;\" target=\"_blank\">MATHSPP.COM<\/a><\/span> <\/p> <\/div> <h2>Projects &amp; Code<\/h2> <div> <h3 style=\"margin-bottom: 0;\"><a href=\"https:\/\/pycoders.com\/link\/16205\/feed\" target=\"_blank\">syrupy: The Sweeter pytest Snapshot Plugin<\/a><\/h3> <p style=\"margin-bottom: 0;\"> <span style=\"color: #AAAAAA;font-weight: normal;text-decoration: none;word-wrap: break-word;-ms-text-size-adjust: 100%;-webkit-text-size-adjust: 100%;font-size:0.8em;text-transform:normal;\"><a href=\"https:\/\/pycoders.com\/link\/16205\/feed\" style=\"color: #AAAAAA;font-weight: normal;text-decoration: none;word-wrap: break-word;-ms-text-size-adjust: 100%;-webkit-text-size-adjust: 100%;\" target=\"_blank\">GITHUB.COM\/SYRUPY-PROJECT<\/a><\/span> <\/p> <\/div> <div> <h3 style=\"margin-bottom: 0;\"><a href=\"https:\/\/pycoders.com\/link\/16196\/feed\" target=\"_blank\">pendulum: Python Datetimes Made Easy<\/a><\/h3> <p style=\"margin-bottom: 0;\"> <span style=\"color: #AAAAAA;font-weight: normal;text-decoration: none;word-wrap: break-word;-ms-text-size-adjust: 100%;-webkit-text-size-adjust: 100%;font-size:0.8em;text-transform:normal;\"><a href=\"https:\/\/pycoders.com\/link\/16196\/feed\" style=\"color: #AAAAAA;font-weight: normal;text-decoration: none;word-wrap: break-word;-ms-text-size-adjust: 100%;-webkit-text-size-adjust: 100%;\" target=\"_blank\">GITHUB.COM\/PYTHON-PENDULUM<\/a><\/span> <\/p> <\/div> <div> <h3 style=\"margin-bottom: 0;\"><a href=\"https:\/\/pycoders.com\/link\/16190\/feed\" target=\"_blank\">validatedata: An Easier Way to Validate Data in Python<\/a><\/h3> <p style=\"margin-bottom: 0;\"> <span style=\"color: #AAAAAA;font-weight: normal;text-decoration: none;word-wrap: break-word;-ms-text-size-adjust: 100%;-webkit-text-size-adjust: 100%;font-size:0.8em;text-transform:normal;\"><a href=\"https:\/\/pycoders.com\/link\/16190\/feed\" style=\"color: #AAAAAA;font-weight: normal;text-decoration: none;word-wrap: break-word;-ms-text-size-adjust: 100%;-webkit-text-size-adjust: 100%;\" target=\"_blank\">GITHUB.COM\/EDWARD-K1<\/a><\/span> <\/p> <\/div> <div> <h3 style=\"margin-bottom: 0;\"><a href=\"https:\/\/pycoders.com\/link\/16191\/feed\" target=\"_blank\">awesome-marimo: Curated List of Awesome Marimo Things<\/a><\/h3> <p style=\"margin-bottom: 0;\"> <span style=\"color: #AAAAAA;font-weight: normal;text-decoration: none;word-wrap: break-word;-ms-text-size-adjust: 100%;-webkit-text-size-adjust: 100%;font-size:0.8em;text-transform:normal;\"><a href=\"https:\/\/pycoders.com\/link\/16191\/feed\" style=\"color: #AAAAAA;font-weight: normal;text-decoration: none;word-wrap: break-word;-ms-text-size-adjust: 100%;-webkit-text-size-adjust: 100%;\" target=\"_blank\">GITHUB.COM\/MARIMO-TEAM<\/a><\/span> <\/p> <\/div> <div> <h3 style=\"margin-bottom: 0;\"><a href=\"https:\/\/pycoders.com\/link\/16212\/feed\" target=\"_blank\">dj-urls-panel: Visualize URL Routes in the Django Admin<\/a><\/h3> <p style=\"margin-bottom: 0;\"> <span style=\"color: #AAAAAA;font-weight: normal;text-decoration: none;word-wrap: break-word;-ms-text-size-adjust: 100%;-webkit-text-size-adjust: 100%;font-size:0.8em;text-transform:normal;\"><a href=\"https:\/\/pycoders.com\/link\/16212\/feed\" style=\"color: #AAAAAA;font-weight: normal;text-decoration: none;word-wrap: break-word;-ms-text-size-adjust: 100%;-webkit-text-size-adjust: 100%;\" target=\"_blank\">GITHUB.COM\/YASSI<\/a><\/span> <\/p> <\/div> <h2>Events<\/h2> <div> <h3 style=\"margin-bottom: 0;\"><a href=\"https:\/\/pycoders.com\/link\/16210\/feed\" target=\"_blank\">Weekly Real Python Office Hours Q&amp;A (Virtual)<\/a><\/h3> <p style=\"margin-bottom: 0;\"> April 1, 2026<br> <span style=\"color: #AAAAAA;font-weight: normal;text-decoration: none;word-wrap: break-word;-ms-text-size-adjust: 100%;-webkit-text-size-adjust: 100%;font-size:0.8em;text-transform:normal;\"><a href=\"https:\/\/pycoders.com\/link\/16210\/feed\" style=\"color: #AAAAAA;font-weight: normal;text-decoration: none;word-wrap: break-word;-ms-text-size-adjust: 100%;-webkit-text-size-adjust: 100%;\" target=\"_blank\">REALPYTHON.COM<\/a><\/span> <\/p> <\/div> <div> <h3 style=\"margin-bottom: 0;\"><a href=\"https:\/\/pycoders.com\/link\/16201\/feed\" target=\"_blank\">Canberra Python Meetup<\/a><\/h3> <p style=\"margin-bottom: 0;\"> April 2, 2026<br> <span style=\"color: #AAAAAA;font-weight: normal;text-decoration: none;word-wrap: break-word;-ms-text-size-adjust: 100%;-webkit-text-size-adjust: 100%;font-size:0.8em;text-transform:normal;\"><a href=\"https:\/\/pycoders.com\/link\/16201\/feed\" style=\"color: #AAAAAA;font-weight: normal;text-decoration: none;word-wrap: break-word;-ms-text-size-adjust: 100%;-webkit-text-size-adjust: 100%;\" target=\"_blank\">MEETUP.COM<\/a><\/span> <\/p> <\/div> <div> <h3 style=\"margin-bottom: 0;\"><a href=\"https:\/\/pycoders.com\/link\/16204\/feed\" target=\"_blank\">Sydney Python User Group (SyPy)<\/a><\/h3> <p style=\"margin-bottom: 0;\"> April 2, 2026<br> <span style=\"color: #AAAAAA;font-weight: normal;text-decoration: none;word-wrap: break-word;-ms-text-size-adjust: 100%;-webkit-text-size-adjust: 100%;font-size:0.8em;text-transform:normal;\"><a href=\"https:\/\/pycoders.com\/link\/16204\/feed\" style=\"color: #AAAAAA;font-weight: normal;text-decoration: none;word-wrap: break-word;-ms-text-size-adjust: 100%;-webkit-text-size-adjust: 100%;\" target=\"_blank\">SYPY.ORG<\/a><\/span> <\/p> <\/div> <div> <h3 style=\"margin-bottom: 0;\"><a href=\"https:\/\/pycoders.com\/link\/16203\/feed\" target=\"_blank\">Python Leiden User Group<\/a><\/h3> <p style=\"margin-bottom: 0;\"> April 2, 2026<br> <span style=\"color: #AAAAAA;font-weight: normal;text-decoration: none;word-wrap: break-word;-ms-text-size-adjust: 100%;-webkit-text-size-adjust: 100%;font-size:0.8em;text-transform:normal;\"><a href=\"https:\/\/pycoders.com\/link\/16203\/feed\" style=\"color: #AAAAAA;font-weight: normal;text-decoration: none;word-wrap: break-word;-ms-text-size-adjust: 100%;-webkit-text-size-adjust: 100%;\" target=\"_blank\">PYTHONLEIDEN.NL<\/a><\/span> <\/p> <\/div> <div> <h3 style=\"margin-bottom: 0;\"><a href=\"https:\/\/pycoders.com\/link\/16192\/feed\" target=\"_blank\">PyDelhi User Group Meetup<\/a><\/h3> <p style=\"margin-bottom: 0;\"> April 4, 2026<br> <span style=\"color: #AAAAAA;font-weight: normal;text-decoration: none;word-wrap: break-word;-ms-text-size-adjust: 100%;-webkit-text-size-adjust: 100%;font-size:0.8em;text-transform:normal;\"><a href=\"https:\/\/pycoders.com\/link\/16192\/feed\" style=\"color: #AAAAAA;font-weight: normal;text-decoration: none;word-wrap: break-word;-ms-text-size-adjust: 100%;-webkit-text-size-adjust: 100%;\" target=\"_blank\">MEETUP.COM<\/a><\/span> <\/p> <\/div> <div> <h3 style=\"margin-bottom: 0;\"><a href=\"https:\/\/pycoders.com\/link\/16217\/feed\" target=\"_blank\">Melbourne Python Users Group, Australia<\/a><\/h3> <p style=\"margin-bottom: 0;\"> April 6, 2026<br> <span style=\"color: #AAAAAA;font-weight: normal;text-decoration: none;word-wrap: break-word;-ms-text-size-adjust: 100%;-webkit-text-size-adjust: 100%;font-size:0.8em;text-transform:normal;\"><a href=\"https:\/\/pycoders.com\/link\/16217\/feed\" style=\"color: #AAAAAA;font-weight: normal;text-decoration: none;word-wrap: break-word;-ms-text-size-adjust: 100%;-webkit-text-size-adjust: 100%;\" target=\"_blank\">J.MP<\/a><\/span> <\/p> <\/div> <div> <h3 style=\"margin-bottom: 0;\"><a href=\"https:\/\/pycoders.com\/link\/16207\/feed\" target=\"_blank\">PyBodensee Monthly Meetup<\/a><\/h3> <p style=\"margin-bottom: 0;\"> April 6, 2026<br> <span style=\"color: #AAAAAA;font-weight: normal;text-decoration: none;word-wrap: break-word;-ms-text-size-adjust: 100%;-webkit-text-size-adjust: 100%;font-size:0.8em;text-transform:normal;\"><a href=\"https:\/\/pycoders.com\/link\/16207\/feed\" style=\"color: #AAAAAA;font-weight: normal;text-decoration: none;word-wrap: break-word;-ms-text-size-adjust: 100%;-webkit-text-size-adjust: 100%;\" target=\"_blank\">PYBODENSEE.COM<\/a><\/span> <\/p> <\/div> <div> <h3 style=\"margin-bottom: 0;\"><a href=\"https:\/\/pycoders.com\/link\/16208\/feed\" target=\"_blank\">PyCon Lithuania 2026<\/a><\/h3> <p style=\"margin-bottom: 0;\"> April 8 to April 11, 2026<br> <span style=\"color: #AAAAAA;font-weight: normal;text-decoration: none;word-wrap: break-word;-ms-text-size-adjust: 100%;-webkit-text-size-adjust: 100%;font-size:0.8em;text-transform:normal;\"><a href=\"https:\/\/pycoders.com\/link\/16208\/feed\" style=\"color: #AAAAAA;font-weight: normal;text-decoration: none;word-wrap: break-word;-ms-text-size-adjust: 100%;-webkit-text-size-adjust: 100%;\" target=\"_blank\">PYCON.LT<\/a><\/span> <\/p> <\/div> <hr> <p>Happy Pythoning!<br>This was PyCoder&rsquo;s Weekly Issue #728.<br><a href=\"https:\/\/pycoders.com\/issues\/728\/feed\">View in Browser \u00bb<\/a><\/p> <img src=\"https:\/\/pycoders.com\/issues\/728\/open\/feed\" width=\"1\" height=\"1\" alt> \n        <hr \/>\n        <p><em>[ Subscribe to \ud83d\udc0d PyCoder&rsquo;s Weekly \ud83d\udc8c \u2013 Get the best Python news, articles, and tutorials delivered to your inbox once a week <a href=\"https:\/\/pycoders.com\/?utm_source=pycoders&amp;utm_medium=feed&amp;utm_campaign=footer\">&gt;&gt; Click here to learn more<\/a> ]<\/em><\/p>\n      "},{"title":"Issue #727: Sunsetting Jazzband, Spyder, A\/B Testing, and More (March 24, 2026)","id":"https:\/\/pycoders.com\/issues\/727","link":{"@attributes":{"href":"https:\/\/pycoders.com\/issues\/727"}},"updated":"2026-03-24T19:30:00+00:00","content":"\n         <p> <span>#727 \u2013 MARCH 24, 2026<\/span><br> <span><a href=\"https:\/\/pycoders.com\/issues\/727\/feed\">View in Browser \u00bb<\/a><\/span> <\/p> <p><a href=\"https:\/\/pycoders.com\"><img alt=\"The PyCoder&rsquo;s Weekly Logo\" src=\"https:\/\/cdn.pycoders.com\/37bdf31dc645f968ffb90196e5d38ff5\" style=\"max-width: 100%;\"><\/a><\/p> <hr> <div> <h3 style=\"margin-bottom: 0;\"><a href=\"https:\/\/pycoders.com\/link\/16178\/feed\" target=\"_blank\">Sunsetting Jazzband<\/a><\/h3> <p style=\"margin-bottom: 0;\"> Jazzband is (was) an Open Source cooperative for creating and maintaining projects. It maintained over 70 projects many of which were for the Django ecosystem. They included django-redis, django-nose, django-taggit, and loads more. Jazzband&rsquo;s model has become untenable from the mass of AI submissions, and so it is winding down.<br> <span style=\"color: #AAAAAA;font-weight: normal;text-decoration: none;word-wrap: break-word;-ms-text-size-adjust: 100%;-webkit-text-size-adjust: 100%;font-size:0.8em;text-transform:normal;\"><a href=\"https:\/\/pycoders.com\/link\/16178\/feed\" style=\"color: #AAAAAA;font-weight: normal;text-decoration: none;word-wrap: break-word;-ms-text-size-adjust: 100%;-webkit-text-size-adjust: 100%;\" target=\"_blank\">JAZZBAND.CO<\/a><\/span> <\/p> <\/div> <div> <h3 style=\"margin-bottom: 0;\"><a href=\"https:\/\/pycoders.com\/link\/16159\/feed\" target=\"_blank\">Spyder: Your IDE for Data Science Development in Python<\/a><\/h3> <p style=\"margin-bottom: 0;\"> Learn how to use the Spyder IDE, a Python code editor built for scientists, engineers, and data analysts working with data-heavy workflows.<br> <span style=\"color: #AAAAAA;font-weight: normal;text-decoration: none;word-wrap: break-word;-ms-text-size-adjust: 100%;-webkit-text-size-adjust: 100%;font-size:0.8em;text-transform:normal;\"><a href=\"https:\/\/pycoders.com\/link\/16159\/feed\" style=\"color: #AAAAAA;font-weight: normal;text-decoration: none;word-wrap: break-word;-ms-text-size-adjust: 100%;-webkit-text-size-adjust: 100%;\" target=\"_blank\">REAL PYTHON<\/a><\/span> <\/p> <\/div> <div> <h3 style=\"margin-bottom: 0;\"><a href=\"https:\/\/pycoders.com\/link\/16155\/feed\" target=\"_blank\">How Nordstrom Built Self-Healing Docs with AI Agents<\/a><\/h3> <a href=\"https:\/\/pycoders.com\/link\/16155\/feed\" target=\"_blank\"><img style=\"float:right; margin-left: 16px; margin-top: 7px; width: 17%;\" src=\"https:\/\/cdn.pycoders.com\/960c8557da1b223c307d71a618e3e2a8\" alt><\/a> <p style=\"margin-bottom: 0;\"> What if your docs updated themselves from Slack conversations? Join our webinar to learn how Nordstrom uses Temporal and AI agents to detect knowledge gaps, extract insights from chat history, <a href=\"https:\/\/pycoders.com\/link\/16155\/feed\" target=\"_blank\">and automatically generate pull requests \u2192<\/a><br> <span style=\"color: #AAAAAA;font-weight: normal;text-decoration: none;word-wrap: break-word;-ms-text-size-adjust: 100%;-webkit-text-size-adjust: 100%;font-size:0.8em;text-transform:normal;\"><a href=\"https:\/\/pycoders.com\/link\/16155\/feed\" style=\"color: #AAAAAA;font-weight: normal;text-decoration: none;word-wrap: break-word;-ms-text-size-adjust: 100%;-webkit-text-size-adjust: 100%;\" target=\"_blank\">TEMPORAL<\/a><\/span> <span style=\"color: #AAAAAA;text-transform:uppercase;padding:1px 4px;border:1px solid #dddddd;margin-left:4px;font-size:0.8em;border-radius:2px;background-color:#ffffe0;\">sponsor<\/span> <\/p> <\/div> <div> <h3 style=\"margin-bottom: 0;\"><a href=\"https:\/\/pycoders.com\/link\/16181\/feed\" target=\"_blank\">Comparing Python Packages for A\/B Test Analysis<\/a><\/h3> <p style=\"margin-bottom: 0;\"> A practical comparison of tea-tasting, Pingouin, statsmodels, and SciPy for A\/B test analysis, with code examples.<br> <span style=\"color: #AAAAAA;font-weight: normal;text-decoration: none;word-wrap: break-word;-ms-text-size-adjust: 100%;-webkit-text-size-adjust: 100%;font-size:0.8em;text-transform:normal;\"><a href=\"https:\/\/pycoders.com\/link\/16181\/feed\" style=\"color: #AAAAAA;font-weight: normal;text-decoration: none;word-wrap: break-word;-ms-text-size-adjust: 100%;-webkit-text-size-adjust: 100%;\" target=\"_blank\">EVGENY IVANOV<\/a><\/span> <\/p> <\/div> <div> <h3 style=\"margin-bottom: 0;\"><a href=\"https:\/\/pycoders.com\/link\/16156\/feed\" target=\"_blank\">PyCon US 2026 Conference Schedule Announced<\/a><\/h3> <p style=\"margin-bottom: 0;\"> <span style=\"color: #AAAAAA;font-weight: normal;text-decoration: none;word-wrap: break-word;-ms-text-size-adjust: 100%;-webkit-text-size-adjust: 100%;font-size:0.8em;text-transform:normal;\"><a href=\"https:\/\/pycoders.com\/link\/16156\/feed\" style=\"color: #AAAAAA;font-weight: normal;text-decoration: none;word-wrap: break-word;-ms-text-size-adjust: 100%;-webkit-text-size-adjust: 100%;\" target=\"_blank\">PYCON.ORG<\/a><\/span> <\/p> <\/div> <h2>Python Jobs<\/h2> <h3 style=\"margin-bottom: 0;\"><a href=\"https:\/\/pycoders.com\/link\/16167\/feed\" target=\"_blank\">Python + AI Content Specialist (Anywhere)<\/a><\/h3> <p><a href=\"https:\/\/pycoders.com\/link\/16167\/feed\" target=\"_blank\">Real Python<\/a><\/p> <p><a href=\"https:\/\/www.pythonjobshq.com?utm_source=newsletter&amp;utm_campaign=pycoders727&amp;utm_medium=feed\" target=\"_blank\">More Python Jobs &gt;&gt;&gt;<\/a><\/p> <h2>Articles &amp; Tutorials<\/h2> <div> <h3 style=\"margin-bottom: 0;\"><a href=\"https:\/\/pycoders.com\/link\/16168\/feed\" target=\"_blank\">Guido Interviews Brett Cannon<\/a><\/h3> <p style=\"margin-bottom: 0;\"> After last year\u2019s release of the Python documentary, Guido decided to explore those contributors who weren\u2019t mentioned. He now has an going series of written interviews with a variety of contributors from Python\u2019s first 25 years. This interview is with Brett Cannon.<br> <span style=\"color: #AAAAAA;font-weight: normal;text-decoration: none;word-wrap: break-word;-ms-text-size-adjust: 100%;-webkit-text-size-adjust: 100%;font-size:0.8em;text-transform:normal;\"><a href=\"https:\/\/pycoders.com\/link\/16168\/feed\" style=\"color: #AAAAAA;font-weight: normal;text-decoration: none;word-wrap: break-word;-ms-text-size-adjust: 100%;-webkit-text-size-adjust: 100%;\" target=\"_blank\">GUIDO VAN ROSSUM<\/a><\/span> <\/p> <\/div> <div> <h3 style=\"margin-bottom: 0;\"><a href=\"https:\/\/pycoders.com\/link\/16172\/feed\" target=\"_blank\">&ldquo;Requests&rdquo; Needs You to Test Type Hints<\/a><\/h3> <p style=\"margin-bottom: 0;\"> Requests is a popular HTTP client library and is frequently in the top 10 PyPI downloads. There is an on-going effort to add type hinting to the library and to make sure the next release causes few issues, they need help testing.<br> <span style=\"color: #AAAAAA;font-weight: normal;text-decoration: none;word-wrap: break-word;-ms-text-size-adjust: 100%;-webkit-text-size-adjust: 100%;font-size:0.8em;text-transform:normal;\"><a href=\"https:\/\/pycoders.com\/link\/16172\/feed\" style=\"color: #AAAAAA;font-weight: normal;text-decoration: none;word-wrap: break-word;-ms-text-size-adjust: 100%;-webkit-text-size-adjust: 100%;\" target=\"_blank\">SETH LARSON<\/a><\/span> <\/p> <\/div> <div> <h3 style=\"margin-bottom: 0;\"><a href=\"https:\/\/pycoders.com\/link\/16185\/feed\" target=\"_blank\">Depot CI: Built for the Agent era<\/a><\/h3> <a href=\"https:\/\/pycoders.com\/link\/16185\/feed\" target=\"_blank\"><img style=\"float:right; margin-left: 16px; margin-top: 7px; width: 17%;\" src=\"https:\/\/cdn.pycoders.com\/7b7a4e39439acfb820c6adbac2a88528\" alt><\/a> <p style=\"margin-bottom: 0;\"> Depot CI: A new CI engine. Fast by design. Your GitHub Actions workflows, running on a fundamentally faster engine \u2014 instant job startup, parallel steps, full debuggability, per-second billing. <a href=\"https:\/\/pycoders.com\/link\/16185\/feed\" target=\"_blank\">One command to migrate \u2192<\/a><br> <span style=\"color: #AAAAAA;font-weight: normal;text-decoration: none;word-wrap: break-word;-ms-text-size-adjust: 100%;-webkit-text-size-adjust: 100%;font-size:0.8em;text-transform:normal;\"><a href=\"https:\/\/pycoders.com\/link\/16185\/feed\" style=\"color: #AAAAAA;font-weight: normal;text-decoration: none;word-wrap: break-word;-ms-text-size-adjust: 100%;-webkit-text-size-adjust: 100%;\" target=\"_blank\">DEPOT<\/a><\/span> <span style=\"color: #AAAAAA;text-transform:uppercase;padding:1px 4px;border:1px solid #dddddd;margin-left:4px;font-size:0.8em;border-radius:2px;background-color:#ffffe0;\">sponsor<\/span> <\/p> <\/div> <div> <h3 style=\"margin-bottom: 0;\"><a href=\"https:\/\/pycoders.com\/link\/16169\/feed\" target=\"_blank\">Fire and Forget (Or Never) With Python&rsquo;s Asyncio<\/a><\/h3> <p style=\"margin-bottom: 0;\"> Python&rsquo;s <code>asyncio.create_task()<\/code> can silently garbage collect fire-and-forget tasks in 3.12+, meaning they might never run. This article shows you how to use the background tasks <code>set<\/code> pattern to fix it.<br> <span style=\"color: #AAAAAA;font-weight: normal;text-decoration: none;word-wrap: break-word;-ms-text-size-adjust: 100%;-webkit-text-size-adjust: 100%;font-size:0.8em;text-transform:normal;\"><a href=\"https:\/\/pycoders.com\/link\/16169\/feed\" style=\"color: #AAAAAA;font-weight: normal;text-decoration: none;word-wrap: break-word;-ms-text-size-adjust: 100%;-webkit-text-size-adjust: 100%;\" target=\"_blank\">MICHAEL KENNEDY<\/a><\/span> <\/p> <\/div> <div> <h3 style=\"margin-bottom: 0;\"><a href=\"https:\/\/pycoders.com\/link\/16174\/feed\" target=\"_blank\">Thoughts on OpenAI Acquiring Astral<\/a><\/h3> <p style=\"margin-bottom: 0;\"> Astral is the organization behind popular Python tools such as uv, ruff, and ty. Recently it was announced that OpenAI would be acquiring Astral. This opinion piece discusses the possible impact.<br> <span style=\"color: #AAAAAA;font-weight: normal;text-decoration: none;word-wrap: break-word;-ms-text-size-adjust: 100%;-webkit-text-size-adjust: 100%;font-size:0.8em;text-transform:normal;\"><a href=\"https:\/\/pycoders.com\/link\/16174\/feed\" style=\"color: #AAAAAA;font-weight: normal;text-decoration: none;word-wrap: break-word;-ms-text-size-adjust: 100%;-webkit-text-size-adjust: 100%;\" target=\"_blank\">SIMON WILLISON<\/a><\/span> <\/p> <\/div> <div> <h3 style=\"margin-bottom: 0;\"><a href=\"https:\/\/pycoders.com\/link\/16183\/feed\" target=\"_blank\">Standard Error<\/a><\/h3> <p style=\"margin-bottom: 0;\"> Standard error is one of the two writable file streams that is used for printing errors, warning messages, or any outputs that shouldn&rsquo;t be mixed with the main program.<br> <span style=\"color: #AAAAAA;font-weight: normal;text-decoration: none;word-wrap: break-word;-ms-text-size-adjust: 100%;-webkit-text-size-adjust: 100%;font-size:0.8em;text-transform:normal;\"><a href=\"https:\/\/pycoders.com\/link\/16183\/feed\" style=\"color: #AAAAAA;font-weight: normal;text-decoration: none;word-wrap: break-word;-ms-text-size-adjust: 100%;-webkit-text-size-adjust: 100%;\" target=\"_blank\">TREY HUNNER<\/a><\/span> <\/p> <\/div> <div> <h3 style=\"margin-bottom: 0;\"><a href=\"https:\/\/pycoders.com\/link\/16186\/feed\" target=\"_blank\">\ud83c\udf93 Master Python&rsquo;s Core Principles (Live Course)<\/a><\/h3> <a href=\"https:\/\/pycoders.com\/link\/16186\/feed\" target=\"_blank\"><img style=\"float:right; margin-left: 16px; margin-top: 7px; width: 17%;\" src=\"https:\/\/cdn.pycoders.com\/bed6840910d801ec36dfc43f388a5869\" alt><\/a> <p style=\"margin-bottom: 0;\"> Transform your Python skills in just eight weeks, with live expert guidance. No more second-guessing if your code is &ldquo;Pythonic enough.&rdquo; Master Python&rsquo;s object model, advanced iteration, decorators, and clean system design through live instruction and hands-on practice in a small group setting:<br> <span style=\"color: #AAAAAA;font-weight: normal;text-decoration: none;word-wrap: break-word;-ms-text-size-adjust: 100%;-webkit-text-size-adjust: 100%;font-size:0.8em;text-transform:normal;\"><a href=\"https:\/\/pycoders.com\/link\/16186\/feed\" style=\"color: #AAAAAA;font-weight: normal;text-decoration: none;word-wrap: break-word;-ms-text-size-adjust: 100%;-webkit-text-size-adjust: 100%;\" target=\"_blank\">REAL PYTHON<\/a><\/span> <span style=\"color: #AAAAAA;text-transform:uppercase;padding:1px 4px;border:1px solid #dddddd;margin-left:4px;font-size:0.8em;border-radius:2px;background-color:#ffffe0;\">sponsor<\/span> <\/p> <\/div> <div> <h3 style=\"margin-bottom: 0;\"><a href=\"https:\/\/pycoders.com\/link\/16173\/feed\" target=\"_blank\">Textual: Creating a Custom Checkbox<\/a><\/h3> <p style=\"margin-bottom: 0;\"> The Textual TUI framework allows for a lot of customization and control over its widgets. This article shows you how to change a checkbox widget to give it a new look.<br> <span style=\"color: #AAAAAA;font-weight: normal;text-decoration: none;word-wrap: break-word;-ms-text-size-adjust: 100%;-webkit-text-size-adjust: 100%;font-size:0.8em;text-transform:normal;\"><a href=\"https:\/\/pycoders.com\/link\/16173\/feed\" style=\"color: #AAAAAA;font-weight: normal;text-decoration: none;word-wrap: break-word;-ms-text-size-adjust: 100%;-webkit-text-size-adjust: 100%;\" target=\"_blank\">MIKE DRISCOLL<\/a><\/span> <\/p> <\/div> <div> <h3 style=\"margin-bottom: 0;\"><a href=\"https:\/\/pycoders.com\/link\/16170\/feed\" target=\"_blank\">A Practical Guide to Python Supply Chain Security<\/a><\/h3> <p style=\"margin-bottom: 0;\"> A comprehensive guide to securing your Python dependencies from ingestion to deployment, covering linting, pinning, vulnerability scanning, SBOMs, and attestations<br> <span style=\"color: #AAAAAA;font-weight: normal;text-decoration: none;word-wrap: break-word;-ms-text-size-adjust: 100%;-webkit-text-size-adjust: 100%;font-size:0.8em;text-transform:normal;\"><a href=\"https:\/\/pycoders.com\/link\/16170\/feed\" style=\"color: #AAAAAA;font-weight: normal;text-decoration: none;word-wrap: break-word;-ms-text-size-adjust: 100%;-webkit-text-size-adjust: 100%;\" target=\"_blank\">BERN\u00c1T G\u00c1BOR<\/a><\/span> <\/p> <\/div> <div> <h3 style=\"margin-bottom: 0;\"><a href=\"https:\/\/pycoders.com\/link\/16161\/feed\" target=\"_blank\">Python 3.15&rsquo;s JIT Is Now Back on Track<\/a><\/h3> <p style=\"margin-bottom: 0;\"> Python 3.15\u2019s JIT is now back on track, meeting the performance targets the team set for itself. Progress was a bit bumpy and this post talks about what happened.<br> <span style=\"color: #AAAAAA;font-weight: normal;text-decoration: none;word-wrap: break-word;-ms-text-size-adjust: 100%;-webkit-text-size-adjust: 100%;font-size:0.8em;text-transform:normal;\"><a href=\"https:\/\/pycoders.com\/link\/16161\/feed\" style=\"color: #AAAAAA;font-weight: normal;text-decoration: none;word-wrap: break-word;-ms-text-size-adjust: 100%;-webkit-text-size-adjust: 100%;\" target=\"_blank\">KEN JIN<\/a><\/span> <\/p> <\/div> <div> <h3 style=\"margin-bottom: 0;\"><a href=\"https:\/\/pycoders.com\/link\/16163\/feed\" target=\"_blank\">From Properties to Descriptors<\/a><\/h3> <p style=\"margin-bottom: 0;\"> This article is about the weird and wonderful world of descriptors in Python. Learn what they&rsquo;re for and how to use one of the trickier Python concepts.<br> <span style=\"color: #AAAAAA;font-weight: normal;text-decoration: none;word-wrap: break-word;-ms-text-size-adjust: 100%;-webkit-text-size-adjust: 100%;font-size:0.8em;text-transform:normal;\"><a href=\"https:\/\/pycoders.com\/link\/16163\/feed\" style=\"color: #AAAAAA;font-weight: normal;text-decoration: none;word-wrap: break-word;-ms-text-size-adjust: 100%;-webkit-text-size-adjust: 100%;\" target=\"_blank\">STEPHEN GRUPPETTA<\/a><\/span> <\/p> <\/div> <div> <h3 style=\"margin-bottom: 0;\"><a href=\"https:\/\/pycoders.com\/link\/16176\/feed\" target=\"_blank\">Modern Python Monorepo With <code>uv<\/code> and <code>prek<\/code><\/a><\/h3> <p style=\"margin-bottom: 0;\"> Talk Python interviews Amogh Desai and Jarek Potiuk and they talk about how to use a monorepo with <code>uv<\/code> and <code>prek<\/code>.<br> <span style=\"color: #AAAAAA;font-weight: normal;text-decoration: none;word-wrap: break-word;-ms-text-size-adjust: 100%;-webkit-text-size-adjust: 100%;font-size:0.8em;text-transform:normal;\"><a href=\"https:\/\/pycoders.com\/link\/16176\/feed\" style=\"color: #AAAAAA;font-weight: normal;text-decoration: none;word-wrap: break-word;-ms-text-size-adjust: 100%;-webkit-text-size-adjust: 100%;\" target=\"_blank\">TALK PYTHON<\/a><\/span> <span style=\"color: #AAAAAA;text-transform:uppercase;padding:1px 4px;border:1px solid #dddddd;margin-left:4px;font-size:0.8em;border-radius:2px;\">podcast<\/span> <\/p> <\/div> <div> <h3 style=\"margin-bottom: 0;\"><a href=\"https:\/\/pycoders.com\/link\/16179\/feed\" target=\"_blank\">Downloading Files From URLs With Python<\/a><\/h3> <p style=\"margin-bottom: 0;\"> Learn to download files from URLs with Python using urllib and requests, including data streaming for large files.<br> <span style=\"color: #AAAAAA;font-weight: normal;text-decoration: none;word-wrap: break-word;-ms-text-size-adjust: 100%;-webkit-text-size-adjust: 100%;font-size:0.8em;text-transform:normal;\"><a href=\"https:\/\/pycoders.com\/link\/16179\/feed\" style=\"color: #AAAAAA;font-weight: normal;text-decoration: none;word-wrap: break-word;-ms-text-size-adjust: 100%;-webkit-text-size-adjust: 100%;\" target=\"_blank\">REAL PYTHON<\/a><\/span> <span style=\"color: #AAAAAA;text-transform:uppercase;padding:1px 4px;border:1px solid #dddddd;margin-left:4px;font-size:0.8em;border-radius:2px;\">course<\/span> <\/p> <\/div> <div> <h3 style=\"margin-bottom: 0;\"><a href=\"https:\/\/pycoders.com\/link\/16184\/feed\" target=\"_blank\">Building a Django Chat App With WebSockets<\/a><\/h3> <p style=\"margin-bottom: 0;\"> This article covers the best ways to build a chat app in Django using Websockets and ASGI.<br> <span style=\"color: #AAAAAA;font-weight: normal;text-decoration: none;word-wrap: break-word;-ms-text-size-adjust: 100%;-webkit-text-size-adjust: 100%;font-size:0.8em;text-transform:normal;\"><a href=\"https:\/\/pycoders.com\/link\/16184\/feed\" style=\"color: #AAAAAA;font-weight: normal;text-decoration: none;word-wrap: break-word;-ms-text-size-adjust: 100%;-webkit-text-size-adjust: 100%;\" target=\"_blank\">HONEYBADGER.IO<\/a> \u2022 Shared by Addison Curtis<\/span> <\/p> <\/div> <h2>Projects &amp; Code<\/h2> <div> <h3 style=\"margin-bottom: 0;\"><a href=\"https:\/\/pycoders.com\/link\/16180\/feed\" target=\"_blank\">zsh-safe-venv-auto: ZSH Plugin That Activates Python <code>venvs<\/code><\/a><\/h3> <p style=\"margin-bottom: 0;\"> <span style=\"color: #AAAAAA;font-weight: normal;text-decoration: none;word-wrap: break-word;-ms-text-size-adjust: 100%;-webkit-text-size-adjust: 100%;font-size:0.8em;text-transform:normal;\"><a href=\"https:\/\/pycoders.com\/link\/16180\/feed\" style=\"color: #AAAAAA;font-weight: normal;text-decoration: none;word-wrap: break-word;-ms-text-size-adjust: 100%;-webkit-text-size-adjust: 100%;\" target=\"_blank\">GITHUB.COM\/MAVWOLVERINE<\/a><\/span> <\/p> <\/div> <div> <h3 style=\"margin-bottom: 0;\"><a href=\"https:\/\/pycoders.com\/link\/16175\/feed\" target=\"_blank\">mypyc: Compile Type Annotated Python to Fast C Extensions<\/a><\/h3> <p style=\"margin-bottom: 0;\"> <span style=\"color: #AAAAAA;font-weight: normal;text-decoration: none;word-wrap: break-word;-ms-text-size-adjust: 100%;-webkit-text-size-adjust: 100%;font-size:0.8em;text-transform:normal;\"><a href=\"https:\/\/pycoders.com\/link\/16175\/feed\" style=\"color: #AAAAAA;font-weight: normal;text-decoration: none;word-wrap: break-word;-ms-text-size-adjust: 100%;-webkit-text-size-adjust: 100%;\" target=\"_blank\">GITHUB.COM\/MYPYC<\/a><\/span> <\/p> <\/div> <div> <h3 style=\"margin-bottom: 0;\"><a href=\"https:\/\/pycoders.com\/link\/16171\/feed\" target=\"_blank\">pristan: The Simplest Way to Create a Plugin System<\/a><\/h3> <p style=\"margin-bottom: 0;\"> <span style=\"color: #AAAAAA;font-weight: normal;text-decoration: none;word-wrap: break-word;-ms-text-size-adjust: 100%;-webkit-text-size-adjust: 100%;font-size:0.8em;text-transform:normal;\"><a href=\"https:\/\/pycoders.com\/link\/16171\/feed\" style=\"color: #AAAAAA;font-weight: normal;text-decoration: none;word-wrap: break-word;-ms-text-size-adjust: 100%;-webkit-text-size-adjust: 100%;\" target=\"_blank\">GITHUB.COM\/MUTATING<\/a> \u2022 Shared by pomponchik<\/span> <\/p> <\/div> <div> <h3 style=\"margin-bottom: 0;\"><a href=\"https:\/\/pycoders.com\/link\/16165\/feed\" target=\"_blank\">MaskOps: PII Masking as a Native Polars Plugin<\/a><\/h3> <p style=\"margin-bottom: 0;\"> <span style=\"color: #AAAAAA;font-weight: normal;text-decoration: none;word-wrap: break-word;-ms-text-size-adjust: 100%;-webkit-text-size-adjust: 100%;font-size:0.8em;text-transform:normal;\"><a href=\"https:\/\/pycoders.com\/link\/16165\/feed\" style=\"color: #AAAAAA;font-weight: normal;text-decoration: none;word-wrap: break-word;-ms-text-size-adjust: 100%;-webkit-text-size-adjust: 100%;\" target=\"_blank\">GITHUB.COM\/FCARVAJALBROWN<\/a> \u2022 Shared by Felipe Carvajal Brown<\/span> <\/p> <\/div> <div> <h3 style=\"margin-bottom: 0;\"><a href=\"https:\/\/pycoders.com\/link\/16177\/feed\" target=\"_blank\">django-tasks-rq: RQ Based Django Tasks Backend<\/a><\/h3> <p style=\"margin-bottom: 0;\"> <span style=\"color: #AAAAAA;font-weight: normal;text-decoration: none;word-wrap: break-word;-ms-text-size-adjust: 100%;-webkit-text-size-adjust: 100%;font-size:0.8em;text-transform:normal;\"><a href=\"https:\/\/pycoders.com\/link\/16177\/feed\" style=\"color: #AAAAAA;font-weight: normal;text-decoration: none;word-wrap: break-word;-ms-text-size-adjust: 100%;-webkit-text-size-adjust: 100%;\" target=\"_blank\">GITHUB.COM\/REALORANGEONE<\/a><\/span> <\/p> <\/div> <h2>Events<\/h2> <div> <h3 style=\"margin-bottom: 0;\"><a href=\"https:\/\/pycoders.com\/link\/16182\/feed\" target=\"_blank\">Weekly Real Python Office Hours Q&amp;A (Virtual)<\/a><\/h3> <p style=\"margin-bottom: 0;\"> March 25, 2026<br> <span style=\"color: #AAAAAA;font-weight: normal;text-decoration: none;word-wrap: break-word;-ms-text-size-adjust: 100%;-webkit-text-size-adjust: 100%;font-size:0.8em;text-transform:normal;\"><a href=\"https:\/\/pycoders.com\/link\/16182\/feed\" style=\"color: #AAAAAA;font-weight: normal;text-decoration: none;word-wrap: break-word;-ms-text-size-adjust: 100%;-webkit-text-size-adjust: 100%;\" target=\"_blank\">REALPYTHON.COM<\/a><\/span> <\/p> <\/div> <div> <h3 style=\"margin-bottom: 0;\"><a href=\"https:\/\/pycoders.com\/link\/16166\/feed\" target=\"_blank\">Django Girls Colombia 2026<\/a><\/h3> <p style=\"margin-bottom: 0;\"> March 28 to March 29, 2026<br> <span style=\"color: #AAAAAA;font-weight: normal;text-decoration: none;word-wrap: break-word;-ms-text-size-adjust: 100%;-webkit-text-size-adjust: 100%;font-size:0.8em;text-transform:normal;\"><a href=\"https:\/\/pycoders.com\/link\/16166\/feed\" style=\"color: #AAAAAA;font-weight: normal;text-decoration: none;word-wrap: break-word;-ms-text-size-adjust: 100%;-webkit-text-size-adjust: 100%;\" target=\"_blank\">DJANGOGIRLS.ORG<\/a><\/span> <\/p> <\/div> <div> <h3 style=\"margin-bottom: 0;\"><a href=\"https:\/\/pycoders.com\/link\/16158\/feed\" target=\"_blank\">Python Sheffield<\/a><\/h3> <p style=\"margin-bottom: 0;\"> March 31, 2026<br> <span style=\"color: #AAAAAA;font-weight: normal;text-decoration: none;word-wrap: break-word;-ms-text-size-adjust: 100%;-webkit-text-size-adjust: 100%;font-size:0.8em;text-transform:normal;\"><a href=\"https:\/\/pycoders.com\/link\/16158\/feed\" style=\"color: #AAAAAA;font-weight: normal;text-decoration: none;word-wrap: break-word;-ms-text-size-adjust: 100%;-webkit-text-size-adjust: 100%;\" target=\"_blank\">GOOGLE.COM<\/a><\/span> <\/p> <\/div> <div> <h3 style=\"margin-bottom: 0;\"><a href=\"https:\/\/pycoders.com\/link\/16157\/feed\" target=\"_blank\">Python Southwest Florida (PySWFL)<\/a><\/h3> <p style=\"margin-bottom: 0;\"> April 1, 2026<br> <span style=\"color: #AAAAAA;font-weight: normal;text-decoration: none;word-wrap: break-word;-ms-text-size-adjust: 100%;-webkit-text-size-adjust: 100%;font-size:0.8em;text-transform:normal;\"><a href=\"https:\/\/pycoders.com\/link\/16157\/feed\" style=\"color: #AAAAAA;font-weight: normal;text-decoration: none;word-wrap: break-word;-ms-text-size-adjust: 100%;-webkit-text-size-adjust: 100%;\" target=\"_blank\">MEETUP.COM<\/a><\/span> <\/p> <\/div> <div> <h3 style=\"margin-bottom: 0;\"><a href=\"https:\/\/pycoders.com\/link\/16162\/feed\" target=\"_blank\">STL Python<\/a><\/h3> <p style=\"margin-bottom: 0;\"> April 2, 2026<br> <span style=\"color: #AAAAAA;font-weight: normal;text-decoration: none;word-wrap: break-word;-ms-text-size-adjust: 100%;-webkit-text-size-adjust: 100%;font-size:0.8em;text-transform:normal;\"><a href=\"https:\/\/pycoders.com\/link\/16162\/feed\" style=\"color: #AAAAAA;font-weight: normal;text-decoration: none;word-wrap: break-word;-ms-text-size-adjust: 100%;-webkit-text-size-adjust: 100%;\" target=\"_blank\">MEETUP.COM<\/a><\/span> <\/p> <\/div> <hr> <p>Happy Pythoning!<br>This was PyCoder&rsquo;s Weekly Issue #727.<br><a href=\"https:\/\/pycoders.com\/issues\/727\/feed\">View in Browser \u00bb<\/a><\/p> <img src=\"https:\/\/pycoders.com\/issues\/727\/open\/feed\" width=\"1\" height=\"1\" alt> \n        <hr \/>\n        <p><em>[ Subscribe to \ud83d\udc0d PyCoder&rsquo;s Weekly \ud83d\udc8c \u2013 Get the best Python news, articles, and tutorials delivered to your inbox once a week <a href=\"https:\/\/pycoders.com\/?utm_source=pycoders&amp;utm_medium=feed&amp;utm_campaign=footer\">&gt;&gt; Click here to learn more<\/a> ]<\/em><\/p>\n      "},{"title":"Issue #726: Lazy Imports, Pydantic AI, Classes, and More (March 17, 2026)","id":"https:\/\/pycoders.com\/issues\/726","link":{"@attributes":{"href":"https:\/\/pycoders.com\/issues\/726"}},"updated":"2026-03-17T19:30:00+00:00","content":"\n         <p> <span>#726 \u2013 MARCH 17, 2026<\/span><br> <span><a href=\"https:\/\/pycoders.com\/issues\/726\/feed\">View in Browser \u00bb<\/a><\/span> <\/p> <p><a href=\"https:\/\/pycoders.com\"><img alt=\"The PyCoder&rsquo;s Weekly Logo\" src=\"https:\/\/cdn.pycoders.com\/37bdf31dc645f968ffb90196e5d38ff5\" style=\"max-width: 100%;\"><\/a><\/p> <hr> <div> <h3 style=\"margin-bottom: 0;\"><a href=\"https:\/\/pycoders.com\/link\/16144\/feed\" target=\"_blank\">The Story of Python&rsquo;s Lazy Imports<\/a><\/h3> <p style=\"margin-bottom: 0;\"> This article is about why lazy imports took 3 years and 2 attempts to be added to the language. From PEP 690&rsquo;s rejection to PEP 810&rsquo;s unanimous acceptance.<br> <span style=\"color: #AAAAAA;font-weight: normal;text-decoration: none;word-wrap: break-word;-ms-text-size-adjust: 100%;-webkit-text-size-adjust: 100%;font-size:0.8em;text-transform:normal;\"><a href=\"https:\/\/pycoders.com\/link\/16144\/feed\" style=\"color: #AAAAAA;font-weight: normal;text-decoration: none;word-wrap: break-word;-ms-text-size-adjust: 100%;-webkit-text-size-adjust: 100%;\" target=\"_blank\">TECHLIFE<\/a><\/span> <\/p> <\/div> <div> <h3 style=\"margin-bottom: 0;\"><a href=\"https:\/\/pycoders.com\/link\/16125\/feed\" target=\"_blank\">Pydantic AI: Build Type-Safe LLM Agents in Python<\/a><\/h3> <p style=\"margin-bottom: 0;\"> Learn how to use Pydantic AI to build type-safe LLM agents in Python with structured outputs, function calling, and dependency injection patterns.<br> <span style=\"color: #AAAAAA;font-weight: normal;text-decoration: none;word-wrap: break-word;-ms-text-size-adjust: 100%;-webkit-text-size-adjust: 100%;font-size:0.8em;text-transform:normal;\"><a href=\"https:\/\/pycoders.com\/link\/16125\/feed\" style=\"color: #AAAAAA;font-weight: normal;text-decoration: none;word-wrap: break-word;-ms-text-size-adjust: 100%;-webkit-text-size-adjust: 100%;\" target=\"_blank\">REAL PYTHON<\/a><\/span> <\/p> <\/div> <div> <h3 style=\"margin-bottom: 0;\"><a href=\"https:\/\/pycoders.com\/link\/16118\/feed\" target=\"_blank\">Agents as API Services, Not Prompt Chains.<\/a><\/h3> <a href=\"https:\/\/pycoders.com\/link\/16118\/feed\" target=\"_blank\"><img style=\"float:right; margin-left: 16px; margin-top: 7px; width: 17%;\" src=\"https:\/\/cdn.pycoders.com\/ccfaaf99831c2232e401ea409e24e4fb\" alt><\/a> <p style=\"margin-bottom: 0;\"> Clone a working 100-agent Python system: Autonomous Engineering Team, Deep Security Auditor, or Adversarial Code Reviewer. Agents run as API services, discover each other at runtime. No DAGs, no glue code. Any model. Apache 2.0. <a href=\"https:\/\/pycoders.com\/link\/16118\/feed\" target=\"_blank\">Clone a Recipe \u2192<\/a><br> <span style=\"color: #AAAAAA;font-weight: normal;text-decoration: none;word-wrap: break-word;-ms-text-size-adjust: 100%;-webkit-text-size-adjust: 100%;font-size:0.8em;text-transform:normal;\"><a href=\"https:\/\/pycoders.com\/link\/16118\/feed\" style=\"color: #AAAAAA;font-weight: normal;text-decoration: none;word-wrap: break-word;-ms-text-size-adjust: 100%;-webkit-text-size-adjust: 100%;\" target=\"_blank\">AGENTFIELD.AI<\/a><\/span> <span style=\"color: #AAAAAA;text-transform:uppercase;padding:1px 4px;border:1px solid #dddddd;margin-left:4px;font-size:0.8em;border-radius:2px;background-color:#ffffe0;\">sponsor<\/span> <\/p> <\/div> <div> <h3 style=\"margin-bottom: 0;\"><a href=\"https:\/\/pycoders.com\/link\/16133\/feed\" target=\"_blank\">When Are Classes Used in Python?<\/a><\/h3> <p style=\"margin-bottom: 0;\"> While you don&rsquo;t often need to make your own classes in Python, they can sometimes make your code reusable and easier to read.<br> <span style=\"color: #AAAAAA;font-weight: normal;text-decoration: none;word-wrap: break-word;-ms-text-size-adjust: 100%;-webkit-text-size-adjust: 100%;font-size:0.8em;text-transform:normal;\"><a href=\"https:\/\/pycoders.com\/link\/16133\/feed\" style=\"color: #AAAAAA;font-weight: normal;text-decoration: none;word-wrap: break-word;-ms-text-size-adjust: 100%;-webkit-text-size-adjust: 100%;\" target=\"_blank\">TREY HUNNER<\/a><\/span> <\/p> <\/div> <div> <h3 style=\"margin-bottom: 0;\"><a href=\"https:\/\/pycoders.com\/link\/16143\/feed\" target=\"_blank\">Learn the Agentic Coding Workflow That Actually Works on Real Projects<\/a><\/h3> <p style=\"margin-bottom: 0;\"> 65% of Python developers are stuck using AI for small tasks that fall apart on anything real. This 2-day live course (March 21-22 via Zoom) walks you through building a complete Python CLI app with Claude Code, from an empty directory to a shipped project on GitHub.<br> <span style=\"color: #AAAAAA;font-weight: normal;text-decoration: none;word-wrap: break-word;-ms-text-size-adjust: 100%;-webkit-text-size-adjust: 100%;font-size:0.8em;text-transform:normal;\"><a href=\"https:\/\/pycoders.com\/link\/16143\/feed\" style=\"color: #AAAAAA;font-weight: normal;text-decoration: none;word-wrap: break-word;-ms-text-size-adjust: 100%;-webkit-text-size-adjust: 100%;\" target=\"_blank\">REAL PYTHON<\/a><\/span> <\/p> <\/div> <div> <h3 style=\"margin-bottom: 0;\"><a href=\"https:\/\/pycoders.com\/link\/16119\/feed\" target=\"_blank\">DuckDB 1.5.0 Released<\/a><\/h3> <p style=\"margin-bottom: 0;\"> <span style=\"color: #AAAAAA;font-weight: normal;text-decoration: none;word-wrap: break-word;-ms-text-size-adjust: 100%;-webkit-text-size-adjust: 100%;font-size:0.8em;text-transform:normal;\"><a href=\"https:\/\/pycoders.com\/link\/16119\/feed\" style=\"color: #AAAAAA;font-weight: normal;text-decoration: none;word-wrap: break-word;-ms-text-size-adjust: 100%;-webkit-text-size-adjust: 100%;\" target=\"_blank\">DUCKDB.ORG<\/a><\/span> <\/p> <\/div> <div> <h3 style=\"margin-bottom: 0;\"><a href=\"https:\/\/pycoders.com\/link\/16149\/feed\" target=\"_blank\">PyPy v7.3.21 Released<\/a><\/h3> <p style=\"margin-bottom: 0;\"> <span style=\"color: #AAAAAA;font-weight: normal;text-decoration: none;word-wrap: break-word;-ms-text-size-adjust: 100%;-webkit-text-size-adjust: 100%;font-size:0.8em;text-transform:normal;\"><a href=\"https:\/\/pycoders.com\/link\/16149\/feed\" style=\"color: #AAAAAA;font-weight: normal;text-decoration: none;word-wrap: break-word;-ms-text-size-adjust: 100%;-webkit-text-size-adjust: 100%;\" target=\"_blank\">PYPY.ORG<\/a><\/span> <\/p> <\/div> <div> <h3 style=\"margin-bottom: 0;\"><a href=\"https:\/\/pycoders.com\/link\/16127\/feed\" target=\"_blank\">Python 3.15.0 Alpha 7<\/a><\/h3> <p style=\"margin-bottom: 0;\"> <span style=\"color: #AAAAAA;font-weight: normal;text-decoration: none;word-wrap: break-word;-ms-text-size-adjust: 100%;-webkit-text-size-adjust: 100%;font-size:0.8em;text-transform:normal;\"><a href=\"https:\/\/pycoders.com\/link\/16127\/feed\" style=\"color: #AAAAAA;font-weight: normal;text-decoration: none;word-wrap: break-word;-ms-text-size-adjust: 100%;-webkit-text-size-adjust: 100%;\" target=\"_blank\">PYTHON.ORG<\/a><\/span> <\/p> <\/div> <h2>Python Jobs<\/h2> <h3 style=\"margin-bottom: 0;\"><a href=\"https:\/\/pycoders.com\/link\/16141\/feed\" target=\"_blank\">Python + AI Content Specialist (Anywhere)<\/a><\/h3> <p><a href=\"https:\/\/pycoders.com\/link\/16141\/feed\" target=\"_blank\">Real Python<\/a><\/p> <p><a href=\"https:\/\/www.pythonjobshq.com?utm_source=newsletter&amp;utm_campaign=pycoders726&amp;utm_medium=feed\" target=\"_blank\">More Python Jobs &gt;&gt;&gt;<\/a><\/p> <h2>Articles &amp; Tutorials<\/h2> <div> <h3 style=\"margin-bottom: 0;\"><a href=\"https:\/\/pycoders.com\/link\/16124\/feed\" target=\"_blank\">Crafting and Editing in-Depth Tutorials at Real Python<\/a><\/h3> <p style=\"margin-bottom: 0;\"> What goes into creating the tutorials you read at Real Python? What are the steps in the editorial process, and who are the people behind the scenes? This week on the show, Real Python team members Martin Breuss, Brenda Weleschuk, and Philipp Acsany join us to discuss topic curation, review stages, and quality assurance.<br> <span style=\"color: #AAAAAA;font-weight: normal;text-decoration: none;word-wrap: break-word;-ms-text-size-adjust: 100%;-webkit-text-size-adjust: 100%;font-size:0.8em;text-transform:normal;\"><a href=\"https:\/\/pycoders.com\/link\/16124\/feed\" style=\"color: #AAAAAA;font-weight: normal;text-decoration: none;word-wrap: break-word;-ms-text-size-adjust: 100%;-webkit-text-size-adjust: 100%;\" target=\"_blank\">REAL PYTHON<\/a><\/span> <span style=\"color: #AAAAAA;text-transform:uppercase;padding:1px 4px;border:1px solid #dddddd;margin-left:4px;font-size:0.8em;border-radius:2px;\">podcast<\/span> <\/p> <\/div> <div> <h3 style=\"margin-bottom: 0;\"><a href=\"https:\/\/pycoders.com\/link\/16121\/feed\" target=\"_blank\">The Optimization Ladder<\/a><\/h3> <p style=\"margin-bottom: 0;\"> Python loses every public benchmark by 21-875x. Cemrehan took the exact problems people use to dunk on Python and climbed every rung of the optimization ladder: from CPython version upgrades to Rust. Real numbers, real code, real effort costs.<br> <span style=\"color: #AAAAAA;font-weight: normal;text-decoration: none;word-wrap: break-word;-ms-text-size-adjust: 100%;-webkit-text-size-adjust: 100%;font-size:0.8em;text-transform:normal;\"><a href=\"https:\/\/pycoders.com\/link\/16121\/feed\" style=\"color: #AAAAAA;font-weight: normal;text-decoration: none;word-wrap: break-word;-ms-text-size-adjust: 100%;-webkit-text-size-adjust: 100%;\" target=\"_blank\">CEMREHAN \u00c7AVDAR<\/a><\/span> <\/p> <\/div> <div> <h3 style=\"margin-bottom: 0;\"><a href=\"https:\/\/pycoders.com\/link\/16117\/feed\" target=\"_blank\">Ship Voice Agents That Sound Like Human with Async<\/a><\/h3> <a href=\"https:\/\/pycoders.com\/link\/16117\/feed\" target=\"_blank\"><img style=\"float:right; margin-left: 16px; margin-top: 7px; width: 17%;\" src=\"https:\/\/cdn.pycoders.com\/9ad436d3a7cd66c0654ae64dc7ec79bd\" alt><\/a> <p style=\"margin-bottom: 0;\"> Async Voice API is a human-like low-latency text-to-speech API for real-time apps and agents. 15 languages, streaming-ready, integrations with n8n, LiveKit, Twilio. Top-ranked on the Hugging Face TTS Arena. From$0.50\/hour with a 24\/7 SLA. <a href=\"https:\/\/pycoders.com\/link\/16117\/feed\" target=\"_blank\">Try Now \u2192<\/a><br> <span style=\"color: #AAAAAA;font-weight: normal;text-decoration: none;word-wrap: break-word;-ms-text-size-adjust: 100%;-webkit-text-size-adjust: 100%;font-size:0.8em;text-transform:normal;\"><a href=\"https:\/\/pycoders.com\/link\/16117\/feed\" style=\"color: #AAAAAA;font-weight: normal;text-decoration: none;word-wrap: break-word;-ms-text-size-adjust: 100%;-webkit-text-size-adjust: 100%;\" target=\"_blank\">ASYNC<\/a><\/span> <span style=\"color: #AAAAAA;text-transform:uppercase;padding:1px 4px;border:1px solid #dddddd;margin-left:4px;font-size:0.8em;border-radius:2px;background-color:#ffffe0;\">sponsor<\/span> <\/p> <\/div> <div> <h3 style=\"margin-bottom: 0;\"><a href=\"https:\/\/pycoders.com\/link\/16134\/feed\" target=\"_blank\">Lock the Ghost in <code>uv.lock<\/code><\/a><\/h3> <p style=\"margin-bottom: 0;\"> In the software world, \u201cremove\u201d is not equal to &ldquo;gone.&rdquo; Take a short trip through how the Python Package Index handles removals and how you can lock a ghost package in an uv.lock file forever!<br> <span style=\"color: #AAAAAA;font-weight: normal;text-decoration: none;word-wrap: break-word;-ms-text-size-adjust: 100%;-webkit-text-size-adjust: 100%;font-size:0.8em;text-transform:normal;\"><a href=\"https:\/\/pycoders.com\/link\/16134\/feed\" style=\"color: #AAAAAA;font-weight: normal;text-decoration: none;word-wrap: break-word;-ms-text-size-adjust: 100%;-webkit-text-size-adjust: 100%;\" target=\"_blank\">CERT.AT<\/a> \u2022 Shared by Kamil Ma\u0144kowski<\/span> <\/p> <\/div> <div> <h3 style=\"margin-bottom: 0;\"><a href=\"https:\/\/pycoders.com\/link\/16148\/feed\" target=\"_blank\">Comparing PDF Table Extraction Tools<\/a><\/h3> <p style=\"margin-bottom: 0;\"> This article explores three Python tools for PDF table extraction: Docling, Marker, and LlamaParse. Learn which handles merged cells and multi-level headers best.<br> <span style=\"color: #AAAAAA;font-weight: normal;text-decoration: none;word-wrap: break-word;-ms-text-size-adjust: 100%;-webkit-text-size-adjust: 100%;font-size:0.8em;text-transform:normal;\"><a href=\"https:\/\/pycoders.com\/link\/16148\/feed\" style=\"color: #AAAAAA;font-weight: normal;text-decoration: none;word-wrap: break-word;-ms-text-size-adjust: 100%;-webkit-text-size-adjust: 100%;\" target=\"_blank\">CODECUT.AI<\/a> \u2022 Shared by <a href=\"https:\/\/pycoders.com\/link\/16135\/feed\" style=\"color: #AAAAAA;font-weight: normal;text-decoration: none;word-wrap: break-word;-ms-text-size-adjust: 100%;-webkit-text-size-adjust: 100%;\" target=\"_blank\">Khuyen Tran<\/a><\/span> <\/p> <\/div> <div> <h3 style=\"margin-bottom: 0;\"><a href=\"https:\/\/pycoders.com\/link\/16128\/feed\" target=\"_blank\">What Is Code Review For?<\/a><\/h3> <p style=\"margin-bottom: 0;\"> This post explores just what you should and should not use code reviews for. Learn when to use linters to catch problems vs when human review is important.<br> <span style=\"color: #AAAAAA;font-weight: normal;text-decoration: none;word-wrap: break-word;-ms-text-size-adjust: 100%;-webkit-text-size-adjust: 100%;font-size:0.8em;text-transform:normal;\"><a href=\"https:\/\/pycoders.com\/link\/16128\/feed\" style=\"color: #AAAAAA;font-weight: normal;text-decoration: none;word-wrap: break-word;-ms-text-size-adjust: 100%;-webkit-text-size-adjust: 100%;\" target=\"_blank\">GLYPH<\/a><\/span> <\/p> <\/div> <div> <h3 style=\"margin-bottom: 0;\"><a href=\"https:\/\/pycoders.com\/link\/16132\/feed\" target=\"_blank\">Caching an Asyncio Function the Easy Way<\/a><\/h3> <p style=\"margin-bottom: 0;\"> Caching an async function is trickier than expected, this article walks through why that is and how to use Asyncio primitives to solve the problem.<br> <span style=\"color: #AAAAAA;font-weight: normal;text-decoration: none;word-wrap: break-word;-ms-text-size-adjust: 100%;-webkit-text-size-adjust: 100%;font-size:0.8em;text-transform:normal;\"><a href=\"https:\/\/pycoders.com\/link\/16132\/feed\" style=\"color: #AAAAAA;font-weight: normal;text-decoration: none;word-wrap: break-word;-ms-text-size-adjust: 100%;-webkit-text-size-adjust: 100%;\" target=\"_blank\">CHANGS.CO.UK<\/a> \u2022 Shared by Jamie Chang<\/span> <\/p> <\/div> <div> <h3 style=\"margin-bottom: 0;\"><a href=\"https:\/\/pycoders.com\/link\/16145\/feed\" target=\"_blank\">Working With APIs in Python: Reading Public Data<\/a><\/h3> <p style=\"margin-bottom: 0;\"> Learn how to consume REST APIs with Python using the requests library, including authentication, query parameters, and handling responses.<br> <span style=\"color: #AAAAAA;font-weight: normal;text-decoration: none;word-wrap: break-word;-ms-text-size-adjust: 100%;-webkit-text-size-adjust: 100%;font-size:0.8em;text-transform:normal;\"><a href=\"https:\/\/pycoders.com\/link\/16145\/feed\" style=\"color: #AAAAAA;font-weight: normal;text-decoration: none;word-wrap: break-word;-ms-text-size-adjust: 100%;-webkit-text-size-adjust: 100%;\" target=\"_blank\">REAL PYTHON<\/a><\/span> <span style=\"color: #AAAAAA;text-transform:uppercase;padding:1px 4px;border:1px solid #dddddd;margin-left:4px;font-size:0.8em;border-radius:2px;\">course<\/span> <\/p> <\/div> <div> <h3 style=\"margin-bottom: 0;\"><a href=\"https:\/\/pycoders.com\/link\/16150\/feed\" target=\"_blank\">Nobody Gets Promoted for Simplicity<\/a><\/h3> <p style=\"margin-bottom: 0;\"> Our industry often rewards complexity and ignores simplicity. In interviews, design reviews, and promotions. Here&rsquo;s how to fix it.<br> <span style=\"color: #AAAAAA;font-weight: normal;text-decoration: none;word-wrap: break-word;-ms-text-size-adjust: 100%;-webkit-text-size-adjust: 100%;font-size:0.8em;text-transform:normal;\"><a href=\"https:\/\/pycoders.com\/link\/16150\/feed\" style=\"color: #AAAAAA;font-weight: normal;text-decoration: none;word-wrap: break-word;-ms-text-size-adjust: 100%;-webkit-text-size-adjust: 100%;\" target=\"_blank\">TERRIBLE SOFTWARE<\/a><\/span> <\/p> <\/div> <div> <h3 style=\"margin-bottom: 0;\"><a href=\"https:\/\/pycoders.com\/link\/16122\/feed\" target=\"_blank\">You Store Data and You Do Stuff With Data<\/a><\/h3> <p style=\"margin-bottom: 0;\"> This post explores the Object Oriented Programming mindset and why you want to associate your data with the operations upon it.<br> <span style=\"color: #AAAAAA;font-weight: normal;text-decoration: none;word-wrap: break-word;-ms-text-size-adjust: 100%;-webkit-text-size-adjust: 100%;font-size:0.8em;text-transform:normal;\"><a href=\"https:\/\/pycoders.com\/link\/16122\/feed\" style=\"color: #AAAAAA;font-weight: normal;text-decoration: none;word-wrap: break-word;-ms-text-size-adjust: 100%;-webkit-text-size-adjust: 100%;\" target=\"_blank\">STEPHEN GRUPPETTA<\/a><\/span> <\/p> <\/div> <div> <h3 style=\"margin-bottom: 0;\"><a href=\"https:\/\/pycoders.com\/link\/16130\/feed\" target=\"_blank\">pandas&rsquo; Public API Is Now Type-Complete<\/a><\/h3> <p style=\"margin-bottom: 0;\"> Marco tells the story of how his team helped make pandas&rsquo; public API type-complete, and how to prevent it from regressing.<br> <span style=\"color: #AAAAAA;font-weight: normal;text-decoration: none;word-wrap: break-word;-ms-text-size-adjust: 100%;-webkit-text-size-adjust: 100%;font-size:0.8em;text-transform:normal;\"><a href=\"https:\/\/pycoders.com\/link\/16130\/feed\" style=\"color: #AAAAAA;font-weight: normal;text-decoration: none;word-wrap: break-word;-ms-text-size-adjust: 100%;-webkit-text-size-adjust: 100%;\" target=\"_blank\">MARCO GORELLI<\/a><\/span> <\/p> <\/div> <div> <h3 style=\"margin-bottom: 0;\"><a href=\"https:\/\/pycoders.com\/link\/16120\/feed\" target=\"_blank\">Remove Extra Spaces<\/a><\/h3> <p style=\"margin-bottom: 0;\"> Learn how to remove extra spaces from a string using regex, string splitting, a fixed point, and <code>itertools.groupby<\/code>.<br> <span style=\"color: #AAAAAA;font-weight: normal;text-decoration: none;word-wrap: break-word;-ms-text-size-adjust: 100%;-webkit-text-size-adjust: 100%;font-size:0.8em;text-transform:normal;\"><a href=\"https:\/\/pycoders.com\/link\/16120\/feed\" style=\"color: #AAAAAA;font-weight: normal;text-decoration: none;word-wrap: break-word;-ms-text-size-adjust: 100%;-webkit-text-size-adjust: 100%;\" target=\"_blank\">RODRIGO GIR\u00c3O SERR\u00c3O<\/a><\/span> <\/p> <\/div> <div> <h3 style=\"margin-bottom: 0;\"><a href=\"https:\/\/pycoders.com\/link\/16152\/feed\" target=\"_blank\">CPython: 36 Years of Source Code<\/a><\/h3> <p style=\"margin-bottom: 0;\"> A graphical analysis of the growth of CPython&rsquo;s codebase from its first commits to the present day<br> <span style=\"color: #AAAAAA;font-weight: normal;text-decoration: none;word-wrap: break-word;-ms-text-size-adjust: 100%;-webkit-text-size-adjust: 100%;font-size:0.8em;text-transform:normal;\"><a href=\"https:\/\/pycoders.com\/link\/16152\/feed\" style=\"color: #AAAAAA;font-weight: normal;text-decoration: none;word-wrap: break-word;-ms-text-size-adjust: 100%;-webkit-text-size-adjust: 100%;\" target=\"_blank\">PYTHON.ORG<\/a><\/span> <\/p> <\/div> <h2>Projects &amp; Code<\/h2> <div> <h3 style=\"margin-bottom: 0;\"><a href=\"https:\/\/pycoders.com\/link\/16147\/feed\" target=\"_blank\">100 Days, 100 MicroPython IoT Projects<\/a><\/h3> <p style=\"margin-bottom: 0;\"> <span style=\"color: #AAAAAA;font-weight: normal;text-decoration: none;word-wrap: break-word;-ms-text-size-adjust: 100%;-webkit-text-size-adjust: 100%;font-size:0.8em;text-transform:normal;\"><a href=\"https:\/\/pycoders.com\/link\/16147\/feed\" style=\"color: #AAAAAA;font-weight: normal;text-decoration: none;word-wrap: break-word;-ms-text-size-adjust: 100%;-webkit-text-size-adjust: 100%;\" target=\"_blank\">GITHUB.COM\/KRITISHMOHAPATRA<\/a> \u2022 Shared by <a href=\"https:\/\/pycoders.com\/link\/16142\/feed\" style=\"color: #AAAAAA;font-weight: normal;text-decoration: none;word-wrap: break-word;-ms-text-size-adjust: 100%;-webkit-text-size-adjust: 100%;\" target=\"_blank\">Kritish Mohapatra<\/a><\/span> <\/p> <\/div> <div> <h3 style=\"margin-bottom: 0;\"><a href=\"https:\/\/pycoders.com\/link\/16131\/feed\" target=\"_blank\">OpenDocs: Turn Your README Into Documentation<\/a><\/h3> <p style=\"margin-bottom: 0;\"> <span style=\"color: #AAAAAA;font-weight: normal;text-decoration: none;word-wrap: break-word;-ms-text-size-adjust: 100%;-webkit-text-size-adjust: 100%;font-size:0.8em;text-transform:normal;\"><a href=\"https:\/\/pycoders.com\/link\/16131\/feed\" style=\"color: #AAAAAA;font-weight: normal;text-decoration: none;word-wrap: break-word;-ms-text-size-adjust: 100%;-webkit-text-size-adjust: 100%;\" target=\"_blank\">GITHUB.COM\/IOTEVERYTHIN<\/a><\/span> <\/p> <\/div> <div> <h3 style=\"margin-bottom: 0;\"><a href=\"https:\/\/pycoders.com\/link\/16126\/feed\" target=\"_blank\">Cycast: Internet Radio Streaming Server<\/a><\/h3> <p style=\"margin-bottom: 0;\"> <span style=\"color: #AAAAAA;font-weight: normal;text-decoration: none;word-wrap: break-word;-ms-text-size-adjust: 100%;-webkit-text-size-adjust: 100%;font-size:0.8em;text-transform:normal;\"><a href=\"https:\/\/pycoders.com\/link\/16126\/feed\" style=\"color: #AAAAAA;font-weight: normal;text-decoration: none;word-wrap: break-word;-ms-text-size-adjust: 100%;-webkit-text-size-adjust: 100%;\" target=\"_blank\">GITHUB.COM\/LUKEB42<\/a><\/span> <\/p> <\/div> <div> <h3 style=\"margin-bottom: 0;\"><a href=\"https:\/\/pycoders.com\/link\/16151\/feed\" target=\"_blank\">Crime-Related Datasets for Python<\/a><\/h3> <p style=\"margin-bottom: 0;\"> <span style=\"color: #AAAAAA;font-weight: normal;text-decoration: none;word-wrap: break-word;-ms-text-size-adjust: 100%;-webkit-text-size-adjust: 100%;font-size:0.8em;text-transform:normal;\"><a href=\"https:\/\/pycoders.com\/link\/16151\/feed\" style=\"color: #AAAAAA;font-weight: normal;text-decoration: none;word-wrap: break-word;-ms-text-size-adjust: 100%;-webkit-text-size-adjust: 100%;\" target=\"_blank\">PYPI.ORG<\/a> \u2022 Shared by <a href=\"https:\/\/pycoders.com\/link\/16123\/feed\" style=\"color: #AAAAAA;font-weight: normal;text-decoration: none;word-wrap: break-word;-ms-text-size-adjust: 100%;-webkit-text-size-adjust: 100%;\" target=\"_blank\">Renzo Caceres Rossi<\/a><\/span> <\/p> <\/div> <div> <h3 style=\"margin-bottom: 0;\"><a href=\"https:\/\/pycoders.com\/link\/16136\/feed\" target=\"_blank\">django-tasks-db: An ORM-based Backend for Django Tasks<\/a><\/h3> <p style=\"margin-bottom: 0;\"> <span style=\"color: #AAAAAA;font-weight: normal;text-decoration: none;word-wrap: break-word;-ms-text-size-adjust: 100%;-webkit-text-size-adjust: 100%;font-size:0.8em;text-transform:normal;\"><a href=\"https:\/\/pycoders.com\/link\/16136\/feed\" style=\"color: #AAAAAA;font-weight: normal;text-decoration: none;word-wrap: break-word;-ms-text-size-adjust: 100%;-webkit-text-size-adjust: 100%;\" target=\"_blank\">GITHUB.COM\/REALORANGEONE<\/a><\/span> <\/p> <\/div> <h2>Events<\/h2> <div> <h3 style=\"margin-bottom: 0;\"><a href=\"https:\/\/pycoders.com\/link\/16146\/feed\" target=\"_blank\">Weekly Real Python Office Hours Q&amp;A (Virtual)<\/a><\/h3> <p style=\"margin-bottom: 0;\"> March 18, 2026<br> <span style=\"color: #AAAAAA;font-weight: normal;text-decoration: none;word-wrap: break-word;-ms-text-size-adjust: 100%;-webkit-text-size-adjust: 100%;font-size:0.8em;text-transform:normal;\"><a href=\"https:\/\/pycoders.com\/link\/16146\/feed\" style=\"color: #AAAAAA;font-weight: normal;text-decoration: none;word-wrap: break-word;-ms-text-size-adjust: 100%;-webkit-text-size-adjust: 100%;\" target=\"_blank\">REALPYTHON.COM<\/a><\/span> <\/p> <\/div> <div> <h3 style=\"margin-bottom: 0;\"><a href=\"https:\/\/pycoders.com\/link\/16137\/feed\" target=\"_blank\">PyData Bristol Meetup<\/a><\/h3> <p style=\"margin-bottom: 0;\"> March 19, 2026<br> <span style=\"color: #AAAAAA;font-weight: normal;text-decoration: none;word-wrap: break-word;-ms-text-size-adjust: 100%;-webkit-text-size-adjust: 100%;font-size:0.8em;text-transform:normal;\"><a href=\"https:\/\/pycoders.com\/link\/16137\/feed\" style=\"color: #AAAAAA;font-weight: normal;text-decoration: none;word-wrap: break-word;-ms-text-size-adjust: 100%;-webkit-text-size-adjust: 100%;\" target=\"_blank\">MEETUP.COM<\/a><\/span> <\/p> <\/div> <div> <h3 style=\"margin-bottom: 0;\"><a href=\"https:\/\/pycoders.com\/link\/16139\/feed\" target=\"_blank\">PyLadies Dublin<\/a><\/h3> <p style=\"margin-bottom: 0;\"> March 19, 2026<br> <span style=\"color: #AAAAAA;font-weight: normal;text-decoration: none;word-wrap: break-word;-ms-text-size-adjust: 100%;-webkit-text-size-adjust: 100%;font-size:0.8em;text-transform:normal;\"><a href=\"https:\/\/pycoders.com\/link\/16139\/feed\" style=\"color: #AAAAAA;font-weight: normal;text-decoration: none;word-wrap: break-word;-ms-text-size-adjust: 100%;-webkit-text-size-adjust: 100%;\" target=\"_blank\">PYLADIES.COM<\/a><\/span> <\/p> <\/div> <div> <h3 style=\"margin-bottom: 0;\"><a href=\"https:\/\/pycoders.com\/link\/16129\/feed\" target=\"_blank\">Chattanooga Python User Group<\/a><\/h3> <p style=\"margin-bottom: 0;\"> March 20 to March 21, 2026<br> <span style=\"color: #AAAAAA;font-weight: normal;text-decoration: none;word-wrap: break-word;-ms-text-size-adjust: 100%;-webkit-text-size-adjust: 100%;font-size:0.8em;text-transform:normal;\"><a href=\"https:\/\/pycoders.com\/link\/16129\/feed\" style=\"color: #AAAAAA;font-weight: normal;text-decoration: none;word-wrap: break-word;-ms-text-size-adjust: 100%;-webkit-text-size-adjust: 100%;\" target=\"_blank\">MEETUP.COM<\/a><\/span> <\/p> <\/div> <div> <h3 style=\"margin-bottom: 0;\"><a href=\"https:\/\/pycoders.com\/link\/16143\/feed\" target=\"_blank\">Claude Code for Python Developers: Hands-On Agentic Coding Course<\/a><\/h3> <p style=\"margin-bottom: 0;\"> March 21 to March 23, 2026<br> <span style=\"color: #AAAAAA;font-weight: normal;text-decoration: none;word-wrap: break-word;-ms-text-size-adjust: 100%;-webkit-text-size-adjust: 100%;font-size:0.8em;text-transform:normal;\"><a href=\"https:\/\/pycoders.com\/link\/16143\/feed\" style=\"color: #AAAAAA;font-weight: normal;text-decoration: none;word-wrap: break-word;-ms-text-size-adjust: 100%;-webkit-text-size-adjust: 100%;\" target=\"_blank\">REAL PYTHON<\/a><\/span> <\/p> <\/div> <div> <h3 style=\"margin-bottom: 0;\"><a href=\"https:\/\/pycoders.com\/link\/16138\/feed\" target=\"_blank\">PyCascades 2026<\/a><\/h3> <p style=\"margin-bottom: 0;\"> March 21 to March 23, 2026<br> <span style=\"color: #AAAAAA;font-weight: normal;text-decoration: none;word-wrap: break-word;-ms-text-size-adjust: 100%;-webkit-text-size-adjust: 100%;font-size:0.8em;text-transform:normal;\"><a href=\"https:\/\/pycoders.com\/link\/16138\/feed\" style=\"color: #AAAAAA;font-weight: normal;text-decoration: none;word-wrap: break-word;-ms-text-size-adjust: 100%;-webkit-text-size-adjust: 100%;\" target=\"_blank\">PYCASCADES.COM<\/a><\/span> <\/p> <\/div> <div> <h3 style=\"margin-bottom: 0;\"><a href=\"https:\/\/pycoders.com\/link\/16140\/feed\" target=\"_blank\">PythonAsia 2026<\/a><\/h3> <p style=\"margin-bottom: 0;\"> March 21 to March 24, 2026<br> <span style=\"color: #AAAAAA;font-weight: normal;text-decoration: none;word-wrap: break-word;-ms-text-size-adjust: 100%;-webkit-text-size-adjust: 100%;font-size:0.8em;text-transform:normal;\"><a href=\"https:\/\/pycoders.com\/link\/16140\/feed\" style=\"color: #AAAAAA;font-weight: normal;text-decoration: none;word-wrap: break-word;-ms-text-size-adjust: 100%;-webkit-text-size-adjust: 100%;\" target=\"_blank\">PYTHONASIA.ORG<\/a><\/span> <\/p> <\/div> <hr> <p>Happy Pythoning!<br>This was PyCoder&rsquo;s Weekly Issue #726.<br><a href=\"https:\/\/pycoders.com\/issues\/726\/feed\">View in Browser \u00bb<\/a><\/p> <img src=\"https:\/\/pycoders.com\/issues\/726\/open\/feed\" width=\"1\" height=\"1\" alt> \n        <hr \/>\n        <p><em>[ Subscribe to \ud83d\udc0d PyCoder&rsquo;s Weekly \ud83d\udc8c \u2013 Get the best Python news, articles, and tutorials delivered to your inbox once a week <a href=\"https:\/\/pycoders.com\/?utm_source=pycoders&amp;utm_medium=feed&amp;utm_campaign=footer\">&gt;&gt; Click here to learn more<\/a> ]<\/em><\/p>\n      "}]}