Have you ever implemented a dynamic function dispatcher in Python, where you can register functions at runtime using the decorator syntax? (Like the routers for FastAPI.)

I did this recently, and I am going to teach you how to do it! I'll walk you through it in the thread below.
We will build an event handler to catch arbitrary events and dynamically execute a function to handle the event.

(A good example is catching events in a webhook listener.)

Time to use some decorator magic!
The usage is straightforward:
1) instantiate the EventHandler,
2) register handler functions for specific events,
3) pass the event to the EventHandler instance when caught.
The EventHandler has an internal dictionary, where it holds the (event, function) key-value pairs. This is where the single event handler functions are registered.
The magic happens in the `EventHandler.register_event()` method, which is not just a decorator. It is a 𝐝𝐞𝐜𝐨𝐫𝐚𝐭𝐨𝐫 𝐟𝐚𝐜𝐭𝐨𝐫𝐲.

It returns a parametrized decorator, whose only job is to store functions in the EventHandler's dictionary.
Since `self` is in its closure, it can be accessed within the parametrized decorator. So, it can register functions to the `self.handlers` dictionary.
Why not just use a dictionary instead of EventHandler? I got two reasons.

1) The decorator syntax is much more convenient than manually jamming each function into a dictionary.
2) You can easily implement additional functionality. What if you are building a webhook event handler, and you need to verify its signature before doing anything? Just create a validator method and slam it into `__call__`.
Decorators are a fantastic feature in Python. If you are wondering, this is very similar to how Flask and FastAPI implements routing.

What is your favorite application of function decorators?

• • •

Missing some Tweet in this thread? You can try to force a refresh
 

Keep Current with Tivadar Danka

Tivadar Danka Profile picture

Stay in touch and get notified when new unrolls are available from this author!

Read all threads

This Thread may be Removed Anytime!

PDF

Twitter may remove this content at anytime! Save it as PDF for later use!

Try unrolling a thread yourself!

how to unroll video
  1. Follow @ThreadReaderApp to mention us!

  2. From a Twitter thread mention us with a keyword "unroll"
@threadreaderapp unroll

Practice here first or read more on our help page!

More from @TivadarDanka

2 Nov
So, you want to wrap your machine learning model into an API. Flask used to be the best tool for that, but lately, FastAPI has become my favorite.

Here are my five main reasons why! 👇
1️⃣ Simple yet brilliant interface.

You define the request body model in Pydantic, write the endpoint function to process it, and finally register the route to the app.

That's it. Image
You can launch the app right away with uvicorn, ready to receive requests! Image
Read 10 tweets
30 Oct
Last week I made a massive 4000 words article about mathematics the No. 1 trending on Medium.

I achieved this by setting three guiding principles, resulting in explosive growth.

Here is a thread about how can you do it too. Image
1⃣ Set out to write the single most important article on the topic. Instead of looking for quick wins, aim to create the best resource out there.

Making this article took me more than a month. Every minute of work was worth it.
Pay attention to all the details, make sure you understand every nook and cranny of the subject.

Explain complex technical details in a way such that even newcomers would get them.

Never compromise on quality. If you think that something can be done better, do it.
Read 12 tweets
28 Oct
Neural networks are getting HUGE. In their @stateofaireport 2020, @NathanBenaich and @soundboy visualized how the number of parameters grew for breakthrough architectures. The result below is staggering.

What can you do to compress neural networks?

👇A thread.
1⃣ Neural network pruning: iteratively removing connections after training. Turns out that in some cases, 90%+ of the weights can be removed without noticeable performance loss.
A few selected milestone papers:
📰Optimal Brain Damage by @ylecun, John S. Denker, and @SaraASolla. As far as I know, this was the one where the idea was introduced.

papers.nips.cc/paper/250-opti…
Read 12 tweets
28 Oct
1️⃣ If you struggle to understand determinants, stop what you are doing and check out this video by @3blue1brown, it will make your brain explode.

2⃣ Sometimes, it is hard to figure out what a concept represents by looking at how it is calculated. The determinant of a matrix is calculated by a sum, iterating through all permutations of a row.
3⃣ However, this definition doesn't reveal anything about what the determinant means. In fact, it is quite simple: it describes how the volume scales under the corresponding linear transformation.
Read 4 tweets

Did Thread Reader help you today?

Support us! We are indie developers!


This site is made by just two indie developers on a laptop doing marketing, support and development! Read more about the story.

Become a Premium Member ($3/month or $30/year) and get exclusive features!

Become Premium

Too expensive? Make a small donation by buying us coffee ($5) or help with server cost ($10)

Donate via Paypal Become our Patreon

Thank you for your support!

Follow Us on Twitter!