Django Chat

Django 4.2 - Mariusz Felisiak

Episode Summary

Django Fellow Mariusz walks us through what to expect in Django 4.2 and 5.0, continuous integration, supporting multiple versions of Python/Django, and more.

Episode Notes

Support the Show

This podcast does not have any ads or sponsors. To support the show, please consider purchasing a book, signing up for Button, or reading the Django News newsletter.

Episode Transcription

Carlton Gibson 0:06
Hi, welcome to another episode of Django chat. Like it used to be fortnightly podcast on the Django web framework. I'm Carlton Gibson joined by will Vincent. Hello Will, how are you?

Will Vincent 0:15
Hi, Carlton. I'm good.

Carlton Gibson 0:17
That's good. And today we've got with us marriage Phyllis SCIAC. Again, my Django fellow colleague, hello Mariusz..

Mariusz Felisiak 0:23
Hi, Nice to be here.

Carlton Gibson 0:26
thank you for coming. We have extensively, we're going to talk about Django 4.2, and maybe 5.0. And I don't know, other things like that. Because 4.2 is in pre release. Can you tell us all about that now.

Mariusz Felisiak 0:41
So we released 4.2, this two weeks ago. 4.2 is one of our Long Term Support release. So we've extended support until April 2026. So more than three, three more years. The final release should be issued in early April this year. So now is the best time to check new features, to start testing, to choose your personal favorites, and see our good all juggle for both the goodies that we have, and that we prepare for our users.

Carlton Gibson 1:22
And I like that you've stayed that with lots of 100 Nice understatement that it's a good time. It's like absolutely morally obligatory that you run your test suite against Django 4.2 is, you know, come on, guys help us.

Will Vincent 1:36
What's a test suite?

Carlton Gibson 1:38
Well, it's a test suite, if you have a test suite, if you have CI, right. So if you're, if you're sitting there, or you're working, you're like, we've got a test suite, and we run it on every commit and every thing, then if you could run that as well against Django 4.2, then that would tell us that would help us find find the bugs, right, because it's guaranteed to be bugs. And what we don't really want is the day after the final release, for you to open up the first ticket on the Django track saying, Oh, I found a bug in 4.2. It's like we had months for this.

Mariusz Felisiak 2:08
And that's for now, we don't have any open release blockers for Django, 14, we already fixed all of them that were reported at the beginning after releasing that for release, so we are waiting for a new one.

Will Vincent 2:20
Okay. So, Carlton, I, you and I talk all the time, Mario, what are your thoughts on what's a good? Like, what do you see in the Django landscape is like good. Ci, like, what are the options that you see? And is there anyone that I mean, I know you spend all your time following, but like, what's your what's your take on CI and best practices, because, you know, Carlton, I just talk to each other all the time.

Mariusz Felisiak 2:42
If you take into account my open source work, then probably GitHub actions are not the best options to to, to start with testing your apps or your third party packages, or any code that you are working on. If you have more complicated CI, then we are, for example, using Jenkins in Django, but there are there are plenty of options. I will say that the GitHub actions are currently the easiest to start.

Will Vincent 3:19
Okay. That's my sense. We're using

Carlton Gibson 3:21
Git. Git labs got it built in as well. Right. So it's like, it's not just so much. It's GitHub actions is the one that's Nick already in whatever you're using. Just use that.

Will Vincent 3:32
Right. Just use something. I think, because circle CI, I think, a couple weeks ago, there was another? I mean, that's one of the kind of older, I think it's still around, but it's had some issues, and there was this security incident and yeah, but my sense is GitHub at GitHub or GitLab. Lab actions is kind of the default most people use these days. Just want to confirm

Carlton Gibson 3:55
for me, it's got to be difficult if your circle CI, right. Because they were great. And they were one of the options and they were they were awesome. And I mean, so Marius is a hero, he runs the the Django Jenkins and keeps it stood up. But I remember using Jenkins and then circle CI came along. It's like, Ah, this is a breath of fresh air. So I have a little sweet spot there for for the these is my first taste of hosted CI and it was a lovely thing. But then GitHub come along with uh, you know, basically quite quite German See, generally generally hosting it's going to be difficult if you're there. I would imagine.

Mariusz Felisiak 4:38
I don't have much experience with secrecy. i But I would say that the the power of Jenkins is a similar to the power of Django that there are a lot of third party packages and plugins that you can use for almost everything. Right? Yeah.

Will Vincent 4:56
Yeah, it's tough with the consolidation. Just sort of makes sense in a way, but when you have, yeah, GitHub GitLab just being like, Oh, your your whole product is a feature, and we'll just make it, you know, more or less free. That's, that's tough. Anyway, Sorry, I interrupted we were talking about for two and

