Lightning Talks - Part 2

This video features Armin Ronacher, Brendan Sterne, Dmitry Filippov, Dr. Russell Keith-Magee, Ed Rivas, Francisco Saldana, James Tauber, Jeff Sumner, Miroslav Shubernetskiy, Paul Bailey, Raphael Merx and Trey Hunner at DjangoCon US 2015 in Austin, Texas, USA.

Lightning Talks - Part 2
0:56:41
Published November 3, 2017
723 views

Lightning Talks

Dmitry Filippov "Django assistance in PyCharm"

Paul Bailey "End the Holy Wars of Formatting"

Trey Hunner "JavaScript is Becoming Pythonic"

Eduardo Rivas " Sublime Text Django"

Jeff Sumner "Texas Swim Center"

Francisco Saldana "Keeping Fast Fast: Rapid Iteration with TransactionTestCase"

Raphael Merx "Mocking Outbound Requests with HTTPretty"

James Tauber "Building a Learning Management System with Pinax"

Miroslav Shubernetskiy "Filtering in Django"

Armin Ronacher "rb - Scaling Redis in Python"

Brendan Sterne "Code Wiki"

Russell Keith-Magee "Professional Yak Coiffure"

Summary

The lightning talks cover practical tools and techniques for Django and Python development: PyCharm navigation, debugging, Django template breakpoints, and test running; automated Python and JavaScript formatting; ECMAScript 6 features such as arrow functions, template strings, classes, modules, and spread syntax; and Sublime Text plugins for Python intelligence, linting, version control, and HTML/CSS generation. Other speakers describe replacing an unnecessary badge system with simpler PIN-based check-ins after clarifying requirements, using tests and code reviews, and protecting endpoint performance with Django’s `assertNumQueries`. They also present HTTP mocking with HTTPretty or responses, Pinax components for building learning-management systems, structured URL filtering across data sources, and Redis Blaster for distributing Redis data across multiple servers; the Redis presentation is cut off while explaining its mapping client.

Key takeaways

  • PyCharm can provide Django-aware command completion, navigation, template debugging, and test management.
  • Automatic formatting and editor plugins can reduce style debates while enforcing consistent formatting, linting, version-control feedback, and rapid HTML/CSS prototyping.
  • Clarifying user needs may eliminate unnecessary features, while tests and code reviews can improve confidence in a small Django project.
  • Django’s `assertNumQueries` can catch performance regressions such as accidental per-object database queries in continuous integration.
  • HTTPretty and responses let tests mock external HTTP services without relying on live endpoints.
  • Pinax combines reusable Django applications and project conventions, with work underway on an open-source learning-management system; Django URL Filter applies validated, ORM-like filtering to multiple data sources.
  • Redis Blaster distributes keys across Redis nodes and builds pipelines or merged commands to make multi-server access more efficient.

Summarised automatically from the transcript.

Chapters

  1. 0:00 PyCharm for Django Development Dmitry Filippov demonstrates PyCharm’s Django console, navigation, debugger, and test runner.
  2. 4:46 Automated Python Formatting Paul Bailey discusses reducing style debates with YAPF, JavaScript formatting, and consistent code formatting.
  3. 9:59 ECMAScript 6 for Python Developers Trey Hunner compares new JavaScript features such as arrow functions, template strings, classes, spread syntax, and modules with Python equivalents.
  4. 14:34 Sublime Text for Django A practical tour of Anaconda, version-control integration, linting, Emmet, and other plugins for Django development in Sublime Text.
  5. 19:50 Lessons from a Swim Center Application A case study in requirements discovery, agile development, HTML5 media capture, testing, and code reviews.
  6. 23:50 Keeping Performance Tests Fast Francisco Saldana shows how Django’s transaction test case and query-count assertions can catch performance regressions in continuous integration.
  7. 28:36 Mocking HTTP Requests Raphael Merx demonstrates HTTPretty and Responses for testing external HTTP integrations without contacting real services.
  8. 32:27 Pinax Learning Management Systems James Tauber introduces Pinax and its efforts to provide reusable Django components for learning management platforms.
  9. 37:15 Structured URL Filtering Miroslav Shubernetskiy presents Django URL Filter for safe, human-friendly filtering across querysets and other data sources.
  10. 42:07 Scaling Redis Across Servers The Redis Blaster provides convenient key distribution, routing, and pipelining across multiple Redis servers.

Transcript

9,715 words · auto-generated Show

Automatically transcribed, so expect mistakes in names and technical terms.

0:16

Speaker 1: I'm so excited to be here today and opening this lightning talk session. I'm Dmitry Philippov, Python Product Manager And in this talk, I'm going to show you some of the essential Python features that make many Django developers more productive So here I have a very simple Django pulse project opened in PyCharm. And the very first feature I wanted to show you is uh Django Manage PyConsole. Uh you can get it by Hitting control Alt error. Here's it. You can just start typing the task name. It autocompletes everything. It also provides you the options you have for this task. Here is the

1:01

Speaker 1: app name. So our application. Oh uh it also supports the fuzzy search and completion, so you can just type the middle part of the task name and it will also complete it. You can also hit Ctrl Q and it will give you a quick documentation for that task. So here we have Django. Okay, one to free, one to free. And here how it works Another cool thing about PyCharm is that it has really rich navigational capabilities. So you can go to everywhere, go to and search for any file or model

1:47

Speaker 1: or method just by clicking double shift for example let's go to their detail view We can also go to the template by just clicking this small icon here. We can go back by clicking this one. Searching, yep, choosing the right one. We can go to the URLs by clicking Ctrl B, going back. And this is really useful to go around your code. Another great thing and a great feature in PyCharm that many Django developers like the most from the feedback that I've got is a PyCharm debugger. It can be used to debug the Python code without NodeUp, but

2:32

Speaker 1: it also can be used to debug Django team plates. So just let's go to the template, put some breakpoints right inside the editor, here, here and here. and run the Django server in the debug mode PyCharm automatically opens the browser. So we go here And this is the point when PyCharm debugger stops the execution and uh we have everything here. You can inspect your variables, you can Move them to watches you can even uh set values for them like well here true okay And do other ordinary things like stepping through your code, navigating to the next breakpoint

3:22

Speaker 1: , all the usual stuff. So here how it works. And the last but not the least thing I wanted to show you is how I run my tests So I'm navigating with search everywhere to my test file. You can see the bunch of tests here. I'm just creating new run configuration. It would be Django test configuration. Give it a name test. PyCharm recognizes all the tests in your file and in your project actually. You can run it and you can see that All tests are passed. You can see the progress here, the test results here. You can navigate to any tests. Right from here break it, run it.

