#237: Separate your SQL and Python, asynchronously with aiosql
Published Wed, Jun 9, 2021,
recorded Wed, Jun 9, 2021
Watch the live stream:
About the show
Sponsored by Sentry:
- Sign up at pythonbytes.fm/sentry
- And please, when signing up, click Got a promo code? Redeem and enter PYTHONBYTES
Special guest: Mike Groves
Michael #1: Textual
- Textual (Rich.tui) is a TUI (Text User Interface) framework for Python using Rich as a renderer.
- Rich TUI will integrate tightly with its parent project, Rich.
- This project is currently a work in progress and may not be usable for a while.
Brian #2: Pinning application dependencies with pip-tools compile
- via John Hagen
- pip-tools has more functionality than this, but compile alone is quite useful
- Start with a loose list of dependencies in
requirements.in
:typer rich
- Can have things like >= and such if you have fixed dependencies.
- Now
pip install pip-tools
, andpip-compile requirements.in
- or
python -m piptools compile requirements.in
- both have same effect.
- Now you’ll have a
requirements.txt
file with pinned dependencies:# autogenerated by: pip-compile requirements.in click==7.1.2 # via typer colorama==0.4.4 # via rich commonmark==0.9.1 # via rich pygments==2.9.0 # via rich rich==10.2.2 # via -r requirements.in typer==0.3.2 # via -r requirements.in
- Now, do the same with a
dev-requirements.ini
to createdev-requirements.txt
. - Then, of course:
- `pip install -r requirements.txt` - `pip install -r dev-requirements.txt` - And test your application. - All good? Push changes.
- To force
pip-compile
to update all packages in an existingrequirements.txt
, runpip-compile --upgrade
. - John provided an example project that uses this workflow: python-blueprint
Mike #3: Pynguin
- Automated test generation
- Pynguin is a framework that allows automated unit test generation for Python. It is an extensible tool that allows the implementation of various test-generation approaches.
Michael #4: Python Advisory DB
- via Brian Skinn
- A community owned repository of advisories for packages published on pypi.org.
- Much of the existing set of vulnerabilities are collected from the National Vulnerability Database CVE feed.
- Vulnerabilities are integrated into the Open Source Vulnerabilities project, which provides an API to query for vulnerabilities.
- Longer term, we are working with the PyPI team to build a pipeline to automatically get these vulnerabilities [listed] into PyPI.
- Tracks known security issues with the packages, for example:
PYSEC-2020-28.yaml id: PYSEC-2020-28 package: name: bleach ecosystem: PyPI details: In Mozilla Bleach before 3.12, a mutation XSS in bleach.clean when RCDATA and either svg or math tags are whitelisted and the keyword argument strip=False. affects: ranges: - type: ECOSYSTEM fixed: 3.1.2 versions: - '0.1' - 0.1.1 - 0.1.2 - '0.2' ...
Brian #5: Function Overloading with singledispatch and multipledispatch
- by Martin Heinz
- I kinda avoid using the phrase “The Correct Way to …”, but you do you, Martin.
- In C/C++, we can overload functions, which means multiple functions with the same name but different parameter types just work.
- In Python, you can’t do that automatically, but you can do it.
It’s in the stdlib with
functools
andsingledispatch
:from functools import singledispatch from datetime import date, time @singledispatch def format(arg): return arg @format.register def _(arg: date): return f"{arg.day}-{arg.month}-{arg.year}" @format.register(time) def _(arg): return f"{arg.hour}:{arg.minute}:{arg.second}"
Now
format
works like two functions:print(format(date(2021, 5, 26))) # 26-5-2021 print(format(time(19, 22, 15))) # 19:22:15
What if you want to switch on the type of multiple parameters? multipledispatch, a third party package, does the trick:
from multipledispatch import dispatch @dispatch(list, str) def concatenate(a, b): a.append(b) return a @dispatch(str, str) def concatenate(a, b): return a + b print(concatenate(["a", "b"], "c")) # ['a', 'b', 'c'] print(concatenate("Hello", "World")) # HelloWorld
Mike #6: Aiosql
- Fast Async SQL Template Engine
- Lightweight replacement for ORM libraries such as SQLAlchemy.
Extras
Michael
- SoftwareX Journal, Elsevier has had an open-access software journal, via Daniel Mulkey. There's even a special issue collection on software contributing to gravitational wave discovery.
- Python 3.10.0b2 is available
- Django security releases issued: 3.2.4, 3.1.12, and 2.2.24
- Talks on YouTube for PyCon 2021.
- aicsimageio 4.0 released, lots of goodness for bio-image analysis and microscopy, thanks Madison Swain-Bowden.
Mike
Joke