Carlton Gibson 5:15
well, it tasted for two, if I don't know if you know, one thing that's always worth doing is running against the next version of something. So you know, if I've got a production app, and it's on, you know, Django or python three point 10 Be nice to know that it's right, you know, when python three point 11 comes out that it's compatible. So you can use a, if you're not using a thing, like a tool, like tox, which enables you to build to test against multiple configurations, you know, to test the next Django, using a tool like toxic might give you excuses to bring that into play. So you can run your existing one against I know, beyond 3.2 or 4.1. And then you can also test 4.2. At the same time, and that helps us and you know, maybe helps you bring your test suite forward. Yeah. And it

Will Vincent 5:59
makes you a hero and works like if you're a, if you're a lower down developer, and you're working on Django, you know, there's nothing stopping you from running, running it against for two and you might find something. And that's good to know, for Django, it's good to know, for your company, too.

Mariusz Felisiak 6:12
It's not that we are doing this only for our service, we are doing exactly the same. With Python, for example, we are testing we are testing for alpha releases of new versions. So we are doing exactly the same. Trying to help in Python developing.

Carlton Gibson 6:33
Yeah, Maurice is quite often fixing a little three point 12 bug that comes up. He's Oh, I've I've fixed this one here. Is that okay, fair enough. Well done. Yeah.

Will Vincent 6:44
Well, and where it's now 3.8, right, for Python 3.8 and up for Django support, or it will be, I believe, with four to

Mariusz Felisiak 6:53
4.2 year football to support python two point and 910 and 11. And the next version 5.0. With drops support for 2.7 48 and 2.9. Yeah,

Carlton Gibson 7:12
yeah. So it's three point 10. Plus, it's, that's the

Will Vincent 7:14
winner. Yeah, I saw I think you two were talking about that on mastodon. And it's kind of exciting, right. I mean, you know, people update or die, you know,

Carlton Gibson 7:24
it's not just exciting. It's like, wonderful. It's like, you know, Marisha, Nick, Nick Pope, who's another regular contributor, they just put in all these clean up these millions of clean up commits to drop support for this drops about that. And it's just like, this is beautiful, you know, really, like just lovely changes coming anything. Ah, and then you over son, you know, and we've got to support 3.2 for another year, and you start to feel a bit grumpy about it. Oh, no. 3.2 is the the chain around my neck that used to be 2.2? It used to be 111. You know?

Mariusz Felisiak 8:03
And it's especially tricky when you have longtime, long term support releases, like Java 2.2, that still supports Python 3.6 That is not supported anymore. And, yes, we need to, we need to support it. And but for security reasons, for example.

Carlton Gibson 8:23
So can I just get your thoughts on the so Jack Python has gone to this yearly support yearly release cycle, so is a new version of Python every year. So it's three point 11 This year, three point 12 Or three point 12 will be this year. And then, you know, three point 13 The year after? And what that means with the long term support was we're still supporting 3.6. So we're currently supporting 3.6 3.7 3.8 3.93 point 10, three 111. We'll be supporting three point 12 Come on. So bar ah, like this is? Right.

Mariusz Felisiak 8:59
It would it would be easier if when we when we use Python version, or two years, for example, much easier. And especially in our policy when we are dropping support for Python versions only. After that it is LTS releases. So we will drop support for any new Python versions. In 5.1 5.2 6.0, will be the next version will drop support for any Python version. So

Carlton Gibson 9:36
yeah, so when 5.0 is released, it looks like it doesn't support very many it's only three point 10 Three point 11. Or, well, probably three point 12. By the time it's actually released, so support only three versions, but within its lifetime, all of a sudden there'll be two more and then the the 5.2 release will end up supporting five versions of Python again, which is quite a lot.

Mariusz Felisiak 9:57
Five or six maybe

Carlton Gibson 10:00
Right. Because we always get the the we always get these reports. I remember Django one point 11, there was quite a long line of requests for please support. I can't remember which particular version it was of Python. But it was like, No, we don't add support, but don't add support, we don't support but eventually we're like, Okay, we'll add support, because it's only this one tiny little patch. But it meant that Python Django, one point 11 was supporting, you know, this whole extra versions late in its life, you know, late in its life, it can support for an extra Python version, which seemed, I don't know. Well, people wanted it. But there's, there's this sort of tension, it seems between people who are on want to be on the long term support Django, but the latest Python insight, which is if

Will Vincent 10:48
you're, you know, Marius, if you could wave a wand, would you keep our current policy? Do you think the pain that you and others undergo to maintain this is worth it? Or is it something that should be revisited?

Mariusz Felisiak 11:00
I think that the current process is fine. Yeah, I would maybe be more careful about backporting support for new Python versions to the old one. So we already decided that we not possible for new Python versions, when the old one is in extended support, for example. And it is something that we did in the past for a whopping 11, when we decided to put support for new Python version. I don't remember exactly 2.5 or 2.6, and things like that. Though, we had a long discussion about this. On the agenda developers really case that folks would like to support 3.6 and 2.7. In the same time, it was it was really, it was really tricky. So now now we decided already that Django Django 4.2 will be the first version that support python two point 12. As we look backwards, support for it to the earlier versions.

Will Vincent 12:14
Okay, so that's some progress, at least from where you, you know, keeping your Sandy's