4:07

Speaker 1: Results pa uh failed, fix it. Run it again and now we are all set. So this was just a quick um Demo of uh PyCharm capabilities. Uh please feel free to I don't know why it doesn't work. Okay. Please feel free to visit our website to learn more. Follow us on Twitter. If you have any questions, I'll be around. And please feel free to request any features you might have in mind. They are very welcome. So thank you very much.

4:46

Speaker 2: Okay, my name is Paul Bailey and I'm gonna talk about ending the holy wars of formatting. So I know this was mentioned at least in one other talk and we had two talks about style. Um but if you've never seen the Beyond Pep 8 video from PyCon. uh 2008, It's Great, by uh Raymond Hedinger. He talks about, you know, going beyond just format spacing and going into better architecture decisions and things that you should do uh to make your code better And one of the great quotes from the talk is, pepe unto thyself and not unto others. So use it as a tool to make your code better, but not necessarily to beat other people down.

5:34

Speaker 2: But there is a problem with this. We're Python Eastas, I mean one of the big reasons we get into Python is because we love elegant code. Some of us are probably OCD and like to like have everything lined up exactly. We get kind of mad uh when things go over 80 characters. And so we are wasting mental energy, and as developers, a lot of times we're fighting uh styles. In code reviews, maybe we're spending too much energy on spacing and things that don't mean as much. You know, like the naming talk was great today. That's definitely something you want to focus more energy on

6:19

Speaker 2: than some of your just trivial formatting things. And then also we have developers that are maybe doing Python that are coming from another background. They have different sense of style, um, you know, older, newer developers, different languages. And styles change over time. Also, I kind of wanted to use this to basically say like I have a secret confession. I like two-space indentation instead of four. Yes, but exactly. Wow. At least it's not three space indotation. I think that's like the worst. Yes, I know. It's it's awful

7:05

Speaker 2: But there is a solution. We don't have to waste our time and our mental energy on just trivial formatting issues. We can auto-format our code and have a consistent style throughout our whole code base with not much work So this was actually popularized by the Go format tool written for Go. And there's actually a tool for Python that was released in March by Google. It's called uh yet another Python formatting. Actually, they don't have that anywhere in there. I'm assuming that's what it means. So um there's a link to the GitHub. You can also pip install it And also, you know, we're web

7:50

Speaker 2: developers, so we're probably doing uh JavaScript formatting. Um there's a JavaScript formatting tool by RDO called JSFormat. And so just to kind of run through a little example here, um I'm the web chair for PyTexas, so I went ahead and ran this on the PyTexas code and uh It is a newer newer tool, like I said. So some of the options or the features aren't there yet. So I wrote a little script that basically lets me I don't want to run formatting on migration. That's generated code. So let's just skip some of that. So you know, I put a few options in there that aren't in the default tool and made this little script, you can copy this and kind of

8:39

Speaker 2: uh you know use it to your own risk. But there's three different styles of coding that come with the tool by default. There's a Google, there's a PEP 8, and there's a Chromium style. Which all have their own default configurations. There's a million different um options that you can kind of style with it. Um and I know, there you go. I set my two spaces. So what's it large then? Sure. Um I guess I don't know the Mac command. There we go. Yeah, so I mean you can pass it like a JSON or dictionary type object and it has you know hundreds of little tweaks that you can do to it to get the style that you want

9:25

Speaker 2: and all of your formatting will then all of your code base will be on that formatting. So this is fairly boring, but uh here you go. Have it come up here. This is all of the kind of white space changes that it did to the PyTexas code base. So if you're in Texas on the 25th or 27th, come to Pi Texas. It's in College Station. And that's the end of my talk.

9:59

Speaker 3: My name is Trey. I'm going to show you how JavaScript is becoming a little bit more like Python. A word of warning, I will be going very quickly, and there are code examples on almost every slide. So ECMAScript is the language specification that JavaScript is based on. In this presentation, I'm going to show off features that were added in ECMAScript 6, which is also known as ECMAScript 2015. ECMAScript 6 isn't yet supported by any browsers, but you can start using it today You just need to use Babbel. Babbel allows you to compile your ECMAScript 6 code down to ECMAScript 5 code, which is understood by all modern web browsers. This pre-compilation process is kind of like the pre-compilation step that's necessary for something like CoffeeScript.

10:44

Speaker 3: So our first new feature is fat arrows. Fat arrows are a new shortened function syntax. Fat arrows can be used kind of like Lambda functions in Python. They also have a longer syntax, but I'm going to only show off the short syntax in my slides today. We don't use lambdas very often in Python, partially because we don't use callbacks very often. In JavaScript, callbacks are used all the time. So fat error functions are actually really useful. When you combine fat error functions with JavaScript's array methods, they can serve a similar purpose to list comprehensions in Python In addition to being easier on the eyes, fat arrow functions inherit the this binding of their outer scope. For anyone who has wrestled with JavaScript function binding, that's a really big deal.

11:30

Speaker 3: With template strings, you can now do string interpolation in JavaScript. So this is kind of like Python strings format method. except that uh string uh template strings in javascript uh interpolate using the current scope automatically, unlike Python's string format. Uh template strings also allow you to make multi-line strings. So this is kind of like Python's triple-quoted strings. You can do string interpolation at the same time as well. JavaScript did not used to have a class syntax. It does now. This is what it looks like. Of course, no class implementation is complete without a properly loaded foot gun. So JavaScript also supports inheritance. I actually think the super syntax is a little bit more elegant in JavaScript than it is in Python.

12:18

Speaker 3: You can see that in both of those methods there. I realize this is a lot of code. You can look at the slides afterwards. JavaScript now has a spread operator. This is similar to Python's argument unpacking operator. In Python it's the asterisk symbol. In JavaScript we use three dots. You can use this to unpack an array into the arguments of a function call. You can also use the spread operator to unpack one array inside of another array. And this example combined would be the array one, two, three, four. The rest operator is basically the opposite of the spread operator. Again, instead of an asterisk, this uses three dots in JavaScript. This allows us to make a function that can take a variable number of arguments. So for example, our most difference function here takes any number of arguments.

13:06

Speaker 3: Uh in this code example, we're using the rest operator once and the spread operator twice. JavaScript now allows you to specify default parameter values. This does not mean that JavaScript has keyword arguments. It doesn't. These are just default values for positional arguments. Uh just like Python, JavaScript now has iterable unpacking. You can unpack arrays into multiple variables. Or uh you can use this for uh multiple assignment or for variable swapping. Here x, y, and z would be one, four, and two This one is actually wishful thinking because this is only a proposed language feature. The currently proposed syntax for JavaScript decorators looks just like Python's decorator syntax.

