
 .. Licensed to the Apache Software Foundation (ASF) under one
    or more contributor license agreements.  See the NOTICE file
    distributed with this work for additional information
    regarding copyright ownership.  The ASF licenses this file
    to you under the Apache License, Version 2.0 (the
    "License"); you may not use this file except in compliance
    with the License.  You may obtain a copy of the License at

 ..   http://www.apache.org/licenses/LICENSE-2.0

 .. Unless required by applicable law or agreed to in writing,
    software distributed under the License is distributed on an
    "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
    KIND, either express or implied.  See the License for the
    specific language governing permissions and limitations
    under the License.


Package apache-airflow-providers-tableau
------------------------------------------------------

`Tableau <https://www.tableau.com/>`__


This is detailed commit list of changes for versions provider package: ``tableau``.
For high-level changelog, see :doc:`package information including changelog <index>`.



2.1.0
.....

Latest change: 2021-07-26

================================================================================================  ===========  =============================================================================
Commit                                                                                            Committed    Subject
================================================================================================  ===========  =============================================================================
`0dbd0f420 <https://github.com/apache/airflow/commit/0dbd0f420cc08e011317e2a9f21f92fff4a64c1b>`_  2021-07-26   ``Remove/refactor default_args pattern for miscellaneous providers (#16872)``
`29b6be848 <https://github.com/apache/airflow/commit/29b6be8482f4cd5da46511e91d3b910014980308>`_  2021-07-21   ``Refactored waiting function for Tableau Jobs (#17034)``
`ef3c75df1 <https://github.com/apache/airflow/commit/ef3c75df17d87b292f8c06b250a41633aaccbdc0>`_  2021-07-21   ``Fix bool conversion Verify parameter in Tableau Hook (#17125)``
`d02ded65e <https://github.com/apache/airflow/commit/d02ded65eaa7d2281e249b3fa028605d1b4c52fb>`_  2021-07-15   ``Fixed wrongly escaped characters in amazon's changelog (#17020)``
`b916b7507 <https://github.com/apache/airflow/commit/b916b7507921129dc48d6add1bdc4b923b60c9b9>`_  2021-07-15   ``Prepare documentation for July release of providers. (#17015)``
`53246ebef <https://github.com/apache/airflow/commit/53246ebef716933f71a28901e19367d84b0daa81>`_  2021-07-15   ``Deprecate Tableau personal token authentication (#16916)``
`df0746e13 <https://github.com/apache/airflow/commit/df0746e133ca0f54adb93257c119dd550846bb89>`_  2021-07-10   ``Allow disable SSL for TableauHook (#16365)``
================================================================================================  ===========  =============================================================================

2.0.0
.....

Latest change: 2021-06-18

================================================================================================  ===========  =======================================================================
Commit                                                                                            Committed    Subject
================================================================================================  ===========  =======================================================================
`bbc627a3d <https://github.com/apache/airflow/commit/bbc627a3dab17ba4cf920dd1a26dbed6f5cebfd1>`_  2021-06-18   ``Prepares documentation for rc2 release of Providers (#16501)``
`cbf8001d7 <https://github.com/apache/airflow/commit/cbf8001d7630530773f623a786f9eb319783b33c>`_  2021-06-16   ``Synchronizes updated changelog after buggfix release (#16464)``
`1fba5402b <https://github.com/apache/airflow/commit/1fba5402bb14b3ffa6429fdc683121935f88472f>`_  2021-06-15   ``More documentation update for June providers release (#16405)``
`9c94b72d4 <https://github.com/apache/airflow/commit/9c94b72d440b18a9e42123d20d48b951712038f9>`_  2021-06-07   ``Updated documentation for June 2021 provider release (#16294)``
`37681bca0 <https://github.com/apache/airflow/commit/37681bca0081dd228ac4047c17631867bba7a66f>`_  2021-05-07   ``Auto-apply apply_default decorator (#15667)``
`807ad32ce <https://github.com/apache/airflow/commit/807ad32ce59e001cb3532d98a05fa7d0d7fabb95>`_  2021-05-01   ``Prepares provider release after PIP 21 compatibility (#15576)``
`40a2476a5 <https://github.com/apache/airflow/commit/40a2476a5db14ee26b5108d72635da116eab720b>`_  2021-04-28   ``Adds interactivity when generating provider documentation. (#15518)``
`bf2b48174 <https://github.com/apache/airflow/commit/bf2b48174a1ccfe398eefba7f04a5cacac421266>`_  2021-04-27   ``Add Connection Documentation for Providers (#15499)``
`68e4c4dcb <https://github.com/apache/airflow/commit/68e4c4dcb0416eb51a7011a3bb040f1e23d7bba8>`_  2021-03-20   ``Remove Backport Providers (#14886)``
================================================================================================  ===========  =======================================================================

1.0.0
.....

Latest change: 2021-02-27

================================================================================================  ===========  ===================================================================
Commit                                                                                            Committed    Subject
================================================================================================  ===========  ===================================================================
`589d6dec9 <https://github.com/apache/airflow/commit/589d6dec922565897785bcbc5ac6bb3b973d7f5d>`_  2021-02-27   ``Prepare to release the next wave of providers: (#14487)``
`45e72ca83 <https://github.com/apache/airflow/commit/45e72ca83049a7db526b1f0fbd94c75f5f92cc75>`_  2021-02-25   ``Add Tableau provider separate from Salesforce Provider (#14030)``
================================================================================================  ===========  ===================================================================
