One thing I would like to avoid is having the `[test]` extra show up in the 
released packages though (it’s not important, just would be nice if we can 
avoid that)

I wonder if now is also the time to move all the python code under a sub-folder

So something like this

Python_modules/
  Airflow_core/
  Providers/
  task-sdk/
Helm/
Dev/
  Breeze/

Etc. (Casing not relevant, just auto-correct)

This extra top level python_modules folder might help with the PYTHONPATH issue?

(Yes, I’m using dragster somewhat as inspiration for this 
https://github.com/dagster-io/dagster/ )


> On 18 Feb 2025, at 04:51, Amogh Desai <amoghdesai....@gmail.com> wrote:
> 
> +1 to this idea overall.
> 
> A bit torn on naming it "common_test_code" -- no strong reason for it but
> names like: `airflow_test_utils` or
> `airflow_test_shared` sound better to me. No strong objection though.
> 
> Thanks & Regards,
> Amogh Desai
> 
> 
> On Mon, Feb 17, 2025 at 11:16 PM Jarek Potiuk <ja...@potiuk.com> wrote:
> 
>> Main reason is that this might avoid duplication and remove ambiguity of
>> what is being imported. If we keep the same name, we will have to have
>> something like that:
>> 
>> a) folder where project is
>> b) python package we import
>> 
>> 
>> So ...if we do tests_common, we will have to do:
>> 
>> tests_common <- folder
>>           \pyproject.toml
>>           \src
>>               \tests_common <- Python package
>> 
>> 
>> And when you do:
>> 
>> import tests_common
>> 
>> Depending on the tooling, PYTHONPATH, whether implicit python packages are
>> enabled, WEIRD things might happen. We've seen it when we had "smtp"
>> provider name and it clashed with built-in package and that's why we have
>> now "unit.smtp", "integrations.smtp" and "system.smtp" as "canonical
>> imports" to avoid this problem.
>> 
>> This is similar - importing tests_common in this case might behave
>> differently if we keep the same name. That was my main motivation to have a
>> "different" name - whether it's "common_test_code" or something else, does
>> not matter, it just has to be significantly different.
>> 
>> Another approach could be what we did in providers, add extra package
>> inside the project, and import "tests_common" with a package prefix (for
>> example `airflow_tests`):
>> 
>> 
>> tests_common <- folder
>>           \pyproject.toml
>>           \src
>>              \airflow_tests  <- Python package
>>                           \tests_common <- Python package
>> 
>> But then we would have to change all the tests that import tests_common to:
>> 
>> from `airflow_tests.tests_common`
>> 
>> Easy to do, but I wanted to avoid another 1000+ files PR for our poor
>> reviewers :)
>> 
>> So basically, I think we have two options:
>> 
>> a) different "folder" name where we keep the project
>> b) adding parent package to "tests_common"
>> 
>> We could do both, I am happy with either approach but maybe we should do a
>> small unscientific poll, and have others propose better names (you know,
>> naming is hard :D).
>> 
>> J
>> 
>> 
>> pon., 17 lut 2025, 16:43 użytkownik Vincent Beck <vincb...@apache.org>
>> napisał:
>> 
>>> Overall +1 on this one. Regarding the naming, why not keeping
>>> "tests_common" instead of "common_test_code"? I am not a big fan of
>>> "common_test_code" but it is obviously just a personal opinion (as it is
>>> always with naming :))
>>> 
>>> On 2025/02/16 13:30:09 Jarek Potiuk wrote:
>>>>> Just wondernig... would an optional dependency not be the right place
>>> to
>>>> describe that apache-airflow-providers-google[tests] would have an
>>>> dependency to the common_tests subproject?
>>>>> Would mean you would need to install via
>>>>> pip install -e . -e ./task_sdk[tests] -e. ./providers/google[tests]
>>>> 
>>>> Something like that. This is more of a details of workspace but we are
>>>> going to use "dev" dependency group for that - rather than extra.
>> Details
>>>> to be worked out how pip interaction will look like (pip does not have
>>>> support for dependency groups yet - they are coming in 25.1 - they are
>>>> already merged in main)
>>>> 
>>>> With `uv` dependency groups can be used today and "dev" dependency
>> group
>>> is
>>>> installed automatically when you run uv sync or `uv pip install -e.` ->
>>> so
>>>> we will follow this along
>>>> 
>>>> See details about "development dependencies" in uv here
>>>> 
>>> 
>> https://docs.astral.sh/uv/concepts/projects/dependencies/#development-dependencies
>>>> 
>>>> Dependency groups are already approved via PEP-735
>>>> https://peps.python.org/pep-0735/ and as mentioned - we are a release
>>> away
>>>> from having them released in `pip`, so for now we will have to emulate
>> it
>>>> with extras for pip case I think but we will be able to remove it when
>>> pip
>>>> 25.1 is released and matures a bit.
>>>> 
>>>> J.
>>>> 
>>>> 
>>>> 
>>>> 
>>>> 
>>>> 
>>>> 
>>>> 
>>>> 
>>>> On Sun, Feb 16, 2025 at 2:23 PM Jarek Potiuk <ja...@potiuk.com> wrote:
>>>> 
>>>>>> I would love to see some airflow_testing package which will be
>>> useful for
>>>>> testing airflow-related projects and involve independently.
>>>>> 
>>>>>> Certainly, it's not a good thing to have tests import something
>> from
>>>>> tests.
>>>>> New packages as projects are cheap and provide more flexibility and
>> are
>>>>> useful from outside of the project.
>>>>> 
>>>>> I already explained in the PR, but let me repeat my opinion  here:
>>>>> 
>>>>> IMHO It's extremely unlikely we are going to release and publish the
>>>>> common test code / fixtures in any way. They will continue to be in
>>>>> development-only-distribution and they will be treated as "internal
>>> detail".
>>>>> 
>>>>> If we decide to release and publish them, we will have to maintain
>>>>> backwards compatibility and account for our users (like you) using
>>> them for
>>>>> their own purpose. That would block us or make it very difficult to
>>> make
>>>>> breaking changes in them.
>>>>> 
>>>>> So while you will be free to continue copying the whole distribution
>>> and
>>>>> use it in your tests as you want (our licence allows that) - I
>>> seriously
>>>>> doubt we will ever release and publish it in "reusable form" with
>>>>> "compatibility guarantees". It's far more efficient if people like
>> you
>>> just
>>>>> copy them and are aware that they can change any time.
>>>>> 
>>>>> J.
>>>>> 
>>>>> On Sun, Feb 16, 2025 at 2:21 PM Alexander Shorin <kxe...@apache.org>
>>>>> wrote:
>>>>> 
>>>>>> I would love to see some airflow_testing package which will be
>> useful
>>> for
>>>>>> testing airflow-related projects and involve independently.
>>>>>> 
>>>>>> Certainly, it's not a good thing to have tests import something from
>>>>>> tests.
>>>>>> New packages as projects are cheap and provide more flexibility and
>>> are
>>>>>> useful from outside of the project.
>>>>>> 
>>>>>> Also this project could have a future for testing, compatibility,
>>> quality
>>>>>> and rest of measuring.
>>>>>> 
>>>>>> --
>>>>>> ,,,^..^,,,
>>>>>> 
>>>>>> 
>>>>>> On Sun, Feb 16, 2025 at 4:12 PM Jarek Potiuk <ja...@potiuk.com>
>>> wrote:
>>>>>> 
>>>>>>> Hello here,
>>>>>>> 
>>>>>>> Next phase of the cleanup - it's been sped up  by the comment from
>>>>>> @kxepal
>>>>>>> -
>>> https://github.com/apache/airflow/pull/46801#issuecomment-2661415731
>>>>>> -
>>>>>>> I
>>>>>>> have planned to do it a bit later this week, but maybe indeed
>> it's a
>>>>>> good
>>>>>>> idea to start a discussion now so that people are not confused.
>>>>>>> 
>>>>>>> Currently we are using "from tests_common"  to reuse code in
>> various
>>>>>>> providers and airflow, and this is fine, with the exception that
>>>>>>> "tests_common" is currently just a package in "airflow" main
>>> project.
>>>>>> But
>>>>>>> it does not have to be (or rather it should not be).
>>>>>>> 
>>>>>>> We should have it in a separate sub-project - similarly as
>>> providers/*
>>>>>> and
>>>>>>> task_sdk are now separate projects - and we should add dependency
>>> to the
>>>>>>> common test code distribution from within all the projects that
>> use
>>> it
>>>>>> (via
>>>>>>> workspace feature).
>>>>>>> 
>>>>>>> My proposal is to name it "common_test_code" (but I am open to any
>>>>>>> suggestions): It will look like this
>>>>>>> 
>>>>>>> .
>>>>>>> |- airflow
>>>>>>> |- common_test_code
>>>>>>>                  | pyproject.toml
>>>>>>>                  | src
>>>>>>>                       | tests_common
>>>>>>> 
>>>>>>> The code in airflow and providers will not change, they will
>>> continue to
>>>>>>> use "from tests_common import ...".
>>>>>>> 
>>>>>>> * uv will work as it used to work, no changes will be needed - uv
>>> sync
>>>>>> will
>>>>>>> automatically install the common_test_code as editable project
>>>>>>> 
>>>>>>> * additionally - (and that's a big plus) after this change you
>>> should be
>>>>>>> able to run `uv sync` in a provider folder and have
>>> provider-specific
>>>>>>> separate venv, and basically you should be able to run tests for a
>>>>>> provider
>>>>>>> using that .venv and generally treat provider project as a
>>> "standalone"
>>>>>> one
>>>>>>> - this is what I hinted at in the previous mail.
>>>>>>> 
>>>>>>> * people who do not use uv but pip for example will have to
>>> manually add
>>>>>>> the `common_test_code` as an editable install in their venv. For
>>>>>> example:
>>>>>>> 
>>>>>>> pip install -e . -e ./task_sdk -e. ./providers/google -e
>>>>>> ./common_test_code
>>>>>>> 
>>>>>>> This is the next step in standardizing the layout of the Airflow
>>> project
>>>>>>> using workspaces.
>>>>>>> 
>>>>>>> J.
>>>>>>> 
>>>>>> 
>>>>> 
>>>> 
>>> 
>>> ---------------------------------------------------------------------
>>> To unsubscribe, e-mail: dev-unsubscr...@airflow.apache.org
>>> For additional commands, e-mail: dev-h...@airflow.apache.org
>>> 
>>> 
>> 

Reply via email to