13:51

Speaker 3: So hopefully JavaScript will have decorators soon. JavaScript actually has modules now. They're properly namespaced and they work pretty similar to the way modules work in Python. So unlike many other languages. importing and namespacing just like in Python are uh linked together in JavaScript. So whenever you import something, it's going to be namespaced. So I just showed you a small handful of new features supported by JavaScript. You can learn more about Babbel and about ECMAScript 6 or ECMAScript 2015 and try it out right from your web browser by going to the Babbel website. Uh feel free to reach out to me on Twitter if you have any questions about this.

14:34

Speaker 4: All right. Um I'm here to talk a little bit about Sublime Text and how you can uh converted into a more Django friendly text editor or even an IDE. So I'm going to be focusing in in three main plugins, Anaconda, uh something for Git or Mercurial if you're into that. and MIT. So first of all, what you get for free when you're using Sublime Text to work with Python or Django, you get snippet, uh sync text, highlighting, multiple edit points, reject search, code folding, all that stuff, right? So anaconda is like uh the biggest one which you you're gonna install and you're gonna get uh autocompetition, go to definition, uh find usages of a function or the class or a variable

15:22

Speaker 4: Display signatures of classes and and uh functions, uh get a doc string for anything that you have in your environment, and uh live PEP 8 or even flake 8 uh hinting in your code So here I'm demonstrating two features. For example, in the first one on the top, you can see I'm importing from Django DB models import And let's say I want to know which are my options regarding uh in integer fields. Right? So I just type some integers and I get the competition for every single uh possible integer field I can get. So it's easier if you don't remember you know where to find some stuff in Django like where is resolve, uh where's the generic uh views

16:08

Speaker 4: And the second example you can see on the first line I've imported the list view, the generic list view, and I can get the doc string right there in case you need uh help uh knowing what what um getting a little hint on how to use it. The little uh white outlines you see in the um In the second screenshot, they show the uh where you have in this case would be pep eight or flake eight errors. For example, the lease view I have imported it but I haven't been using it. So you can detect uh right as you write your code. Uh if you're importing anything and not using it or defining a variable and not using it or a typo which has bitten me many times where I just think I've defined a variable but it it it turns out

16:54

Speaker 4: I just missed one letter and I get a huge exception I don't understand it. You you get saved uh from that with this. You can also get a full report on your uh PEP 8 and FLEC 8 uh FLEC 8 errors. So for example you can see if you're not uh complying with line lengths or whatever You can also set your own rules here because I know not everybody follows every single little error that PEP8 gives you. So for example I'm using uh 89 characters there. You can do pretty much whatever you like. There's a configuration file you have you can commit it to your version control and that'll make it easy for every developer using the same plugins as you to have the same linting capacities So next one is for Git and Mercurial.

17:40

Speaker 4: You get uh VCS gutter that is little indicators uh right beside your line numbers. I'm showing later. Uh you can do any VCS uh Operation from the command palette so you don't need to open a terminal or a separate application to get um do any of this add commit checkout pull push blane diff or log So here, for example, if you see on the top one on line 14 and 15, I have two little plus signs. Those say those are new lines. And then on lines 17 and 18 I have a little red marker. You can say uh you can see I deleted some lines there. So it's easy to see which code you've been uh touching before committing And then I have a a diff right in Sublime Text

18:26

Speaker 4: when I can see which uh lines I changed in a previous comment or a comment your coworker did or whatever. And then Emmet, you know, become a CSS HTML uh Willie Nelson, right? So you can expand CSS selectors into full HTML uh abbreviations for pretty much any rule and three prefixes in case you need to you're not using auto prefix or something like that. So for example, this is Bootstrap. It's super useful for me to for prototyping, Lowering Iptim and stuff like that. But in the first line on the top, you can see I written a CSS selector. class container, uh class row, then I want to have three uh four column

19:13

Speaker 4: grid uh cells with an H2 and then a paragraph. Just hit tab and you get a full HTML structure out of it. So it's super easy to get uh prototyping. It helps a lot with um uh when you're working with templates too And this is uh for prefixing. You know, if you're using something new as as flexbox, you can uh simply prefix any CSS property with a dash and you will get um Automatic prefixing with the current browser support. So yeah, that's it. Thanks.

19:50

Speaker 5: I work here at the University of Texas and uh just a quarter mile east of here there's the Texas Swim Center where we have uh oh it magically fixed itself. Um Uh sorry, where we have a million and a half gallon pool that all of our uh athletes can train in and As part of that pool, they have a Longhorn Aquatics Club where they help uh recruit the next generation of Texas athletes. Uh so we have six to seventeen-year-olds who come in and used the pool routinely and they were actually doing like manual check ins and uh getting really long lines and they requested that we build them a badge system just like the athletes had so that they could print out badges for everyone, they could scan in, solve all those line problems.

20:38

Speaker 5: We're kind of a new agile team. We decided to try and apply best practices, listen to our user experience person, and we started out by developing personas and writing user stories like we'd never done for the first time. We had some fun with it and uh there are a couple of the personas that we created uh Some of the user stories we wrote. And as we really thought about the the people who were going to be using the center, we realized that our customer had sent us way too detailed a spec that in fact The badges weren't needed at all for these people. There were only about 600 of them. We ended up doing pen numbers. It saved us. We didn't have to do credit card processing for lost uh badges and fees for those. We didn't have to deal with printers by not just diving in and

21:25

Speaker 5: starting on exactly what they told us. It was a a a big lesson for us. So badges. We didn't do any badges. Uh this is what we ended up building. Uh we had some JavaScript that we really enjoyed, but uh I guess they wanted slides, so there's no live demo here. Um of the taking photos. We ended up uh using just the webcam and the HTML5 uh new audio and video capture and one of our lessons learned there. I don't think it's really ready for prime time. But luckily for the Swim Center, there's really sort of three computers that it runs on. So we're able to easily say you must use the latest version of Chrome, the latest version of Firefox.

22:10

Speaker 5: And then it was able to work. And So you here here's one where I took my picture afterwards. Um And as you can see, I haven't paid. Also, that's not actually me. One of the other best practices we tried to do was actually for the first time write tests and do code reviews. Uh and then so I I was really proud of the part over on the right there where you can see we actually have tests. It's very exciting, maybe not for all of y'all, but for us it was. And that we got together and almost every line of code we wrote, we reviewed together, um, looked over it, and I was really excited to go. and start looking at metrics to try and figure out okay

