With the recent (awesome) new feature to [load plugins from entry points][1], 
I’m wondering if this could be taken further, to make handling plugins simpler 
and less magic. One pain point for me personally has been that, since plugins 
are loaded by Airflow magic, my IDE cannot give me any help (e.g. syntax 
completion) when using operators, hooks or similar that are loaded from 
plugins, because it can’t find the source files based on the package name. This 
could be fixed by changing the packages `airflow`, `airflow.hooks`, 
`airflow.operators` etc. into [namespace packages][2]. With such a change, one 
wouldn’t even need to declare a plugin in order to distribute a new hook or 
operator, a plain Python package is enough.

Furthermore, I wonder if we need the `AirflowPlugin` class at all. Instead, we 
could have dedicated entry points for views, custom menus, etc., and each 
package would register relevant classes with those entry points directly. This 
would remove a lot of magic from Airflow, and instead use established tools to 
handle the complexity.

I believe it would be possible to implement both of these without breaking 
existing code, so a migration path is available. The main problem is that we 
would need to move all code that currently resides in the `__init__.py` files 
of the prospective namespace packages elsewhere (the constituent parts of 
namespace packages are loaded in a non-deterministic order, so one can’t rely 
on code any specific `__init__.py` if a namespace package to be executed first, 
or, in fact, at all), but as far as I can see, everything in there can neatly 
fit somewhere else.

I would love to start working on this, if there is a chance that at least parts 
of this would find acceptance. What does the Airflow dev community think about 
this?

Cheers,

        Björn Pollex

[1]: https://github.com/apache/airflow/pull/4412
[2]: https://packaging.python.org/guides/packaging-namespace-packages/

Reply via email to