Yeah. I will come back to it shortly I hope :)

On Fri, Mar 17, 2023 at 4:59 PM Kaxil Naik <kaxiln...@gmail.com> wrote:
>
> Huge +1 (I know its been few months :) ), I am in favor of the proposed
> structure .
>
> On Sat, 17 Dec 2022 at 13:05, Andrey Anshin <andrey.ans...@taragol.is>
> wrote:
>
> > +1
> >
> > I just want to add additional thoughts about our tests. Right now a lot of
> > stuff (fixtures, context managers, etc) sits in tests/conftest.py and
> > tests/test_utils so if we just move providers we need to do something
> > with this.
> >
> > I would suggest create separate package into
> > {project_root}/dev/some_awesome_name and design it as pytest plugin (
> > https://docs.pytest.org/en/7.1.x/how-to/writing_plugins.html#writing-your-own-plugin)
> > and move generic stuff related to tests into this package
> >
> > If we correctly register all our fixtures we do not need to change
> > anything related to them in our code.
> > In case of utilities we need to change imports from from tests.test_utils
> > import awesome_stuff to from some_awesome_name.utils import awesome_stuff
> >
> >
> > ----
> > Best Wishes
> > *Andrey Anshin*
> >
> >
> >
> > On Wed, 14 Dec 2022 at 15:46, Jarek Potiuk <ja...@potiuk.com> wrote:
> >
> >> Hey Denis,
> >>
> >> > tests/providers/airbyte/hooks
> >> > tests/providers/airbyte/operators
> >> > tests/providers/airbyte/sensors
> >> > tests/providers/airbyte/system
> >> > tests/providers/airbyte/transfers
> >>
> >> Yes. It could be done like that - but it would require merging some
> >> packages (there are for example already "system" packages for amazon and
> >> google to keep "utils" there.
> >>
> >> I might attempt to see if this is possible to merge, but this might also
> >> be problematic. I want to be able to get the automation in place to make
> >> the migration fully automated - so that there is no manual interventions.
> >> This will allow people to review the changes, and we can test development
> >> environment integration and then re-apply the changes automatically while
> >> rebasing.
> >>
> >> This change is disruptive enough and if we try to "manipulate" with the
> >> files moving around too much, it might be too problematic to keep PR merged
> >> while reviewing it and making sure the CI is fixed and development
> >> environment works - this will take weeks to get right or even months I am
> >> afraid, with some experimentation and trying different approaches. As you
> >> mentioned - this is an early POC and there is still plenty of work to do on
> >> that one. If we find that we cannot do it in this big change, then we can
> >> always split it to a separate steps. While we will have all the providers
> >> still in the same repository, we can still make "moving system tests" a
> >> separate follow-up PR which will be far less disruptive.
> >>
> >> Hey Everyone.
> >>
> >> I also think that one deserves an AIP - just the lenght of my email
> >> indicates it. I would turn my long email into one if you think it is a good
> >> idea, this way we can keep it up-to-date and explain whatever we can come
> >> up with. I have a feeling we will get a few "u-turns" while we try
> >> different aspects of such separation.
> >>
> >> WDYT?
> >>
> >> J.
> >>
> >>
> >>
> >> On Tue, Dec 13, 2022 at 3:54 AM Ferruzzi, Dennis
> >> <ferru...@amazon.com.invalid> wrote:
> >>
> >>> >  Somehow what you wanted to add here was lost so I am not sure what
> >>> the proposal is :).
> >>>
> >>> Gah,  I knew I should have explained it as well.  I was basically
> >>> suggesting move the system tests for a given provider into that provider's
> >>> tests module, alongside hooks, operators, sensors, etc:
> >>>
> >>> tests/providers/airbyte/hooks
> >>> tests/providers/airbyte/operators
> >>> tests/providers/airbyte/sensors
> >>> tests/providers/airbyte/system
> >>> tests/providers/airbyte/transfers
> >>>
> >>>
> >>>
> >>>
> >>> ------------------------------
> >>> *From:* Jarek Potiuk <ja...@potiuk.com>
> >>> *Sent:* Monday, December 12, 2022 5:48 PM
> >>> *To:* dev@airflow.apache.org
> >>> *Subject:* RE: [EXTERNAL][PROPOSAL] (Internal) move of provider
> >>> packages to isolated "providers" sub-folders
> >>>
> >>>
> >>> *CAUTION*: This email originated from outside of the organization. Do
> >>> not click links or open attachments unless you can confirm the sender and
> >>> know the content is safe.
> >>>
> >>> And just to clarify - there is a little too much redundancy in your
> >>> example:
> >>>
> >>> `airflow/providers/airbyte/hooks/airbyte.py` becomes `airflow
> >>> /providers/airbyte/src/airflow/providers/airbyte/hooks/airbyte.py`
> >>>
> >>> The leading "airflow" is not there in the target path:
> >>>
> >>> `airflow/providers/airbyte/hooks/airbyte.py` becomes
> >>> `providers/airbyte/src/airflow/providers/airbyte/hooks/airbyte.py`
> >>>
> >>> And the redundancy comes from the fact that we have to somehow name the
> >>> directory where the entire provider is moved. Let me rewrite it 
> >>> differently:
> >>>
> >>> providers/airbyte <- This is where the airbyte provider is moved
> >>>                 |
> >>>                 src/airflow/providers/airbyte/hooks/airbyte.py <- this
> >>> is actual path "inside" the provider
> >>>
> >>>
> >>> So there is far less redundancy than you think.
> >>>
> >>>
> >>> On Tue, Dec 13, 2022 at 2:40 AM Jarek Potiuk <ja...@potiuk.com> wrote:
> >>>
> >>>>
> >>>>> I have two immediate thoughts on it.   First, can this be used as an
> >>>>> opportunity to reorganize the system tests tree into the provider's test
> >>>>> tree?  Instead of having `tests/system/providers/{foo}`, maybe we can 
> >>>>> move
> >>>>> those system tests alongside the other provider tests like this:
> >>>>>
> >>>>
> >>>> Somehow what you wanted to add here was lost so I am not sure what the
> >>>> proposal is :).
> >>>>
> >>>>
> >>>>> My other thought is that I think I am missing something here as far as
> >>>>> the new organization goes.  I haven't spent the time that you have spent
> >>>>> looking at how to make this work, and I also realize this is early PoC
> >>>>> discussion so maybe this isn't the end target, but the new paths are 
> >>>>> very
> >>>>> long and redundant.  Is that for automation reasons?  For example in the
> >>>>> image you shared:
> >>>>>
> >>>>
> >>>>
> >>>>> `airflow/providers/airbyte/hooks/airbyte.py` becomes
> >>>>> `airflow/providers/airbyte/src/airflow/providers/airbyte/hooks/airbyte.py`
> >>>>> `tests/providers/airbyte/hooks/test_airbyte.py` becomes
> >>>>> `airflow/providers/airbyte/
> >>>>> tests/airflow/providers/airbyte/hooks/test_airbyte.py.
> >>>>>
> >>>>
> >>>> For sources, I am quite sure we cannot do it - as this would end up
> >>>> with a non-standard package and we would have to make some non-standard
> >>>> manipulations with import paths and it would confuse multiple IDEs like
> >>>> crazy.
> >>>> Our providers are in "airflow.providers.<provider>" package. The "src"
> >>>> is the root of sources and we need to have "airflow"/"providers" as the
> >>>> package in.
> >>>>
> >>>> Also this choice was largely based on the official Python packaging
> >>>> tutorial:
> >>>> https://packaging.python.org/en/latest/tutorials/packaging-projects/
> >>>> (this is where I took the "src" from - it's not been very common in 
> >>>> Python
> >>>> Projects - including Airflow - but it is now recommended in multiple 
> >>>> places
> >>>> including official Pypa tutorial:
> >>>>
> >>>> packaging_tutorial/
> >>>> └── src/
> >>>>     └── example_package_YOUR_USERNAME_HERE/
> >>>>         ├── __init__.py
> >>>>         └── example.py
> >>>>
> >>>> Regarding tests - yes, that could be removed. I even had it like that
> >>>> initially. And I am on the fence on this one.
> >>>>
> >>>> Putting tests at the top level has some drawbacks. One drawback is that
> >>>> if we put tests at the top, we miss "namespace". Having a "namespace" 
> >>>> makes
> >>>> tests unique even if they are defined in different providers and are both
> >>>> put on PYTHONPATH
> >>>>
> >>>> Imagine provider_a defining "tests/hooks/test_utils.py" and provider_b
> >>>> defining "tests/utils/test_utils.py". When you import
> >>>> "tests.utils.test_utils" - which one do you import if they are all in the
> >>>> PYTHONPATH? This will become a problem when we will make all of them 
> >>>> added
> >>>> to PYTHONPATH in your IDE - I think. I believe many IDEs (including 
> >>>> PyCharm
> >>>> and VSCode) will not work with multiple, separate python modules and they
> >>>> will get confused when seeing multiple repeated packages with the same
> >>>> modules on PYTHONPATH.
> >>>> <package_name> gives us "namespace" and guarantees that each module
> >>>> will be different.
> >>>>
> >>>> Also keeping them in packages is pretty consistent with some guidelines
> >>>> I saw that "tests/<package>" is recommended. I would love however to hear
> >>>> more from others experiences (especially TP) as maybe there are other 
> >>>> ways
> >>>> I have not thought about. I would also prefer "tests/test_mmm.py" rather
> >>>> than "tests/airflow/providers/providers/test_mmm.py" - but I am afraid 
> >>>> it's
> >>>> going to be difficult due to the "repeated modules" problem.
> >>>>
> >>>>
> >>>>
> >>>>>

---------------------------------------------------------------------
To unsubscribe, e-mail: dev-unsubscr...@airflow.apache.org
For additional commands, e-mail: dev-h...@airflow.apache.org

Reply via email to