22:57

Speaker 5: of the bugs reported how quickly were we able to respond when we actually had test frameworks and stuff And the answer was we didn't have any bugs submitted during user acceptance test and during our first couple of weeks of production. So we couldn't get that metric So if anyone else out there is still not quite in the doing tests, doing code reviews, I highly encourage you to Do it. So my conclusions, take the time to understand the requirements, to think about things before you just dive in. Capturing audio and visual on HTML5, I didn't think it was quite ready for prime time. Worked great for a couple of computers that we could Keep up to date. And uh code reviews and testing, if

23:43

Speaker 5: if folks aren't trying them, please do so. Thank you.

23:50

Speaker 6: Hi. My name is Francisco Saldana. I'm a full stack developer for Ginger I. O. We do mental health care at scale. And I'm going to give a brief presentation about keeping fast things fast , performance, uh keeping performance degradation from affecting your rapid iteration with transaction test case. Okay, so what is fast? Fast is different to different things to different people. For product, fast is rapid iteration. on new ideas. We want to test whether or not they are going to fail or whether they're going to succeed. Fast for users is user experience. We don't want users

24:35

Speaker 6: To be seeing like these loading indicators on their screens. So I make a product for doctors. Doctors don't have the time to wait for their web pages to load. They want to see patients. So why do we care about this? We care about this because we want to meet the needs. We want to make sure we want we want to rapidly meet the needs of consumers, of the customers. And we want to prove that that works before, but quickly, because we're in startup mode. We believe in beautiful user experiences so that we because we want these we because we want users to have um we we know from from the from the data

25:21

Speaker 6: that users will navigate away from our site, we will lose users if we don't provide them a latency-free, quick user experience. And uh there's a famous social network application founder that believes in this move fast and break things thing Um so I'm an engineer and as an engineer I really want to build systems that are reliable, that are stable, and that our customers can depend on. So how do we do this? How do we move fast without breaking too many things? So, um my proposal so Django gives us a lot of tools for that. I'll show you one of them. So here's your standard issue endpoint. We have the view function here and we have like

26:07

Speaker 6: an authorization decorator and hey we're gonna add a rest controller or rest serialization. a rest serialization here to put data out. Um so it happens to be really really slow because our you our user model is too big or something like that. And so we add a little optimization here to only get the fields that we need. So iteration happens and one of the um and one of us adds a new field to the uh REST serialization, uh the rest serializer. Um so what SAC what that's gonna do, but the problem is now it like it's really, really slow. What happened?

26:53

Speaker 6: It turns out by adding this field with this optimization, this REST controller is now going to make a per-user query. That's really bad. Even though it doesn't break the behavior of the endpoint, even if the endpoint passes all of the tests of correctness, it makes the performance incredibly bad. So how do we how do we how do we prevent that from happening? Enter transaction test case. So transaction test case is imported from the same place you get test case. You just say Django. test import transaction test case. Make one of your tests inherit from it, and you get this awesome little utility function called um called assert number queries, assert num queries.

27:38

Speaker 6: And so what we do to ensure that this doesn't happen is we can create a couple uh like a hundred users using like uh a user factory. And then we can run our endpoint inside of this certnum queries context, and it will uh It will report to us, it'll actually fail the test if the number of queries is not what we're expecting. So instead of getting performance degradation that gets reported to us through the support system Our continuous integration system actually catches this before we roll it out to production. So continuous integration for the win, it helps with uh mitigating uh problems with rapid iteration

28:23

Speaker 6: and uh it catches these degradation errors. Um thank you so much. My name is Francisco Soldana. Um available uh I'm at gingerio Thanks.

28:36

Speaker 7: All right. Um so building Django apps, we often find ourselves uh making a request for our server Now what happens when we are the ones making requests on to the outside world? Like we need a mocking tool for that. Today I'm going to talk about HTTP that lets you do exactly this. My name is Raphael and I work for a company called Capricity. So making real HTTP requests in your test um is a pretty bad idea. Um the one of the obvious reasons is that um it's gonna slow down your tests. Uh but more importantly, if your uh remote endpoint is not available, the test is gonna fail. Um so like for example, if you have a service architecture. Um you don't want to need to like put up your various sent

29:23

Speaker 7: services to make your build pass. Um Here's an example of a simple setup for HTTPree. Let's say we want to uh call the Django project URL. So we decorate the text the test method with httpready. activate And then we can use the request module, for example, to uh make a request to that um to that URI. And um in the end, uh HTTP has by default returned a 200 And this test is going to pass without making a single request to the outside world. Now what about um if we want to test that our remote endpoint has been called and that it's been called with like specific arguments.

30:09

Speaker 7: So imagine that I have a create cat method and this create cat method is supposed to it's supposed to call a a remote endpoint uh on on create a cat. com um slash api. So I register that uh URI, uh I make it return a two oh one by default. I call my createCat method and at the end of my test I can test that the URA has been called and that the createCat method supplies the name in the request body. Now what uh what if we want the response that is marked by HTTP to depend on the request that we made Um so HTTPRT has a uses callbacks for that. Um and you can use it to almost um create a simple mocking of the remote server.

30:57

Speaker 7: So coming back to the create cat example, uh let's say that uh the cats that we create remotely need to have an owner. Um but so I 'm gonna send a request to slash owners slash bob slash cats But the owner Bob can not exist in the remote server. In which case that endpoint is gonna return a 404. And my create cat method is supposed to call that endpoint and if it gets a 404, create bob and then try again. So to do that I can set a variable Bob exists and I set it to false at the beginning because Bob does not exist yet. Um I create I I have a create owner endpoint that is gonna turn that variable to true when it's called. I have a create cat endpoint that is going to return a 404 if Bob does not exist yet, and it's going to return a f uh a 201 if Bob does exist.

31:47

Speaker 7: So I use those callbacks in my httpretty. registerURI um functions. And then I can use my create cat method and at the end of my test I can assert that Bob has indeed be been created. Um if you're making requests with the request module, I would encourage using responses, which is which pretty much does this the exact same thing as HTTP. uh but marks the risk the request module itself instead of marking at the socket level. And um I've heard that HTTP does not work well with Python 3, but responses does. That's all I've I have for you today. So thank you.

32:27

Speaker 3: Hi everyone, my name's James Tauber. I'm on Twitter at uh JTauber. Uh I work for a company called Eldarion. It's one of the sponsors of this conference, but I'm not going to be talking about Eldarian.