Carlton Gibson 12:22
I think it's probably the best policy that's available given that we have these LTS supports, which the LTS versions and the LTS versions want to jangles unique jelly features, there aren't many other frameworks out there that give you that kind of five year is it five years, three, three and a half years? Anyway, however long it is, they'll give you that, you know, that extra support them. I made Tim Graham chase me around the playground about it for both 2.2 and 3.2, about dropping the older versions, because we're dropping now 3.8 and 3.9 for Django 5.9. And they still got like a year or two left to go. And there's lots of folks that, you know, open up a computer and they got some version of Python on it. And perhaps they don't know what and it'd be nice if you know pip install and just gives them the latest. But I think there's just no way out of it. Because what we can't do is in a point release some some way through, you know that the LTS cycle say oh, you know, do you know what 3.8 work tool 4.2 point six, but in four point 2.7 It suddenly stopped. There's just that would just be, you know, as Tim Graham put it, that would be a pretty rough stick. You know. So, in the end, I've come around to that the current version is probably the best one. That there is it's I don't see another way having tried to square the circle, different directions. It just doesn't go.

Will Vincent 13:49
Yeah, well, I mean, and Django can't be responsible for people knowing how to use Python. I mean, it'd be I mean, I mean, it's I like I just released on my Learn Django site, how to install Django post, which seems sort of like well, just pip install Django. But of course, for most people, it's like, well, how do you install Python? What's the command line? How do you use it? How do you use virtual environments, all these things, there's different ways to do it. Maybe you should do Python dash m pip install instead of just pip install, you know, so there's a degree I think of education for others of us. So that, folks don't go Django, you don't support Python. It's like, okay, you know, Python could help you out here. And hopefully, I and others can help people not just assume that Django is responsible for all the, you know, the universe of web development that people need to do. So anyways,

Mariusz Felisiak 14:41
maybe because folks want to stick with Python that is available for the OS operating system distribution. They just want to if untighten and that's it. And it's not going so fast as a Developing part of versions and other packages?

Carlton Gibson 15:05
Yeah, like if you just apt get install, and what are you? What do you end up with? Yeah. So 4.2, what's your favorite feature mesh?

Mariusz Felisiak 15:14
I think that almost all of us all of my favorite features are related with DRM. Right? Unfortunately, or unfortunately, I'm not sure. So the biggest one is support for psycho PG three.

Will Vincent 15:35
I'm excited about this one

Mariusz Felisiak 15:38
is it's called sacred geometry. But it's a totally different implementation of Python. For Python, it's, it's changed a few things, like, for example, prefer several site parameter binding. It has a synchronous or synchronous connections and cursors built in into it. We are currently don't use them. But we need to have them available in long term to add the entire async puff. To the progress bar.

Carlton Gibson 16:27
I've been looking at this, I haven't played with it yet. But I've been scheming. And I think I can just do with the connection object, I can just create an async client, and then I should be able to use that. I mean, it won't have any of the nice wrappers around the ORM facilities. But I can use that in an async view. For instance, one thing I've been

Mariusz Felisiak 16:44
you can create async cursor or async connection, and let's use it Yeah, so

Carlton Gibson 16:50
that's perfect. I mean, I've been looking at that for kind of streaming response type example to use publish, notify and notify, listen, and whether it's an async connection and see if I can get that working because I think there'll be a lovely example.

Mariusz Felisiak 17:05
It's also replacing this integration that we don't have a new engine, because current built in PostgreSQL backend supports both psycho PG version two and three, it depends. What do you have available in your environment.

Carlton Gibson 17:25
So you don't even have to change your setting file, you just pip install the new one, and it picks it up

Mariusz Felisiak 17:30
anyone and that's it. And it works like a charm. The second one are comments or comments on columns and tables. It's really nice feature. It's another it's another example of of think that should help avoiding writing d row SQL statements. Because currently, you can keep your data database comments on columns and tables. Any models with getting new attributes, the current for field and DB table comment option for Mother's meta designation formula will propagate comments to tables, meter meter data. And that's it. That's all that you need.

Carlton Gibson 18:25
Okay, can I ask? Why do I need DB comments?

Mariusz Felisiak 18:29
In the past I started our I struggled archivists few times we've been creating maintainable database schema. And if you have if you have folks that have direct access to your database, like database administrators, or maybe data scientists, or other members of the team that item developers that have that access to your database, then you need to move the entire description to some to some to some fields to to describe what how the current summary looks like and how it works. Now it can be now you can use comments on columns and tables to describe it automatically for them.

Carlton Gibson 19:26
Okay, that's that's a great answer. Because not everybody accesses your database via DRM. So can I ask you about the other thing that's not just it's not in 4.2. But it's been sneaking along, you know, slowly building up over the last few releases, which is the growing support for constraints gradable usable via the our M incredible via the migration frameworks. Same sort of things going on there. Would you talk how would you? What would you say about constraints and the power they give? Previously,

