Adrian Dziubek - Python Descriptors for Better Data Structures [EuroPython 2016] [18 July 2016] [Bilbao, Euskadi, Spain] (https://ep2016.europython.eu//conference/talks/python-descriptors-for-better-data-structures)
Have you ever wondered how Django models work? I'll present a story of data structure transformation. I will talk about ideas from Django models that I used and how I rediscovered descriptor API. I will talk about printing, serializing, comparing data structures and some other examples, where descriptors excel at making declarative code easier to write.
I worked as a developer of a testing framework for a C++ server. The framework tested binary protocol implemented by the server.
Most of the work involved testers preparing test cases. The data format was primitive structures -- hard to read and easy to break. Field order and all the data had to be entered manually.
At the time, I have already seen the better world -- the models from Django. Have you ever wondered how those work? Step by step, I used the ideas from there to make the structures more friendly and on my way I rediscovered descriptors.
I'll show in incremental steps, how:
- used keyword arguments to lower signal to noise ratio,
- order of definition for sorting the fields,
- realized that __call__ is used instead of assignment,
- used __setattribute__ as first step to extend primitive fields,
- discovered that I'm actually reimplementing descriptors,
and how it lead me to:
- implement printing in a way that is friendly to regression testing,
- use diff library for less code and better results,
- implement more readable validation.
I want to show how descriptors work in Python and how they enable declarative style of programming. By the end of the talk I want you to understand what is at the core of the magic behind field types used by object relational mappers like Django.