32:38

Speaker 8: I'm going to be talking about Pinax. and specifically uh nascent efforts to build a learning management system with Pinax. Now for those of you who haven't been to early Django cons and might not be familiar with what Pinax is all about, I'm gonna start off talking a little bit about uh Pinax in general before diving into the learning management system. So Pinax provides what a lot of sites have in common so you can focus on what makes your site different. It's an open source project started that I started in 2008 with a bunch of other people to really supercharge Django development. by providing all the kinds of things that you find yourself writing again and again in websites, whether it's things like profiles or notifications, announcements, teams, invitations, favoriting, referrals, all of that kind of stuff.

33:26

Speaker 8: Pinax aims to provide for you. So it's an ecosystem of reusable Django apps at its core, but it's also a bunch of project conventions default templates using bootstrap so you can get up and running really quickly. And starter projects, Django project templates that pre-combine certain reusable apps. so you can get running right away. And even if you're not interested in the specifics of the learning management system stuff, Pinax is something you can use for pretty much all of your Django projects. Certainly I have for the last uh seven years and and uh hundreds of other people have as well. Uh back in two thousand eight Um at the very first Django Con I I gave a talk about Pinax, it was the first talk about Pinax. And I had this slide that basically showed that

34:12

Speaker 8: These Pinax apps could naturally group into certain application domains, things like social networks, intranets, e-commerce, and so on. But one of the use cases that I gave back in that talk was learning management. It was something that I saw as a possibility, but um it's only been recently that we've actually really dived into learning management. What do I mean by a learning management system? I really mean any web application that facilitates learning. It could be online learning in a small environment, it could be a MOOC. It could be something that's used as a complement to in face-to-face training and so on. But it's a web application that enables all of that kind of stuff. And I think of it really as having two aspects to it: the management system

34:58

Speaker 8: and the learning system So the kinds of things that you typically get in the management system part of a learning management system are groups, enrollment, calendaring, announcements, profiles, messaging, blogs, forums, document management, submission boxes. What's interesting about all of those things is they're fairly generic things and they're exactly the kind of thing that Pinax has already to a certain extent provided either already or could very easily add. And so one of the things that we're doing as part of the Pinax open source project is bringing together these existing components, writing some additional ones in order to basically build an open source learning management system in Python and Django. But as well as the management system side of things, there's also the learning side of things that focuses more on

35:46

Speaker 8: activities that uh individual students do. Things like building quizzes, organizing things into learning paths, having adaptive learning, spaced repetition, all that kind of stuff. As well as gamification, things like levels, points, and badges. Now again, PinAx does some of this already, especially the gamification stuff, and we're trying to bring all that together. um to to uh to provide an an open source learning management platform um based on Django. So just a really quick example. Um one of the things that we're doing for the um for the uh learning activities is a really pluggable object-oriented architecture where you can basically say I want to a a lickett style quiz here where I get five give five options but you can plug in what's the what's the provider that tells you what question to ask what student when.

36:34

Speaker 8: And you're not having to build any of the infrastructure around that you can focus on the core learning algorithms. So we are going to be sprinting on this in particular as well as Pinax in general, and I certainly encourage you all to join us there if you're interested specifically in learning management systems. or what Pinax can do in general to help your Django development. Pinax Project you can follow on Twitter. The URL is pinaxproject. com. Two GitHub repos you should know about, one for the overall uh LMS and one specifically for these pluggable learning activities. And that's it. Thank you very much.

37:15

Speaker 4: Hey guys, so my name is Mir Miroslav. By the way, great great pronunciation of my last name, very few people get that, so thumbs up Uh oh, where is it going automatically? All right, so I'll be talking about Django URL filter. That's a library I recently released which aims to help to do filtering from various data sources in Django by using structured URLs

37:36

Speaker 8: So before you get to some examples of what that means, some use cases why would you want to have filtering at all So it's pretty useful when you have pagination. For example, Django admin, instead of seeing lots of lots of lots of pages, you might want to see a subset of the data So filtering comes in pretty handy. It's also pretty useful in APIs, especially when you're doing bulk operations. So you want to update particular resources. but not all of them, so filtering comes in handy. It's also pretty nice when you're moving the filtering logic to the client side, for example in Angular or React applications. Users can use drop-downs and text boxes or whatever to construct filtering criteria. So then all the client side needs to do is construct the filtering a URL. You pass it to the backend, that backend will do the magic

38:24

Speaker 8: Alright, so in order to accomplish all of that, this library tries to make a few promises, and let's go over all of them one by one. So first promise, it tries to make the URLs as human-friendly as it can possibly can. By default you can filter where the you're filtering by fields f having particular values. So for example, you can filter where ID is equal to one You can also filter negated filters, so where ID is not one. You you can also apply custom lookups where um ID is either one, two, or three and you can do other m standard Django or RAM lookups like contains, exact all the other goodness of Django. Another promise it makes is try to make the filtering as safe as it can possibly can.

39:11

Speaker 8: So before actually doing any filtering in the back end , All the values submitted are validated by using Django form fields. So for example, since ID is an integer field to validate string digit one, we would use integer field for validation Some more funny examples of last example where the column is joined. Usually it would probably be a date time column maybe in database. But since the lookup is a year, we would use the integer field to validate 2015 versus date time field. Another promise it makes, it tries to make it as easy as possible to filter on related models So for example in this case you're filtering your current user models but filtering and then attribute and the profile model.

39:57

Speaker 8: So it comes in pretty handy. And as I as you might have noticed, a lot of these filters look a lot like Django RM and that's because they are. Th that was the whole point of the design to make it as simple as possible. And I think Django LM does a really awesome job of making these filtering operations really easy. You don't have to think about joints and all these many-to-one relationships. You just say I want to filter that. So this library tries to do the same thing in the URLs. And finally, uh makes the last promise that it's data source agnostic. What that means, it completely decouples Parsing URL and validating all the filtering clauses to actually filtering data. What that means is you can filter data not only from Django

40:43

Speaker 8: or M or query sets You can filter other sources of data. So for example, there is a work in progress right now to add support to filter SQL Alchemy query objects But you can add the filter backend to filter pretty much anything else. It could be Mongo collection, Python lists, Redis database, anything else you can think of Also out of the box it comes in with a bunch of uh integrations. One of them is Django Rest framework. So if you ever use Jenga filters library, it's very similar. You just supply a custom backend fields you want to filter on and it'll just do the magic. You can also use the library directly. It's pretty easy to use. You just can construct a class for a filter set, instantiate it, give it a bunch of data, give it a query set, and then call the filter up method, and it'll do the filtering.