Mariusz Felisiak 19:57
constraints were like In the last resort, that protects our schema from invalid data. And now we are using them to, to to validate the data anywhere on our site. When they are when they are putting data on forms, for example, you don't need to do the same twice, because now we're using database constraints to generate information in advance that that some data will violate, in database constraints. So we need to see we don't need to do this in two places, but I've

Carlton Gibson 20:44
got I've got like, I know an age field and it's got you've got to be overriding. Previously, that would have been a Python construct Python function to validate that at the formula, and then But then I could, if I actually happen to access my database directly, I could enter any value in there. Whereas

Mariusz Felisiak 21:03
Exactly, we have a single point that protects both on user size and on your database side.

Carlton Gibson 21:12
And there was something about migrating old constraints, was it that you need to gather constraints? Are they being migrated automatically? Or do I need to take if I've got an old, you need to gather meta value on my model? Do I need to replace that with the new unique constraint?

Mariusz Felisiak 21:30
So constraints defined? Emitter constraints are propagators are propagate automatically to your database via the integration framework?

Carlton Gibson 21:42
Okay, and where are we getting rid of index, there was something indexes on the fields without going, I remember seeing something go past here.

Mariusz Felisiak 21:51
Yeah, there are also going automatically to your database. Some databases are mixing indexes and constraints. So sometimes you cannot create constrained by you in the same time, you can create index on in some cases, like, for example, unique constraints, partially unique constraints, so many constraints with some work conditions. In some databases, you cannot create unique constraints with work condition, but you can create a unique index, for example, with her condition. So Django, Django and do this for you and decide which one should be created. On the database site.

Will Vincent 22:36
This is relevant to me, and that I've had a number of my readers who are beginners ask, like, what is the Django ORM. And I've been going deeper and deeper and deeper and trying to explain, and it's just like, there's so many things you didn't think about that you need to think about, except that Django handles it for you. And it's almost endlessly deep. This, this is why because Mario's Carlton, and you know, contributors are doing all this hard work. And so even if you don't know what, what we just said, it's more or less handled for you. I did want to ask, Do you have another question? I was gonna ask on a lighter note, you know, I know that the admin is getting the light, dark mode, just in terms of things people will see when they open up and play around with Django. Right. That's something that's kind of cool, right? Like, the admin has been getting more JavaScript over time. And is that okay? To put that in there, Carlton? Are you still want to ask about? No, no, Cara? No. It also means that I'm gonna have to update all my screenshots for the 4.2 book updates and tutorials, which is okay. But you know, whenever the admin changes, that's always the one where I'm like, Okay, now I really have to re redo everything, all my screenshots, because the admin changes, surely

Carlton Gibson 23:47
you only need one screenshot show and the admin you can toggle to dark look. And then,

Will Vincent 23:52
because every because because every picture on the admin will have the toggle somewhere, and, and it will bug me if I'm showing something that's clearly doesn't have that toggle. Right? Yeah. It's the little things. It's like polishing the inside of drawers, you know, so like when I see other people's books and tutorials, and I understand why, and they don't have exactly the right screenshots. I'm like, anyways, now you showed me, but you

Carlton Gibson 24:19
should know, let's make it about you, you should become a UI testing expert. Like you should do like this playwright thing that Microsoft chucked out, but a bit like Selenium, you should totally script all your screenshotting for your whole

Will Vincent 24:33
Well, you know what, I've sorry. So just to you, since you asked about me. I've been getting lots of great feedback about my books, and I find I've so when I wrote my books initially, I was like, all these books are so deep in the weeds and all the details and I'm just going to kind of show you how to do stuff. And then you can go read the docs, and I just get now I find myself filling in all the rest of it because everyone's like, wait, but why does this do that? Why does this do this? Why does this do this? And it You know, I'm becoming sort of the thing I didn't want to be. But I'm like, I want to have like a whole, like second half of the book that's like, you don't need to know this. But if you kind of want to know how this all works, like, here's why.

Carlton Gibson 25:13
This is why you should have a web version. So there can be a toggle for debt or a slider for depth. And you can start with shallow little slider. And as you slide it along, more paragraphs can appear of superb.

Will Vincent 25:25
Just just just blink twice and stop going deeper and deeper on the explanations. And yeah, apparently, it just means it just means like finding a link to the dock somewhere, but then, you know, internalizing the docks. Anyway, sorry, admin, Mario,

Mariusz Felisiak 25:47
despite the light and dark course theme for just not an accessibility improvement percent. Yeah, we also made out of small improvements, that should really, really improve accessibility in in, in admin, like, small things like changing CSS units, to, like, improving contrasts of different elements, and so on. So in version, we have added few accessibility improvements in the admin, I think that's, that's really nice. And that's really important.

Carlton Gibson 26:35
And they kind of add up over time, right? Like, you know, any one version, okay, it's more or less the same thing. But if you compare it to a few versions back, you're like, wow, you know, I'm trying to think that the, the app filter that, you know, the little Live app filter that's down the side of the is that in 4.2, is that already important point, I don't know. But you can now filter the app list. So if you've got 200 models registered, you just type in the name of your model, and you can find it more quickly. It's a little thing, but it's like, ah, actually, that's quite a nice quality of life improvement.

