Feeds
PyCon: Meet PyCon US Keynote Speakers
We can’t wait to welcome Jay Miller, Kate Chapman, Simon Willison, and Sumana Harihareswara to our stage as PyCon US keynote speakers this year.
We asked each of our keynote speakers:
What excites them about the Python community?
What they’re looking forward to doing at PyCon US?
What can we expect from their keynote speech?
And any advice they’d like to share with the Python community.
Check out our interviews with each of our keynote speakers below!
"I fully believe I owe my entire tech career to the Python community. I met so many amazing people that I would become long lasting friends with."
Kate Chapman
"I'm excited to connect with people who are passionate about free and open source software and to learn about technologies that I haven't spent much time with."
Simon Willison"Take advantage of the fact that so many people from the worldwide Python community are in the same place at the same time for just a couple of days. Everybody here wants to talk to you. And you should assume that anyone who you think is interesting will find you interesting as well and will want to hear from you."Sumana Harihareswara
"I do stand-up comedy and theater. I take it seriously, my responsibility to educate and entertain if you're sitting in front of me for 40 minutes."
Don’t miss out on meeting our keynote speakers in person! Register now for PyCon US before we sell out. As a note, some of our tutorials are already sold out, as well as our hotel room blocks. There are only a few short weeks left before the conference, so don’t wait, register today!
Stay in the LoopThe PyCon US website has all the information you need to know about attending our conference. In order to catch all the latest news, be sure to:
- Subscribe to the PyCon US Blog
- Follow @PyCon and @thePSF on Twitter/X
- Follow @pycon@fosstodon.org and @ThePSF@fosstodon.org on Mastodon,
- The PSF on LinkedIn
- And subscribe to PyCon US 2024 News!
Engage with our community on social media by using our official hashtag: #PyConUS.
Thank you for supporting the Python community. We can’t wait to meet you all in Pittsburgh in a few short weeks!Real Python: Python's unittest: Writing Unit Tests for Your Code
The Python standard library ships with a testing framework named unittest, which you can use to write automated tests for your code. The unittest package has an object-oriented approach where test cases derive from a base class, which has several useful methods.
The framework supports many features that will help you write consistent unit tests for your code. These features include test cases, fixtures, test suites, and test discovery capabilities.
In this tutorial, you’ll learn how to:
- Write unittest tests with the TestCase class
- Explore the assert methods that TestCase provides
- Use unittest from the command line
- Group test cases using the TestSuite class
- Create fixtures to handle setup and teardown logic
To get the most out of this tutorial, you should be familiar with some important Python concepts, such as object-oriented programming, inheritance, and assertions. Having a good understanding of code testing is a plus.
Free Bonus: Click here to download the free sample code that shows you how to use Python’s unittest to write tests for your code.
Take the Quiz: Test your knowledge with our interactive “Python's unittest: Writing Unit Tests for Your Code” quiz. You’ll receive a score upon completion to help you track your learning progress:
Interactive Quiz
Python's unittest: Writing Unit Tests for Your CodeIn this quiz, you'll test your understanding of Python testing with the unittest framework from the standard library. With this knowledge, you'll be able to create basic tests, execute them, and find bugs before your users do.
Testing Your Python CodeCode testing or software testing is a fundamental part of a modern software development cycle. Through code testing, you can verify that a given software project works as expected and fulfills its requirements. Testing enforces code quality and robustness.
You’ll do code testing during the development stage of an application or project. You’ll write tests that isolate sections of your code and verify its correctness. A well-written battery or suite of tests can also serve as documentation for the project at hand.
You’ll find several different concepts and techniques around testing. Most of them surpass the scope of this tutorial. However, unit test is an important and relevant concept. A unit test is a test that operates on an individual unit of software. A unit test aims to validate that the tested unit works as designed.
A unit is often a small part of a program that takes a few inputs and produces an output. Functions, methods, and other callables are good examples of units that you’d need to test.
In Python, there are several tools to help you write, organize, run, and automate your unit test. In the Python standard library, you’ll find two of these tools:
- doctest
- unittest
Python’s doctest module is a lightweight testing framework that provides quick and straightforward test automation. It can read the test cases from your project’s documentation and your code’s docstrings. This framework is shipped with the Python interpreter as part of the batteries-included philosophy.
Note: To dive deeper into doctest, check out the Python’s doctest: Document and Test Your Code at Once tutorial.
The unittest package is also a testing framework. However, it provides a more complete solution than doctest. In the following sections, you’ll learn and work with unittest to create suitable unit tests for your Python code.
Getting to Know Python’s unittestThe unittest package provides a unit test framework inspired by JUnit, which is a unit test framework for the Java language. The unittest framework is directly available in the standard library, so you don’t have to install anything to use this tool.
The framework uses an object-oriented approach and supports some essential concepts that facilitate test creation, organization, preparation, and automation:
- Test case: An individual unit of testing. It examines the output for a given input set.
- Test suite: A collection of test cases, test suites, or both. They’re grouped and executed as a whole.
- Test fixture: A group of actions required to set up an environment for testing. It also includes the teardown processes after the tests run.
- Test runner: A component that handles the execution of tests and communicates the results to the user.
In the following sections, you’ll dive into using the unittest package to create test cases, suites of tests, fixtures, and, of course, run your tests.
Organizing Your Tests With the TestCase ClassThe unittest package defines the TestCase class, which is primarily designed for writing unit tests. To start writing your test cases, you just need to import the class and subclass it. Then, you’ll add methods whose names should begin with test. These methods will test a given unit of code using different inputs and check for the expected results.
Here’s a quick test case that tests the built-in abs() function:
Read the full article at https://realpython.com/python-unittest/ »[ Improve Your Python With 🐍 Python Tricks 💌 – Get a short & sweet Python Trick delivered to your inbox every couple of days. >> Click here to learn more and see examples ]
Nikola: Nikola v8.3.1 is out!
On behalf of the Nikola team, I am pleased to announce the immediate availability of Nikola v8.3.1. This release fixes some small bugs, including some introduced by the new Nikola Plugin Manager.
The minimum Python version supported is now 3.8, and we have adopted a formal policy to define the Python versions supported by Nikola.
What is Nikola?Nikola is a static site and blog generator, written in Python. It can use Mako and Jinja2 templates, and input in many popular markup formats, such as reStructuredText and Markdown — and can even turn Jupyter Notebooks into blog posts! It also supports image galleries, and is multilingual. Nikola is flexible, and page builds are extremely fast, courtesy of doit (which is rebuilding only what has been changed).
Find out more at the website: https://getnikola.com/
DownloadsInstall using pip install Nikola.
Changes FeaturesSupport passing --poll to nikola auto to better deal with symlink farms.
Remove insecure HTTP fallback from nikola plugin
Fix the nikola plugin command not working (Issue #3736, #3737)
Fix nikola new_post --available-formats crashing with TypeError (Issue #3750)
Fix the new plugin manager not loading plugins if the plugin folder is a symlink (Issue #3741)
Fix the nikola plugin command not working (Issue #3736)
Remove no longer used leftovers of annotations support (Issue #3764)
Nikola now requires Python 3.8 or newer.
Nikola has adopted a policy for Python version support, promising support for versions supported by the Python core team, Ubuntu LTS, or Debian stable, and taking into consideration Debian oldstable and PyPy.
Remove polyfill from polyfill.io.
Open Source AI Definition – Weekly update April 29
- The draft is ready for feedback.
- The changelog:
- incorporated feedback from legal review in Gothenburg and 0.0.7
- transformed Data transparency to Data information following feedback from the
- separated the Out of scope section to a FAQ document 18
- added mention of frictionless in the preamble
- moved the definition of preferred form to make modifications to ML above the checklist
- updated language to follow the latest version of the Model Openness Framework
- added the legal requirements for optional components
- the first incarnation of the FAQ added
- incorporated feedback from legal review in Gothenburg and 0.0.7
- The next steps now include:
- Widen the call for reviewers in the next couple of weeks
- Test the Definition with more AI systems (Olmo, Phy, Mistral, etc)
- Run a review workshop at PyCon US
- Question regarding why under “Preferred form to make modifications to machine-learning systems” and “model”, mention of model weights has been removed.
- As part of the next steps, we are continuing to review legal documents from different AI systems to test our definition. Should we describe the terms listed on the 0.0.8 draft under “checklist to evaluate machine learning systems”, should we consider them OSD Compliant or OSD Compatible?
- This matters as it has different implications for documentation for the components in the class of Data transparency: There is no formal definition of “open documentation” and the OSI hasn’t reviewed licenses used for documentation.
- A user has concerns with both, stating that:
- OSD-compliant means that documentation need to be under a license that fulfils all ten OSD criteria, and many of those are quite software-specific. This could be tricky, there is a reason why OSI hasn’t approved (m)any non-software licenses thus far.in its meaning. Many proprietary licenses are compatible with many (non-copyleft) OSD-compliant licenses, that It can lose its meaning.
- Maffulli replies stating that:
- The main difference he sees lie in their perceived legal strictness, where “Compatible suggests a lightweight review that anyone can do”
- He further suggests that OSI could create a special category of licenses for documentation only. When stating that documentation of Open Source AI needs to be available with OSD-compliant terms, do we need to create a special category of OSI Approved Licenses for documentation?
- He further adds that he reads “compliant”, not in terms of existing licenes but rather in terms of the checklist
- Regarding creating a “special category of license for documentation only, a user adds:
- “We need that the documentation is free from restrictions that would limits its circulation, including by requiring seeking additional permission or requiring royalties or requiring audited distribution or the likes.” and its scope therefore is quite limited.
- An FAQ needs to be written to address concerns heard often during the drafting process. The document is a work in progress and is waiting for contributions.
- The Open Source AI Definition is going on tour to get a wide array of reviews. This is important to ensure through reviews and secure global significance. Check the dates of the roadshow.
KDE neon Post-Plasma 6 Updates Review
The goal of KDE neon is to build all KDE’s software on a stable Ubuntu LTS base, we do it in an automated way and for the User edition have automated QA to deploy rapidly but safely. For the KDE 6 Megarelease there was a lot of updates and the system didn’t work as well as it ought, not all the update issues could be tested and this broke some the operating system on some people’s computer which is a horrible experience that should not happen.
What happened?We were testing KF6, Plasma 6 and KDE Gear 24.04 in our unstable and testing repos for some time before the release. A week ahead of release we were building it in our User repo and testing upgrades. Jonathan, as release manager for both the MegaRelease and neon, travelled to Malaga to do an in person joint release with Paul from promo, this helped the coordinated release but lost some testing time. Some package transitions happened during the pre-release week which made the updates more complex than they had to be and meant extra work (for better end result in theory). Once the MegaRelease sources were published on Thursday the testing of Neon was ongoing and many later fixes were made to make for a successful upgrade on the tests. Neon’s KF6/Plasma6/KDE Gear 24.02 packages were published later on Thursday and Jonathan drove home, alas due to bad weather there was no internet available on the ferry limiting later fixes.
Although the semi automated upgrade tests passed this didn’t cover all cases and some people had incomplete upgrades due to packaging transitions being incomplete. This was fixed over the next day or two and also an update to the installer Calamares was brought in which turned out to have a bug with the final install setup so although upgrades now worked the ISO installs were broken. Quite horrible.
On the Monday Jonathan fixed some more upgrade issues and Calamares so the neon end of things was fixed but there remain other problems with KF6 and Plasma 6 which affect all distros and many of these have since been fixed and some are ongoing, many caused by the switch to Wayland or Akonadi switching to sqlite.
Issues?There wasn’t one big problem that caught everyone. There was lots of small but significant problems which caught many people.
- KMyMoney package issues – needed a rebuild which we did after release
- Ocean sound theme not installed – new package which was added after release
- Palapeli packages in wrong location – an incomplete change that was made during the transition
- Video and pdf thumbnailers broken – these packages needed added to the main install
- KOrganizer had invalid dependency – that needed removed
- xwaylandvideobridge error on shared library – needed a rebuild
- libzxing needs soname bump – that transition needed completed
- akonadi not working on upgrade – for some reason some users had to manually reinstall the mysql akonadi backend
- Calamares install fails to happen – a bug from Calamares that was initially avoided but later included in our ISO
- OEM mode no longer worked – this affects Slimbook systems and some parts just needed ported to Plasma 6, ideally it would be code which was in Calamares and not in Neon
NVidia users had a number of issues often caused by the switch to Wayland. Most users can switch back to X11 to get it working but that is hardly a user friendly setup.
This is just a small sample, there were more similar issues.
ReviewNeon is a small team, Jonathan working on it (alongside release duties for Plasma and Frameworks) from Blue Systems and top volunteer helper Carlos with occasionally Harald and others helping out.
We had a review with KDE’s QA star Nate of what happened and why and mitigations and we also had two open calls with neon community members where they gave their feedback.
PonderingsThe Plasma 6 and KF6 upgrades in neon were too fragile and caused too much pain for many of our users.
There wasn’t one single problem and many people had a perfectly good experience doing the upgrade but too many people were caught with problems which will be painful when you are just wanting to have a useful Linux system.
ConclusionsOur constantly rolling release model and small team means we can’t guarantee total stability so we will stop using terms like “rock solid base” on our website and emphasise the new-ness factor.
When doing big updates test and if travelling bring in other people to do testing and fixes.
We can’t support NVidia hardware as we don’t have the skills, time, hardware or access to source to fix it.
Switching to Wayland was a choice of Plasma and after a decade in development a necessary choice but we should be aware of issues there and communicate those.
Get more QA on ISO images, currently we don’t have any prior to release which is going to lead to problems.
Consider if we can to upgrade QA on older snapshots as well as the current one.
Consider how to do more QA on KDE PIM apps.
Thanks to all our lovely users for staying with us, sorry to those who we let down and those who have left us. Thanks to our community for staying supporting of each other and us as developers. Of course there’s plenty of alternatives if you want a slower release cycle (Kubuntu have just made a new LTS with Plasma 5) but if you want the freshest software from KDE then neon continues to be a great place to get it.
mandclu: Getting Smart Date Dialed Up to 11
I just tagged the first stable release for Smart Date 4.1, a year (almost to the day) since the first stable release of Smart Date 4.0. A lot of work went into this new release, but I'm thankful beyond words to the many people who helped shape it into what it is today.
mandclu Mon, 04/29/2024 - 06:14 TagsGolems GABB: The Impact of Web Design on Conversion: Strategies and Tools for a Successful Web Project
Do you still doubt that web design directly affects the conversion of your Drupal site? Today, high-end web design goes beyond a simple and beautiful layout, well-optimized photos, or an eye-catching color scheme. If you neglect the connection between web design and conversion, your lead generation progress won’t help you realize your digital marketing objectives and desired ROI rates.
With the right choice of design strategies for conversions, novice professionals can drastically improve the target platform’s responsiveness and accessibility — with user journeys improved and bounce risks reduced.
Qt Visual Studio Tools 3.2.0 Released
We are happy to announce the release of the Qt Visual Studio Tools version 3.2.0. Installation packages are now available at the Visual Studio Marketplace and download.qt.io.
This update of the Qt VS Tools extension adds experimental support for QML LSP server, as well as full support of the Qt VS Tools for Visual Studio 2022 on ARM64.
Qt MSBuild file support:
Alongside providing Qt-related MSBuild files within the Qt VS Tools package, we now offer them as a separate .zip download for your convenience. Starting from version 3.2.0, access the standalone Qt MSBuild files by visiting our public server download location: Official releases.
Please refer to the project's Changelog for a list of all changes included in this release. Feel free to report any problems, or make any suggestions or comments, in the Qt Visual Studio Tools bug tracker.
Zato Blog: API Testing in Pure English
Do you have 20 minutes to learn how to test APIs in pure English, without any programming needed?
Great, the API testing tutorial is here.
Right after you complete it, you'll be able to write API tests as the one below.
Next steps:- Read about how to build APIs that your tests will cover
The Drop Times: Everyone Has Their Own Journey
Dear Readers,
This is your reminder that everyone has their path in life, so embrace the uniqueness of your journey.
"A journey of a thousand miles begins with a single step."
— Laozi (Lao Tzu), Tao Te Ching (Daodejing), Chapter 64Instead of fixating on others' paths, focus on discovering what works best for you. Your journey to success unfolds uniquely, guided by your own rhythm and routine. Trust in your process and celebrate your progress along the way. Just as in the diverse Drupal community, where each contributor's unique experiences and skills enrich the whole, your unique contributions to your own life and the lives of others around you are invaluable. Embrace your individual journey, just as Drupal embraces the diversity of its community.
Drupal itself is built on the principle of open collaboration, fostering an environment where different perspectives lead to better solutions and innovations. This ethos extends beyond the technology, influencing the Drupal community to support each other's growth and development. The community thrives on the collective effort of individuals who bring their distinct paths and insights, contributing to the strength and flexibility of Drupal as a platform. As you walk your path, remember the power of a community that values each step of your journey.
Now, Let's take a moment to revisit the highlights from last week's coverage at The Drop Times.
Alka Elizabeth and Kazima Abbas, sub-editors at The Drop Times, spoke with Dominique de Cooman, the founder of Dropsolid. He discussed his journey, from his profound interest in Drupal to the establishment of his company, sparked by a pivotal experience at DrupalCon Munich in 2012. Read about his inspiring story here.
Anoop John, the founder and lead at The Drop Times, explores the scope and composition of the Drupal community. To get the full insights, read the article here.
Ajith Thampi Joseph recounts his transition from traditional server setups to modern development tools in another feature. His article discusses the challenges he encountered and the solutions he implemented. Learn more about his journey here.
Acquia sets the stage for a memorable evening at DrupalCon Portland 2024 on Tuesday, May 7. This event promises an evening of fun-filled activities, including vintage arcade games, bowling, and karaoke. To know more, click on the link here.
Just one more week until DrupalCon Portland 2024 kicks off! The event is scheduled to run from May 6th to May 9th. Are you ready to dive into the excitement? We invite volunteers to join our team and help us cover the biggest open-source event in North America.
In collaboration with DubBot and Iowa's Department for the Blind, Lullabot will host a webinar on web accessibility on Thursday, May 16, 2024. This event coincides with Global Accessibility Awareness Day and aims to highlight common issues impacting individuals with disabilities.
CTI Digital's webinar on "Navigating Drupal 7 End-of-Life: What To Do Next?" is scheduled for Friday, May 3, 2024. The webinar will be led by CTI Digital's Drupal Technical Director, David Bishop, and Sales Director, James Tillotson.
EvolveDrupal returns to Montreal for its Second Edition on June 14, 2024. This event promises a day filled with learning, networking, and inspiration. Learn more about the event here.
Northern Commerce and Acquia have collaborated to host a free "Lunch & Learn" event titled "Unlocking the Digital Student Journey," aimed at providing insights into enhancing the digital experiences of students. Scheduled for Thursday, May 08, 2024, the event promises valuable discussions and strategies for navigating the evolving landscape of digital education.
NEDcamp 2024 is set to take place on November 15-16, inviting Drupal enthusiasts to mark their calendars for this exciting event. With a rich tradition of fostering collaboration and learning within the Drupal community, NEDcamp promises attendees engaging sessions and networking opportunities. Drupal events are held worldwide each week to keep Drupal enthusiasts engaged. A complete list of events for the week is available here.
Michael Anello has unveiled version 1.0.1 of the Drupal Markdown Easy module. This version boasts a minor bug fix, default configuration settings, Drupal 11 compatibility, and enhanced code quality, ensuring smoother markdown experiences for users. The Beautify HTML module for Drupal has been updated, introducing enhanced formatting tools to streamline HTML code editing. With these improvements, users can expect a more efficient and user-friendly experience working with HTML on Drupal websites.
Octahedroid has unveiled a new preview feature that facilitates decoupled Drupal and Next.js integration, empowering developers with advanced preview capabilities. This release marks a significant advancement in decoupled architecture, offering seamless content preview experiences for Drupal-powered websites using Next.js frontend frameworks.
Kevin Wall has introduced a groundbreaking new feature for Drupal module installation in collaboration with Accorbis, promising to simplify and streamline the process for users. With this innovation, Drupal users can expect a more efficient and user-friendly experience when installing modules, enhancing their website development workflows.
Scheduled for November 2024, PHP 8.4 brings enhanced security and functionality, providing developers with improved features and safeguards. Learn more here.
We acknowledge that there are more stories to share. However, due to selection constraints, we must pause further exploration for now.
To get timely updates, follow us on LinkedIn, Twitter and Facebook. Also, join us on Drupal Slack at #thedroptimes.
Thank you,
Sincerely
Elma John
Sub-editor, The DropTimes.
The Drop Times: From Drupal's Roots to Aiven's Branches: Angie Byron's Tech Journey
Russell Coker: USB PSUs
I just bought a new USB PSU from AliExpress [1]. I got this to reduce the clutter in my bedroom, I charge my laptop, PineTime, and a few phones at the same time and a single PSU with lots of ports makes it easier. Also I bought a couple of really short USB-C cables as it’s been proven by both real life tests and mathematical modelling that shorter cables get tangled less. This power supply is based on Gallium Nitride (GaN) [2] technology which makes it efficient and cool.
One thing I only learned about after that purchase is the new USB PPS standard (see the USB Wikipedia page for details [3]). The PPS (Programmable Power Supply) standard allows (quoting Wikipedia) “allowing a voltage range of 3.3 to 21 V in 20 mV steps, and a current specified in 50 mA steps, to facilitate constant-voltage and constant-current charging”. What this means in practice (when phones support it which for me will probably be 2029 or something) is that the phone could receive power exactly matching the voltage needed for the battery and not have any voltage conversion inside the phone. Phones are designed to stop charging at a certain temperature, this probably doesn’t concern people in places like Northern Europe but in Australia it can be an issue. Removing the heat dissipation from inefficiencies in voltage change circuitry means the phone will be cooler when charging and can charge at a higher rate.
There is a “Certified USB Fast Charger” logo for chargers which do this, but it seems that at the moment they just include “PPS” in the feature list. So I highly recommend that GaN and PPS be on your feature list for your next USB PSU, but failing that the 240W PSU I bought for $36 was a good deal.
- [1] https://tinyurl.com/29xxwow7
- [2] https://en.wikipedia.org/wiki/Gallium_nitride#Transistors_and_power_ICs
- [3] https://en.wikipedia.org/wiki/USB_hardware#USB_Power_Delivery
Related posts:
- USB-PD and GaN A recent development is cheap Gallium Nitride based power...
- Power Supplies and Wires For some time I’ve been wondering how the wire size...
- Qi Phone Charging I have just bought a wireless phone charging system based...
What’s new for Fedora Atomic Desktops in Fedora 40
Fedora 40 has been released! 🎉 So let’s see what comes in this new release for the Fedora Atomic Desktops variants (Silverblue, Kinoite, Sway Atomic and Onyx Atomic).
Note: You can also read this post on the Fedora Magazine.
Introducing Fedora Atomic DesktopsAs you might have guessed from the title, we are now called Fedora Atomic Desktops! See the Introducing Fedora Atomic Desktops Fedora Magazine article for all the details.
The summary is that the Fedora Atomic Desktops are made up of four atomic spins:
- Fedora Silverblue
- Fedora Kinoite
- Fedora Sway Atomic (was Fedora Sericea)
- Fedora Budgie Atomic (was Fedora Onyx)
And we have a landing page on fedoraproject.org.
Status update on bootloader updates (bootupd integration)Unfortunately, we could not land bootupd support in this release due to an issue found late in Anaconda’s handling of bootupd installations which relied on incomplete functionality in bootupd.
We will attempt to add bootupd again after the release, via an update.
If you encounter Secure Boot errors or need to update your bootloader in the meantime, you can try the instructions from fedora-silverblue#543. Make sure to have a Live USB ready in case you encounter an issue. Please make backups beforehand.
We are hoping to land improvements to bootupd that should simplify this process.
See: atomic-desktops-sig#1.
What’s new in Silverblue Latest GNOME releaseFedora Silverblue comes with the latest GNOME 46 release.
For more details about the changes that comes with GNOME 46, see What’s new in Fedora Workstation 40 on the Fedora Magazine and Fedora Workstation 40 – what are we working on from Christian F.K. Schaller.
No longer overlay language packages (langpacks) by defaultGNOME Software will no longer overlay the langpack packages for your locale on the first update. This should make updates much faster as they won’t need to overlay packages anymore (unless you explicitly decide to overlay some packages).
If you are updating from a previous release, you will have to remove this overlayed package manually. For example:
- Find the overlayed package using rpm-ostree status:
- Remove the overlayed package and reboot:
Note that this will remove the dictionaries for the corresponding language from your system and thus for applications included in the image.
For Flatpaks, the dictionaries are downloaded according to the languages set in the Flatpak config. If you have set your preferred languages in GNOME Settings, this configuration should have been set already. For example:
# Get the current config $ flatpak config --list languages: en;fr;de (default: en) extra-languages: *unset* # Set the languages to use $ flatpak config --set languages "en;fr"See the flatpak-config documentation for more details.
This will also remove the translated man pages for system commands. To get the man pages back, you can install them in a container using toolbox for example:
$ toolbox create $ toolbox enter $ sudo dnf install man-pages-frSee: atomic-desktops-sig#14.
What’s new in Kinoite KDE Plasma 6Fedora Kinoite ships with Plasma 6, Frameworks 6 and Gear 24.02 (Fedora Change). See also What’s New in Fedora KDE 40? on the Fedora Magazine.
Wayland onlyFedora Kinoite is now Wayland only. Legacy X11 applications will run using XWayland. See Fedora 40: X11 is now unsupported.
If you have a NVIDIA GPU and encounter issues, I recommend looking at Universal Blue images, waiting for an upcoming NVIDIA driver update that will hopefully improve Wayland support or trying out the updated Nouveau / NVK stack for supported cards.
KDE Apps as Fedora FlatpaksA subset of KDE Apps are now installed by default as Fedora Flatpaks by Ananconda for new installations. The Flatpaks are not installed on updates but you can install them from the Fedora Flatpak remote or from Flathub.
KDE Flatpak on FlathubMost KDE Apps are directly published and maintained on Flathub by the KDE community and we have mostly completed the transition to the Qt 6.6 / KDE Framework 6 Runtime.
You can track the progress for the remaining apps in kde/teams/flathub#26.
What’s new in Sway AtomicFedora Sway Atmoic comes with the latest 1.9 Sway release.
What’s new in Budgie AtomicFedora Budgie Atomic ships with the latest release of the Budgie Desktop 10.9 “release series”. Budgie 10.9 features some initial porting work to libxfce4windowing as it progresses towards its move to Wayland and redesigns its Bluetooth applet with new direct (dis-)connect functionality.
Additionally, Fedora Budgie Atomic ships with the latest Budgie Control Center and takes into use budgie-session. As Buddies of Budgie officially supports Fedora, Budgie Desktop has also received numerous backported bug fixes to provide Fedora users an even better experience.
You can learn more about the latest happenings in Budgie on the Buddies of Budgie blog.
What’s nextUnfortunately, this section will be short this time, as there has not been much progress on our future plans since the last time.
We will provide an updated article when more information becomes available.
Teaser for improved update support in Discover for Kinoite Universal Blue, Bluefin, Bazzite and AuroraOur friends in the Universal Blue, Bluefin and Bazzite projects also released updates for their images.
Universal Blue is now considered Generally Available alongside Bluefin.
For all your gaming needs, Bazzite reached version 3.0, rebasing on our fresh Fedora 40 images.
They are also introducing Aurora, a KDE Plasma and Kinoite based alternative to Bluefin. See the Introduction to Aurora post for all the details.
Where to reach usWe are looking for contributors to help us make the Fedora Atomic Desktops the best experience for Fedora users.
- Atomic Desktops SIG: Issue tracker (gitlab.com/fedora/ostree/sig), #atomic-desktops:fedoraproject.org
- Silverblue: Workstation Working Group, #silverblue:fedoraproject.org
- Kinoite: KDE SIG, #kinoite:fedoraproject.org
- Sway Atomic: Sway SIG, #sway:fedoraproject.org
- Budgie Atomic: Budgie SIG, #budgie:fedoraproject.org
#! code: LocalGov Drupal Camp 2024
April 23rd, 2024 saw the first LocalGov Drupal Camp, held at the Birmingham Council buildings in Birmingham city center.
It's been ages since I attended an in person Drupal Camp in the UK, so when I saw that the LocalGov Drupal people were organising one just down the road for me I jumped at the chance to grab a ticket.
LocalGov Drupal is a distribution that combines Drupal, some configuration, some contributed modules, and some glue code with the aim of making it easier for councils to generate sites.
The initiative was started a few years ago where two councils (Brighton & Hove City Council & Croydon Council) decided to re-use some of their Drupal work and create a system that they could both benefit from. There are now 44 different councils around the UK who use the distribution in some capacity.
I work with a few of the councils in my day job and I have been really impressed by the power of the distribution. The fact that it is also backed up by a dedicated team of developers really helps with support and future development of the project.
IntroductionsThe day started with a few introductions and thank you messages, followed by a number of lightning talks from various members of the community.
Evgeni Golov: Running Ansible Molecule tests in parallel
Or "How I've halved the execution time of our tests by removing ten lines". Catchy, huh? Also not exactly true, but quite close. Enjoy!
Molecule?!"Molecule project is designed to aid in the development and testing of Ansible roles."
No idea about the development part (I have vim and mkdir), but it's really good for integration testing. You can write different test scenarios where you define an environment (usually a container), a playbook for the execution and a playbook for verification. (And a lot more, but that's quite unimportant for now, so go read the docs if you want more details.)
If you ever used Beaker for Puppet integration testing, you'll feel right at home (once you've thrown away Ruby and DSLs and embraced YAML for everything).
I'd like to point out one thing, before we continue. Have another look at the quote above.
"Molecule project is designed to aid in the development and testing of Ansible roles."
That's right. The project was started in 2015 and was always about roles. There is nothing wrong about that, but given the Ansible world has moved on to collections (which can contain roles), you start facing challenges.
Challenges using Ansible Molecule in the Collections worldThe biggest challenge didn't change since the last time I looked at the topic in 2020: running tests for multiple roles in a single repository ("monorepo") is tedious.
Well, guess what a collection is? Yepp, a repository with multiple roles in it.
It did get a bit better though. There is pytest-ansible now, which has integration for Molecule. This allows the execution of Molecule and even provides reasonable logging with something as short as:
% pytest --molecule roles/That's much better than the shell script I used in 2020!
However, being able to execute tests is one thing. Being able to execute them fast is another one.
Given Molecule was initially designed with single roles in mind, it has switches to run all scenarios of a role (--all), but it has no way to run these in parallel. That's fine if you have one or two scenarios in your role repository. But what if you have 10 in your collection?
"No way?!" you say after quickly running molecule test --help, "But there is…"
% molecule test --help Usage: molecule test [OPTIONS] [ANSIBLE_ARGS]... … --parallel / --no-parallel Enable or disable parallel mode. Default is disabled. …Yeah, that switch exists, but it only tells Molecule to place things in separate folders, you still need to parallelize yourself with GNU parallel or pytest.
And here our actual journey starts!
Running Ansible Molecule tests in parallelTo run Molecule via pytest in parallel, we can use pytest-xdist, which allows pytest to run the tests in multiple processes.
With that, our pytest call becomes something like this:
% MOLECULE_OPTS="--parallel" pytest --numprocesses auto --molecule roles/What does that mean?
- MOLECULE_OPTS passes random options to the Molecule call pytest does, and we need to add --parallel there.
- --numprocesses auto tells pytest-xdist to create as many workers as you have CPUs and balance the work across those.
However, once we actually execute it, we see:
% MOLECULE_OPTS="--parallel" pytest --numprocesses auto --molecule roles/ … WARNING Driver podman does not provide a schema. INFO debian scenario test matrix: dependency, cleanup, destroy, syntax, create, prepare, converge, idempotence, side_effect, verify, cleanup, destroy INFO Performing prerun with role_name_check=0... WARNING Retrying execution failure 250 of: ansible-galaxy collection install -vvv --force ../.. ERROR Command returned 250 code: … OSError: [Errno 39] Directory not empty: 'roles' … FileExistsError: [Errno 17] File exists: b'/home/user/namespace.collection/collections/ansible_collections/namespace/collection' … FileNotFoundError: [Errno 2] No such file or directory: b'/home/user/namespace.collection//collections/ansible_collections/namespace/collection/roles/my_role/molecule/debian/molecule.yml'You might see other errors, other paths, etc, but they all will have one in common: they indicate that either files or directories are present, while the tool expects them not to be, or vice versa.
Ah yes, that fine smell of race conditions.
I'll spare you the wild-goose chase I went on when trying to find out what the heck was calling ansible-galaxy collection install here. Instead, I'll just point at the following line:
INFO Performing prerun with role_name_check=0...What is this "prerun" you ask? Well… "To help Ansible find used modules and roles, molecule will perform a prerun set of actions. These involve installing dependencies from requirements.yml specified at the project level, installing a standalone role or a collection."
Turns out, this step is not --parallel-safe (yet?).
Luckily, it can easily be disabled, for all our roles in the collection:
% mkdir -p .config/molecule % echo 'prerun: false' >> .config/molecule/config.ymlThis works perfectly, as long as you don't have any dependencies.
And we don't have any, right? We didn't define any in a molecule/collections.yml, our collection has none.
So let's push a PR with that and see what our CI thinks.
OSError: [Errno 39] Directory not empty: 'tests'Huh?
FileExistsError: [Errno 17] File exists: b'remote.sh' -> b'/home/runner/work/namespace.collection/namespace.collection/collections/ansible_collections/ansible/posix/tests/utils/shippable/aix.sh'What?
ansible_compat.errors.InvalidPrerequisiteError: Found collection at '/home/runner/work/namespace.collection/namespace.collection/collections/ansible_collections/ansible/posix' but missing MANIFEST.json, cannot get info.Okay, okay, I get the idea… But why?
Well, our collection might not have any dependencies, BUT MOLECULE HAS! When using Docker containers, it uses community.docker, when using Podman containers.podman, etc…
So we have to install those before running Molecule, and everything should be fine. We even can use Molecule to do this!
$ molecule dependency --scenario <scenario>And with that knowledge, the patch to enable parallel Molecule execution on GitHub Actions using pytest-xdist becomes:
diff --git a/.config/molecule/config.yml b/.config/molecule/config.yml new file mode 100644 index 0000000..32ed66d --- /dev/null +++ b/.config/molecule/config.yml @@ -0,0 +1 @@ +prerun: false diff --git a/.github/workflows/test.yml b/.github/workflows/test.yml index 0f9da0d..df55a15 100644 --- a/.github/workflows/test.yml +++ b/.github/workflows/test.yml @@ -58,9 +58,13 @@ jobs: - name: Install Ansible run: pip install --upgrade https://github.com/ansible/ansible/archive/${{ matrix.ansible }}.tar.gz - name: Install dependencies - run: pip install molecule molecule-plugins pytest pytest-ansible + run: pip install molecule molecule-plugins pytest pytest-ansible pytest-xdist + - name: Install collection dependencies + run: cd roles/repository && molecule dependency -s suse - name: Run tests - run: pytest -vv --molecule roles/ + run: pytest -vv --numprocesses auto --molecule roles/ + env: + MOLECULE_OPTS: --parallel ansible-lint: runs-on: ubuntu-latestBut you promised us to delete ten lines, that's just a +7-2 patch!
Oh yeah, sorry, the +10-20 (so a net -10) is the foreman-operations-collection version of the patch, that also migrates from an ugly bash script to pytest-ansible.
And yes, that cuts down the execution from ~26 minutes to ~13 minutes.
In the collection I originally tested this with, it's a more moderate "from 8-9 minutes to 5-6 minutes", which is still good though :)
Django Weblog: Welcome our new OPS member - Baptiste Mispelon
The DSF Board are pleased to introduce Baptiste Mispelon as a new member of the ops team. Baptiste will join the team who maintains Django’s infrastructure.
Baptiste speaking at Django Under the Hood 2015Baptiste (IPA pronunciation /ba.tist/) is a long-time Django contributor, having been a member of the community for over a decade now.
He was an initial board member of the Django Girls Foundation, co-created the Django Under the Hood, series of conferences, and was chair of the Djangocon Europe 2016 edition. More recently, he's taken up the maintenance of Django's venerable ticket tracker: code.djangoproject.com.
He currently lives in the Norwegian countryside where he works part time as a Django developer while studying for a degree in linguistics at the local university.
You can learn more about Baptiste on his website.
I’m also taking this time to thanks the OPS team on the behalf of the DSF board for their efforts on the maintenance during all the time of their service.
Please join me in welcoming Baptiste in the OPS team!
Russell Coker: Galaxy Note 9 Droidian
Droidian only supported the version of this phone with the Exynos chipset. The GSM Arena specs page for the Note 9 shows that it’s the SM-N960F part number [1]. In Australia all Note 9 phones should have the Exynos but it doesn’t hurt to ask for the part number before buying.
The status of the Note9 in Droidian went from fully supported to totally unsupported in the time I was working on this blog post. Such a rapid change is disappointing, it would be good if they at least kept the old data online. It would also be good if they didn’t require a hash character in the URL for each phone which breaks the archive.org mirroring.
Installing DroidianFirstly Power+VolumeDown will reboot in some situations where Power button on it’s own won’t. The Note 9 hardware keys are:
- Power – Right side
- Volume up/down – long button top of the left side
- Bixby – key for Samsung assistant that’s below the volume on the left
The Droidian install document for the Galaxy Note 9 9 now deleted is a bit confusing and unclear. Here is the install process that worked for me.
- The doc says to start by installing “Android 10 (Q) stock firmware”, but apparently a version of Android 10 that’s already on the phone will do for that.
- Download the rescue.img file and the “Droidian’s image” files from the Droidian page and extract the “Droidian’s image” zip.
- Connect your phone to your workstation by USB, preferably USB 3 because it will take a few minutes to transfer the image at USB 2 speed. Install the Debian package adb on the workstation.
- To “Unlock the bootloader” you can apparently use a PC and the Samsung software but the unlock option in the Android settings gives the same result without proprietary software, here’s how to do it:
- Connect the phone to Wifi. Then in settings go to “Software update”, then click on “Download and install”. Refuse to install if it offers you a new version (the unlock menu item will never appear unless you do this, so you can’t unlock without Internet access).
- In settings go to “About phone”, then “Software information”, then tap on “Build number” repeatedly until “Developer mode” is enabled.
- In settings go to the new menu “Developer options” then turn on the “OEM unlocking” option, this does a factory reset of the phone.
- To flash the recovery.img you apparently use Odin on Windows. I used the heimdall-flash package on Debian. On your Linux workstation run the commands:
adb reboot download
heimdall flash --RECOVERY recovery.img
Then press VOLUME-UP+BIXBY+POWER as soon as it reboots to get into the recovery image. If you don’t do it soon enough it will do a default Android boot which will wipe the recovery.img you installed and also do a factory reset which will disable “Developer mode” and you will need to go back to step 4.
- If the above step works correctly you will have a RECOVERY menu where the main menu has options “Reboot system now”, “Apply update”, “Factory reset”, and “Advanced” in a large font. If you failed to install recovery.img then you would get a similar menu but with a tiny font which is the Samsung recovery image which won’t work so reboot and try again.
- When at the main recovery menu select “Advanced” and then “Enter fastboot”. Note that this doesn’t run a different program or do anything obviously different, just gives a menu – that’s OK we want it at this menu.
- Run “./flash_all.sh” on your workstation.
- Then it should boot Droidian! This may take a bit of time.
The battery and it’s charge and discharge rates are very important to me, it’s what made the PinePhonePro and Librem5 unusable as daily driver phones.
After running for about 100 minutes of which about 40 minutes were playing with various settings the phone was at 89% battery. The output of “upower -d” isn’t very accurate as it reported power use ranging from 0W to 25W! But this does suggest that the phone might last for 400 minutes of real use that’s not CPU intensive, such as reading email, document editing, and web browsing. I don’t think that 6.5 hours of doing such things non-stop without access to a power supply or portable battery is something I’m ever going to do. Samsung when advertising the phone claimed 17 hours of video playback which I don’t think I’m ever going to get – or want.
After running for 11 hours it was at 58% battery. Then after just over 21 hours of running it had 13% battery. Generally I don’t trust the upower output much but the fact that it ran for over 21 hours shows that it’s battery life is much better than the PinePhonePro and the Librem5. During that 21 hours I’ve had a ssh session open with the client set to send ssh keep-alive messages every minute. So it had to remain active. There is an option to suspend on Droidian but they recommend you don’t use it. There is no need for the “caffeine mode” that you have on Mobian. For comparison my previous tests suggested that when doing nothing a PinePhonePro might last for 30 hours on battery while the Liberem5 might only list 10 hours [2]. This test with Droidian was done with the phone within my reach for much of that time and subject to my desire to fiddle with new technology – so it wasn’t just sleeping all the time.
When charging from the USB port on my PC it went from 13% to 27% charge in half an hour and then after just over an hour it claimed to be at 33%. It ended up taking just over 7 hours to fully charge from empty that’s not great but not too bad for a PC USB port. This is the same USB port that my Librem5 couldn’t charge from. Also the discharge:charge ratio of 21:7 is better than I could get from the PinePhonePro with Caffeine mode enabled.
rndis0The rndis0 interface used for IP over USB doesn’t work. Droidian bug #36 [3].
Other HardwareThe phone I bought for testing is the model with 6G of RAM and 128G of storage, has a minor screen crack and significant screen burn-in. It’s a good test system for $109. The screen burn-in is very obvious when running the default Android setup but when running the default Droidian GNOME setup set to the Dark theme (which is a significant power saving with an AMOLED screen) I can’t see it at all. Buying a cheap phone with screen burn-in is something I recommend.
The stylus doesn’t work, this isn’t listed on the Droidian web page. I’m not sure if I tested the stylus when the phone was running Android, I think I did.
D State ProcessesI get a kernel panic early in the startup for unknown reasons and some D state kernel threads which may or may not be related to that. Droidian bug #37 [4].
Second Phone The PhoneI ordered a second Note9 on ebay, it had been advertised at $240 for a month and the seller accepted my offer of $200. With postage that’s $215 for a Note9 in decent condition with 8G of RAM and 512G of storage. But Droidian dropped support for the Note9 before I got to install it. At the moment I’m not sure what I’ll do with this, maybe I’ll keep it on Android.
I also bought four phone cases for $16. I got spares because of the high price of postage relative to the case cost and the fact that they may be difficult to get in a few years.
The TestsFor the next phone my plan was to do more tests on Android before upgrading it to Debian. Here are the ones I can think of now, please suggest any others I should do.
- Log output of “ps auxf” equivalent.
- Make notes on what they are doing with SE Linux.
- Test the stylus.
- Test USB networking to my workstation and my laptop.
- Make a copy of the dmesg output. Also look for D state processes and other signs of problems.
When I tell technical people about Droidian a common reaction is “great you can get a cheap powerful phone and have better security than Android”. This is wrong in several ways. Firstly Android has quite decent security. Android runs most things in containers and uses SE Linux. Droidian has the Debian approach for most software (IE it all runs under the same UID without any special protections) and the developers have no plans to use SE Linux. I’ve previously blogged about options for Sandboxing for Debian phone use, my blog post is NOT a solution to the problem but an analysis of the different potential ways of going about solving it [5].
The next issue is that Droidian has no way to update the kernel and the installation instructions often advise downgrading Android (running a less secure kernel) before the installation. The Android Generic Kernel Image project [6] addresses this by allowing a separation between drivers supplied by the hardware vendor and the kernel image supplied by Google. This also permits running the hardware vendor’s drivers with a GKI kernel released by Google after the hardware vendor dropped security support. But this only applies to Android 11 and later, so Android 10 devices (like the Note 9 image for Droidian) miss out on this.
- [1] https://www.gsmarena.com/samsung_galaxy_note9-9163.php
- [2] https://etbe.coker.com.au/2023/06/06/pinephonepro-first-impression/
- [3] https://github.com/droidian/droidian/issues/36
- [4] https://github.com/droidian/droidian/issues/37
- [5] https://etbe.coker.com.au/2023/07/08/sandboxing-phone-apps/
- [6] https://tinyurl.com/236bjztz
Related posts:
- Samsung Galaxy Note 2 A few weeks ago I bought a new Samsung Galaxy...
- Samsung Galaxy Note 3 In June last year I bought a Samsung Galaxy Note...
- Samsung Galaxy Note 10.1 2014 In May 2014 I bought a Samsung Galaxy Note 10.1...
ListenData: Run SAS in Python without Installation
In the past few years python has gained a huge popularity as a programming language in data science world. Many banks and pharma organisations have started using Python and some of them are in transition stage, migrating SAS syntax library to Python.
Many big organisations have been using SAS since early 2000 and they developed a hundreds of SAS codes for various tasks ranging from data extraction to model building and validation. Hence it's a marathon task to migrate SAS code to any other programming language. Migration can only be done in phases so day to day tasks would not be hit by development and testing of python code. Since Python is open source it becomes difficult sometimes in terms of maintaining the existing code. Some SAS procedures are very robust and powerful in nature its alternative in Python is still not implemented, might be doable but not a straightforward way for average developer or analyst.
Do you wish to run both SAS and Python programs in the same environment (IDE)? If yes, you are not the only one. Many analysts have been desiring the same. It is possible now via python package called saspy developed by SAS. It allows flexibility to transfer data between Pandas Dataframe and SAS Dataset. Imagine a situation when you have data in pandas dataframe and you wish to run SAS statistical procedure on the same without switching between SAS and Python environment.
Table of Contents Access to SAS Software for free
First and Foremost is to have access to SAS either via cloud or server/desktop version of software.
If you don't have SAS software, you don't need to worry. You can get it for free without installation via SAS OnDemand for Academics It is available for free for everyone (not restricted to students or academicians). It includes access to all the commonly used SAS modules like SAS STAT, SAS ETS, SAS SQL etc. You just need to do registration once and it does not take more than 5 minutes.
saspy python package has the following dependencies :- Python 3.4 or higher
- SAS 9.4 or higher
Please follow the steps below to make SAS run in Jupyter Notebook.
Step 1 : Install PackageTo install saspy package you can run the following command in Python.
!pip install saspy To read this article in full, please click hereThis post appeared first on ListenDataRussell Coker: Kitty and Mpv
6 months ago I switched to Kitty for terminal emulation [1]. So far there’s only been one thing that I couldn’t effectively do with Kitty that I did with Konsole in the past, that is watching a music video in 1/4 of the screen while using the rest for terminals. I could setup multiple Kitty windows taking up the rest of the screen but I wanted to keep using a single Kitty with multiple terminals and just have mpv go over one of them. Kitty supports it’s own graphical interface so “mpv –vo=kitty” works but took 6* the CPU power in my tests which isn’t good for a laptop.
For X11 there’s a –ontop option for mpv that does what you expect, but that doesn’t work on Wayland. Not working is mostly Wayland’s fault as there is a long tail of less commonly used graphical operations that work in X11 but aren’t yet implemented in Wayland. I have filed a Debian bug report about this, the mpv man page should note that it’s only going to work on X11 on Linux.
I have discovered a solution to that, in the KDE settings there’s a “Window Rules” section, I created an entry for “Window class” exactly matching “mpv” and then added a rule “Keep above other windows” and set it for “force” and “yes”.
After that I can just resize mpv to occlude just one terminal and keep using the rest. Also one noteworthy thing with this is that it makes mpv go on top of the KDE taskbar, which can be a feature.
Related posts:
- Hello Kitty I’ve just discovered a new xterm replacement named Kitty [1]....
- Thinkpad X1 Yoga Gen3 I just bought myself a Thinkpad X1 Yoga Gen3 for...
- Wayland in Bookworm We are getting towards the freeze for Debian/Bookworm so the...
Jeremy Epstein: On FastAPI
Over the past year or two, I've been heavily using FastAPI in my day job. I've been around the Python web framework block, and I gotta say, FastAPI really succeeds in its mission of building on the strengths of its predecessors (particularly Django and Flask), while feeling more modern and adhering to certain opinionated principles. In my opinion, it's pretty much exactly what the best-in-breed of the next logical generation of web frameworks should look like.
¡Ándale, ándale, arriba!Image source: The Guardian
Let me start by lauding FastAPI's excellent documentation. Having a track record of rock-solid documentation, was (and still is!) – in my opinion – Django's most impressive achievement, and I'm pleased to see that it's also becoming Django's most enduring legacy. FastAPI, like Django, includes docs changes together with code changes in a single (these days called) pull request; it clearly documents that certain features are deprecated; and its docs often go beyond what is strictly required, by including end-to-end instructions for integrating with various third-party tools and services.
FastAPI's docs raise the bar further still, with more than a dash of humour in many sections, and with a frequent sprinkling of emojis as standard fare. That latter convention I have some reservations about – call me old-fashioned, but you could say that emoji-filled docs is unprofessional and is a distraction. However, they seem to enhance rather than detract from overall quality; and, you know what, they put a non-emoji real-life smile on my face. So, they get my tick of approval.
FastAPI more-or-less sits in the Flask camp of being a "microframework", in that it doesn't include an ORM, a template engine, or various other things that Django has always advertised as being part of its "batteries included" philosophy. But, on the other hand, it's more in the Django camp of being highly opinionated, and of consciously including things with which it wants a hassle-free experience. Most notably, it includes Swagger UI and Redoc out-of-the-box. I personally had quite a painful experience generating Swagger docs in Flask, back in the day; and I've been tremendously pleased with how API doc generation Just Works™ in FastAPI.
Much like with Flask, being a microframework means that FastAPI very much stands on the shoulders of giants. Just as Flask is a thin wrapper on top of Werkzeug, with the latter providing all things WSGI; so too is FastAPI a thin wrapper on top of Starlette, with the latter providing all things ASGI. FastAPI also heavily depends on Pydantic for data schemas / validation, for strongly-typed superpowers, for settings handling, and for all things JSON. I think it's fair to say that Pydantic is FastAPI's secret sauce.
My use of FastAPI so far has been rather unusual, in that I've been building apps that primarily talk to an Oracle database (and, indeed, this is unusual for Python dev more generally). I started out by depending on the (now-deprecated) cx_Oracle library, and I've recently switched to its successor python-oracledb. I was pleased to see that the fine folks at Oracle recently released full async support for python-oracledb, which I'm now taking full advantage of in the context of FastAPI. I wrote a little library called fastapi-oracle which I'm using as a bit of glue code, and I hope it's of use to anyone else out there who needs to marry those two particular bits of tech together.
There has been a not-insignificant amount of chit-chat on the interwebz lately, voicing concern that FastAPI is a one-man show (with its BDFL @tiangolo showing no intention of that changing anytime soon), and that the FastAPI issue and pull request queues receive insufficient TLC. Based on my experience so far, I'm not too concerned about this. It is, generally speaking, not ideal if a project has a bus factor of 1, and if support requests and bug fixes are left to rot.
However, in my opinion, the code and the documentation of FastAPI are both high-quality and highly-consistent, and I appreciate that this is largely thanks to @tiangolo continuing to personally oversee every small change, and that loosening the reins would mean a high risk of that deteriorating. And, speaking of quality, I personally have yet to uncover any bugs either in FastAPI or its core dependencies (which I'm pleasantly surprised by, considering how heavily I've been using it) – it would appear that the items languishing in the queue are lower priority, and it would appear that @tiangolo is on top of critical bugs as they arise.
In summary, I'm enjoying coding with FastAPI, I feel like it's a great fit for building Python web apps in 2024, and it will continue to be my Python framework of choice for the foreseeable future.