Episode #285: Where we talk about UIs and Python
Watch the live stream:
About the show
Sponsored: RedHat: Compiler Podcast
- Mark Little
- Ben Cosby
Michael #1: libgravatar
- A library that provides a Python 3 interface to the Gravatar APIs.
- If you have users and want to show some sort of an image, Gravatar is OK
- PyPI uses this for example (gravatar, not necessarily this lib)
>>> g = Gravatar('firstname.lastname@example.org') >>> g.get_image() 'https://www.gravatar.com/avatar/0bc83cb571cd1c50ba6f3e8a78ef1346'
Brian #2: JSON to Pydantic Converter
- Suggested by Chun Ly, “this awesome JSON to @samuel_colvin's pydantic is so useful. It literally saved me days of work with a complex nested JSON schema.“
- “JSON to Pydantic is a tool that lets you convert JSON objects into Pydantic models.”
- It’s a live site, where you can plop JSON on one the left, and Pydantic models show up on the right.
- There’s a couple options:
- Specify every field as Optional
- Alias camelCase fields as snake_case
- It’s also an open source project, built with FastAPI, Create React App, and a project called datamodel-code-generator.
- Not python, but helpful for web UI and open source business model example
- tailwindcss generates CSS
- Used on the Lexchart app
- Benefits of tailwindcss and tailwindui:
- Just-in-Time makes it fast. Output includes only classes used for the project.
- Stand on shoulders of design thinking from Steve Schoger and Adam Wathan. See also refactoingui.com.
- Use in current projects without CSS conflicts. Custom namespace with prefix in tailwind.config.js. Bonus: custom namespace prefixes work with the tailwind plug-ins for VS Code and PyCharm.
- Works well with template engines like, Chameleon. We use tailwind for our app UI. Toolbar template example.
- Another example of docs and tutorials being a strategic business asset.
Michael #4: PEP 690 – Lazy Imports
- From Itamar
- Discussion at https://discuss.python.org/t/pep-690-lazy-imports/15474
- PEP proposes a feature to transparently defer the execution of imported modules until the moment when an imported object is used.
- PEP 8 says imports go a the top, that means you pay the full price of importing code
- This means that importing the main module of a program typically results in an immediate cascade of imports of most or all of the modules that may ever be needed by the program.
- Lazy imports also mostly eliminate the risk of import cycles or crashes.
- The implementation in this PEP has already demonstrated startup time improvements up to 70% and memory-use reductions up to 40% on real-world Python CLIs.
Brian #5: Two small items
- Suggested by Brian Skinn
- Created by Bruno Oliveira as a proof of concept
- pytest + rich, what’s not to love?
- Now we just need a maintainer or two or three….
- Embedding images in GitHub README
- Suggested by Henrik Finsberg
- Video by Anthony Sottile
- This is WITHOUT putting the image in the repo.
- Upload or drop an image to an issue comment.
- Don’t save the comment, just wait for GitHub to upload it to their CDN.
- GH will add a markdown link in the comment text box with a link to the now uploaded image.
- Now you can use that image in a README file.
- You can do the same while editing the README in the online editor.
Ben #6: pyotp
- A library for generating and verifying one-time passwords (OTP).
- Helpful for implementing multi-factor authentication (MFA) in web applications.
- Supports HMAC-based one-time passwords (HOTP) and time-based one-time passwords (TOTP).
- While HOTP delivered via SMS text messages is a common approach to implementing MFA, SMS is not really secure.
- TOTP using an authenticator app on the user’s device such as Google Authenticator or Microsoft Authenticator is more secure, fairly easy to implement, and free (no SMS messaging fees and multiple free authenticator apps available for users).
TOTP quick reference:
import pyotp def generate_shared_secret(): # securely store this shared secret with user account data return pyotp.random_base32() def generate_provisioning_uri(secret, email): # generate uri for a QR code from the user's shared secret and email address return pyotp.totp.TOTP(secret).provisioning_uri(name=email, issuer_name='YourApp') def verify_otp(secret, otp): # verify user's one-time password entry with their shared secret totp = pyotp.TOTP(secret) return totp.verify(otp)
- PyConUS 2022 videos now up
- A few more Python related extensions for VSCode
- Work has begun on a pytest course
- Saying this in public to inspire me to finish it.
- No ETA yet
- Sad Python Girls Club podcast
- PyTorch M1
- Mission Encodable
- PWAs and pyscript
- Michael's now released pyscript PWA YouTube video
- cal.com (open source calendly)
- Supabase (open source Firebase)
Joke: Beginner problems