Mariusz Felisiak 27:07
And most of these, most of these improvements are transparent for other users. If you're not using a screen reader, or if you don't have a custom font size, for example, in your browser, then they are totally transparent for you. Yeah. Okay.

Carlton Gibson 27:26
So what else do you got on your 4.2 list that you think is worth calling out? Um, because be psycho PG three is the big one, right? That's the sort of

Mariusz Felisiak 27:38
custom lookups probably, okay, on that you can country registerone 3d surfaces. So previously, you could only register lookup on field classes. So for example, for the entire integer field and or integer field, when you register a new lookup, have this new look up, now can register it for feed instances. So you can register it, for example, for a single feed in a single model.

Carlton Gibson 28:12
So I've got a good example of this, I've got done for button, I've got variables for your application. So you know, for your apple for your particular environment, and they can be templated. Just you know, because they might depend on another one. So your, your, your static files, your static route, that the path for your static route depends on your web route, right, because it's inside your web route. And in order to look up the matching ones, I'm working on creating one exactly one of these lookups, just on the text field for the for the variable value, the lookup that does the match against the name, because it's a template. So you've got the double moustache, and then the variable name, and it has to look inside the string value to find the value passed into the lookup. And it wants to select just those variables that depend upon the past in value. And it's lovely to be able to do that just on the Value field of the variable class, not on every car field, because most car fields they don't need a look up on depends on lookup. But what a lovely API it gives me because it gives me variable dot objects dot filter depends, you know, takes value depends on and then the class goes in, and it reads, expresses the domain object of the domain logic of my model as its as I'm writing it, it's like yes, this is this is just a lovely addition is

Mariusz Felisiak 29:42
Everything depends how fluent you are with the lookup API. If you know how it works, then you can use this custom lookups to create massive shortcuts. To create things that will reduce complexity of your filters, significantly. A simple example you have another price and in faxes. So you have a value and taxes, you can put you can create, you can create a lookup that will be close to that value, for example, and automatically add tax to value and search by this without creating an annotation without coding function. Everything depends how fluent you are with with the model lookup, basically, it has only one really important thing on an important method that is called as SQL. And then you can do anything you want. Inside. I would

Carlton Gibson 31:03
say they're a bit clunky, though, to write by the day you

Mariusz Felisiak 31:08
you can, you can reuse existing database functions, for example, for that. So inside SQL you can call I know concat, database function, pass to fierce ComPilot and return SQL and departments and parameters from it. So when you when you start to play with this, then you can see that

Carlton Gibson 31:42
it's really powerful. Yes, but it is I think, what would I say? No, clunk, clunk is not the right word. It's a bit scary when you first open up and start having a look this as this are our H slhs. Right hand side, left hand side staff what's going on there? How would you advise? I guess my question is, how would you advise learning that? Like, what's your sort of routine for that for people who aren't necessarily so familiar with the ORM?

Will Vincent 32:05
Read the docs, Carlton, read the docs?

Carlton Gibson 32:07
No, but this is the thing. I don't think the docs are that explanatory.

Mariusz Felisiak 32:12
And such from small from small things. And also, I'm self taught checking how the built in lookups looks like yeah, in many cases, they're having only two lines.

Carlton Gibson 32:32
So that's the ultimate poker of the will, will will bet. So read the docs and Marish phrases with read the source code.

Will Vincent 32:43
Yeah. You know what, though, in fairness to that, and to bring it back to me, I've increasingly added my books, I do have things where, like, I'll do some show some thing, I'll be like, Do you know how I knew how to do that? It's not that I just read the docs, I went to the source code, and I'll like link to the source code. And it's actually one of the things that readers like most, because they think that this aid, they just the source code is just this total black box, but then they go in and see like, oh, this little, you know, here's this line here. And, you know, and just even navigating it, right? Like, I usually advise, like, like, it's something as simple as, like, if you're updating if you're doing your authentication flow, and you want to update the templates for password reset and password confirm, like, how do you find that, when you just, you know, take a couple of words, snippet, type it into GitHub. And anyway, so I'm trying to do my part to get people to not be so scared about because especially stuff like that, it's like, it's window dressing, but there's this like, Whoa, it's like, I don't need to know how Django itself is structured, to go in and tweak something, I can just kind of navigate it like any other codebase. I mean, and see the results right away,