41:31

Speaker 8: That's about it. You can find more information on the documentation. Here's the link. Or you can ask me some questions on Twitter. And finally, a shameless plug of work for DealerTrack. We're super excited to be sponsoring this JengaCon

41:45

Speaker 7: for the first time. So if you haven't stopped by, make sure to stop by our booth. We actually haven't made a bunch of pens So if this is my favorite one, a Kyat Jenga node. So if you haven't run out of them already, make sure to grab one. I think it's pretty cool. Thanks so much. Hello Um how many of you are using Redis?

42:07

Speaker 8: How many of you have so much data it doesn't fit onto a single server? Well it will happen at one point that you have so much stuff that doesn't fit on one server. And why does it all do? Um so basically the whole point of RB it's called the Redis Blaster, and it's basically a simplified version of Talking to multiple Redis servers in a very convenient way. Um the idea is that you distribute your dataset across multiple different servers and you can basically have More Redis data than you can fit into the RAM on a single machine and do this a very convenient way. So it's not Redis cluster, but it is based on the same idea in the sense that You take the key and you distribute it across multiple different nodes that you have.

42:53

Speaker 8: The idea is that the library will automatically figure out the most efficient way To get the data from these individual servers by automatically building Redis pipelines depending on which server you target. And when it's possible, it will also merge commands together. So if you do get, get, get, get, get, it will auto do m mget to To the right nodes. So even if the keys go to very different nodes, it will automatically build the pipelines. Um it's available on PyPISRB. And the idea is that you just create this cluster. So the thing with RB is that it's completely based on um PyRedis. So if you have used PyRedis before, this is exactly the same. It just wraps PyRedis in a more convenient way. So you All you have to do is you create the cluster. You create it as with as many nodes as you think you will have at one point.

43:40

Speaker 8: And then you can point them to the same service if necessary. Um and from that moment on you can either use the routing client, which is the most convenient way for just getting very basic understanding of how it works, you get the routing client from the cluster and from that point on it works exactly as any other Redis client. You just execute commands and will automatically go to the right node. This however is serialized, so if you target so we for instance have 32 different nodes we target, so this will do 32 requests one after another, um which is not ideal As an alternative you can use the mapping client which you use with um uh with block. So you just do with cluster map as client And that client will then not return the response immediately. It will insert

44:26

Speaker 8: return promise objects. And then only after the with block ends, it will actually go out and send the request to the servers. We don't use Gevent in uh Sentry anywhere, so because we are not really based on that, but this in itself does asynchronous I. O. behind the scenes for you. Um which is very convenient. So it doesn't actually spawn any threats or anything of that sort. And then just to do anything, you have these promise objects. At the end of the map call, you guaranteed that the value on it is resolved, but you can also attach callbacks if you want Um you can also target all the machines at once, so if you want to flush the databases on all the machines, which is kinda scary, you can just do this cluster all as client and And it would just execute against them. You can also explicitly target with a fine out specific nodes. So if you want for instance to see which operating systems run on these particular hosts.

45:15

Speaker 8: You can just do that, and then the promise object is a dictionary of the host ID to the individual response that came back from it. And that's pretty much all. You can get the docs at rb.

45:26

Speaker 7: org and the packages on Pype I available under open source license.

45:31

Speaker 8: And if you haven't used uh Sentry yet, you should definitely look at um what we're doing. Uh we have the booth out there and we also sponsor the conference So have a look at that as well. Thank you. Hey folks, my name is Brian Stern. I work for Indeed. And I really, really believe that everyone should be able to automate the boring stuff with Python, not just developers, but like salespe and marketers and client support and all that kind of stuff. And so we piloted something I think may be interesting to y'all. It's a concept like a code wiki. And so what is it? Well, a collection of self-contained pages of useful code. And For example, some marketing person might need to know like what are you know at Indeed what are the top ten

46:18

Speaker 8: things that people are searching for right now? And that's really just a SQL statement and a print statement. And so that's like a document that you could put into a code wiki and then run it and so forth. Or maybe you want a graph. So you do some SQL code and then you plot something. You know, that could be a document in a code wiki. It might be useful for someone to gather this data. The code wiki ID is based on iPython notebook, and if you don't know what that is, it's a JSON document that has basically an input cell where you put some Python in there. And then when that runs, it puts the output in a matching output cell and then another input cell, output cell comes from the scientific community, and it's awesome. And so these form the basis of pages in the CodeWiki And so anything that you can do in iPython notebook, you can do in your code wiki.

47:03

Speaker 8: And so that means you've got obviously the full power of Python, which is amazing. Also pandas for data manipulation and so forth. And uh it has some syntactic sugar to make SQL really easy and it actually is gonna support multiple languages. Um You know, you gather data from multiple sources and then you want to really easily um output them. And so it supports some syntactic sugar for like putting HTML templates in there. And this is something we added. Um markdown, so you can just quickly like gather data from a couple sources, put a little markdown to render some HTML And of course, if you want to iterate through results coming from SQL or some other data source, like Google Spreadsheets, you can use Django templating, and then that will use that to generate this nicely formatted output.

47:51

Speaker 8: A really neat extension of this idea is if you've got a page in a code wiki and it does something useful, but what if you want to change one of the parameters? So you want the top search terms but not in the US in France. Okay, well why don't we make these pages parameterizable? And we did it by convention, the first cell in the IPython notebook. If you assign things that becomes a parameter to that notebook And then what you can do is you can basically have a page in your wiki that runs in a dashboard mode. When someone goes to it, it says, oh, you know, enter the parameters and run it. And then it'll run with those parameters. So for example, that plotting you know document here it is with three parameters. You can choose what country you want to look at and the date range for this particular search. It's you know a pilot project.

48:36

Speaker 8: Um we kind of released it out there just to see what would happen. And it turns out that lots of people really jumped on this idea and started to automate the boring parts of their jobs, pulling data from different services, filtering, joining, and so forth. And so this is what it looks like in dashboard mode. You know you go to the page, you can enter your queries. It has defaults, you hit go, you get your results. And One of the other neat things is well what if you could just subscribe to this daily? So the idea is like I want this report to show up in the morning. And so you can easily put in some parameters, click, click, click, click, click, and then we have it on a cron and it just automatically runs and emails you We have a configurable permission system, so some people can just run these dashboards but not see the code behind it. Other people can see the code and the idea is that it's a shared learning environment.

49:22

