One wrinkle with case 3+4 option D is inter-provider operators.  Mainly
it's storage I think e.g. XToS3Operator or XToGCSOperator where the X is a
service some different provider.

Maybe the rule should be to locate the operator according to the first
provider referenced.  So e.g. s3_to_gcs_transfer_operator.py would go to
aws.


On Tue, Jul 30, 2019 at 6:21 AM Kamil Breguła <kamil.breg...@polidea.com>
wrote:

> Yes. All changes will be backwards compatible. In the case of using
> the old path, a message containing a proposal for change will be
> reported to the user.
>
> I prepared an example of how to change the name of a class in a case
> with the use of a native solution.
> Source code:
> https://github.com/mik-laj/airflow-deprecation-sample/tree/master/rename
> Preview from IDE: https://imgur.com/a/45NxS5W
>
> On Tue, Jul 30, 2019 at 2:28 PM Ash Berlin-Taylor <a...@apache.org> wrote:
> >
> > Just cos I'm not sure it's _explicitly_ stated, but all of the moves
> will have a deprecation of the old name right?
> >
> > 3+4 case D gets my vote too.
> >
> > -a
> >
> > > On 30 Jul 2019, at 09:58, Jarek Potiuk <jarek.pot...@polidea.com>
> wrote:
> > >
> > > I went ahead and updated the page (just to speed it up) as I think it
> > > really makes sense to join those two cases (and I do not see any
> drawbacks
> > > - I think the options we have cover all possible approaches) and we can
> > > always go back if we need to.
> > >
> > >
> https://cwiki.apache.org/confluence/display/AIRFLOW/AIP-21%3A+Changes+in+import+paths#AIP-21:Changesinimportpaths-Summaryoftheproposal
> > >
> > > My vote is *D*.
> > >
> > >   - airflow/contrib/operators/gcp_bigtable_operator.py  →  airflow/gcp
> > >   /operators/bigtable_operator.py
> > >   - airflow/contrib/operators/ssh_operator.py ->
> > >   airflow/operators/ssh_operator.py
> > >
> > > I updated the page with my vote.
> > > I propose that we vote till Friday on that one (all the rest is already
> > > agreed).
> > >
> > > J.
> > >
> > >
> > > On Tue, Jul 30, 2019 at 9:42 AM Jarek Potiuk <jarek.pot...@polidea.com
> >
> > > wrote:
> > >
> > >> I think almost everyone voted and we have almost perfect consensus.
> We all
> > >> agree amongst other on moving all operators out of contrib (Great!).
> > >>
> > >> The only doubts are for *Case 3* (Cloud provider prefix) and *Case 4*
> > >> (Using Namespaces).
> > >> I think there was actually an overlap between those two. Also Ash's
> > >> comment/veto on that is quite clear.
> > >> So I have final (I hope!) proposal to join those two cases and have
> one
> > >> voting (till Friday) only on that.
> > >>
> > >> I will update the doc if you all agree with me that makes more sense
> as
> > >> single case to vote on:
> > >>
> > >> *[Case 3 + Case 4]: Grouping Cloud Provider operators.*
> > >>
> > >> *Option A*. Keep operators/sensors/hooks in airflow/operators(sensors,
> > >> hooks) and keep/add prefixes in file names.
> > >>
> > >>   -
> > >> *airflow/contrib/operators/sns_publish_operator.py  becomes
> > >>   airflow/operators/**aws_sns_publish_operator.py*
> > >>
> > >>
> > >>   - *airflow/contrib/operators/dataproc_operator.py*
> > >>  becomes *airflow/operators/gcp_dataproc_operator.py*
> > >>
> > >>
> > >>   -
> > >> *airflow/contrib/hooks/gcp_bigtable_hook.py  *becomes *airflow/*
> > >>   *hooks/gcp_bigtable_hook.py*
> > >>   -
> > >> *airflow/contrib/operators/ssh_operator.py  *becomes *airflow/*
> > >>   *operators/ssh_operator.py*
> > >>
> > >>
> > >>
> > >> *Option B*. Group operators/sensors/hooks in
> airflow/operators(sensors,
> > >> hooks)/*<PROVIDER>.* Non-cloud provider ones are moved to
> > >> airflow/operators(sensors/hooks), Drop the prefix.
> > >>
> > >>   -
> > >> *airflow/contrib/operators/sns_publish_operator.py
> > >>   becomes airflow/operators/**aws/sns_publish_operator.py*
> > >>
> > >>
> > >>   - *airflow/contrib/operators/dataproc_operator.py*
> > >>  becomes *airflow/operators/gcp/dataproc_operator.py*
> > >>
> > >>
> > >>   -
> > >> *airflow/contrib/operators/gcp_bigtable_operator.py  *becomes
> *airflow/*
> > >>   *operators/gcp/bigtable_operator.py*
> > >>   -
> > >> *airflow/contrib/operators/ssh_operator.py  *becomes *airflow/*
> > >>   *operators/ssh_operator.py*
> > >>
> > >>
> > >> *Option C*. Group operators/sensors/hooks in
> airflow/operators(sensors,
> > >> hooks)*/<PROVIDER>.* Non-cloud provider ones are moved to
> > >> airflow/operators(sensors/hooks), Keep the prefix.
> > >>
> > >>   -
> > >> *airflow/contrib/operators/sns_publish_operator.py
> > >>   becomes airflow/operators/**aws/aws_sns_publish_operator.py*
> > >>
> > >>
> > >>   - *airflow/contrib/operators/dataproc_operator.py*
> > >>  becomes *airflow/operators/gcp/gcp_dataproc_operator.py*
> > >>
> > >>
> > >>   -
> > >> *airflow/contrib/operators/gcp_bigtable_operator.py  *becomes
> *airflow/*
> > >>   *operators/gcp/gcp_bigtable_operator.py*
> > >>   -
> > >> *airflow/contrib/operators/ssh_operator.py  *becomes *airflow/*
> > >>   *operators/ssh_operator.py*
> > >>
> > >>
> > >> *Option D.* Group operators/sensors/hooks in
> *airflow/<PROVIDER>*/operators(sensors,
> > >> hooks). Non-cloud provider ones are moved to
> > >> airflow/operators(sensors/hooks). Drop the prefix.
> > >>
> > >>   -
> > >> *airflow/contrib/operators/sns_publish_operator.py
> > >>   becomes airflow/aws/operators/**sns_publish_operator.py*
> > >>
> > >>
> > >>   - *airflow/contrib/operators/dataproc_operator.py*
> > >>  becomes *airflow/gcp/operators/dataproc_operator.py*
> > >>
> > >>
> > >>   -
> > >> *airflow/contrib/operators/gcp_bigtable_operator.py  *becomes
> *airflow/*
> > >>   *gcp/operators/bigtable_operator.py*
> > >>   -
> > >> *airflow/contrib/operators/ssh_operator.py  *becomes *airflow/*
> > >>   *operators/ssh_operator.py*
> > >>
> > >>
> > >> *Option E.* Group operators/sensors/hooks in
> *airflow/<PROVIDER>*/operators(sensors,
> > >> hooks). Non-cloud provider ones are moved to
> > >> airflow/operators(sensors/hooks).* Keep the prefix*.
> > >>
> > >>   -
> > >> *airflow/contrib/operators/sns_publish_operator.py
> > >>   becomes airflow/aws/operators/aws_**sns_publish_operator.py*
> > >>
> > >>
> > >>   - *airflow/contrib/operators/dataproc_operator.py*
> > >>  becomes *airflow/gcp/operators/gcp_dataproc_operator.py*
> > >>
> > >>
> > >>   -
> > >> *airflow/contrib/operators/gcp_bigtable_operator.py  *becomes
> *airflow/*
> > >>   *gcp/operators/gcp_bigtable_operator.py*
> > >>   -
> > >> *airflow/contrib/operators/ssh_operator.py  *becomes *airflow/*
> > >>   *operators/ssh_operator.py*
> > >>
> > >>
> > >> Shall I proceed with updating the page ?
> > >>
> > >>
> > >> J.
> > >>
> > >>
> > >> On Mon, Jul 29, 2019 at 11:18 AM Kaxil Naik <kaxiln...@gmail.com>
> wrote:
> > >>
> > >>> Thanks Jarek, adding my vote.
> > >>>
> > >>> On Mon, Jul 29, 2019 at 2:40 PM Ash Berlin-Taylor <a...@apache.org>
> wrote:
> > >>>
> > >>>> Thanks Jarek, much clearer. I have voted there too.
> > >>>>
> > >>>> -ash
> > >>>>
> > >>>>
> > >>>>> On 29 Jul 2019, at 08:13, Driesprong, Fokko <fo...@driesprong.frl>
> > >>>> wrote:
> > >>>>>
> > >>>>> Thanks Jarek, the Wiki works much better for me. I've added my vote
> > >>> there
> > >>>>> as well.
> > >>>>>
> > >>>>> You've convinced me on the second case. I've changed my vote on
> Case 2
> > >>>> from
> > >>>>> A to B :-)
> > >>>>>
> > >>>>> Maybe we should leave the vote open a bit longer since it involves
> > >>> quite
> > >>>>> some reading, and I would like to get some proper feedback and
> > >>> opinions
> > >>>> on
> > >>>>> this. Plus I only see two votes right now. If we don't think this
> > >>>> through,
> > >>>>> it might be that we're having this vote again in the near future
> :-)
> > >>>>>
> > >>>>> Cheers, Fokko
> > >>>>>
> > >>>>> Op zo 28 jul. 2019 om 10:49 schreef Jarek Potiuk <
> > >>>> jarek.pot...@polidea.com>:
> > >>>>>
> > >>>>>> I updated the AIP-21 proposal in the way that should answer all
> the
> > >>>>>> concerns in this thread.
> > >>>>>>
> > >>>>>> NOTE! There is an action for all of those who are interested:
> Please
> > >>>>>> fill-in your voting in the voting table till Tuesday 30th of July
> 6pm
> > >>>> CEST
> > >>>>>> (5pm BST, 9 am PST).
> > >>>>>>
> > >>>>>> I created a summary of the proposal
> > >>>>>> <
> > >>>>>>
> > >>>>
> > >>>
> https://cwiki.apache.org/confluence/display/AIRFLOW/AIP-21%3A+Changes+in+import+paths#AIP-21:Changesinimportpaths-Summaryoftheproposal
> > >>>>>>>
> > >>>>>> in table form - which contains also examples for each case.
> > >>>>>>
> > >>>>>> I added a voting table
> > >>>>>> <
> > >>>>>>
> > >>>>
> > >>>
> https://cwiki.apache.org/confluence/display/AIRFLOW/AIP-21%3A+Changes+in+import+paths#AIP-21:Changesinimportpaths-Voting
> > >>>>>>>
> > >>>>>> where you should add your votes:
> > >>>>>>
> > >>>>>> I propose this voting mechanism:
> > >>>>>>
> > >>>>>> Voting will take place till *Tuesday* 30 Jul 2019 6pm CEST  (5 pm
> > >>> BST,
> > >>>> 9am
> > >>>>>> PST) .
> > >>>>>>
> > >>>>>> After the choice, the final consistent set of choices will be
> > >>> announced
> > >>>>>> (taking into account majority of binding vote, also including
> > >>> potential
> > >>>>>> vetos and consistency between the choices. Non-binding votes will
> be
> > >>>> taken
> > >>>>>> into account in case there is a draw. The final set of choices
> will
> > >>> be
> > >>>>>> announced at devlist thread
> > >>>>>> <
> > >>>>>>
> > >>>>
> > >>>
> https://lists.apache.org/thread.html/4cedc94bee53ad908eee8333a56b58be8b5641881e73f69b97e436a9@%3Cdev.airflow.apache.org%3E
> > >>>>>>>
> > >>>>>> after
> > >>>>>> the voting completes.
> > >>>>>>
> > >>>>>> Unless there is a veto raised to the final proposal, the final
> > >>> proposal
> > >>>> is
> > >>>>>> accepted by Lazy Consensus
> > >>>>>> <https://community.apache.org/committers/lazyConsensus.html>  on
> > >>>> *Friday*
> > >>>>>> 02
> > >>>>>> Aug 2019 at 6pm CEST (5 pm BST, 9am PST).
> > >>>>>>
> > >>>>>> Please let me know if what I proposed can be further improved to
> > >>> avoid
> > >>>>>> chaos.
> > >>>>>>
> > >>>>>> J.
> > >>>>>>
> > >>>>>> On Sat, Jul 27, 2019 at 11:41 AM Jarek Potiuk <
> > >>> jarek.pot...@polidea.com
> > >>>>>
> > >>>>>> wrote:
> > >>>>>>
> > >>>>>>> Ok. I see that indeed voting could have been organised a bit
> better
> > >>> -
> > >>>> dev
> > >>>>>>> list does not seem to cope well with such a complex case :).
> > >>>>>>>
> > >>>>>>> As Kamil noticed - we already have a formal AIP-21
> > >>>>>>> <
> > >>>>>>
> > >>>>
> > >>>
> https://cwiki.apache.org/confluence/display/AIRFLOW/AIP-21%3A+Changes+in+import+paths
> > >>>>>>>
> > >>>>>>> in the Wiki - which I should have mentioned before. I have not
> much
> > >>>> time
> > >>>>>>> today - but tomorrow I will try to summarise the options - based
> on
> > >>>> some
> > >>>>>>> real code examples (to make it easier to digest). I think the
> best
> > >>>>>> approach
> > >>>>>>> will be to make a voting matrix in the AIP-21 Wiki page where
> people
> > >>>> will
> > >>>>>>> be able to state their preferences for each case (by adding a
> row to
> > >>>> the
> > >>>>>>> table). I think that might provide much better clarity and a
> single
> > >>>> place
> > >>>>>>> which will show the current aggregated state of voting.
> > >>>>>>>
> > >>>>>>> However - as Ash also stated - some of the options are
> > >>> inter-dependent
> > >>>> so
> > >>>>>>> at the end we will have to adjust the results in case they are
> not
> > >>>>>>> consistent  - and make final voting on aggregated set of cases -
> > >>> but I
> > >>>>>>> think in this case following "lasy consensus" - i,e. if noone
> > >>> objects
> > >>>> to
> > >>>>>>> final set of cases, we will proceed with it..
> > >>>>>>>
> > >>>>>>> Do you think that will work better ?
> > >>>>>>>
> > >>>>>>> J.
> > >>>>>>>
> > >>>>>>> Principal Software Engineer
> > >>>>>>> Phone: +48660796129
> > >>>>>>>
> > >>>>>>> sob., 27 lip 2019, 09:26 użytkownik Kamil Breguła <
> > >>>>>>> kamil.breg...@polidea.com> napisał:
> > >>>>>>>
> > >>>>>>>> Document is also available as AIP on wiki:
> > >>>>>>>>
> > >>>>>>>>
> > >>>>>>
> > >>>>
> > >>>
> https://cwiki.apache.org/confluence/display/AIRFLOW/AIP-21%3A+Changes+in+import+paths
> > >>>>>>>>
> > >>>>>>>> On Sat, Jul 27, 2019, 9:07 AM Driesprong, Fokko
> > >>> <fo...@driesprong.frl
> > >>>>>
> > >>>>>>>> wrote:
> > >>>>>>>>
> > >>>>>>>>> I agree with all, this is a bit chaotic. For the sake of
> clarity,
> > >>> I
> > >>>>>>>> would
> > >>>>>>>>> suggest moving the Google Doc to the Wiki as an AIP. Create a
> > >>>>>> structural
> > >>>>>>>>> code improvement AIP and then and add a matrix of users/cases
> > >>> where
> > >>>>>>>>> everybody can add his vote per case. This gives also the
> > >>> opportunity
> > >>>>>> for
> > >>>>>>>>> changing your vote on a specific case. WDYT?
> > >>>>>>>>>
> > >>>>>>>>> Cheers, Fokko
> > >>>>>>>>>
> > >>>>>>>>> Op vr 26 jul. 2019 om 22:28 schreef Chen Tong <
> cix...@gmail.com>:
> > >>>>>>>>>
> > >>>>>>>>>> I agree with Ash. It is clear to vote on each case rather than
> > >>> all
> > >>>>>>>>>> together.
> > >>>>>>>>>>
> > >>>>>>>>>> On Fri, Jul 26, 2019 at 3:54 PM Ash Berlin-Taylor <
> > >>> a...@apache.org>
> > >>>>>>>>> wrote:
> > >>>>>>>>>>
> > >>>>>>>>>>> A number of proposals overlap or add on to each other, so I
> > >>> think
> > >>>>>>>> (?) a
> > >>>>>>>>>>> single vote makes sense.
> > >>>>>>>>>>>
> > >>>>>>>>>>> To be clear, my vote is -1 until it's clear exactly what we
> are
> > >>>>>>>> voting
> > >>>>>>>>> on.
> > >>>>>>>>>>>
> > >>>>>>>>>>> On 26 July 2019 20:39:56 BST, Kaxil Naik <
> kaxiln...@gmail.com>
> > >>>>>>>> wrote:
> > >>>>>>>>>>>> I agree with Ash and instead of voting on all 7 Cases
> together,
> > >>>>>> how
> > >>>>>>>>>>>> about
> > >>>>>>>>>>>> separate vote emails for all the cases? Each email can have
> the
> > >>>>>>>>>>>> description
> > >>>>>>>>>>>> copied over from the doc.
> > >>>>>>>>>>>>
> > >>>>>>>>>>>> It would probably be a bit easier to track a decision in the
> > >>>>>> future
> > >>>>>>>> as
> > >>>>>>>>>>>> well.
> > >>>>>>>>>>>>
> > >>>>>>>>>>>> What do you guys think? @Jarek Potiuk <
> > >>> jarek.pot...@polidea.com>
> > >>>>>>>>>>>> @Driesprong,
> > >>>>>>>>>>>> Fokko <fo...@driesprong.frl>
> > >>>>>>>>>>>>
> > >>>>>>>>>>>> On Sat, Jul 27, 2019 at 1:03 AM Kaxil Naik <
> > >>> kaxiln...@gmail.com>
> > >>>>>>>>> wrote:
> > >>>>>>>>>>>>
> > >>>>>>>>>>>>> *Case #1* airflow.contrib.{resources} : *Solution A *
> > >>>>>>>>>>>>>
> > >>>>>>>>>>>>> *Case #2* git *_{operator/sensor}{/s}.py : *Solution A *
> > >>>>>>>>>>>>>
> > >>>>>>>>>>>>> *Case #3* {aws/azure/gcp}_* : *Solution C*
> > >>>>>>>>>>>>>
> > >>>>>>>>>>>>> *Case #4* Separate namespace for resources :
> > >>>>>>>>>>>>> *Solution A*
> > >>>>>>>>>>>>>
> > >>>>>>>>>>>>> *Case #5* *Operator : *Solution A*
> > >>>>>>>>>>>>>
> > >>>>>>>>>>>>> *Case #7* : *Solution A*
> > >>>>>>>>>>>>>
> > >>>>>>>>>>>>> On Fri, Jul 26, 2019 at 11:09 PM Daniel Standish
> > >>>>>>>>>>>> <dpstand...@gmail.com>
> > >>>>>>>>>>>>> wrote:
> > >>>>>>>>>>>>>
> > >>>>>>>>>>>>>> I have tried to add some clarification to Jarek's summary,
> > >>> but
> > >>>>>> I
> > >>>>>>>> am
> > >>>>>>>>>>>> a
> > >>>>>>>>>>>>>> little fuzzy on exact proposal for case 3 so hopefully
> Jarek
> > >>>>>> can
> > >>>>>>>>>>>> further
> > >>>>>>>>>>>>>> clarify.
> > >>>>>>>>>>>>>>
> > >>>>>>>>>>>>>> According to my reading, in this motion cases 4,5,6 are
> all
> > >>>>>>>> either
> > >>>>>>>>>>>>>> proposal
> > >>>>>>>>>>>>>> *rejections* or otherwise have no effect, so attention
> can be
> > >>>>>>>>>>>> focused on
> > >>>>>>>>>>>>>> cases 1,2,3 and 7.
> > >>>>>>>>>>>>>>
> > >>>>>>>>>>>>>> *Motion is to adopt the following:*
> > >>>>>>>>>>>>>>
> > >>>>>>>>>>>>>> Case 1 - Solution A - Get rid of contrib
> > >>>>>>>>>>>>>> All objects will be moved out of contrib folder and into
> > >>>>>>>> respective
> > >>>>>>>>>>>>>> non-contrib folder.
> > >>>>>>>>>>>>>>
> > >>>>>>>>>>>>>> Case 2 - Solution A - Remove object type suffix from
> modules
> > >>>>>>>>>>>>>> Example:
> > >>>>>>>>>>>>>> Airflow.operators.foo_operator.FooOperator becomes
> > >>>>>>>>>>>>>> airflow.operators.foo.FooOperator
> > >>>>>>>>>>>>>> Example:
> > >>>>>>>>>>>>>> Airflow.hooks.foo_hook.FooOperator becomes
> > >>>>>>>> airflow.hooks.foo.FooHook
> > >>>>>>>>>>>>>>
> > >>>>>>>>>>>>>> Case 3 - conventions for cloud provider etc prefixes
> > >>>>>>>>>>>>>> *I am not sure exactly what the proposal is.*
> > >>>>>>>>>>>>>> Example case is
> > >>>>>>>> airflow/contrib/operators/gcp_bigtable_operator.py
> > >>>>>>>>>>>>>> Since motion adopts case 1 solution A, we can assume it is
> > >>> now
> > >>>>>>>> named
> > >>>>>>>>>>>> like
> > >>>>>>>>>>>>>> so: airflow/operators/gcp_bigtable_operator.py
> > >>>>>>>>>>>>>> So what is proposed for this case?
> > >>>>>>>>>>>>>>
> > >>>>>>>>>>>>>> Case 4 - Solution B - *no change*
> > >>>>>>>>>>>>>> This proposal was about namespaces but the motion is to
> > >>> reject
> > >>>>>>>> the
> > >>>>>>>>>>>>>> proposal.
> > >>>>>>>>>>>>>>
> > >>>>>>>>>>>>>> Case 5 - Solution B - *no change*
> > >>>>>>>>>>>>>> The proposal was to remove class type suffix e.g. remove
> the
> > >>>>>>>>>>>> Operator in
> > >>>>>>>>>>>>>> FooOperator, but the motion is to reject this proposal --
> > >>> i.e.
> > >>>>>>>>>>>> motion is
> > >>>>>>>>>>>>>> no
> > >>>>>>>>>>>>>> change on this case, i.e. we resolve to keep "Operator"
> (and
> > >>>>>>>>>>>> "Sensor")
> > >>>>>>>>>>>>>> suffixes on class names
> > >>>>>>>>>>>>>>
> > >>>>>>>>>>>>>> Case 6 - *No change*
> > >>>>>>>>>>>>>> This case concerns object naming inconsistencies, but
> motion
> > >>>>>> does
> > >>>>>>>>>>>> not
> > >>>>>>>>>>>>>> enact
> > >>>>>>>>>>>>>> any specific proposal.
> > >>>>>>>>>>>>>>
> > >>>>>>>>>>>>>> Case 7 - Solution A - use warnings.warn template for
> > >>>>>> deprecation
> > >>>>>>>>>>>> warnings
> > >>>>>>>>>>>>>> (instead of zope)
> > >>>>>>>>>>>>>> Example:
> > >>>>>>>>>>>>>>
> > >>>>>>>>>>>>>> # in old_package/old_mod.py
> > >>>>>>>>>>>>>>
> > >>>>>>>>>>>>>> import warnings
> > >>>>>>>>>>>>>> from new_package.new_mod import *
> > >>>>>>>>>>>>>> warnings.warn("old_package.old_mod has moved to
> > >>>>>>>> new_package.new_mod.
> > >>>>>>>>>>>>>> Import
> > >>>>>>>>>>>>>> of "
> > >>>>>>>>>>>>>> "old_package.old_mod will become unsupported in version
> 2",
> > >>>>>>>>>>>>>> DeprecationWarning, 2)
> > >>>>>>>>>>>>>>
> > >>>>>>>>>>>>>> Reference implementation here:
> > >>>>>>>>>>>>>>
> > >>>>>>>>>>>>>>
> > >>>>>>>>>>>>
> > >>>>>>>>>>>
> > >>>>>>>>>
> > >>>>>>>>
> > >>>>>>
> > >>>>
> > >>>
> https://github.com/mik-laj/airflow-deprecation-sample/tree/master/solution1
> > >>>>>>>>>>>>>>
> > >>>>>>>>>>>>>>
> > >>>>>>>>>>>>>> FWIW +1 (non-binding) on 1,2,7 -- unsure on 3.
> > >>>>>>>>>>>>>>
> > >>>>>>>>>>>>>> I am very happy that this motion now gets rid of contrib.
> > >>>>>> Thank
> > >>>>>>>> you
> > >>>>>>>>>>>>>> Sergio
> > >>>>>>>>>>>>>> for turning the tide with your effective argumentation ;)
> > >>>>>>>>>>>>>>
> > >>>>>>>>>>>>>>
> > >>>>>>>>>>>>>>
> > >>>>>>>>>>>>>>
> > >>>>>>>>>>>>>>
> > >>>>>>>>>>>>>> On Fri, Jul 26, 2019 at 3:16 AM Ash Berlin-Taylor <
> > >>>>>>>> a...@apache.org>
> > >>>>>>>>>>>> wrote:
> > >>>>>>>>>>>>>>
> > >>>>>>>>>>>>>>> Could someone summarise what the proposed name changes
> are,
> > >>>>>>>> here,
> > >>>>>>>>>>>> in
> > >>>>>>>>>>>>>> this
> > >>>>>>>>>>>>>>> thread? Pointing at a google doc and only giving partial
> > >>>>>>>> examples
> > >>>>>>>>>>>> is 1)
> > >>>>>>>>>>>>>> a
> > >>>>>>>>>>>>>>> bit difficult to quickly work out what we are voting on,
> and
> > >>>>>> 2)
> > >>>>>>>>>>>> using a
> > >>>>>>>>>>>>>>> google doc isn't great for a longer term record.
> > >>>>>>>>>>>>>>>
> > >>>>>>>>>>>>>>> Thanks,
> > >>>>>>>>>>>>>>> Ash
> > >>>>>>>>>>>>>>>
> > >>>>>>>>>>>>>>>> On 26 Jul 2019, at 09:14, Jarek Potiuk
> > >>>>>>>>>>>> <jarek.pot...@polidea.com>
> > >>>>>>>>>>>>>> wrote:
> > >>>>>>>>>>>>>>>>
> > >>>>>>>>>>>>>>>> I would like to recast the vote. Let's start from 0 :)
> . I
> > >>>>>>>> would
> > >>>>>>>>>>>> like
> > >>>>>>>>>>>>>> to
> > >>>>>>>>>>>>>>>> keep the July 30th 6pm CEST date, and at least three +1
> > >>>>>>>>>>>> (binding)
> > >>>>>>>>>>>>>> votes
> > >>>>>>>>>>>>>>> are
> > >>>>>>>>>>>>>>>> needed to pass. I marked in red the modifications to the
> > >>>>>>>>>>>> previous
> > >>>>>>>>>>>>>>> proposal.
> > >>>>>>>>>>>>>>>>
> > >>>>>>>>>>>>>>>> Here is the proposal (details here
> > >>>>>>>>>>>>>>>> <
> > >>>>>>>>>>>>>>>
> > >>>>>>>>>>>>>>
> > >>>>>>>>>>>>
> > >>>>>>>>>>>
> > >>>>>>>>>
> > >>>>>>>>
> > >>>>>>
> > >>>>
> > >>>
> https://docs.google.com/document/d/1F8zve5S78DXcjpPttW89HnqT0M0iKjT6fo9jX57Ef6A/edit#heading=h.j4jc3i70qszo
> > >>>>>>>>>>>>>>>>
> > >>>>>>>>>>>>>>>> )
> > >>>>>>>>>>>>>>>>
> > >>>>>>>>>>>>>>>> - *Case 1: A: Get rid of contrib,*
> > >>>>>>>>>>>>>>>> - *Case 2: A: Airflow.operators.foo_operator.FooOperator
> > >>>>>>>> could
> > >>>>>>>>>>>>>>>> become airflow.operators.foo.FooOperator*
> > >>>>>>>>>>>>>>>> - *Case 3: C:
> > >>>>>>>>>>>>>>>>
> > >>>>>>>>>>>>
> > >>> airflow.contrib.operators.gcp_bigtable_operator.BigTableOperator
> > >>>>>>>>>>>>>> could
> > >>>>>>>>>>>>>>>> become airflow.gcp.operators.bigtable.BigTableOperator*
> > >>>>>>>>>>>>>>>> - *Case 4: B: no namespace introduction*
> > >>>>>>>>>>>>>>>> - *Case 5: B: Keep "Operator" (and "Sensor") suffixes on
> > >>>>>>>> class
> > >>>>>>>>>>>>>> names*
> > >>>>>>>>>>>>>>>> - *Case 6: We will treat isolated cases on case-by-case
> > >>>>>>>> (and
> > >>>>>>>>>>>> my team
> > >>>>>>>>>>>>>>> can
> > >>>>>>>>>>>>>>>> do the job of GCP-related operators)*
> > >>>>>>>>>>>>>>>> - *Case 7: Native python solution (with better IDE
> > >>>>>>>>>>>> integration)*
> > >>>>>>>>>>>>>>>>
> > >>>>>>>>>>>>>>>> This is my binding (+1) vote.
> > >>>>>>>>>>>>>>>>
> > >>>>>>>>>>>>>>>>
> > >>>>>>>>>>>>>>>>
> > >>>>>>>>>>>>>>>> On Fri, Jul 26, 2019 at 10:08 AM Jarek Potiuk <
> > >>>>>>>>>>>>>> jarek.pot...@polidea.com>
> > >>>>>>>>>>>>>>>> wrote:
> > >>>>>>>>>>>>>>>>
> > >>>>>>>>>>>>>>>>> Hey Felix,
> > >>>>>>>>>>>>>>>>>
> > >>>>>>>>>>>>>>>>> For 7* -> I am in favour of trying the native one as
> well
> > >>>>>> (I
> > >>>>>>>>>>>> use IDE
> > >>>>>>>>>>>>>>> quite
> > >>>>>>>>>>>>>>>>> often ;) )
> > >>>>>>>>>>>>>>>>>
> > >>>>>>>>>>>>>>>>> J.
> > >>>>>>>>>>>>>>>>>
> > >>>>>>>>>>>>>>>>> On Wed, Jul 24, 2019 at 9:34 AM Driesprong, Fokko
> > >>>>>>>>>>>>>> <fo...@driesprong.frl
> > >>>>>>>>>>>>>>>>
> > >>>>>>>>>>>>>>>>> wrote:
> > >>>>>>>>>>>>>>>>>
> > >>>>>>>>>>>>>>>>>> Thanks Kamil for putting the document together. I
> wasn't
> > >>>>>>>> able
> > >>>>>>>>>>>> to
> > >>>>>>>>>>>>>>> respond
> > >>>>>>>>>>>>>>>>>> earlier since I was giving Airflow workshops
> throughout
> > >>>>>>>> Europe
> > >>>>>>>>>>>> :-)
> > >>>>>>>>>>>>>>>>>>
> > >>>>>>>>>>>>>>>>>> *Case 1: *Solution A → Remove everything from contrib
> > >>>>>> into
> > >>>>>>>> a
> > >>>>>>>>>>>> single
> > >>>>>>>>>>>>>>>>>> package.
> > >>>>>>>>>>>>>>>>>>
> > >>>>>>>>>>>>>>>>>> To make it easier to the end-user, my preference
> would be
> > >>>>>>>> to
> > >>>>>>>>>>>> get
> > >>>>>>>>>>>>>> rid of
> > >>>>>>>>>>>>>>>>>> the
> > >>>>>>>>>>>>>>>>>> contrib package altogether. What's in contrib or not
> is a
> > >>>>>>>>>>>> tricky
> > >>>>>>>>>>>>>>> question,
> > >>>>>>>>>>>>>>>>>> I think this is already reflected in the document
> since
> > >>>>>>>>>>>> "maturity"
> > >>>>>>>>>>>>>> is
> > >>>>>>>>>>>>>>> in
> > >>>>>>>>>>>>>>>>>> quotes. What would be the moment to transfer the
> operator
> > >>>>>>>> to
> > >>>>>>>>>>>> the
> > >>>>>>>>>>>>>> core
> > >>>>>>>>>>>>>>> or
> > >>>>>>>>>>>>>>>>>> vice versa? I'm afraid that renaming contrib to
> > >>>>>> incubating
> > >>>>>>>>>>>> will
> > >>>>>>>>>>>>>> confuse
> > >>>>>>>>>>>>>>>>>> the
> > >>>>>>>>>>>>>>>>>> user even more. For people who aren't as known with
> > >>>>>>>> Airflow it
> > >>>>>>>>>>>> isn't
> > >>>>>>>>>>>>>>> that
> > >>>>>>>>>>>>>>>>>> transparent which operator lives where, especially if
> you
> > >>>>>>>>>>>> don't use
> > >>>>>>>>>>>>>> an
> > >>>>>>>>>>>>>>> IDE
> > >>>>>>>>>>>>>>>>>> such as Ash ;) Besides that I don't think it is worth
> > >>>>>>>> changing
> > >>>>>>>>>>>> the
> > >>>>>>>>>>>>>>> public
> > >>>>>>>>>>>>>>>>>> API just for a different name.
> > >>>>>>>>>>>>>>>>>>
> > >>>>>>>>>>>>>>>>>
> > >>>>>>>>>>>>>>>>> Ok. I am convinced. I will re-cast the vote with this.
> It
> > >>>>>>>> will
> > >>>>>>>>>>>> make
> > >>>>>>>>>>>>>>> easier
> > >>>>>>>>>>>>>>>>> as we will not have to define other rules as those
> that we
> > >>>>>>>>>>>> already
> > >>>>>>>>>>>>>> have.
> > >>>>>>>>>>>>>>>>>
> > >>>>>>>>>>>>>>>>>
> > >>>>>>>>>>>>>>>>>> *Case 2:* Slight preference to Solution B (let's say a
> > >>>>>> +0)
> > >>>>>>>>>>>>>>>>>>
> > >>>>>>>>>>>>>>>>>> I like to search on Github with t, and then search for
> > >>>>>>>>>>>> BashOperator.
> > >>>>>>>>>>>>>>> After
> > >>>>>>>>>>>>>>>>>> the change, you should search for Operator/Bash.
> > >>>>>>>>>>>>>>>>>>
> > >>>>>>>>>>>>>>>>>> Jarek, I'm confused with your vote on this, from your
> > >>>>>> mail
> > >>>>>>>> you
> > >>>>>>>>>>>>>> state: -
> > >>>>>>>>>>>>>>>>>> *Case 2: B: Airflow.operators.foo_operator.FooOperator
> > >>>>>>>> could
> > >>>>>>>>>>>> become
> > >>>>>>>>>>>>>>>>>> airflow.operators.foo.FooOperator*. But the B
> solution is
> > >>>>>>>>>>>> keeping it
> > >>>>>>>>>>>>>>> the
> > >>>>>>>>>>>>>>>>>> same, so that would mean - *Case 2: B:
> > >>>>>>>>>>>>>>>>>> Airflow.operators.foo_operator.FooOperator *would stay
> > >>>>>>>>>>>>>>>>>> airflow.operators.foo_operator*.FooOperator*
> > >>>>>>>>>>>>>>>>>>
> > >>>>>>>>>>>>>>>>>> My mistake. It was of course A. I think there is a
> little
> > >>>>>>>>>>>> confusion
> > >>>>>>>>>>>>>>> here.
> > >>>>>>>>>>>>>>>>> This case is not for changing BashOperator into Bash
> but
> > >>>>>> for
> > >>>>>>>>>>>> changing
> > >>>>>>>>>>>>>>> the
> > >>>>>>>>>>>>>>>>> *module* name not the *class* name. So
> > >>>>>>>>>>>> bash_operator.BashOperator ->
> > >>>>>>>>>>>>>>>>> bash.BashOperator :) . you will still search for
> > >>>>>>>> BashOperator
> > >>>>>>>>>>>> in this
> > >>>>>>>>>>>>>>> case.
> > >>>>>>>>>>>>>>>>>
> > >>>>>>>>>>>>>>>>>
> > >>>>>>>>>>>>>>>>>> *Case 3:* I'm leaning towards B
> > >>>>>>>>>>>>>>>>>>
> > >>>>>>>>>>>>>>>>>> Mostly because it isn't as trivial to decide when it
> gets
> > >>>>>>>> its
> > >>>>>>>>>>>> own
> > >>>>>>>>>>>>>>> package
> > >>>>>>>>>>>>>>>>>> or not. Besides the cloud providers, there are
> companies
> > >>>>>>>> like
> > >>>>>>>>>>>>>>> Databricks
> > >>>>>>>>>>>>>>>>>> and Qubole which might also end up with their own
> package
> > >>>>>>>>>>>> because
> > >>>>>>>>>>>>>> their
> > >>>>>>>>>>>>>>>>>> integration is getting richer over time. Moving this
> is a
> > >>>>>>>> bit
> > >>>>>>>>>>>>>> painful
> > >>>>>>>>>>>>>>>>>> because we need to deprecate the old path and move
> > >>>>>>>> everything
> > >>>>>>>>>>>> which
> > >>>>>>>>>>>>>>>>>> introduces noise into version control etc.
> > >>>>>>>>>>>>>>>>>
> > >>>>>>>>>>>>>>>>>
> > >>>>>>>>>>>>>>>>> I'd say, we should go for C. As I proposed. It's not as
> > >>>>>>>>>>>> difficult as
> > >>>>>>>>>>>>>> it
> > >>>>>>>>>>>>>>>>> seems to group operators in packages and it has
> numerous
> > >>>>>>>>>>>> advantages.
> > >>>>>>>>>>>>>> The
> > >>>>>>>>>>>>>>>>> nice thing about deprecations - we can do them in the
> > >>>>>>>>>>>> __init__.py of
> > >>>>>>>>>>>>>> the
> > >>>>>>>>>>>>>>>>> packages which causes the noise fairly small (Git will
> > >>>>>>>> actually
> > >>>>>>>>>>>>>> realise
> > >>>>>>>>>>>>>>>>> that the file has been moved and you can follow that.
> > >>>>>> Maybe
> > >>>>>>>> not
> > >>>>>>>>>>>> as
> > >>>>>>>>>>>>>> super
> > >>>>>>>>>>>>>>>>> easy to merge changes later to 1.10.4  but it's not a
> > >>>>>> rocket
> > >>>>>>>>>>>> science
> > >>>>>>>>>>>>>>> either.
> > >>>>>>>>>>>>>>>>>
> > >>>>>>>>>>>>>>>>>
> > >>>>>>>>>>>>>>>>>> *Case 7:* Python native solution
> > >>>>>>>>>>>>>>>>>>
> > >>>>>>>>>>>>>>>>>
> > >>>>>>>>>>>>>>>>> Yes.
> > >>>>>>>>>>>>>>>>>
> > >>>>>>>>>>>>>>>>>
> > >>>>>>>>>>>>>>>>>>
> > >>>>>>>>>>>>>>>>>> ---
> > >>>>>>>>>>>>>>>>>>
> > >>>>>>>>>>>>>>>>>> Apart from all, great work!
> > >>>>>>>>>>>>>>>>>>
> > >>>>>>>>>>>>>>>>>> Cheers, Fokko
> > >>>>>>>>>>>>>>>>>>
> > >>>>>>>>>>>>>>>>>>
> > >>>>>>>>>>>>>>>>>> Op di 23 jul. 2019 om 21:27 schreef Felix Uellendall
> > >>>>>>>>>>>>>>>>>> <felue...@pm.me.invalid
> > >>>>>>>>>>>>>>>>>>> :
> > >>>>>>>>>>>>>>>>>>
> > >>>>>>>>>>>>>>>>>>> I have no strong "No" against any proposed change of
> > >>>>>> these
> > >>>>>>>>>>>> cases.
> > >>>>>>>>>>>>>> So I
> > >>>>>>>>>>>>>>>>>> go
> > >>>>>>>>>>>>>>>>>>> with +1 (non-binding).
> > >>>>>>>>>>>>>>>>>>>
> > >>>>>>>>>>>>>>>>>>> P.S. Thanks Jarek for bringing this up again and your
> > >>>>>>>> intense
> > >>>>>>>>>>>> work
> > >>>>>>>>>>>>>>>>>> towards
> > >>>>>>>>>>>>>>>>>>> airflow currently :) and thanks to Kamil for even
> > >>>>>> creating
> > >>>>>>>>>>>> this
> > >>>>>>>>>>>>>>>>>> document. I
> > >>>>>>>>>>>>>>>>>>> like how the code is getting more and more consistent
> > >>>>>> and
> > >>>>>>>>>>>> clean :)
> > >>>>>>>>>>>>>>>>>>>
> > >>>>>>>>>>>>>>>>>>> Kind regards,
> > >>>>>>>>>>>>>>>>>>> Felix
> > >>>>>>>>>>>>>>>>>>>
> > >>>>>>>>>>>>>>>>>>> Sent from ProtonMail mobile
> > >>>>>>>>>>>>>>>>>>>
> > >>>>>>>>>>>>>>>>>>> -------- Original Message --------
> > >>>>>>>>>>>>>>>>>>> On Jul 23, 2019, 18:34, Jarek Potiuk wrote:
> > >>>>>>>>>>>>>>>>>>>
> > >>>>>>>>>>>>>>>>>>>> Hello everyone,
> > >>>>>>>>>>>>>>>>>>>>
> > >>>>>>>>>>>>>>>>>>>> This email is calling a vote on the changes in
> import
> > >>>>>>>> paths.
> > >>>>>>>>>>>> It's
> > >>>>>>>>>>>>>>> been
> > >>>>>>>>>>>>>>>>>>>> discussed in
> > >>>>>>>>>>>>>>>>>>>>
> > >>>>>>>>>>>>>>>>>>>
> > >>>>>>>>>>>>>>>>>>
> > >>>>>>>>>>>>>>>
> > >>>>>>>>>>>>>>
> > >>>>>>>>>>>>
> > >>>>>>>>>>>
> > >>>>>>>>>
> > >>>>>>>>
> > >>>>>>
> > >>>>
> > >>>
> https://lists.apache.org/thread.html/4e648d9421c792d4537f5ac66f1a16dce468f816fc5221a9f9db9433@%3Cdev.airflow.apache.org%3E
> > >>>>>>>>>>>>>>>>>>>>
> > >>>>>>>>>>>>>>>>>>>> The vote will last for at least 1 week (July 30th
> 6pm
> > >>>>>>>> CEST),
> > >>>>>>>>>>>> and
> > >>>>>>>>>>>>>> at
> > >>>>>>>>>>>>>>>>>> least
> > >>>>>>>>>>>>>>>>>>>> three +1 (binding) votes have been cast.
> > >>>>>>>>>>>>>>>>>>>>
> > >>>>>>>>>>>>>>>>>>>> The proposal to vote is based on the document from
> > >>>>>> Kamil
> > >>>>>>>>>>>>>>>>>>>> <
> > >>>>>>>>>>>>>>>>>>>
> > >>>>>>>>>>>>>>>>>>
> > >>>>>>>>>>>>>>>
> > >>>>>>>>>>>>>>
> > >>>>>>>>>>>>
> > >>>>>>>>>>>
> > >>>>>>>>>
> > >>>>>>>>
> > >>>>>>
> > >>>>
> > >>>
> https://docs.google.com/document/d/1F8zve5S78DXcjpPttW89HnqT0M0iKjT6fo9jX57Ef6A/edit#
> > >>>>>>>>>>>>>>>>>>>>
> > >>>>>>>>>>>>>>>>>>>>
> > >>>>>>>>>>>>>>>>>>>> The proposed solution is:
> > >>>>>>>>>>>>>>>>>>>>
> > >>>>>>>>>>>>>>>>>>>> - *Case 1: B: Contrib vs not: we move all that are
> > >>>>>> "well"
> > >>>>>>>>>>>> tested
> > >>>>>>>>>>>>>> and
> > >>>>>>>>>>>>>>>>>>>> rename contrib to "incubating" or similar.*
> > >>>>>>>>>>>>>>>>>>>> - *Case 2: B:
> > >>>>>> Airflow.operators.foo_operator.FooOperator
> > >>>>>>>>>>>> could
> > >>>>>>>>>>>>>>>>>>>> become airflow.operators.foo.FooOperator*
> > >>>>>>>>>>>>>>>>>>>> - *Case 3: C:
> > >>>>>>>>>>>>>>>>>>>>
> > >>>>>>>>>>>>
> > >>> airflow.contrib.operators.gcp_bigtable_operator.BigTableOperator
> > >>>>>>>>>>>>>>> could
> > >>>>>>>>>>>>>>>>>>>> become
> airflow.gcp.operators.bigtable.BigTableOperator*
> > >>>>>>>>>>>>>>>>>>>> - *Case 4: B: no namespace introduction*
> > >>>>>>>>>>>>>>>>>>>> - *Case 5: B: Keep "Operator" (and "Sensor")
> suffixes
> > >>>>>> on
> > >>>>>>>>>>>> class
> > >>>>>>>>>>>>>> names*
> > >>>>>>>>>>>>>>>>>>>> - *Case 6: We will treat isolated cases on
> case-by-case
> > >>>>>>>> (and
> > >>>>>>>>>>>> my
> > >>>>>>>>>>>>>> team
> > >>>>>>>>>>>>>>>>>> can
> > >>>>>>>>>>>>>>>>>>>> do the job of GCP-related operators)*
> > >>>>>>>>>>>>>>>>>>>>
> > >>>>>>>>>>>>>>>>>>>> This is my (binding) +1 vote.
> > >>>>>>>>>>>>>>>>>>>>
> > >>>>>>>>>>>>>>>>>>>> Best regards,
> > >>>>>>>>>>>>>>>>>>>>
> > >>>>>>>>>>>>>>>>>>>> J.
> > >>>>>>>>>>>>>>>>>>>>
> > >>>>>>>>>>>>>>>>>>>> --
> > >>>>>>>>>>>>>>>>>>>>
> > >>>>>>>>>>>>>>>>>>>> Jarek Potiuk
> > >>>>>>>>>>>>>>>>>>>> Polidea <https://www.polidea.com/> | Principal
> > >>>>>> Software
> > >>>>>>>>>>>> Engineer
> > >>>>>>>>>>>>>>>>>>>>
> > >>>>>>>>>>>>>>>>>>>> M: [+48 660 796 129](tel:+48660796129)
> > >>>>>>>>>>>>>>>>>> <[+48660796129](tel:+48660796129)>
> > >>>>>>>>>>>>>>>>>>>> [image: Polidea] <https://www.polidea.com/>
> > >>>>>>>>>>>>>>>>>>
> > >>>>>>>>>>>>>>>>>
> > >>>>>>>>>>>>>>>>>
> > >>>>>>>>>>>>>>>>> --
> > >>>>>>>>>>>>>>>>>
> > >>>>>>>>>>>>>>>>> Jarek Potiuk
> > >>>>>>>>>>>>>>>>> Polidea <https://www.polidea.com/> | Principal
> Software
> > >>>>>>>>>>>> Engineer
> > >>>>>>>>>>>>>>>>>
> > >>>>>>>>>>>>>>>>> M: +48 660 796 129 <+48660796129>
> > >>>>>>>>>>>>>>>>> [image: Polidea] <https://www.polidea.com/>
> > >>>>>>>>>>>>>>>>>
> > >>>>>>>>>>>>>>>>>
> > >>>>>>>>>>>>>>>>
> > >>>>>>>>>>>>>>>> --
> > >>>>>>>>>>>>>>>>
> > >>>>>>>>>>>>>>>> Jarek Potiuk
> > >>>>>>>>>>>>>>>> Polidea <https://www.polidea.com/> | Principal Software
> > >>>>>>>>> Engineer
> > >>>>>>>>>>>>>>>>
> > >>>>>>>>>>>>>>>> M: +48 660 796 129 <+48660796129>
> > >>>>>>>>>>>>>>>> [image: Polidea] <https://www.polidea.com/>
> > >>>>>>>>>>>>>>>
> > >>>>>>>>>>>>>>>
> > >>>>>>>>>>>>>>
> > >>>>>>>>>>>>>
> > >>>>>>>>>>>>>
> > >>>>>>>>>>>>> --
> > >>>>>>>>>>>>> *Kaxil Naik*
> > >>>>>>>>>>>>> *Big Data Consultant | DevOps Data Engineer*
> > >>>>>>>>>>>>> *Certified *Google Cloud Data Engineer | *Certified* Apache
> > >>>>>> Spark
> > >>>>>>>> &
> > >>>>>>>>>>>> Neo4j
> > >>>>>>>>>>>>> Developer
> > >>>>>>>>>>>>> *LinkedIn*: https://www.linkedin.com/in/kaxil
> > >>>>>>>>>>>>>
> > >>>>>>>>>>>>
> > >>>>>>>>>>>>
> > >>>>>>>>>>>> --
> > >>>>>>>>>>>> *Kaxil Naik*
> > >>>>>>>>>>>> *Big Data Consultant | DevOps Data Engineer*
> > >>>>>>>>>>>> *Certified *Google Cloud Data Engineer | *Certified* Apache
> > >>> Spark
> > >>>>>> &
> > >>>>>>>>>>>> Neo4j
> > >>>>>>>>>>>> Developer
> > >>>>>>>>>>>> *LinkedIn*: https://www.linkedin.com/in/kaxil
> > >>>>>>>>>>>
> > >>>>>>>>>>
> > >>>>>>>>>
> > >>>>>>>>
> > >>>>>>>
> > >>>>>>
> > >>>>>> --
> > >>>>>>
> > >>>>>> Jarek Potiuk
> > >>>>>> Polidea <https://www.polidea.com/> | Principal Software Engineer
> > >>>>>>
> > >>>>>> M: +48 660 796 129 <+48660796129>
> > >>>>>> [image: Polidea] <https://www.polidea.com/>
> > >>>>>>
> > >>>>
> > >>>>
> > >>>
> > >>> --
> > >>> *Kaxil Naik*
> > >>> *Big Data Consultant | DevOps Data Engineer*
> > >>> *Certified *Google Cloud Data Engineer | *Certified* Apache Spark &
> Neo4j
> > >>> Developer
> > >>> *LinkedIn*: https://www.linkedin.com/in/kaxil
> > >>>
> > >>
> > >>
> > >> --
> > >>
> > >> Jarek Potiuk
> > >> Polidea <https://www.polidea.com/> | Principal Software Engineer
> > >>
> > >> M: +48 660 796 129 <+48660796129>
> > >> [image: Polidea] <https://www.polidea.com/>
> > >>
> > >>
> > >
> > > --
> > >
> > > Jarek Potiuk
> > > Polidea <https://www.polidea.com/> | Principal Software Engineer
> > >
> > > M: +48 660 796 129 <+48660796129>
> > > [image: Polidea] <https://www.polidea.com/>
> >
>

Reply via email to