Carlton Gibson 33:48
I had the same phenomenon with Django rest framework for many years is like people would at some point reach, they'd be like, can you? Can we subclass? Or can we add a hook so that we can subclass this generic view to do something very, very slightly different to the generic view that Django rest framework ships? And the answer that comes from Tom Christie's policy on the project maintainer ship, but which I think is absolutely right is no, you can re implement that method without the hook. And we won't, we won't put the documentation understanding burden on every single user of the project ever. Just because one user in 1000 needs this weird customization. You can just re implement the method. And people be like, but it's not documented. So no, go and read the source code. Never ever. That's too bad documentation. You know, it's not bad documentation. Because it's fantastic source code. Literally, you go into the mixing, you know, rest framework makes sense. And they're all all the methods are about 678 lines long, and they're clear as day. And it's it's nothing for you to copy that into your own project and customize it and implement it, and it will be easier for you to maintain and easier for everyone to maintain. But all it took was you to pluck up the courage to open that file and read it and you think it it's not, it's not magic, it's it's the most straightforward code there is. And there are other bits, which are, you know, much more hairy than that. But in general, the codes not as scary as you first think.

Mariusz Felisiak 35:15
Yeah, there are a lot of things in the jungle or not only dragons.

Will Vincent 35:26
I like I like that phrase, though. Documentation understanding burden, because I think that that's something deep that that's like blog post worthy, you know, because it is these follow on effects. And, yeah, it's like that.

Carlton Gibson 35:41
It's like, can we add an extra keyword arc? Well, it's like, well, we could, but then every single user of this API for the remainder of the history of the project will need to understand that keyword arc and ask is it relevant to them? And beyond the core use cases, chances are it isn't. So don't add it.

Will Vincent 35:59
Would Mario's Can I ask about async, since we always have to there's there's some stuff not a lot in this release, it seems like there's a little bit around something new models and testing. But this isn't like a, a huge async release for Django, which we've kind of had the last couple. Like there's something around the save method right now not the case.

Mariusz Felisiak 36:23
We've basically added a few things that were missing in the previous race. Who's related with related managers, like, reduction of art set clear for management affairs, or reverse origin keys, and so on? I think that basically, that's it, it's not a huge async async release. But of course, some improvements are included in clock in every release.

Carlton Gibson 37:04
There is streaming response async support for streaming HTTP response, which is quite, you know, it's not a major thing. But it's quite, it's, for me, it's the last kind of feature bit. So for a streaming response takes an iterator and it streams it out over time. And traditionally that up to now that's been doable with a sync sync iterator with whiskey, and it would block the thread. But yeah, if you're streaming a massive CSV file, perfect, you know, it would work. With it, that wouldn't work. No wonder async it would, it would consume the whole iterator and then give you the whole response all at once at the end, which isn't really what you wanted at all. If you now pass H streaming HTTP response and async iterator under ASCII, it's important under ASCII, then it will correctly stream which gives us the ability for things like non polling or service and events, which is kind of like the outer limit is, as I kind of see of the features that Django needs to provide for async, that nice, service server sent event type pattern, if we can find that in Django itself, brilliant. And then things like WebSockets, and whatnot can be in channels or another third party package. So that's, that's a nice addition. And then from async, now on will be about filling in the gaps, making it more usable get because it's still there's still some gnarly edge cases and bits, which aren't as, as smooth as they could be. And if we can flesh those out and fill those out and fix the bugs and improve the performances and all these other things over the next few versions, then all of a sudden, having it been quite a long road. Django is async story is starting to look quite mature. And that's that's a nice place to be. I think,

Will Vincent 38:53
summary has a couple questions for you. How do you? I know you work full time on Django. But do you have time or mental space to do to look at other things out there? Like, like, we just had Mark Smith on for MongoDB. And he and Carlton had love, love fest around rust? Are there other technologies like it's okay, you can mention them that you look at and think oh, that's just interesting, or something Django should do or are just just are interesting from a technical standpoint, right? Because you spend all your day dealing with the gnarly stuff within Python and Django. I could imagine some of the love for programming seeps out if you don't find other areas to have kind of a blank slate.

Mariusz Felisiak 39:34
And so a lot of things are currently happening in my personal life. So I'm totally overwhelmed with Python and Django. Maybe in three or six months, I would have more time to look at something more than that.

Will Vincent 39:59
I don't have any thing to say on anything other than Python or Django. So? Well, let me ask you something, something else, which is 5.0. So I know there's nothing set in stone. But as ever, things that almost made 4.2 get shifted for the for the two of you, are there some features, or new things for five oh, that might happen, or it would be cool if they happened.

Mariusz Felisiak 40:21
So I have a few things on my list. The main one is to add support for database defaults. That is waiting for at least few releases. It's mainly even the oldest open tickets that we currently have. on our list, it's 400. Something. Yeah. So it's, it's really old. And you have no, we have a new pull request. And we have a new pull request that looks quite mature. And so I hope that will work between transits in Django

Carlton Gibson 41:05
4.0 5.2. Or 5.0. Sorry, did I say Tim Schilling put out a decider for changing update or create to give them a separate? Separate dictionary for defaults? On the Create case? Because I think the idea is that the defaults would be would apply in both cases. But it might be that when it's created, you want to add an added now when it's when it's updated. Do you want to do it updated now type type thing I looked positively received on the forum? I don't know if you saw that. Did that get picked up? Do you think that might go?