Speaker 8: So people go to this and and see like what did you do to automate part of your job Oh let me copy that and so like a salesperson can take an existing one, make some modifications, and now they've got something useful for them Um our security people, this is what they said. Um so obviously, you know, you're running like user-supplied code on a web server, so what we had to do was isolate the code. And so what we do is we like drop an iPython notebook, which is just JSON, onto a queue, and we've got a cluster of uh Docker containers that basically spin up, run it. Take the the JSON output and send it back and then get rid of the container. And we also run those in a restricted VLAN. So you've got some security around where the code actually runs. And you could imagine that you know with the power of Python you can access data basically from anywhere and

50:08

Speaker 8: join it together. So you can do some really interesting things here. Like here's an example that you know goes to a particular indeed page using Selenium right from the code wiki that goes to a page, takes a picture, and emails it to me. So if I want to just check the state of a particular page every day. This has sort of unleashed the Kraken. We now have, I think, over 500 of these documents, and we've got people from all over the organization writing them. It's been a really interesting to sort of see the takeoff of this concept of like this shared code wiki thing. So that's it. We're gonna open source this, but it's not it's not quite ready yet. And if you're interested in this concept, I'm happy to talk more about it if anyone's interested. So thank you.

50:50

Speaker 6: Alright So yeah, my name is Russell Keith McGee. At this point you probably know me from my work on Django. What you may not know is that I've also got an interest in user interfaces, especially native user interfaces. My motivation here is to develop tools that follow the Unix philosophy of doing one thing and doing it really well, but with a humane and pretty user interface on front of it. I've been collecting these experiments for a while under the heading of a project called BeWare, because my end goal is to have a wide range of IDE-like pieces, test runners, debuggers, maybe even a text editor, but as standalone tools, not as one great big monolithic integrated ITE.

51:28

Speaker 8: The journey started for me two years ago when I released a tool called Cricut. Cricut is a GUI test runner for Python. You pip install Cricut into your virtual environment. You run it on your project and it throws up a GUI

51:39

Speaker 6: like this, which discovers all of your tests and allows you to run the test suite.

51:43

Speaker 8: You can then see the full structure of your test suite and the tree on the left-hand side. You can see the progress of the test suite as it runs. You can see which tests are passing, which ones have failed And you can inspect that information while the test suite is actually running. Now Cricut was built using uh TKINTER, which is the uh web uh which is the widget toolkit which comes out of the box with Python, but um TKInter has uh some quirks. So

52:06

Speaker 6: that started for me a very long process of yak shaving. Um the first step was a new widget toolkit called Toga. Toga is a cross-platform 100% system native Python native widget toolkit. That you can install using pip install toger. Now it's still very, very early days, but you can use it on OS X, on Linux, and if you squint hard enough, Windows, all from the same source code base. Now, there are lots of other widget toolkits out there, QT, WX, so you have to really have a good reason to write a new one.

52:36

Speaker 4: Being pure Python is one of those reasons, that's mildly compelling. Qt and WX aren't pip installable because there is a great big binary component that needs to exist. Toga is 100% pure Python. But that's probably not enough. So a little over a year ago, I decided to try and make Toga work on mobile platforms so that he would

52:53

Speaker 8: be able to write cross-platform iOS and Android applications in Python. Now, of course, in order for Togo to work on mobile platforms, Python needs to work on mobile platforms. And so for the last year, most of what I've been doing on this project has been looking at Python on mobile. And that work's been going pretty well. On iOS, there is now a patch in the uh in the ticket tracker for the Python ticket tracker uh that'll that enables iOS build support in the main tree. That's also been wrapped up into a separate project so you don't have to wait until that patch is merged into the tree. It's completely will work completely standalone. And about a month ago I announced a tool called Briefcase to make the process even easier

53:30

Speaker 6: Briefcase is a Dist UTols extension that will convert any project with a setup. py file into a working native iOS mobile project, including installing all of the local native dependencies. And just quietly also works on OS X so you can get a standalone dot app that you can distribute with a fully self-contained version of Python Now on Android it's a little bit more complicated.

53:52

Speaker 8: Android really wants you to use Java.

53:55

Speaker 6: There is a patch for Android that lets you run CPython on Android, but it doesn't really work that well for various reasons I can't go into here. But I do have something up my sleeves that will address this. I'm not announcing it now. I will be on Saturday when I'm at the Vancouver Pi Day. So watch this space. And if you want to know more, I am susceptible to having drink sport for me. Uh I'm not just interested in mobile though. I want Python I want to Python all the things, so what about the browser? Well I've got a story there too as well. Uh a couple of weeks back I announced a project called Batavia. A butThavio is an implementation of a Python virtual machine written in JavaScript Unlike projects like SculptPython or PyPy. js, it's tiny, it's just 10 kilobytes of compressed JavaScript, and it allows you to write run Python bugcode in the browser.

54:47

Speaker 6: Why would you want to?

54:48

Speaker 8: Well let's imagine you've got a Django form.

54:50

Speaker 6: That form has a validate method implementing some client-side validation logic written in Python.

54:54

Speaker 8: You want to have client-side validation that matches? Well, you can use introspection on the server side to extract the bytecode for the validate method. Ship that to the client as part of the rendered page and then run it in the client's browser. And presto, you they have language parity between the client and the server without having to dirty your hands writing JavaScript. Want to take it for a spin? Well courtesy of our friends at Microsoft. You can visit batavia. azure websites.

55:17

Speaker 6: net, see a working demo, type in some Python 3 code, hit run, and it will run that Python 3 in your browser.

55:22

Speaker 8: So that's my yak herd. I I

55:24

Speaker 6: alas I have but two hands with which to shave.

55:26

Speaker 8: Uh

55:27

Speaker 6: so I definitely want help. If any of this sounds interesting, please come and get in touch.

55:31

Speaker 8: One more thing.

55:32

Speaker 6: As I said before, I sometimes do Django as well.

55:34

Speaker 8: One of those roles is president of the DSF.

55:36

Speaker 6: One of the things the DSF does is the DSF Fellowship

55:39

Speaker 8: There is a program where the DSF pays to have Tim Graham work full-time on Django. Django Fellowship, however, costs money. We did a fundraiser at the start of the year. It was extremely successful, but that money is starting to run out. So this is a shakedown. If we want the fellowship to continue, we need to keep raising money. If you want to use if you use Django commercially, we need your company. We need you. to help us pay Tim. We think he's worth every penny and then some, we hope you agree. If you want to contribute, head to Django Project. com slash fundraising. There you'll have a couple of options. Uh yeah as as in January you can donate once off, but we've now added the ability for monthly subscriptions.

