This is what we’ve been doing internally, and if it becomes the “official” way
of doing things, then I’m more than happy.
Cheers,
Björn
> On 14. Jan 2019, at 13:38, Ash Berlin-Taylor <[email protected]> wrote:
>
> Operators and hooks are just normal python modules, and don't actually need
> to be defined under `airflow.` to work.
>
> My advice (and something I've been meaning to update the docs to say) is to
> just make your custom hooks/ops a normal class and do
>
> from myco.airflow.operators.my_op import MyOp
>
> So long as the "myco" package is installed on the scheduler and worker nodes
> this will work fine (this is what we do at work)
>
> The plugin mechanism is I think still needed to get Flask views/menu_items
> integrated (as the need to be registered with the app at creation time)?
>
> So: not to namespace packages as I don't think we need it.
>
> -ash
>
>> On 14 Jan 2019, at 11:58, Björn Pollex
>> <[email protected]> wrote:
>>
>> 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/
>>
>