Mariusz Felisiak 41:36
Yeah, I think that will merge it in in the next few days.

Carlton Gibson 41:40
Okay, right. So that'd be

Will Vincent 41:44
brilliant. Give me a hard one, right? Yeah.

Carlton Gibson 41:48
The one I want to, I've got my post following list to move forward with a PR on adjusting the request object to handle non post data, non form data. So the one the first phase of that will be to handle JSON data. So if you post JSON data, you can be able to access that as request dot data. And it'll come out past as you know, a dictionary rather than having to. And that's not a big step. But that's been on the backburner a bit, you know, that I think the the original issue for that was something like 13 years ago, and it just sort of not happened and not happened or not happened. And so that the My goal is to get that first step in and then perhaps the Google Summer of Code, maybe or, you know, over over the 5.2 cycle, have that configurable request, pass it so you could you know, have Yamo law, I know, Cuddles the new, the new format everyone's using or message pack passes, or whatever you want. Django I don't think would provide those itself. But it'd be nice to be able to have content type aware request body passing in, in Django itself, because that's something that rest framework added separately. Before,

Will Vincent 42:59
can we talked publicly? So you have a you have an end date? Right, Carlson just in terms of the transition? And like, like, I'm not on the board anymore? So I'm not privy? No? More? Yeah, what's your

Carlton Gibson 43:08
plan is to step down on the end of March at the end of the first quarter. So hopefully, the call for new fellows will go out this quarter. But I know Mara should be fine. If he has to hold the fort for himself for a little while. I always joke that he feels that he's like that anyway. But yeah, my plan is to step back the end of this first quarter, I have said that, you know, if there's a need for mentoring, or whatever I could be around. But you know, again, Marisha is perfectly capable of that. But what I don't want what I what I said that what I don't want to do is just walk away, leave a vacuum, if there's a need for a transitional period. I'm happy to do that. But basically, I think it'd be good for me to step down. I've been doing it a long time. And now my head sort of turning away. It's like, oh, actually, I need to, I need to draw a line rather than drag it out. Because what I will need to do the first month is I'll just need to turn off the notifications for Django, Django, not I'm disappearing. Not I'm stepping away. But I can't fall I won't be able to follow the notifications in the way I have been as fellow because that's, that's sort of soul consuming. And that's fine. But I need I'm going to take you know, a month and say no, I'm not going to look at you know, someone that mentioned to me, that's a different thing. But I'm not going to watch every

Will Vincent 44:28
at Carleton on every every feature every

Carlton Gibson 44:31
but that's fine. I want to stay you know, I'm not leaving Django by any stretch of the imagination. Django is, you know, is just a massive part of my life massive part of my career, I'm still going to hang around, I'm still going to be contributing. I'm just not going to be a fellow.

Will Vincent 44:45
And we talked about this when we interviewed Tim Graham, way back in the early days of this podcast. I mean, because it's not the first transition won't be the last right so this is a question I should know this maybe but so the felt there's a fellowship committee that's on the website. Do they? Do they ask you? Are they gonna ask you Mario's your thoughts if they have finalists? Or do they just decide, like if they get a list of people and it comes down to a couple? I mean, I don't know how I'm sure your input will be in there. I guess you haven't done it before. But well, Kyle, didn't you? I know. You were extremely excited when Mario's came on board. I don't know if you were not born with that. But no, no,

Carlton Gibson 45:25
no, I wasn't. I didn't know about it until I saw the announcement and married but marriage was like literally the perfect candidate. Tim was stepping back. And I could handle most of the framework, like no problem, but those are m tickets are not, you know, I'm still not even five years later. You know, the expert in that area. I mean, I can, I can find my way around there now is much more happy than I could before. But I'm still not like, oh, yeah, I'm gonna do this for every database, and blah, blah, blah. Marish is like Baron, or M expert. And when it was announced that marriage was taking over all my concerns about Tim stepping back just disappeared, it was like, yes, Mirage was actually the perfect candidate at that time. So I'm still excited that it was him. No, no, no. I mean, absolutely.

Will Vincent 46:13
You'll be the, you'll be the, I guess, the Senior Fellow. Either way, what he's always like, what are the areas? Well, okay, like, what would you what would you Marya say to someone who's considering applying for it, you know, because if somebody's thinking about they might be listening to the podcast, like, what are, you know, what would be different than what Carlton's doing, for example, right, because everyone comes in with different interests and different areas of expertise, like, and what would you you know, what would you be happy to have someone else handle that you're currently handling?

Mariusz Felisiak 46:44
Yeah, I was recommended to apply. So we need candidates. And I hope that we'll have more than few to pick up the perfect point, I don't have any one specific in my mind, currently. I will be happy to have a candidate with areas that I'm not extremely comfortable with. Like, I don't know, JS, CSS and, and so on. But at this for the last few weeks, I'm trying to move out of my comfort zone and triage tickets that I'm that I was not really capital to triage few months ago. And I tried to push them to, to the carton box. So currently, I'm trying to triage whatever I can and to review, whatever I can. But I think that's we have maybe four weeks with a single follow. So Joe should survive without without any issues.