56:13

Speaker 6: Uh if you can we'd really lucky to take that one up because that lets us establish a baseline income rather than having to do burst fundraising all the time. There's also some options for your Amazon smile and Benevity if you uh if you can do your employer does does uh donation matching Thank you very much.

Questions this talk answers

How can I use PyCharm’s Django manage.py console?

Open the Django manage.py console with the shortcut, then type a task name and use autocomplete to see available options. PyCharm also supports fuzzy completion and quick documentation for the selected task.

Discussed at 0:16

How do I navigate quickly through a Django project in PyCharm?

PyCharm’s Search Everywhere lets you find files, models, and methods, while editor icons and shortcuts take you between views, templates, URLs, and definitions.

Discussed at 1:01

Can PyCharm debug Django templates?

Yes. Set breakpoints directly in a Django template and run the server in debug mode; PyCharm pauses execution so you can inspect or change variables, step through code, and continue to later breakpoints.

Discussed at 2:32

How do I run Django tests in PyCharm?

Create a Django test run configuration, select the test file or project, and run it. PyCharm detects the tests, displays pass/fail results, and lets you jump to or rerun individual tests.

Discussed at 3:22

How can I automatically format Python code consistently?

Use YAPF, Google’s Python formatter, to apply a consistent style across a codebase. It provides Google, PEP 8, and Chromium styles and supports additional configuration options; JavaScript can similarly be formatted with JSFormat.

Discussed at 7:05

How can I use modern JavaScript features while supporting current browsers?

Write ECMAScript 6/2015 code and compile it to ECMAScript 5 with Babel, which current modern browsers understand. The talk demonstrates features including arrow functions, template strings, classes, spread/rest operators, default parameters, destructuring, and modules.

Discussed at 9:59

What does JavaScript’s arrow-function syntax provide?

Arrow functions offer a shorter function syntax that is useful for callbacks and can serve a role similar to Python lambdas or list comprehensions when combined with array methods. They also inherit the `this` binding from their surrounding scope.

Discussed at 10:44

Which Sublime Text plugins make it more useful for Django development?

The talk focuses on Anaconda for Python intelligence and linting, a Git or Mercurial integration such as VCS Gutter, and Emmet for rapidly expanding HTML and CSS abbreviations.

Discussed at 14:34

What does the Anaconda plugin provide in Sublime Text?

Anaconda provides autocomplete, go-to-definition, find-usages, function and class signatures, docstrings, and live PEP 8 or Flake8 feedback. Its linting rules can be configured and committed so a team shares the same settings.

Discussed at 15:22

How can Sublime Text show Git or Mercurial changes?

VCS Gutter displays added and deleted lines beside the line numbers, and the command palette supports operations such as add, commit, checkout, pull, push, blame, diff, and log without leaving the editor.

Discussed at 17:40

How can Emmet speed up Django template and frontend work?

Type a compact CSS or HTML abbreviation and press Tab to expand it into a full HTML structure. Emmet can also add browser prefixes to CSS properties such as newer flexbox features.

Discussed at 18:26

What did the swim-center project learn about gathering requirements?

The team discovered through personas and user stories that the requested badge system was unnecessary for roughly 600 users. They replaced it with PIN numbers, avoiding badge printers, credit-card processing, and lost-badge fees.

Discussed at 20:38

Is HTML5 webcam and audio/video capture ready for production?

It was not considered ready for general use in the talk, but it worked for the swim center because the application ran on only a few controlled computers where the team could require current Chrome or Firefox versions.

Discussed at 21:25

How can Django tests catch accidental database-query slowdowns?

Make a test inherit from Django’s `TransactionTestCase` and wrap the endpoint call in `assertNumQueries`. The test fails when a code change causes more queries than expected, allowing continuous integration to catch the regression before deployment.

Discussed at 27:38

How can I mock external HTTP requests in Python tests?

Use HTTPretty to intercept requests and return configured responses without contacting the real service, keeping tests fast and independent of remote-service availability. Register the target URI and activate the mock around the test.

Discussed at 29:23

How can an HTTP mock return different responses based on the request?

HTTPretty supports callbacks, so the mock can inspect or modify state and return different status codes. The example first returns 404 when an owner is missing, creates the owner, and then returns 201 when the cat is created.

Discussed at 30:57

What is the Responses library useful for when testing HTTP calls?

Responses provides a similar mocking approach but intercepts the Requests library itself rather than operating at the socket level. The speaker recommends it especially when Python 3 compatibility is needed.

Discussed at 31:47

What is Pinax and why use it for Django projects?

Pinax is an ecosystem of reusable Django apps, project conventions, templates, and starter projects for common features such as profiles, notifications, teams, invitations, and favoriting. It lets developers concentrate on the distinctive parts of an application instead of repeatedly building generic functionality.

Discussed at 32:38

How can Pinax be used to build a learning management system?

Pinax can combine reusable management features such as groups, enrollment, calendars, messaging, forums, documents, and submissions with learning features such as quizzes, learning paths, adaptive learning, spaced repetition, and gamification.

Discussed at 34:38

What is Django URL Filter used for?

Django URL Filter lets applications express filtering criteria in structured, human-friendly URLs. It is useful for pagination, APIs and bulk operations, and client-side controls that need to construct backend filters.

Discussed at 37:29

How does Django URL Filter validate and apply filter values?

It validates submitted values with Django form fields before filtering, uses Django-style lookups including negation and related-model traversal, and separates URL parsing and validation from the data source. That allows it to work with querysets and potentially other sources such as SQLAlchemy, MongoDB, lists, or Redis.

Discussed at 39:11

How can Redis data be distributed across multiple servers with RB?

RB, described as Redis Blaster, distributes keys across multiple Redis nodes so the dataset can exceed the RAM of one machine. It wraps PyRedis, automatically routes commands to the right nodes, and can build pipelines or combine compatible commands such as multiple `GET`s into `MGET`.

Discussed at 42:07

Note: We understand that names change, people change, and bodies change. We respect each individual's journey and privacy. If you have any concerns about a video or need us to remove content, please don't hesitate to contact us. We will handle your request with care and promptly address any issues.

More videos by Armin Ronacher, Brendan Sterne, Dmitry Filippov, Dr. Russell Keith-Magee, Ed Rivas, Francisco Saldana, James Tauber, Jeff Sumner, Miroslav Shubernetskiy, Paul Bailey, Raphael Merx and Trey Hunner

More videos from DjangoCon US