Python Bytes - #343 So Much Pydantic!
Episode Date: July 11, 2023Topics covered in this episode: Pydantic v2 released Two Ways to Turbo-Charge tox Awesome Pydantic CLI tools hidden in the Python standard library Extras Joke See the full show notes for this ep...isode on the website at pythonbytes.fm/343
Transcript
Discussion (0)
Hello and welcome to Python Bytes,
where we deliver Python news and
headlines directly to your earbuds.
This is Episode 343,
recorded July 11th, 2023, and I am Brian Ocken.
I am Michael Kennedy.
It's pretty exciting to be here.
If you're listening to the show, thank you.
Also, if you'd like to watch and participate,
ask questions or whatever,
you can do that by going to pythonbytes.fm
slash live. And we'd love to have you even if it's just once in a while.
Yeah, sometimes people show up in the live stream that will possibly get their projects
will actually get mentioned as well. And that's always kind of interesting. I'm feeling this
might happen today.
Yeah. Speaking of that, Seth Larson showed up and we have some Seth Larson
news to share. So that's cool. Hey, Seth. Well, how would you like to start us off today, Michael?
I would like to start it with a version update. So let's talk about Pydantic. We talked about the
Pydantic version two story and performance. So Pydantic got a major rewrite. This rewrite was, I don't know, maybe a
year in undertaking, a year long undertaking, quite massive, got its internals rewritten in
Rust to be way faster. We talked about the early alpha version of this and the early alpha version
had, you know, like a 22 times speed up. Well, alpha no more. If you pip install Pydantic, you get Pydantic 2.
So that's pretty exciting, right?
That's very exciting.
Yeah.
Yeah.
So there's a blog post that says the last few months have
involved a whirlwind of work.
And finally, we're ready to announce version 2.
So you get started by just installing it, upgrading it.
It requires Python 3.7 and above.
So honestly, that's a pretty old bit of Python that you can be based on there.
That's great.
Now, there's some pretty major changes in terms of the API, I guess you would call it,
the way that you work with Pydantic, right?
In some cases, the way you work with base classes or the functions you call and all those things.
So there's a migration guide that we can use to go through that. And if you check out the migration
guide, you'll see like this, you got the migration guide, it starts by recommending this thing called
bump pydantic. And I guess I should probably also just let you know, like, this is like a big
pydantic episode that
we're going to be covering a lot of pydantic things so there's this thing called bump pydantic
and what you can do is you can run it against your project and it will traverse all the code and find
all of the pydantic things the classes and functions and so on that you might write with
for your pydantic code, and it will upgrade them
to the new thing. So we can check that thing out first. Basically a converter. It's like a two to
three, but for Pydantic, it's like a one to two, I guess. And so it'll do things like one of the
things you should do is you should have explicitly set the default value. So previously you could
have a class to give an example of a user that's a base model,
and you have a name,
and you say the name is an optional string.
Well, now what you should write
is name optional string equals none.
So explicitly setting the default values
when there are things like none, right?
So if you run this code against it,
it'll go and make those transformations.
It also will replace the config
class with a model config attribute. So you might've had an inner config class, and now you
have a model config where you set that to an instance of the same settings, basically. So
fewer inner classes, more just fields that make things make things happen right and a bunch of stuff like
that that you can run and it'll do that automatically but this is if you look at the
migration guide this is actually just scratching the surface so there's there's a lot of other
things that you need to be aware of and i don't know how far they intend for this bump hydantic
to go and trying to manage those things but But for example- It's pretty cool that they have it though.
It is pretty cool they have it.
Yeah. Even it's a star, right?
Yeah. Let people say,
here's the changes you have to make and also
here's a tool that can do at least most of it.
Exactly. There's things like in old Pydantic,
you had a Dunder fields and now you have
model fields as a field to the base class. You had Dunder private attributes, and now you have model fields as a field to the base class.
You had dunder private attributes, and now you have dunder pydantic private.
And there's, you know, there's more relevant ones, like there was a copy function, and
now there's a model copy.
There was a dict, and now there's a model dump.
So if you had a pydantic model, you wanted a dictionary, you could just call dict on
it.
Well, that doesn't exist or is deprecated.
And so now
you have a model dump. They did say where possible, they've tried to retain deprecated methods with
their old names for ease of migration, but you'll get deprecation warnings. So don't sleep on that
because one day they won't, they won't be. There's this a pretty significantly long document. I don't
know how long, long it is this migration guide, but there's a
bunch of things you should just go through. I would just say, try to upgrade to Fidantic too,
run your code, see if you get any deprecation warnings. If it runs and you don't get them,
you're probably fine. But if you get errors, then go consult a migration guide. If you get
deprecation warnings, do the same with,
but maybe with slightly less urgency. So yeah, there's a bunch of stuff that you can go through.
One of them was one that's interesting is they introduced this thing called a type adapter.
Let me see if there's a section where they talk about it. Yeah. So now they have this thing called
a type adapter, which is pretty cool. They have some example. There we go. It says
in PyDantic version one, we had weak support for validating or serializing non-based model types,
like a list of something. So now you can create this instance of a type called a type adapter,
and you pass the type, it adapts. So you can say a type adapter of list of int, and then you can
just go to it and say validate Python. And for the example here, they adapter of list of int, and then you can just go to it and say, validate
Python.
And for the example here, they have a list of numbers, but they're in strings, like the
list string one, string two, string three.
And then, you know, what it gives you back is just the actual list.
One, two, three, like all that magical transformation that Pydantic is.
That's pretty cool.
Yeah.
So that's another thing people can check out.
There's, like I said, this is a huge document.
People probably want to go check out.
They've removed a whole bunch of error messages,
or error, sorry, error types,
like pydantic.errors.ipv in the interface error.
For example, I'm not sure where they went, though.
It doesn't explicitly say.
And they were moved or re you know mapped over to
this other error type but again it's a huge document i don't want to go through the migration
guide for everyone that's not fun but congratulations to the pydantic team this is really awesome that
this is finally here now now we come to the point where we wait will we wait for all of the pydantic
frameworks because working with pydantic is great and you
can do cool stuff with Pydantic directly. Like you can directly work with it in a Flask app,
for example. But if you work with FastAPI or Beanie or all these other frameworks that are
built on top of it, you got to wait for, you know, they're deep down in the guts of Pydantic a lot
of times because of the way they work except for
now fast api though fast api is already upgraded right yeah it um is it released or just the beta is out for it i can't remember i think so fast api released uh version 0.100.0 come on guys zero
verse still anyway four days ago and um and it does look like the last five days ago, we got a merge for adding support for Pydantic 2.002 or something.
The first couple of versions for Pydantic didn't work with FastAPI, but it looks like there were some fixes wouldn't surprise me if they kind of just held off on announcing the
version 2 until fast api was able to use it because that's a huge user of it so yeah it's
certainly the biggest user and samuel and sebastian work pretty closely together um i'm excited uh i
i know this is different it might be difficult for people that are already using an old pydantic to move over
even with the bump and um but i i guess i haven't used pydantic directly before and now i'm i'm kind
of excited to use it even with uh um with tools that like this auto thing that they're using what
was that the auto changer no the bump idantic no the one to like... Oh, the type adapter. Type adapter. Yeah, I think that I've got places to use type adapter
even without non-web stuff.
So I think that's pretty fun.
Anyway, cool.
I'm excited.
Grant on the audience does point out,
you know, tough luck for base models
with an existing model attribute.
There might be some mechanism to rename that or remap
that you know there's like an alias you can put on them but you say when you look in the data it
looks like this even though the name is that but yeah there might be some trickiness here yeah yeah
at least in an api level you could be able to fix it i don't know about the python code level if
that'll help you all right well. Well, anyway, big news.
Big news.
Pydantic version 2 is out.
This was on June 30th, but we were off on vacation, Brian.
Mostly my fault.
Sorry.
Well, actually.
So we didn't cover it.
It's all right.
Now that we covered it, now we can cover the FastAPI's cut up.
So it's great. Yeah, exactly.
You wait long enough things it's come together well um i want to talk about talks a little bit uh because i learned something
new from hinnick which isn't that unusual i often learn a lot of stuff from him um however uh there's
an article from him saying two ways to turbocharge talks and um it just starts right off the bat with saying,
no, it's not just run parallel
because actually running parallel is pretty cool.
And if you don't know about running parallel,
I usually just use the talks-p to run parallel.
If you can run all of your environments in parallel,
it's super cool to be able to speed it up. That's the awesomest way to speed it up. I think the he doesn't know that it's
broken for some people. So talks for has has some talks for is awesome. And it's got some
great new features. But apparently, for some people, parallel isn't working. I'm not one
of those people. So most of my all of my projects that
can use talks or parallel seems to be working but i'm not using something complicated apparently
it's broken for adders for instance or at least it was last time i checked anyway so what is he what
is he recommending if it's not running in parallel what should you do um this is something that i
didn't really think about before so one of the things
that talks does is for each environment that you set up like say you've got environments for
three versions of python um and it will um it will create uh a source distribution of your uh of your
library or package for each of those if you're're doing a normal, like using talks to test a Python package, it'll be build a
source distribution for each environment, except for that's not really how we use our
packages.
We build it once and throw it up on PyPI and everybody uses the same one if one supports
all three versions of Python.
So he's showing us a way to get around that to say, instead of building it
on all environments, go ahead and just build the wheel once. And so you tell it to build the wheel
instead of a source distribution, and you tell it where to put it into. And there's apparently
a command line way to do it, but really it's throw it in your tox any file um or if you're using pyproject.toml you can throw it there too
of course but um so there's a we we'll build environment that tells you tells talks what
directory to stick it in and if it's the same directory for everybody it'll get used uh for
all environments and this alone sped up uh quite a of my workflows, which is really cool.
Just building it once, using it in testing it in different Python environments.
Yeah, that's really excellent.
Because generally the wheel's not going to vary from 3.9 to 3.10, right?
Right.
Yeah.
In a lot of Python-only packages, you're going to use the same wheel for everything.
And now there are some that have different ones
for different versions, I guess.
None of the stuff I work with does.
Okay, so that's the first way to speed it up.
What's the second way?
The second way is if you're in one of these camps,
especially one of these camps
where you can't run talks in parallel,
you can still run PyTest in parallel.
So he's recommending using PyTest X dist
and then as a plugin
and then running PyTest dash in auto,
or you can give it a number of CPUs or whatever.
And auto just says,
pick the number of CPUs you want
and you can run PyTest in parallel.
This actually, if you have a fast test suite,
this might slow down your tests.
So be careful, measure it.
However, he has an example
in a lot of CPU intensive test suites,
like for instance, if you're using Hypothesis
and it's running a lot of tests that are similar.
And yeah, so especially if you're using Hypothesis,
I recommend trying out running PyTest in parallel and it speeds things.
It can speed things up significantly.
He has an example at the bottom.
Oh, I want to cover some of the other things.
If you're doing all these tricks, you might it might muck up your coverage collection.
So he's got some some stuff here to help you through cleaning up your coverage, which is great.
Skipping down for the adders project, those two tricks, he started out with 257 seconds and got it down to 69 seconds using parallel pytest and building a wheel only.
I had a test suite that was pretty fast anyway, just, you know, 18 seconds
is did, did take it down to like five seconds. So it's yeah, it's worth it just for the heck of it.
Why not? So thanks. Yeah. It's almost five times faster. Not bad. Four times faster.
Yeah. I mean, right. If it's low, you don't really think about it, even if it's multiples.
So, but yeah. And the bigger the project, the more't really think about it, even if it's multiples. Yep.
And the bigger the project, the more you care, right?
Yeah.
And I wasn't using a hypothesis.
I would like to try this out using a hypothesis.
It's pretty cool.
Excellent.
Good one.
All right.
Before we move on to the next item, I have a bit of real-time follow-up, but not real-time follow follow up in the traditional sense where we have audience members. I just got a message from Roman Wright, who is the creator of Beanie,
the async MongoDB ODM based on Pydantic. And he said, I am releasing a version of Beanie
that supports Pydantic version two soon, either this week or next week. So don't want to
put him down for a certain time exactly, but just that project is also moving along like FastAPI did
to support it. And he said it promises to have quite a bit of a speed up, as you would expect.
Nice. Cool. That Beanie's a cool project.
It absolutely is. So how about something totally different, like Pydantic?
So this next item is Awesome Pydantic,
a curated list of awesome things related to Pydantic.
So this is kind of an early stage project here.
It got created five months ago or so,
but I feel like it needs people out there who have Pydantic things contributing them back.
For example, do we have, I don't even think, like SQL model? I feel like it needs people out there who have Pydantic things contributing them back.
For example, do we have, I don't even think like SQL model is listed here where SQL model is created by Sebastian Ramirez based on Pydantic and SQL alchemy, for example.
So there are some notable things though that are worth pointing out here.
So we have transformers and what's cool is that lists all the stars.
So transformers is 106,000 that's crazy brian yeah i mean if you look at c python i think it has in the realm of
50 000. flas does as well so transformers is the state of art natural language processing
for pytorch and tensorflow based on pyd. It's more popular than Python.
Sort of, yes.
I think, you know, how many people are actually trying to work on Python and the code itself.
But yeah, in a sense.
Spacey, of course, the free open source library for natural NLP, natural language processing.
It's a pretty cool one gina gina j-i-n-a is geared jenna is geared towards building search systems for any kind of any kind of data including text image audio video
and more that's pretty excellent modular design and multi-layer abstractions you can leverage
efficient patterns to build different parts of the system or change them to a flow. That sounds pretty interesting, right?
Yeah.
Down here, we have the object mapping.
We have Beanie, as I just called out, an asynchronous Python object document mapper for MongoDB
based on Motor and Pydantic, of course.
What else we got?
We have data model code generator, which is the foundation of JSON to Pydantic,
which I know that we talked about before.
If you're not familiar with JSON to Pydantic.com,
take some JSON, drop it in there.
You get your JSON output.
Here's the big question though, Brian.
What version of Pydantic do you get out?
I'm guessing not the new one.
I don't know.
I am as well.
It probably needs an update, doesn't it?
Yeah.
So hopefully that that comes along there.
Well, stick in model in there as an attribute and see what happens.
Oh, yeah.
Nope, not doing it.
So data model code generator is the CLI equivalent that that thing uses behind the scenes.
Let's see.
I don't know how many people
know that Pydantic has a settings management capability where you can read variables out of
environment variables and YAML files and so on. So GoodConf, as in good config, GoodConf is a thin
wrapper over Pydantic settings management. So that's pretty cool. Get a little bit of a cleaner or more opinionated way to work with settings.
And of course, Fast API, Django Ninja are listed here
along with some others.
And yeah, I think I'll probably leave it there
with that as the shout out for all those items.
But there's a bunch of cool stuff in here.
Awesome things you might say that people can check out.
And also, if you have one of these projects
or you're a super fan of one of these projects
and it's not listed here, PRs are accepted, I believe. Yeah, cool. that people can check out. And also, if you have one of these projects or you're a super fan of one of these projects
and it's not listed here, PRs are accepted, I believe.
Yeah, cool.
Yeah, so that was the next thing in the Pydantic journey
of today.
Nice.
Well, I'm going to go away from Pydantic again.
And I want to talk about command line interface tools.
So I like CLIs.
I kind of spend a lot of time with a terminal open.
And so I thought this was a fun article from Simon Willison,
CLI tools hidden in the Python standard library. And I think it's also really cool that Simon does a shout out to Seth Larson.
Hey, Seth.
That Seth pointed out that Gzip,
the Python Gzip module,
you can use it as a CLI tool,
especially handy if you're on Windows and don't have Gzip built in.
You can say python-m gzip,
and you can with a dash just decompress and give it
a Gzip file and it'll decompress it for you
there's a whole bunch of other stuff you can do with it but um it's pretty neat um kind of fun
uh so uh so simon saw this uh that seth pointed this out and thought wonder what other stuff is
hiding in the standard library so he talks about using ripgrep to uh to search through the standard library and i think
it's kind of fun that he shows you how he went went about looking for all these things and then
uh parsed out some stuff because he didn't really care about tests um or uh turtle or idle uh because
yes we know that those have applications but what's what's left what's left is quite a few
there's a quite a few uh
python modules within standard library or packages modules that uh do these uh init things um and or
have have a command line thing and so what does he look what's kind of interesting is what he's
looking for he's looking for packages that have uh a if name main, because that little trick of if dunder name equals dunder main,
that means that if it's imported, it just runs like a library.
But if it's not imported, if it's run directly,
then this will be true,
and whatever's in there will run as a command,
and you can do the dash m thing.
And so a few fun things that he found i i did
know about the server thing but i i always forget about it uh python dash m http dot server and you
can give it a port yeah that's nice i use that sometimes when things complain and trying to work
with like javascript and a static html file or something it's like you need a server for this
to work because it wants to just do forward slash something. So I'll just run that and then like open up the file right there. And
then it, then it starts working instead of trying to go to a lot of trouble. So run that in the
directory you're working on. Yeah. And if you, if you want to, one of the fun things with this is
if you want to just learn a little basic HTML, maybe JavaScript in CSS, you can just use this as a local server to
just play around with
using all three together. It's kind
of fun. Yeah, or maybe you want to do
PyScript and not actually do JavaScript.
Oh, yeah. Yeah, maybe.
So let's go through a few more
fun things. Base64, you can
use dash m
base64 to either
encode, decode, or both.
I'm not sure what both at the same time means.
To try that out, see what it does.
Maybe you just get the answer back.
The input back.
Maybe.
Async IO will open up an async REPL,
where you can use a wait,
and instead of async IO run, you can use a wait directly.
Just kind of fun.
Neat to try out async stuff on the REPL.
That sounds hard, but it might be fun.
Tokenize, just as a fun thing,
you can use the Python tokenizer on a Python file
just to see what the tokens look like yeah um
that's kind of neat ast i probably would use more so you can you did do dash m ast on a python file
it'll give you uh a printout of the abstract syntax tree which is uh nice um this is super
handy i didn't know about this jason.tool, it's a pretty printer for JSON.
So you can just pipe some JSON into it and get some nice formatted output.
Kind of nice.
Yeah, that's really what I wanted to highlight.
Those calendar, I knew about this a long time ago, and I totally forgot about it.
Python-m-calendar will print an AScii calendar of the current year why would you
need this but um yeah anyway as you can brian because because you can i used this way way way
long ago to try to um uh and then parsed it afterwards to uh hook up a uh dynamic calendar
application uh to um with clickable dates.
It was terrible.
It was a terrible application, but it was fun.
Anyway.
I kind of like it though.
I do kind of like it.
So, oh, NNTP.
Do you use news groups much?
I don't use news groups.
I used to news group, but-
Apparently you can do NNTP
and it prints out like some articles um interesting
in case you want to read from uh 1994
so one thing i think would i think it might be kind of cool if somebody had um
creates a meta package for this kind of stuff based on this article. So what I mean is if you set an entry point
in your Python package and you put it into,
you install it into your virtual environment
or you pip x install it,
it becomes a CLI command, right?
So for example, pyjoke, right?
I could just go up here and type pyjoke.
Oh, pip x install pyjoke first.
And it'll give you some kind of,
it'll just call that function right um
the joke perhaps i'm not sure yeah so if i type pyjoke after installing a pipx install it says
obfuscated reality mappers orms can be useful database tools right so right but the fact now
i have a single command i give instead of you know python dash m i joke i just type pi joke right so it would be
cool if somebody took this and created something that i could pipx install that gave me every
single one of these in a more concise way to call it so instead of python dash m dash you know
calendar or just calendar i can just type calendar and it runs this right or i could just type acp.
server and it runs runs that so there's uh
something for for people to try to come up with a cleaner way um there might be some name conflicts
so you'd have like for gzip you might need to pgzip or something right like that so which is
would be a little bit annoying but yeah anyway it'd be fun if somebody turned these into like
a simpler series of commands and just like you you got Python, you basically have all these.
Yeah, it might be kind of difficult.
It might be a fun thing to try
because you can't just import the module and run it
because then that part doesn't run.
So you have to, yeah.
Right, you would have to set up a bunch of entry points
in your package and then give them names
and then basically map them over to calling.
Yeah.
But Henry out in the audience says,
I thought the point is you didn't have to install anything to use these.
Right.
True. But you have got to make a bunch of aliases if you want them real short.
Anyway, very cool find.
Cheat sheet maybe. A cheat sheet.
Yes. Kind of a cheat sheet.
Thanks, Simon. Thank you, Seth. This is cool.
All right. Well, those are our things.
Do you have anything extra to share with us?
I do have some extras.
Back to Pydantic.
So over at TalkPython Training, we have a brand new course, a seven-hour course for
MongoDB called MongoDB with Async Python.
Oh, fun.
And the whole idea is it takes Beanie
and it's kind of a comprehensive introduction to MongoDB,
but approaches it from using Beanie,
which is Pydantic plus async and await,
talking to MongoDB, how to use indexes,
how do you write queries?
What are the different styles?
We end up building a fast API API around that
as well as do load testing with Locus.
So if you want to kind of see end to end how to build a modern Python app based on MongoDB
and Beanie, check it out.
Links in the show notes, just talkpython.fm, click on courses, and you'll find it over
there.
So I'm really, really excited.
I've been working for a long time on this.
It has an early bird special. So, or from today for a week, you get a $10 off or something
relative in your own currency off if you get it this week, and then it goes up a little bit next
week. So really, really fun course. There's tons of stuff to learn here. People can check it out
if they're interested in this. And i said i just talked to roman and the
beanie should get its pydantic version to upgrade as well so they should only get to be a better
story as we go on very cool now is this one that you did or was this uh somebody else um
this is me okay and again this is like what's powering python by set fm that's what's powering
talk python.fm like those kind of It's the same tech behind the scenes.
So pretty excellent.
Another one. Did you know that
PyPI has a blog?
No. It does. This one's
been sitting around for a little bit. I meant to
talk about it, but it kept getting
edged out by more urgent things.
But back in
March, end of March,
there's now a blog.pypi.org that you can go to.
So definitely check that out.
One of the things that's a little bit of a hassle is if you take this blog.pypi.org and you drop it into your RSS reader, like reader with two E's for me, it says there's no blog here.
Is there no blog here?
So go to the bottom.
There's a blog.pypi.org
slash feed underscore RSS underscore created.xml.
That is what you got to put into your RSS reader
if your RSS reader doesn't find it
because there's no meta tag for the RSS capabilities.
Maybe someone's over there listening,
go and throw that in,
make that a little bit quicker
and simpler for people to find.
But if you wanna subscribe to it,
that is the, that's the business right there.
Well, if you go to, yeah, there is a little icon
at the bottom right-hand corner, the RSS thing.
So all the way down.
Yeah, right there.
Yeah.
So copy link, is that the same address?
Yeah, that's the same address I suggested. Cool. suggested cool so people yeah but like if there's a meta tag you can put so like you'll
get a little pop-up in your your different browsers and other things that browse it
so hey just click here to subscribe or to auto detect it yeah cool yeah excellent uh one yes
one final thing of my extras oh my gosh there's a lot of pop-ups on Twitter these days.
On Twitter, Lucas Schlinger pointed out,
says, wow, Meta, as in Facebook,
Meta commits to dedicate three engineering years to implement the removal of the GIL from Python
and fix upcoming compatibility and performance issues
as a result of that.
Oh, awesome.
How about that?
So I believe this is the 703
is the no-gill work done by Sam Gross,
who is at Meta.
And there's been some hesitation,
like, well, if we adopt this,
how much things that are based on C
and Rust start breaking?
And so it sounds like,
you know, with a couple of paragraphs of information
that they're saying, look, we'll both fix CPython.
Just do it anyway and we'll fix it later.
Well, I think it's like we'll fix CPython and then maybe I'm inferring here is like and we'll fix the popular packages based on it that might run into trouble.
I'm not sure.
Yeah.
But yeah, so basically three years. I think they were saying one to two years of actual calendar time,
but with multiple people who are either core developers
or very close to core developers to make this happen.
Cool.
Yeah.
So that's big news, and those are my extras.
Nice.
I wanted to say congrats to Seth Larson.
So we mentioned him at the beginning of the show
and a couple of times during the show.
Seth is the new security developer in residence.
So yay, congrats, Seth.
So we're linking to an announcement on the PSF blog
and he also has a, oops, that's blank.
He has a blog announcing the change also, a blog post.
So pretty cool.
I'm excited to see that.
So congrats, Seth.
Yeah, congrats, Seth.
And there's all this discussion about supply chain vulnerabilities and security and all of those things.
So it's really excellent.
And just security in general.
So thanks for coming on to make things better.
Yeah, and nice sweatshirt, Seth. Cool.
The other thing I wanted to announce is I'm pretty excited about this last bit.
Python People is live.
So Python People.
Who are these Python People you speak of, Brian?
Python People.
So I, you know, the first part of like, I kind of the there's a couple of things that were inspiring for this.
So it's a new it's a new podcast, Python people dot FM.
So far, there's one episode with Michael Kennedy, but they're you.
But there's a whole bunch more coming.
And I used to like mostly just want the tech stuff of a tech podcast.
But I kind of really like the first part of Talk Python where you just like get to know people.
And I thought we should do more of that.
So I wanted to get a podcast together
where we mostly focus on the people
and less about the tech.
So that's what Python People is about.
Yeah, we talked for like 45 minutes or something.
No, 28 minutes and 44 seconds.
And we almost don't talk
about python at all right yeah a little bit yeah a little bit about what you do um so i thought it'd
be fun to like pull in like why i mean everybody knows who you are but for some people like what
is your connection to python what is your connection to the python community but then also
just more about you like we learned about your motorcycling and about about being a pool shark
who knew
who knew and we talk about
skateboarding with you so there's like a ton of other
other cool things that people
might be interested in yeah so check it out
please and that's
all I've got for what if somebody
also wants to be a Python people can they
reach out to you oh I would be a Python person
yeah I should put a like a be a person or i don't know be a person oh maybe be a guest or something uh
yeah just reach out to me um i you don't have to be as uh as well known as michael because who is
uh but uh i'd love to have uh just like everybody on why not yeah you feel like with a show it's off to a good start and it was really fun to be a part of that cool all right you ready for
some oh really oh yeah we have a joke we have a joke so this is part of the the
old really book series you know O'Reilly always has like an animal or something
on there and so there's the joke series. Oh, really? Question mark.
It's got a riffs on that a little bit.
This one is Kubernetes for beginners.
It says, what could go wrong?
And this is in the dev oops category of tech books.
And then the cover is, it says containers. That'll fix it.
And it has that giant evergreen container ship
stuck sideways in the Suez Canal.
What could go wrong?
Yeah.
And just the title, Kubernetes for beginners. giant evergreen container ship stuck sideways in the Suez Canal. What could go wrong? Yeah.
And just the title, Kubernetes for Beginners.
No, beginners aren't there yet.
Yeah, they probably shouldn't be doing Kubernetes, but that'll fix it.
Awesome.
All right.
Then you got a joke for us as well, right?
Oh, yeah.
Just a random one I heard the other day.
I thought it was terrible.
So I thought I'd share it with the world.
So five ants rent an apartment together. They invite
five other ants to share the rent.
Also, they got tons of room, so
now they're tenants.
Ah, tenants. Got it.
I love it.
I got one more in that vein for you since
I just installed PyJoke. They're
single word
on the CLI for me so pirates go arg
computer buyers go argv how about that pretty bad yeah yeah but also true they do that yeah maybe
all right cool uh fun talking with you again um thanks to everybody in the in the interwebs and on the
youtubes to watching us yeah thanks everyone good to be back with you brian bye yeah bye