Will Vincent 48:13
There will be that's a good point, though, that your constant I mean, Carlton, I said this, but you know, constantly learning in the fellows role, just because the scope is, is so large, so even though you come in with a particular area of expertise, it's not like you're only doing RM tickets for years and years, right, there's all these areas, and somebody needs to handle it. And so there's opportunity to learn, you know, just to sell the position a little bit to someone, you know, I mean, it sounds

Carlton Gibson 48:39
it's, it's a phenomenal learning exercise there. There isn't a bit of Django code base now that I don't think Yeah, I know my way around that. Like, yeah, there's still the gnarly pits CRM that we're always be difficult, but I think they're even difficult for Maris you've read more or less. And there's no way I had that knowledge when I started, you know, but what did I do? I did what I tell new contributors to do now, I sat down with a ticket and I open you know, I looked at the ticket and I try to read the ticket, and it's still the same now I try and understand it and i Okay, open the thing, where is it in the code? Can I reproduce it? Can I put a breakpoint in there and see what's happening at a particular bit of code? Can I you know, put an arrays in a test case and see if I can get an exception somewhere. Okay. Explore, and you know, when you first start off Yeah, wow, it's I think it's intimidating. You know, you're gonna have this bit like, I've never looked in. I don't know. I don't know my way around there. What am I gonna do? Well, you're just gonna dig in, get your hands dirty. It's fun.

Mariusz Felisiak 49:45
Yeah, so you learn new things each day, like we did in the past.

Will Vincent 49:51
We're coming up on time a little bit other other things you wanted to mention Mario sir, we should, we should ask you or discuss. I mean for the fort for Tuesday. Big one, which we talked about, and people should run the tests. And

Mariusz Felisiak 50:03
yeah, 4.2 is the big one. The new Google Summer of Code is coming. So please apply one of the features that I mentioned previously. Custom lookups for fruit instances, is a successful project for the previous Google Summer of Code, edition. So please apply, we have a special site with some ideas about Google Summer of Code projects. If you don't find anything interesting for you on this list, you can come up with your own ideas.

Carlton Gibson 50:44
Yeah, I mean, if you've got, you know, you've got an idea for a project. Happy to happy to open open to it.

Mariusz Felisiak 50:51
Yeah, there are big ones that we're considering from you. Many years, like optimization, or, and so on. We have some ideas for for these features, but we need for that like to spend time and enter things to beat it into Django. Fair enough.

Will Vincent 51:17
And what else? Django con Europe is coming up for those who can attend in May in Edinburgh. I'll be going I know both of you are going. So

Mariusz Felisiak 51:29
yeah, we are

Carlton Gibson 51:32
going to submit a talk mash. Yeah,

Will Vincent 51:34
come on. Wait, Carlton, you you've you've mentioned something on the back burner, right?

Carlton Gibson 51:41
Yeah, I've got a secret idea that I'm brewing. I can't spoil it.

Will Vincent 51:48
So Maurice, were you gonna say can you publicly mentioned what you were thinking of potentially talking about?

Mariusz Felisiak 51:54
I don't have a specific idea. But I think about something some, some talk.

Will Vincent 51:59
Well, Maurice, thank you for thank you for taking the time. I know. You and Carlton do all this work. And I hope you know beyond the release notes and everything else. This helps people get a sense of what's coming. And you know, these releases don't come from nowhere. So

Carlton Gibson 52:14
yeah, I mean, I think the pre release phase is quite exciting. It's quite a lot of work to get the alpha out the door. And then this is nice, rolling. test early and often folks test early enough.

Will Vincent 52:24
Marisa you went I should know are you on Mastodon now? Is there any like, I guess if people can find you on the Django, you know, developers group, but is there any other way people should? Yeah,

Mariusz Felisiak 52:34
I'm currently on the muscle. I'm not really tweeting anymore. So I don't have enough time to cover a few social accounts. And basically, muscle is the only one that I'm currently posting kind of thing.

Will Vincent 52:55
Same same, Carlton, you're pretty active on there, which is nice. Yeah, I

Carlton Gibson 52:59
just I need one place where I can just throw out random thoughts. Well, it's not not at you will at but just that will that I can try them random thoughts that I've just sent out? Well, again, how does that mean, anyway? Yes, I like Macedon. It's fine. It's just for me. It's like Twitter, but without the Nazis so far, so that's quite good.

Unknown Speaker 53:19
That's good. Time is

Mariusz Felisiak 53:21
much shorter.

Carlton Gibson 53:22
Yeah, yeah. No, I mean, there's only a few people, right.

Will Vincent 53:25
Yeah. I mean, basically, everyone I followed on Twitter, about Django is on Mastodon, so it's same, it's just more filtered and it's still good. We will have links to everything web links to your Mastodon, Rs, and the release notes and everything else. And we are Django We are on Mastodon too. And we'll see everyone next time. Bye bye. Thank you.