You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@airflow.apache.org by po...@apache.org on 2022/07/17 09:17:55 UTC

[airflow-site] branch add-documentation-2022-07-17 created (now d1c5ac8850)

This is an automated email from the ASF dual-hosted git repository.

potiuk pushed a change to branch add-documentation-2022-07-17
in repository https://gitbox.apache.org/repos/asf/airflow-site.git


      at d1c5ac8850 Add documentation for packages - 2022-07-17

This branch includes the following new commits:

     new d1c5ac8850 Add documentation for packages - 2022-07-17

The 1 revisions listed above as "new" are entirely new to this
repository and will be described in separate emails.  The revisions
listed as "add" were already present in the repository and have only
been added to this reference.



[airflow-site] 01/01: Add documentation for packages - 2022-07-17

Posted by po...@apache.org.
This is an automated email from the ASF dual-hosted git repository.

potiuk pushed a commit to branch add-documentation-2022-07-17
in repository https://gitbox.apache.org/repos/asf/airflow-site.git

commit d1c5ac8850960fb9a4d8a1bb1a65ae062802ccb4
Author: Jarek Potiuk <ja...@potiuk.com>
AuthorDate: Sun Jul 17 11:17:49 2022 +0200

    Add documentation for packages - 2022-07-17
---
 .../apache-airflow-providers-sftp/4.0.0/.buildinfo |     4 +
 .../_api/airflow/providers/sftp/hooks/index.html}  |   186 +-
 .../airflow/providers/sftp/hooks/sftp/index.html}  |   762 +-
 .../4.0.0/_api/airflow/providers/sftp/index.html}  |   193 +-
 .../airflow/providers/sftp/operators/index.html}   |   186 +-
 .../providers/sftp/operators/sftp/index.html}      |   292 +-
 .../airflow/providers/sftp/sensors/index.html}     |   186 +-
 .../providers/sftp/sensors/sftp/index.html}        |   239 +-
 .../airflow/providers/sftp/hooks/sftp.html}        |  1000 +-
 .../airflow/providers/sftp/operators/sftp.html}    |   381 +-
 .../airflow/providers/sftp/sensors/sftp.html}      |   299 +-
 .../4.0.0/_modules/index.html}                     |   169 +-
 .../airflow/providers/sftp/hooks/index.rst.txt     |    15 +
 .../providers/sftp/hooks/sftp/index.rst.txt        |   230 +
 .../_api/airflow/providers/sftp/index.rst.txt      |    17 +
 .../airflow/providers/sftp/operators/index.rst.txt |    15 +
 .../providers/sftp/operators/sftp/index.rst.txt    |    95 +
 .../airflow/providers/sftp/sensors/index.rst.txt   |    15 +
 .../providers/sftp/sensors/sftp/index.rst.txt      |    47 +
 .../4.0.0/_sources/commits.rst.txt                 |   313 +
 .../4.0.0/_sources/connections/sftp.rst.txt        |   109 +
 .../4.0.0/_sources/index.rst.txt                   |   108 +
 .../installing-providers-from-sources.rst.txt      |    18 +
 .../4.0.0/_static/_gen/css/main-custom.min.css     |     1 +
 .../4.0.0/_static/_gen/css/main.min.css            |     7 +
 .../4.0.0/_static/_gen/js/docs.js                  |     1 +
 .../_sphinx_javascript_frameworks_compat.js        |   134 +
 .../4.0.0/_static/basic.css                        |   928 ++
 .../4.0.0/_static/check-solid.svg                  |     4 +
 .../4.0.0/_static/clipboard.min.js                 |     7 +
 .../4.0.0/_static/copy-button.svg                  |     5 +
 .../4.0.0/_static/copybutton.css                   |    93 +
 .../4.0.0/_static/copybutton.js                    |   220 +
 .../4.0.0/_static/copybutton_funcs.js              |    58 +
 .../4.0.0/_static/doctools.js                      |   264 +
 .../4.0.0/_static/documentation_options.js         |    14 +
 .../4.0.0/_static/file.png                         |   Bin 0 -> 286 bytes
 .../4.0.0/_static/graphviz.css                     |    19 +
 .../4.0.0/_static/jquery-3.6.0.js                  | 10881 +++++++++++++++++++
 .../4.0.0/_static/jquery.js                        |     2 +
 .../4.0.0/_static/language_data.js                 |   199 +
 .../4.0.0/_static/minus.png                        |   Bin 0 -> 90 bytes
 .../4.0.0/_static/pin_32.png                       |   Bin 0 -> 1201 bytes
 .../4.0.0/_static/plus.png                         |   Bin 0 -> 90 bytes
 .../4.0.0/_static/pygments.css                     |    74 +
 .../4.0.0/_static/searchtools.js                   |   531 +
 .../4.0.0/_static/underscore-1.13.1.js             |  2042 ++++
 .../4.0.0/_static/underscore.js                    |     6 +
 .../4.0.0/commits.html}                            |  1403 ++-
 .../4.0.0/connections/sftp.html}                   |   203 +-
 .../4.0.0/genindex.html}                           |   443 +-
 .../4.0.0/index.html}                              |   532 +-
 .../4.0.0/installing-providers-from-sources.html}  |   273 +-
 .../4.0.0/objects.inv                              |   Bin 0 -> 845 bytes
 .../4.0.0/py-modindex.html}                        |   263 +-
 .../4.0.0/search.html}                             |   228 +-
 .../4.0.0/searchindex.js                           |     1 +
 .../apache-airflow-providers-sftp/stable.txt       |     2 +-
 .../1.0.1/.buildinfo                               |     4 +
 .../airflow/providers/tabular/hooks/index.html}    |   188 +-
 .../providers/tabular/hooks/tabular/index.html}    |   308 +-
 .../_api/airflow/providers/tabular/index.html}     |   189 +-
 .../providers/tabular/example_tabular/index.html}  |   201 +-
 .../tests/system/providers/tabular/index.html}     |   188 +-
 .../airflow/providers/tabular/hooks/tabular.html}  |   302 +-
 .../1.0.1/_modules/index.html}                     |   170 +-
 .../system/providers/tabular/example_tabular.html} |   266 +-
 .../airflow/providers/tabular/hooks/index.rst.txt  |    15 +
 .../providers/tabular/hooks/tabular/index.rst.txt  |    88 +
 .../_api/airflow/providers/tabular/index.rst.txt   |    15 +
 .../tabular/example_tabular/index.rst.txt          |    19 +
 .../tests/system/providers/tabular/index.rst.txt   |    15 +
 .../1.0.1/_sources/commits.rst.txt                 |    51 +
 .../1.0.1/_sources/connections.rst.txt             |    42 +
 .../1.0.1/_sources/index.rst.txt                   |    87 +
 .../installing-providers-from-sources.rst.txt      |    18 +
 .../1.0.1/_static/_gen/css/main-custom.min.css     |     1 +
 .../1.0.1/_static/_gen/css/main.min.css            |     7 +
 .../1.0.1/_static/_gen/js/docs.js                  |     1 +
 .../_sphinx_javascript_frameworks_compat.js        |   134 +
 .../1.0.1/_static/basic.css                        |   928 ++
 .../1.0.1/_static/check-solid.svg                  |     4 +
 .../1.0.1/_static/clipboard.min.js                 |     7 +
 .../1.0.1/_static/copy-button.svg                  |     5 +
 .../1.0.1/_static/copybutton.css                   |    93 +
 .../1.0.1/_static/copybutton.js                    |   220 +
 .../1.0.1/_static/copybutton_funcs.js              |    58 +
 .../1.0.1/_static/doctools.js                      |   264 +
 .../1.0.1/_static/documentation_options.js         |    14 +
 .../1.0.1/_static/file.png                         |   Bin 0 -> 286 bytes
 .../1.0.1/_static/graphviz.css                     |    19 +
 .../1.0.1/_static/jquery-3.6.0.js                  | 10881 +++++++++++++++++++
 .../1.0.1/_static/jquery.js                        |     2 +
 .../1.0.1/_static/language_data.js                 |   199 +
 .../1.0.1/_static/minus.png                        |   Bin 0 -> 90 bytes
 .../1.0.1/_static/pin_32.png                       |   Bin 0 -> 1201 bytes
 .../1.0.1/_static/plus.png                         |   Bin 0 -> 90 bytes
 .../1.0.1/_static/pygments.css                     |    74 +
 .../1.0.1/_static/searchtools.js                   |   531 +
 .../1.0.1/_static/underscore-1.13.1.js             |  2042 ++++
 .../1.0.1/_static/underscore.js                    |     6 +
 .../1.0.1/commits.html}                            |   232 +-
 .../1.0.1/connections.html}                        |   198 +-
 .../1.0.1/genindex.html}                           |   337 +-
 .../1.0.1/index.html}                              |   265 +-
 .../1.0.1/installing-providers-from-sources.html}  |   275 +-
 .../1.0.1/objects.inv                              |   Bin 0 -> 691 bytes
 .../1.0.1/py-modindex.html}                        |   265 +-
 .../1.0.1/search.html}                             |   230 +-
 .../1.0.1/searchindex.js                           |     1 +
 .../apache-airflow-providers-tabular/stable.txt    |     2 +-
 .../core-extensions/connections.html               |    16 +-
 .../core-extensions/extra-links.html               |   110 +-
 .../core-extensions/logging.html                   |     6 +-
 .../core-extensions/secrets-backends.html          |     2 +-
 .../operators-and-hooks-ref/apache.html            |     2 +-
 .../operators-and-hooks-ref/aws.html               |     4 +-
 .../operators-and-hooks-ref/azure.html             |     6 +-
 .../operators-and-hooks-ref/google.html            |   390 +-
 .../operators-and-hooks-ref/protocol.html          |     8 +-
 .../operators-and-hooks-ref/services.html          |     8 +-
 .../operators-and-hooks-ref/software.html          |    32 +-
 .../apache-airflow-providers/packages-ref.html     |     8 +-
 123 files changed, 38841 insertions(+), 4929 deletions(-)

diff --git a/docs-archive/apache-airflow-providers-sftp/4.0.0/.buildinfo b/docs-archive/apache-airflow-providers-sftp/4.0.0/.buildinfo
new file mode 100644
index 0000000000..ec258f35f0
--- /dev/null
+++ b/docs-archive/apache-airflow-providers-sftp/4.0.0/.buildinfo
@@ -0,0 +1,4 @@
+# Sphinx build info version 1
+# This file hashes the configuration used when building these files. When it is not found, a full rebuild will be done.
+config: a5f359f6e2aa121c1f22b91c725278e8
+tags: 645f666f9bcd5a90fca523b33c5a78b7
diff --git a/docs-archive/apache-airflow-providers/core-extensions/secrets-backends.html b/docs-archive/apache-airflow-providers-sftp/4.0.0/_api/airflow/providers/sftp/hooks/index.html
similarity index 89%
copy from docs-archive/apache-airflow-providers/core-extensions/secrets-backends.html
copy to docs-archive/apache-airflow-providers-sftp/4.0.0/_api/airflow/providers/sftp/hooks/index.html
index f7628ed6ab..95ef447b48 100644
--- a/docs-archive/apache-airflow-providers/core-extensions/secrets-backends.html
+++ b/docs-archive/apache-airflow-providers-sftp/4.0.0/_api/airflow/providers/sftp/hooks/index.html
@@ -9,17 +9,18 @@
 <head>
         <meta charset="utf-8" />
     <meta name="viewport" content="width=device-width, initial-scale=1">
-        <title>Secret backends &mdash; apache-airflow-providers Documentation</title>
-    <link rel="stylesheet" href="../_static/_gen/css/main.min.css" type="text/css" />
-            <link rel="stylesheet" type="text/css" href="../_static/pygments.css" />
-            <link rel="stylesheet" type="text/css" href="../_static/_gen/css/main.min.css" />
-            <link rel="stylesheet" type="text/css" href="../_static/copybutton.css" />
-            <link rel="stylesheet" type="text/css" href="../_static/_gen/css/main-custom.min.css" />
-            <link rel="shortcut icon" href="../_static/pin_32.png"/>
-            <link rel="index" title="Index" href="../genindex.html" />
-            <link rel="search" title="Search" href="../search.html" />
-            <link rel="next" title="Community Providers" href="../howto/create-update-providers.html" />
-            <link rel="prev" title="Writing logs" href="logging.html" />
+        <title>airflow.providers.sftp.hooks &mdash; apache-airflow-providers-sftp Documentation</title>
+    <link rel="stylesheet" href="../../../../../_static/_gen/css/main.min.css" type="text/css" />
+            <link rel="stylesheet" type="text/css" href="../../../../../_static/pygments.css" />
+            <link rel="stylesheet" type="text/css" href="../../../../../_static/_gen/css/main.min.css" />
+            <link rel="stylesheet" type="text/css" href="../../../../../_static/copybutton.css" />
+            <link rel="stylesheet" type="text/css" href="../../../../../_static/_gen/css/main-custom.min.css" />
+            <link rel="stylesheet" type="text/css" href="../../../../../_static/graphviz.css" />
+            <link rel="shortcut icon" href="../../../../../_static/pin_32.png"/>
+            <link rel="index" title="Index" href="../../../../../genindex.html" />
+            <link rel="search" title="Search" href="../../../../../search.html" />
+            <link rel="next" title="airflow.providers.sftp.hooks.sftp" href="sftp/index.html" />
+            <link rel="prev" title="airflow.providers.sftp" href="../index.html" />
     <!-- Matomo -->
     <script>
         var _paq = window._paq = window._paq || [];
@@ -280,8 +281,21 @@
             <div class="content-drawer">
                 <div class="td-sidebar">
 
+<div id="docs-version-selector" class="docs-version-selector sidebar__version-selector">
+    <a class="dropdown-toggle" href="#" id="versionDropdown" role="button" data-toggle="dropdown" aria-haspopup="true"
+       aria-expanded="false">
+        <span class="bodytext__medium--greyish-brown">Version: </span><span class="version">4.0.0</span>
+    </a>
+    <div class="dropdown-menu" aria-labelledby="navbarDropdownMenuLink">
+
+    </div>
+    <script type="application/x-template" id="version-item-template">
+        <a class="dropdown-item"></a>
+    </script>
+</div>
+
 <div class="searchb-box">
-    <form class="search-form" action="../search.html" method="get">
+    <form class="search-form" action="../../../../../search.html" method="get">
         <input class="search-form__input" type="text" name="q" placeholder="Search docs" size="16">
         <input type="hidden" name="check_keywords" value="yes" />
         <input type="hidden" name="area" value="default" />
@@ -311,21 +325,19 @@
 
 
 <div class="toctree" role="navigation" aria-label="main navigation">
-    <ul class="current">
-<li class="toctree-l1"><a class="reference internal" href="../index.html">Providers</a></li>
-<li class="toctree-l1"><a class="reference internal" href="../packages-ref.html">Packages</a></li>
-<li class="toctree-l1"><a class="reference internal" href="../operators-and-hooks-ref/index.html">Operators and hooks</a></li>
-<li class="toctree-l1 current"><a class="reference internal" href="index.html">Core Extensions</a><ul class="current">
-<li class="toctree-l2"><a class="reference internal" href="auth-backends.html">Auth backends</a></li>
-<li class="toctree-l2"><a class="reference internal" href="connections.html">Connections</a></li>
-<li class="toctree-l2"><a class="reference internal" href="extra-links.html">Extra Links</a></li>
-<li class="toctree-l2"><a class="reference internal" href="logging.html">Writing logs</a></li>
-<li class="toctree-l2 current"><a class="current reference internal" href="#">Secret backends</a></li>
+    <p class="caption" role="heading"><span class="caption-text">References</span></p>
+<ul class="current">
+<li class="toctree-l1"><a class="reference internal" href="../../../../../connections/sftp.html">Connection types</a></li>
+<li class="toctree-l1 current"><a class="reference internal" href="../index.html">Python API</a></li>
 </ul>
-</li>
-<li class="toctree-l1"><a class="reference internal" href="../howto/create-update-providers.html">Update community providers</a></li>
-<li class="toctree-l1"><a class="reference internal" href="../installing-from-sources.html">Installing from sources</a></li>
-<li class="toctree-l1"><a class="reference internal" href="../installing-from-pypi.html">Installing from PyPI</a></li>
+<p class="caption" role="heading"><span class="caption-text">Resources</span></p>
+<ul>
+<li class="toctree-l1"><a class="reference external" href="https://pypi.org/project/apache-airflow-providers-sftp/">PyPI Repository</a></li>
+<li class="toctree-l1"><a class="reference internal" href="../../../../../installing-providers-from-sources.html">Installing from sources</a></li>
+</ul>
+<p class="caption" role="heading"><span class="caption-text">Commits</span></p>
+<ul>
+<li class="toctree-l1"><a class="reference internal" href="../../../../../commits.html">Detailed list of commits</a></li>
 </ul>
 
 </div>
@@ -406,8 +418,21 @@
             
     <div class="td-sidebar desktop-only d-print-none">
 
+<div id="docs-version-selector" class="docs-version-selector sidebar__version-selector">
+    <a class="dropdown-toggle" href="#" id="versionDropdown" role="button" data-toggle="dropdown" aria-haspopup="true"
+       aria-expanded="false">
+        <span class="bodytext__medium--greyish-brown">Version: </span><span class="version">4.0.0</span>
+    </a>
+    <div class="dropdown-menu" aria-labelledby="navbarDropdownMenuLink">
+
+    </div>
+    <script type="application/x-template" id="version-item-template">
+        <a class="dropdown-item"></a>
+    </script>
+</div>
+
 <div class="searchb-box">
-    <form class="search-form" action="../search.html" method="get">
+    <form class="search-form" action="../../../../../search.html" method="get">
         <input class="search-form__input" type="text" name="q" placeholder="Search docs" size="16">
         <input type="hidden" name="check_keywords" value="yes" />
         <input type="hidden" name="area" value="default" />
@@ -437,21 +462,19 @@
 
 
 <div class="toctree" role="navigation" aria-label="main navigation">
-    <ul class="current">
-<li class="toctree-l1"><a class="reference internal" href="../index.html">Providers</a></li>
-<li class="toctree-l1"><a class="reference internal" href="../packages-ref.html">Packages</a></li>
-<li class="toctree-l1"><a class="reference internal" href="../operators-and-hooks-ref/index.html">Operators and hooks</a></li>
-<li class="toctree-l1 current"><a class="reference internal" href="index.html">Core Extensions</a><ul class="current">
-<li class="toctree-l2"><a class="reference internal" href="auth-backends.html">Auth backends</a></li>
-<li class="toctree-l2"><a class="reference internal" href="connections.html">Connections</a></li>
-<li class="toctree-l2"><a class="reference internal" href="extra-links.html">Extra Links</a></li>
-<li class="toctree-l2"><a class="reference internal" href="logging.html">Writing logs</a></li>
-<li class="toctree-l2 current"><a class="current reference internal" href="#">Secret backends</a></li>
+    <p class="caption" role="heading"><span class="caption-text">References</span></p>
+<ul class="current">
+<li class="toctree-l1"><a class="reference internal" href="../../../../../connections/sftp.html">Connection types</a></li>
+<li class="toctree-l1 current"><a class="reference internal" href="../index.html">Python API</a></li>
 </ul>
-</li>
-<li class="toctree-l1"><a class="reference internal" href="../howto/create-update-providers.html">Update community providers</a></li>
-<li class="toctree-l1"><a class="reference internal" href="../installing-from-sources.html">Installing from sources</a></li>
-<li class="toctree-l1"><a class="reference internal" href="../installing-from-pypi.html">Installing from PyPI</a></li>
+<p class="caption" role="heading"><span class="caption-text">Resources</span></p>
+<ul>
+<li class="toctree-l1"><a class="reference external" href="https://pypi.org/project/apache-airflow-providers-sftp/">PyPI Repository</a></li>
+<li class="toctree-l1"><a class="reference internal" href="../../../../../installing-providers-from-sources.html">Installing from sources</a></li>
+</ul>
+<p class="caption" role="heading"><span class="caption-text">Commits</span></p>
+<ul>
+<li class="toctree-l1"><a class="reference internal" href="../../../../../commits.html">Detailed list of commits</a></li>
 </ul>
 
 </div>
@@ -540,11 +563,11 @@
 
     <ul class="breadcrumb">
         
-            <li class="breadcrumb-item"><a href="../index.html" class="icon icon-home"> Home</a></li>
+            <li class="breadcrumb-item"><a href="../../../../../index.html" class="icon icon-home"> Home</a></li>
             
-                <li class="breadcrumb-item"><a href="index.html">Core Extensions</a></li>
+                <li class="breadcrumb-item"><a href="../index.html"><code class="xref py py-mod docutils literal notranslate"><span class="pre">airflow.providers.sftp</span></code></a></li>
             
-            <li class="breadcrumb-item"><a href="secrets-backends.html"> Secret backends</a></li>
+            <li class="breadcrumb-item"><a href="index.html"> <code class="xref py py-mod docutils literal notranslate"><span class="pre">airflow.providers.sftp.hooks</span></code></a></li>
         
     </ul>
 </div>
@@ -555,54 +578,24 @@
                                 <div class="bodywrapper">
                                     <div class="body" role="main">
                                         
-  <blockquote>
-<div></div></blockquote>
-<div class="section" id="secret-backends">
-<h1>Secret backends<a class="headerlink" href="#secret-backends" title="Permalink to this heading">¶</a></h1>
-<p>This is a summary of all Apache Airflow Community provided implementations of secret backends
-exposed via community-managed providers.</p>
-<p>Airflow has the capability of reading connections, variables and configuration from Secret Backends rather
-than from its own Database. While storing such information in Airflow’s database is possible, many of the
-enterprise customers already have some secret managers storing secrets, and Airflow can tap into those
-via providers that implement secrets backends for services Airflow integrates with.</p>
-<p>You can also take a
-look at Secret backends available in the core Airflow in
-<a class="reference external" href="/docs/apache-airflow/stable/security/secrets/secrets-backend/index.html" title="(in apache-airflow v2.4.0.dev0)"><span>Secrets Backend</span></a> and here you can see the ones
-provided by the community-managed providers:</p>
-<div class="section" id="amazon">
-<h2>Amazon<a class="headerlink" href="#amazon" title="Permalink to this heading">¶</a></h2>
-<ul class="simple">
-<li><p><a class="reference external" href="/docs/apache-airflow-providers-amazon/stable/_api/airflow/providers/amazon/aws/secrets/secrets_manager/index.html#airflow.providers.amazon.aws.secrets.secrets_manager.SecretsManagerBackend" title="(in apache-airflow-providers-amazon v4.1.0)"><code class="xref py py-class docutils literal notranslate"><span class="pre">SecretsManagerBackend</span></code></a></p></li>
-<li><p><a class="reference external" href="/docs/apache-airflow-providers-amazon/stable/_api/airflow/providers/amazon/aws/secrets/systems_manager/index.html#airflow.providers.amazon.aws.secrets.systems_manager.SystemsManagerParameterStoreBackend" title="(in apache-airflow-providers-amazon v4.1.0)"><code class="xref py py-class docutils literal notranslate"><span class="pre">SystemsManagerParameterStoreBackend</span></code></a></p></li>
+  <div class="section" id="module-airflow.providers.sftp.hooks">
+<span id="airflow-providers-sftp-hooks"></span><h1><a class="reference internal" href="#module-airflow.providers.sftp.hooks" title="airflow.providers.sftp.hooks"><code class="xref py py-mod docutils literal notranslate"><span class="pre">airflow.providers.sftp.hooks</span></code></a><a class="headerlink" href="#module-airflow.providers.sftp.hooks" title="Permalink to this heading">¶</a></h1>
+<div class="section" id="submodules">
+<h2>Submodules<a class="headerlink" href="#submodules" title="Permalink to this heading">¶</a></h2>
+<div class="toctree-wrapper compound">
+<ul>
+<li class="toctree-l1"><a class="reference internal" href="sftp/index.html"><code class="xref py py-mod docutils literal notranslate"><span class="pre">airflow.providers.sftp.hooks.sftp</span></code></a></li>
 </ul>
 </div>
-<div class="section" id="google">
-<h2>Google<a class="headerlink" href="#google" title="Permalink to this heading">¶</a></h2>
-<ul class="simple">
-<li><p><a class="reference external" href="/docs/apache-airflow-providers-google/stable/_api/airflow/providers/google/cloud/secrets/secret_manager/index.html#airflow.providers.google.cloud.secrets.secret_manager.CloudSecretManagerBackend" title="(in apache-airflow-providers-google v8.1.0)"><code class="xref py py-class docutils literal notranslate"><span class="pre">CloudSecretManagerBackend</span></code></a></p></li>
-</ul>
-</div>
-<div class="section" id="hashicorp">
-<h2>Hashicorp<a class="headerlink" href="#hashicorp" title="Permalink to this heading">¶</a></h2>
-<ul class="simple">
-<li><p><a class="reference external" href="/docs/apache-airflow-providers-hashicorp/stable/_api/airflow/providers/hashicorp/secrets/vault/index.html#airflow.providers.hashicorp.secrets.vault.VaultBackend" title="(in apache-airflow-providers-hashicorp v3.0.1)"><code class="xref py py-class docutils literal notranslate"><span class="pre">VaultBackend</span></code></a></p></li>
-</ul>
-</div>
-<div class="section" id="microsoft-azure">
-<h2>Microsoft Azure<a class="headerlink" href="#microsoft-azure" title="Permalink to this heading">¶</a></h2>
-<ul class="simple">
-<li><p><a class="reference external" href="/docs/apache-airflow-providers-microsoft-azure/stable/_api/airflow/providers/microsoft/azure/secrets/key_vault/index.html#airflow.providers.microsoft.azure.secrets.key_vault.AzureKeyVaultBackend" title="(in apache-airflow-providers-microsoft-azure v4.1.0)"><code class="xref py py-class docutils literal notranslate"><span class="pre">AzureKeyVaultBackend</span></code></a></p></li>
-<li><p><code class="xref py py-class docutils literal notranslate"><span class="pre">AzureKeyVaultBackend</span></code></p></li>
-</ul>
 </div>
 </div>
 
 
     <div class="pager" role="navigation" aria-label="related navigation">
-            <a rel="prev" title="Writing logs" href="logging.html" >
+            <a rel="prev" title="airflow.providers.sftp" href="../index.html" >
                 <button class="btn-hollow btn-blue bodytext__medium--cerulean-blue" accesskey="p">Previous</button>
             </a>
-            <a rel="next" title="Community Providers" href="../howto/create-update-providers.html" >
+            <a rel="next" title="airflow.providers.sftp.hooks.sftp" href="sftp/index.html" >
                 <button class="btn-hollow btn-blue bodytext__medium--cerulean-blue" accesskey="n">Next</button>
             </a>
     </div>
@@ -672,11 +665,8 @@ provided by the community-managed providers:</p>
     <nav class="wy-nav-side-toc">
         <div class="wy-menu-vertical">
             <ul>
-<li><a class="reference internal" href="#">Secret backends</a><ul>
-<li><a class="reference internal" href="#amazon">Amazon</a></li>
-<li><a class="reference internal" href="#google">Google</a></li>
-<li><a class="reference internal" href="#hashicorp">Hashicorp</a></li>
-<li><a class="reference internal" href="#microsoft-azure">Microsoft Azure</a></li>
+<li><a class="reference internal" href="#"><code class="xref py py-mod docutils literal notranslate"><span class="pre">airflow.providers.sftp.hooks</span></code></a><ul>
+<li><a class="reference internal" href="#submodules">Submodules</a></li>
 </ul>
 </li>
 </ul>
@@ -701,7 +691,7 @@ provided by the community-managed providers:</p>
             
         
         <div class="base-layout--button">
-            <a href="https://github.com/apache/airflow/edit/main/docs/apache-airflow-providers/core-extensions/secrets-backends.rst" rel="nofollow">
+            <a href="https://github.com/apache/airflow/edit/main/docs/apache-airflow-providers-sftp/_api/airflow/providers/sftp/hooks/index.rst" rel="nofollow">
 
                 <button class="btn-hollow btn-brown btn-with-icon with-box-shadow button-fixed">
                     <svg xmlns="http://www.w3.org/2000/svg" width="30.76" height="30">
@@ -835,17 +825,17 @@ provided by the community-managed providers:</p>
         </span>
     </div>
 </footer>
-    <script type="text/javascript" src="../_static/_gen/js/docs.js"></script>
-    <script type="text/javascript" id="documentation_options" data-url_root="../" src="../_static/documentation_options.js"></script>
+    <script type="text/javascript" src="../../../../../_static/_gen/js/docs.js"></script>
+    <script type="text/javascript" id="documentation_options" data-url_root="../../../../../" src="../../../../../_static/documentation_options.js"></script>
     <script src="https://code.jquery.com/jquery-3.4.1.min.js" integrity="sha256-CSXorXvZcTkaix6Yvo6HppcZGetbYMGWSFlBw8HfCJo=" crossorigin="anonymous"></script>
     <script src="https://cdnjs.cloudflare.com/ajax/libs/popper.js/1.14.3/umd/popper.min.js" integrity="sha384-ZMP7rVo3mIykV+2+9J3UJ46jBk0WLaUAdn689aCwoqbBJiSnjAK/l8WvCWPIPm49" crossorigin="anonymous"></script>
     <script src="https://stackpath.bootstrapcdn.com/bootstrap/4.1.3/js/bootstrap.min.js" integrity="sha384-ChfqqxuZUCnJSK3+MXmPNIyE6ZbWh2IMqE241rYiqJxyMiZ6OW/JmZQ5stwEULTy" crossorigin="anonymous"></script>
-        <script data-url_root="../" id="documentation_options" src="../_static/documentation_options.js"></script>
-        <script src="../_static/jquery.js"></script>
-        <script src="../_static/underscore.js"></script>
-        <script src="../_static/_sphinx_javascript_frameworks_compat.js"></script>
-        <script src="../_static/doctools.js"></script>
-        <script src="../_static/clipboard.min.js"></script>
-        <script src="../_static/copybutton.js"></script>
+        <script data-url_root="../../../../../" id="documentation_options" src="../../../../../_static/documentation_options.js"></script>
+        <script src="../../../../../_static/jquery.js"></script>
+        <script src="../../../../../_static/underscore.js"></script>
+        <script src="../../../../../_static/_sphinx_javascript_frameworks_compat.js"></script>
+        <script src="../../../../../_static/doctools.js"></script>
+        <script src="../../../../../_static/clipboard.min.js"></script>
+        <script src="../../../../../_static/copybutton.js"></script>
 </body>
 </html>
\ No newline at end of file
diff --git a/docs-archive/apache-airflow-providers/operators-and-hooks-ref/protocol.html b/docs-archive/apache-airflow-providers-sftp/4.0.0/_api/airflow/providers/sftp/hooks/sftp/index.html
similarity index 66%
copy from docs-archive/apache-airflow-providers/operators-and-hooks-ref/protocol.html
copy to docs-archive/apache-airflow-providers-sftp/4.0.0/_api/airflow/providers/sftp/hooks/sftp/index.html
index 6bdd4a15ed..6cb3e47c17 100644
--- a/docs-archive/apache-airflow-providers/operators-and-hooks-ref/protocol.html
+++ b/docs-archive/apache-airflow-providers-sftp/4.0.0/_api/airflow/providers/sftp/hooks/sftp/index.html
@@ -9,17 +9,18 @@
 <head>
         <meta charset="utf-8" />
     <meta name="viewport" content="width=device-width, initial-scale=1">
-        <title>Protocol integrations &mdash; apache-airflow-providers Documentation</title>
-    <link rel="stylesheet" href="../_static/_gen/css/main.min.css" type="text/css" />
-            <link rel="stylesheet" type="text/css" href="../_static/pygments.css" />
-            <link rel="stylesheet" type="text/css" href="../_static/_gen/css/main.min.css" />
-            <link rel="stylesheet" type="text/css" href="../_static/copybutton.css" />
-            <link rel="stylesheet" type="text/css" href="../_static/_gen/css/main-custom.min.css" />
-            <link rel="shortcut icon" href="../_static/pin_32.png"/>
-            <link rel="index" title="Index" href="../genindex.html" />
-            <link rel="search" title="Search" href="../search.html" />
-            <link rel="next" title="Services" href="services.html" />
-            <link rel="prev" title="Google" href="google.html" />
+        <title>airflow.providers.sftp.hooks.sftp &mdash; apache-airflow-providers-sftp Documentation</title>
+    <link rel="stylesheet" href="../../../../../../_static/_gen/css/main.min.css" type="text/css" />
+            <link rel="stylesheet" type="text/css" href="../../../../../../_static/pygments.css" />
+            <link rel="stylesheet" type="text/css" href="../../../../../../_static/_gen/css/main.min.css" />
+            <link rel="stylesheet" type="text/css" href="../../../../../../_static/copybutton.css" />
+            <link rel="stylesheet" type="text/css" href="../../../../../../_static/_gen/css/main-custom.min.css" />
+            <link rel="stylesheet" type="text/css" href="../../../../../../_static/graphviz.css" />
+            <link rel="shortcut icon" href="../../../../../../_static/pin_32.png"/>
+            <link rel="index" title="Index" href="../../../../../../genindex.html" />
+            <link rel="search" title="Search" href="../../../../../../search.html" />
+            <link rel="next" title="airflow.providers.sftp.operators" href="../../operators/index.html" />
+            <link rel="prev" title="airflow.providers.sftp.hooks" href="../index.html" />
     <!-- Matomo -->
     <script>
         var _paq = window._paq = window._paq || [];
@@ -280,8 +281,21 @@
             <div class="content-drawer">
                 <div class="td-sidebar">
 
+<div id="docs-version-selector" class="docs-version-selector sidebar__version-selector">
+    <a class="dropdown-toggle" href="#" id="versionDropdown" role="button" data-toggle="dropdown" aria-haspopup="true"
+       aria-expanded="false">
+        <span class="bodytext__medium--greyish-brown">Version: </span><span class="version">4.0.0</span>
+    </a>
+    <div class="dropdown-menu" aria-labelledby="navbarDropdownMenuLink">
+
+    </div>
+    <script type="application/x-template" id="version-item-template">
+        <a class="dropdown-item"></a>
+    </script>
+</div>
+
 <div class="searchb-box">
-    <form class="search-form" action="../search.html" method="get">
+    <form class="search-form" action="../../../../../../search.html" method="get">
         <input class="search-form__input" type="text" name="q" placeholder="Search docs" size="16">
         <input type="hidden" name="check_keywords" value="yes" />
         <input type="hidden" name="area" value="default" />
@@ -311,23 +325,19 @@
 
 
 <div class="toctree" role="navigation" aria-label="main navigation">
-    <ul class="current">
-<li class="toctree-l1"><a class="reference internal" href="../index.html">Providers</a></li>
-<li class="toctree-l1"><a class="reference internal" href="../packages-ref.html">Packages</a></li>
-<li class="toctree-l1 current"><a class="reference internal" href="index.html">Operators and hooks</a><ul class="current">
-<li class="toctree-l2"><a class="reference internal" href="apache.html">ASF: Apache Software Foundation</a></li>
-<li class="toctree-l2"><a class="reference internal" href="aws.html">AWS: Amazon Web Services</a></li>
-<li class="toctree-l2"><a class="reference internal" href="azure.html">Azure: Microsoft Azure</a></li>
-<li class="toctree-l2"><a class="reference internal" href="google.html">Google</a></li>
-<li class="toctree-l2 current"><a class="current reference internal" href="#">Protocol integrations</a></li>
-<li class="toctree-l2"><a class="reference internal" href="services.html">Services</a></li>
-<li class="toctree-l2"><a class="reference internal" href="software.html">Software integrations</a></li>
+    <p class="caption" role="heading"><span class="caption-text">References</span></p>
+<ul class="current">
+<li class="toctree-l1"><a class="reference internal" href="../../../../../../connections/sftp.html">Connection types</a></li>
+<li class="toctree-l1 current"><a class="reference internal" href="../../index.html">Python API</a></li>
 </ul>
-</li>
-<li class="toctree-l1"><a class="reference internal" href="../core-extensions/index.html">Core Extensions</a></li>
-<li class="toctree-l1"><a class="reference internal" href="../howto/create-update-providers.html">Update community providers</a></li>
-<li class="toctree-l1"><a class="reference internal" href="../installing-from-sources.html">Installing from sources</a></li>
-<li class="toctree-l1"><a class="reference internal" href="../installing-from-pypi.html">Installing from PyPI</a></li>
+<p class="caption" role="heading"><span class="caption-text">Resources</span></p>
+<ul>
+<li class="toctree-l1"><a class="reference external" href="https://pypi.org/project/apache-airflow-providers-sftp/">PyPI Repository</a></li>
+<li class="toctree-l1"><a class="reference internal" href="../../../../../../installing-providers-from-sources.html">Installing from sources</a></li>
+</ul>
+<p class="caption" role="heading"><span class="caption-text">Commits</span></p>
+<ul>
+<li class="toctree-l1"><a class="reference internal" href="../../../../../../commits.html">Detailed list of commits</a></li>
 </ul>
 
 </div>
@@ -408,8 +418,21 @@
             
     <div class="td-sidebar desktop-only d-print-none">
 
+<div id="docs-version-selector" class="docs-version-selector sidebar__version-selector">
+    <a class="dropdown-toggle" href="#" id="versionDropdown" role="button" data-toggle="dropdown" aria-haspopup="true"
+       aria-expanded="false">
+        <span class="bodytext__medium--greyish-brown">Version: </span><span class="version">4.0.0</span>
+    </a>
+    <div class="dropdown-menu" aria-labelledby="navbarDropdownMenuLink">
+
+    </div>
+    <script type="application/x-template" id="version-item-template">
+        <a class="dropdown-item"></a>
+    </script>
+</div>
+
 <div class="searchb-box">
-    <form class="search-form" action="../search.html" method="get">
+    <form class="search-form" action="../../../../../../search.html" method="get">
         <input class="search-form__input" type="text" name="q" placeholder="Search docs" size="16">
         <input type="hidden" name="check_keywords" value="yes" />
         <input type="hidden" name="area" value="default" />
@@ -439,23 +462,19 @@
 
 
 <div class="toctree" role="navigation" aria-label="main navigation">
-    <ul class="current">
-<li class="toctree-l1"><a class="reference internal" href="../index.html">Providers</a></li>
-<li class="toctree-l1"><a class="reference internal" href="../packages-ref.html">Packages</a></li>
-<li class="toctree-l1 current"><a class="reference internal" href="index.html">Operators and hooks</a><ul class="current">
-<li class="toctree-l2"><a class="reference internal" href="apache.html">ASF: Apache Software Foundation</a></li>
-<li class="toctree-l2"><a class="reference internal" href="aws.html">AWS: Amazon Web Services</a></li>
-<li class="toctree-l2"><a class="reference internal" href="azure.html">Azure: Microsoft Azure</a></li>
-<li class="toctree-l2"><a class="reference internal" href="google.html">Google</a></li>
-<li class="toctree-l2 current"><a class="current reference internal" href="#">Protocol integrations</a></li>
-<li class="toctree-l2"><a class="reference internal" href="services.html">Services</a></li>
-<li class="toctree-l2"><a class="reference internal" href="software.html">Software integrations</a></li>
+    <p class="caption" role="heading"><span class="caption-text">References</span></p>
+<ul class="current">
+<li class="toctree-l1"><a class="reference internal" href="../../../../../../connections/sftp.html">Connection types</a></li>
+<li class="toctree-l1 current"><a class="reference internal" href="../../index.html">Python API</a></li>
 </ul>
-</li>
-<li class="toctree-l1"><a class="reference internal" href="../core-extensions/index.html">Core Extensions</a></li>
-<li class="toctree-l1"><a class="reference internal" href="../howto/create-update-providers.html">Update community providers</a></li>
-<li class="toctree-l1"><a class="reference internal" href="../installing-from-sources.html">Installing from sources</a></li>
-<li class="toctree-l1"><a class="reference internal" href="../installing-from-pypi.html">Installing from PyPI</a></li>
+<p class="caption" role="heading"><span class="caption-text">Resources</span></p>
+<ul>
+<li class="toctree-l1"><a class="reference external" href="https://pypi.org/project/apache-airflow-providers-sftp/">PyPI Repository</a></li>
+<li class="toctree-l1"><a class="reference internal" href="../../../../../../installing-providers-from-sources.html">Installing from sources</a></li>
+</ul>
+<p class="caption" role="heading"><span class="caption-text">Commits</span></p>
+<ul>
+<li class="toctree-l1"><a class="reference internal" href="../../../../../../commits.html">Detailed list of commits</a></li>
 </ul>
 
 </div>
@@ -544,11 +563,13 @@
 
     <ul class="breadcrumb">
         
-            <li class="breadcrumb-item"><a href="../index.html" class="icon icon-home"> Home</a></li>
+            <li class="breadcrumb-item"><a href="../../../../../../index.html" class="icon icon-home"> Home</a></li>
+            
+                <li class="breadcrumb-item"><a href="../../index.html"><code class="xref py py-mod docutils literal notranslate"><span class="pre">airflow.providers.sftp</span></code></a></li>
             
-                <li class="breadcrumb-item"><a href="index.html">Operators and Hooks Reference</a></li>
+                <li class="breadcrumb-item"><a href="../index.html"><code class="xref py py-mod docutils literal notranslate"><span class="pre">airflow.providers.sftp.hooks</span></code></a></li>
             
-            <li class="breadcrumb-item"><a href="protocol.html"> Protocol integrations</a></li>
+            <li class="breadcrumb-item"><a href="index.html"> <code class="xref py py-mod docutils literal notranslate"><span class="pre">airflow.providers.sftp.hooks.sftp</span></code></a></li>
         
     </ul>
 </div>
@@ -559,388 +580,343 @@
                                 <div class="bodywrapper">
                                     <div class="body" role="main">
                                         
-  <blockquote>
-<div></div></blockquote>
-<div class="section" id="protocol-integrations">
-<h1>Protocol integrations<a class="headerlink" href="#protocol-integrations" title="Permalink to this heading">¶</a></h1>
-<div class="section" id="protocols">
-<h2>Protocols<a class="headerlink" href="#protocols" title="Permalink to this heading">¶</a></h2>
-<p>These integrations allow you to perform various operations within various services using standardized
-communication protocols or interface.</p>
-<div class="section" id="file-transfer-protocol-ftp">
-<h3>File Transfer Protocol (FTP)<a class="headerlink" href="#file-transfer-protocol-ftp" title="Permalink to this heading">¶</a></h3>
+  <div class="section" id="module-airflow.providers.sftp.hooks.sftp">
+<span id="airflow-providers-sftp-hooks-sftp"></span><h1><a class="reference internal" href="#module-airflow.providers.sftp.hooks.sftp" title="airflow.providers.sftp.hooks.sftp"><code class="xref py py-mod docutils literal notranslate"><span class="pre">airflow.providers.sftp.hooks.sftp</span></code></a><a class="headerlink" href="#module-airflow.providers.sftp.hooks.sftp" title="Permalink to this heading">¶</a></h1>
+<p>This module contains SFTP hook.</p>
+<div class="section" id="module-contents">
+<h2>Module Contents<a class="headerlink" href="#module-contents" title="Permalink to this heading">¶</a></h2>
+<div class="section" id="classes">
+<h3>Classes<a class="headerlink" href="#classes" title="Permalink to this heading">¶</a></h3>
+<table class="autosummary longtable docutils align-default">
+<colgroup>
+<col style="width: 10%" />
+<col style="width: 90%" />
+</colgroup>
+<tbody>
+<tr class="row-odd"><td><p><a class="reference internal" href="#airflow.providers.sftp.hooks.sftp.SFTPHook" title="airflow.providers.sftp.hooks.sftp.SFTPHook"><code class="xref py py-obj docutils literal notranslate"><span class="pre">SFTPHook</span></code></a></p></td>
+<td><p>This hook is inherited from SSH hook. Please refer to SSH hook for the input</p></td>
+</tr>
+</tbody>
+</table>
+<dl class="py class">
+<dt class="sig sig-object py" id="airflow.providers.sftp.hooks.sftp.SFTPHook">
+<em class="property"><span class="pre">class</span><span class="w"> </span></em><span class="sig-prename descclassname"><span class="pre">airflow.providers.sftp.hooks.sftp.</span></span><span class="sig-name descname"><span class="pre">SFTPHook</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">ssh_conn_id</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">'sftp_default'</span></spa [...]
+<dd><p>Bases: <a class="reference external" href="/docs/apache-airflow-providers-ssh/stable/_api/airflow/providers/ssh/hooks/ssh/index.html#airflow.providers.ssh.hooks.ssh.SSHHook" title="(in apache-airflow-providers-ssh v3.1.0)"><code class="xref py py-obj docutils literal notranslate"><span class="pre">airflow.providers.ssh.hooks.ssh.SSHHook</span></code></a></p>
+<p>This hook is inherited from SSH hook. Please refer to SSH hook for the input
+arguments.</p>
+<p>Interact with SFTP.</p>
 <dl class="field-list simple">
-<dt class="field-odd">Hooks</dt>
-<dd class="field-odd"><p><a class="reference external" href="/docs/apache-airflow-providers-ftp/stable/_api/airflow/providers/ftp/hooks/ftp/index.html#module-airflow.providers.ftp.hooks.ftp" title="(in apache-airflow-providers-ftp v3.1.0)"><code class="xref py py-mod docutils literal notranslate"><span class="pre">airflow.providers.ftp.hooks.ftp</span></code></a>.</p>
+<dt class="field-odd">Pitfalls:</dt>
+<dd class="field-odd"><ul class="simple">
+<li><p>In contrast with FTPHook describe_directory only returns size, type and
+modify. It doesn’t return unix.owner, unix.mode, perm, unix.group and
+unique.</p></li>
+<li><dl class="simple">
+<dt>retrieve_file and store_file only take a local full path and not a</dt><dd><p>buffer.</p>
 </dd>
-<dt class="field-even">Provider</dt>
-<dd class="field-even"><p><a class="reference internal" href="../packages-ref.html#std-provider-apache-airflow-providers-ftp"><code class="xref std std-provider docutils literal notranslate"><span class="pre">apache-airflow-providers-ftp</span></code></a></p>
-</dd>
-<dt class="field-odd">Product documentation</dt>
-<dd class="field-odd"><p><a class="reference external" href="https://tools.ietf.org/html/rfc114">File Transfer Protocol (FTP)</a></p>
+</dl>
+</li>
+<li><p>If no mode is passed to create_directory it will be created with 777
+permissions.</p></li>
+</ul>
 </dd>
 </dl>
-</div>
-<div class="section" id="grpc">
-<h3>gRPC<a class="headerlink" href="#grpc" title="Permalink to this heading">¶</a></h3>
+<p>Errors that may occur throughout but should be handled downstream.</p>
+<p>For consistency reasons with SSHHook, the preferred parameter is “ssh_conn_id”.</p>
 <dl class="field-list simple">
-<dt class="field-odd">Operators</dt>
-<dd class="field-odd"><p><a class="reference external" href="/docs/apache-airflow-providers-grpc/stable/_api/airflow/providers/grpc/operators/grpc/index.html#module-airflow.providers.grpc.operators.grpc" title="(in apache-airflow-providers-grpc v3.0.0)"><code class="xref py py-mod docutils literal notranslate"><span class="pre">airflow.providers.grpc.operators.grpc</span></code></a>.</p>
-</dd>
-<dt class="field-even">Hooks</dt>
-<dd class="field-even"><p><a class="reference external" href="/docs/apache-airflow-providers-grpc/stable/_api/airflow/providers/grpc/hooks/grpc/index.html#module-airflow.providers.grpc.hooks.grpc" title="(in apache-airflow-providers-grpc v3.0.0)"><code class="xref py py-mod docutils literal notranslate"><span class="pre">airflow.providers.grpc.hooks.grpc</span></code></a>.</p>
-</dd>
-<dt class="field-odd">Provider</dt>
-<dd class="field-odd"><p><a class="reference internal" href="../packages-ref.html#std-provider-apache-airflow-providers-grpc"><code class="xref std std-provider docutils literal notranslate"><span class="pre">apache-airflow-providers-grpc</span></code></a></p>
-</dd>
-<dt class="field-even">Product documentation</dt>
-<dd class="field-even"><p><a class="reference external" href="https://grpc.io/">gRPC</a></p>
+<dt class="field-odd">Parameters</dt>
+<dd class="field-odd"><ul class="simple">
+<li><p><strong>ssh_conn_id</strong> (<em>Optional</em><em>[</em><a class="reference external" href="https://docs.python.org/3/library/stdtypes.html#str" title="(in Python v3.10)"><em>str</em></a><em>]</em>) – The <a class="reference internal" href="../../../../../../connections/sftp.html#howto-connection-sftp"><span class="std std-ref">sftp connection id</span></a></p></li>
+<li><p><strong>ssh_hook</strong> (<em>Optional</em><em>[</em><a class="reference external" href="/docs/apache-airflow-providers-ssh/stable/_api/airflow/providers/ssh/hooks/ssh/index.html#airflow.providers.ssh.hooks.ssh.SSHHook" title="(in apache-airflow-providers-ssh v3.1.0)"><em>airflow.providers.ssh.hooks.ssh.SSHHook</em></a><em>]</em>) – Optional SSH hook (included to support passing of an SSH hook to the SFTP operator)</p></li>
+</ul>
 </dd>
 </dl>
-</div>
-<div class="section" id="hypertext-transfer-protocol-http">
-<h3>Hypertext Transfer Protocol (HTTP)<a class="headerlink" href="#hypertext-transfer-protocol-http" title="Permalink to this heading">¶</a></h3>
+<dl class="py attribute">
+<dt class="sig sig-object py" id="airflow.providers.sftp.hooks.sftp.SFTPHook.conn_name_attr">
+<span class="sig-name descname"><span class="pre">conn_name_attr</span></span><em class="property"><span class="w"> </span><span class="pre">=</span> <span class="pre">ssh_conn_id</span></em><a class="reference internal" href="../../../../../../_modules/airflow/providers/sftp/hooks/sftp.html#SFTPHook.conn_name_attr"><span class="viewcode-link"><span class="pre">[source]</span></span></a><a class="headerlink" href="#airflow.providers.sftp.hooks.sftp.SFTPHook.conn_name_attr" title="Permali [...]
+<dd></dd></dl>
+
+<dl class="py attribute">
+<dt class="sig sig-object py" id="airflow.providers.sftp.hooks.sftp.SFTPHook.default_conn_name">
+<span class="sig-name descname"><span class="pre">default_conn_name</span></span><em class="property"><span class="w"> </span><span class="pre">=</span> <span class="pre">sftp_default</span></em><a class="reference internal" href="../../../../../../_modules/airflow/providers/sftp/hooks/sftp.html#SFTPHook.default_conn_name"><span class="viewcode-link"><span class="pre">[source]</span></span></a><a class="headerlink" href="#airflow.providers.sftp.hooks.sftp.SFTPHook.default_conn_name" titl [...]
+<dd></dd></dl>
+
+<dl class="py attribute">
+<dt class="sig sig-object py" id="airflow.providers.sftp.hooks.sftp.SFTPHook.conn_type">
+<span class="sig-name descname"><span class="pre">conn_type</span></span><em class="property"><span class="w"> </span><span class="pre">=</span> <span class="pre">sftp</span></em><a class="reference internal" href="../../../../../../_modules/airflow/providers/sftp/hooks/sftp.html#SFTPHook.conn_type"><span class="viewcode-link"><span class="pre">[source]</span></span></a><a class="headerlink" href="#airflow.providers.sftp.hooks.sftp.SFTPHook.conn_type" title="Permalink to this definition" [...]
+<dd></dd></dl>
+
+<dl class="py attribute">
+<dt class="sig sig-object py" id="airflow.providers.sftp.hooks.sftp.SFTPHook.hook_name">
+<span class="sig-name descname"><span class="pre">hook_name</span></span><em class="property"><span class="w"> </span><span class="pre">=</span> <span class="pre">SFTP</span></em><a class="reference internal" href="../../../../../../_modules/airflow/providers/sftp/hooks/sftp.html#SFTPHook.hook_name"><span class="viewcode-link"><span class="pre">[source]</span></span></a><a class="headerlink" href="#airflow.providers.sftp.hooks.sftp.SFTPHook.hook_name" title="Permalink to this definition" [...]
+<dd></dd></dl>
+
+<dl class="py method">
+<dt class="sig sig-object py" id="airflow.providers.sftp.hooks.sftp.SFTPHook.get_ui_field_behaviour">
+<em class="property"><span class="pre">static</span><span class="w"> </span></em><span class="sig-name descname"><span class="pre">get_ui_field_behaviour</span></span><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="reference internal" href="../../../../../../_modules/airflow/providers/sftp/hooks/sftp.html#SFTPHook.get_ui_field_behaviour"><span class="viewcode-link"><span class="pre">[source]</span></span></a><a class="headerlink" href="#airflow.providers.sftp.ho [...]
+<dd><p>Returns custom field behaviour</p>
 <dl class="field-list simple">
-<dt class="field-odd">Operators</dt>
-<dd class="field-odd"><p><a class="reference external" href="/docs/apache-airflow-providers-http/stable/_api/airflow/providers/http/operators/http/index.html#module-airflow.providers.http.operators.http" title="(in apache-airflow-providers-http v4.0.0)"><code class="xref py py-mod docutils literal notranslate"><span class="pre">airflow.providers.http.operators.http</span></code></a>.</p>
-</dd>
-<dt class="field-even">Hooks</dt>
-<dd class="field-even"><p><a class="reference external" href="/docs/apache-airflow-providers-http/stable/_api/airflow/providers/http/hooks/http/index.html#module-airflow.providers.http.hooks.http" title="(in apache-airflow-providers-http v4.0.0)"><code class="xref py py-mod docutils literal notranslate"><span class="pre">airflow.providers.http.hooks.http</span></code></a>.</p>
-</dd>
-<dt class="field-odd">Guides</dt>
-<dd class="field-odd"><p><a class="reference external" href="/docs/apache-airflow-providers-http/stable/operators.html" title="(in apache-airflow-providers-http v4.0.0)"><span>HTTP Operators</span></a>.</p>
-</dd>
-<dt class="field-even">Provider</dt>
-<dd class="field-even"><p><a class="reference internal" href="../packages-ref.html#std-provider-apache-airflow-providers-http"><code class="xref std std-provider docutils literal notranslate"><span class="pre">apache-airflow-providers-http</span></code></a></p>
-</dd>
-<dt class="field-odd">Product documentation</dt>
-<dd class="field-odd"><p><a class="reference external" href="https://www.w3.org/Protocols/">Hypertext Transfer Protocol (HTTP)</a></p>
-</dd>
 </dl>
-</div>
-<div class="section" id="internet-message-access-protocol-imap">
-<h3>Internet Message Access Protocol (IMAP)<a class="headerlink" href="#internet-message-access-protocol-imap" title="Permalink to this heading">¶</a></h3>
+</dd></dl>
+
+<dl class="py method">
+<dt class="sig sig-object py" id="airflow.providers.sftp.hooks.sftp.SFTPHook.get_conn">
+<span class="sig-name descname"><span class="pre">get_conn</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">self</span></span></em><span class="sig-paren">)</span><a class="reference internal" href="../../../../../../_modules/airflow/providers/sftp/hooks/sftp.html#SFTPHook.get_conn"><span class="viewcode-link"><span class="pre">[source]</span></span></a><a class="headerlink" href="#airflow.providers.sftp.hooks.sftp.SFTPHook.get_conn" ti [...]
+<dd><p>Opens an SFTP connection to the remote host</p>
 <dl class="field-list simple">
-<dt class="field-odd">Hooks</dt>
-<dd class="field-odd"><p><a class="reference external" href="/docs/apache-airflow-providers-imap/stable/_api/airflow/providers/imap/hooks/imap/index.html#module-airflow.providers.imap.hooks.imap" title="(in apache-airflow-providers-imap v3.0.0)"><code class="xref py py-mod docutils literal notranslate"><span class="pre">airflow.providers.imap.hooks.imap</span></code></a>.</p>
-</dd>
-<dt class="field-even">Provider</dt>
-<dd class="field-even"><p><a class="reference internal" href="../packages-ref.html#std-provider-apache-airflow-providers-imap"><code class="xref std std-provider docutils literal notranslate"><span class="pre">apache-airflow-providers-imap</span></code></a></p>
-</dd>
-<dt class="field-odd">Product documentation</dt>
-<dd class="field-odd"><p><a class="reference external" href="https://tools.ietf.org/html/rfc3501">Internet Message Access Protocol (IMAP)</a></p>
+<dt class="field-odd">Return type</dt>
+<dd class="field-odd"><p>paramiko.SFTPClient</p>
 </dd>
 </dl>
-</div>
-<div class="section" id="java-database-connectivity-jdbc">
-<h3>Java Database Connectivity (JDBC)<a class="headerlink" href="#java-database-connectivity-jdbc" title="Permalink to this heading">¶</a></h3>
+</dd></dl>
+
+<dl class="py method">
+<dt class="sig sig-object py" id="airflow.providers.sftp.hooks.sftp.SFTPHook.close_conn">
+<span class="sig-name descname"><span class="pre">close_conn</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">self</span></span></em><span class="sig-paren">)</span><a class="reference internal" href="../../../../../../_modules/airflow/providers/sftp/hooks/sftp.html#SFTPHook.close_conn"><span class="viewcode-link"><span class="pre">[source]</span></span></a><a class="headerlink" href="#airflow.providers.sftp.hooks.sftp.SFTPHook.close_co [...]
+<dd><p>Closes the SFTP connection</p>
 <dl class="field-list simple">
-<dt class="field-odd">Operators</dt>
-<dd class="field-odd"><p><a class="reference external" href="/docs/apache-airflow-providers-jdbc/stable/_api/airflow/providers/jdbc/operators/jdbc/index.html#module-airflow.providers.jdbc.operators.jdbc" title="(in apache-airflow-providers-jdbc v3.1.0)"><code class="xref py py-mod docutils literal notranslate"><span class="pre">airflow.providers.jdbc.operators.jdbc</span></code></a>.</p>
-</dd>
-<dt class="field-even">Hooks</dt>
-<dd class="field-even"><p><a class="reference external" href="/docs/apache-airflow-providers-jdbc/stable/_api/airflow/providers/jdbc/hooks/jdbc/index.html#module-airflow.providers.jdbc.hooks.jdbc" title="(in apache-airflow-providers-jdbc v3.1.0)"><code class="xref py py-mod docutils literal notranslate"><span class="pre">airflow.providers.jdbc.hooks.jdbc</span></code></a>.</p>
-</dd>
-<dt class="field-odd">Guides</dt>
-<dd class="field-odd"><p><a class="reference external" href="/docs/apache-airflow-providers-jdbc/stable/operators.html" title="(in apache-airflow-providers-jdbc v3.1.0)"><span>JdbcOperator</span></a>.</p>
-</dd>
-<dt class="field-even">Provider</dt>
-<dd class="field-even"><p><a class="reference internal" href="../packages-ref.html#std-provider-apache-airflow-providers-jdbc"><code class="xref std std-provider docutils literal notranslate"><span class="pre">apache-airflow-providers-jdbc</span></code></a></p>
-</dd>
-<dt class="field-odd">Product documentation</dt>
-<dd class="field-odd"><p><a class="reference external" href="https://docs.oracle.com/javase/8/docs/technotes/guides/jdbc/">Java Database Connectivity (JDBC)</a></p>
-</dd>
 </dl>
-</div>
-<div class="section" id="odbc">
-<h3>ODBC<a class="headerlink" href="#odbc" title="Permalink to this heading">¶</a></h3>
+</dd></dl>
+
+<dl class="py method">
+<dt class="sig sig-object py" id="airflow.providers.sftp.hooks.sftp.SFTPHook.describe_directory">
+<span class="sig-name descname"><span class="pre">describe_directory</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">self</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">path</span></span></em><span class="sig-paren">)</span><a class="reference internal" href="../../../../../../_modules/airflow/providers/sftp/hooks/sftp.html#SFTPHook.describe_directory"><span class="viewcode-link"><span class="pre">[source]< [...]
+<dd><p>Returns a dictionary of {filename: {attributes}} for all files
+on the remote system (where the MLSD command is supported).</p>
 <dl class="field-list simple">
-<dt class="field-odd">Hooks</dt>
-<dd class="field-odd"><p><a class="reference external" href="/docs/apache-airflow-providers-odbc/stable/_api/airflow/providers/odbc/hooks/odbc/index.html#module-airflow.providers.odbc.hooks.odbc" title="(in apache-airflow-providers-odbc v3.1.0)"><code class="xref py py-mod docutils literal notranslate"><span class="pre">airflow.providers.odbc.hooks.odbc</span></code></a>.</p>
-</dd>
-<dt class="field-even">Provider</dt>
-<dd class="field-even"><p><a class="reference internal" href="../packages-ref.html#std-provider-apache-airflow-providers-odbc"><code class="xref std std-provider docutils literal notranslate"><span class="pre">apache-airflow-providers-odbc</span></code></a></p>
-</dd>
-<dt class="field-odd">Product documentation</dt>
-<dd class="field-odd"><p><a class="reference external" href="https://github.com/mkleehammer/pyodbc/wiki">ODBC</a></p>
+<dt class="field-odd">Parameters</dt>
+<dd class="field-odd"><p><strong>path</strong> (<a class="reference external" href="https://docs.python.org/3/library/stdtypes.html#str" title="(in Python v3.10)"><em>str</em></a>) – full path to the remote directory</p>
 </dd>
 </dl>
-</div>
-<div class="section" id="samba">
-<h3>Samba<a class="headerlink" href="#samba" title="Permalink to this heading">¶</a></h3>
+</dd></dl>
+
+<dl class="py method">
+<dt class="sig sig-object py" id="airflow.providers.sftp.hooks.sftp.SFTPHook.list_directory">
+<span class="sig-name descname"><span class="pre">list_directory</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">self</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">path</span></span></em><span class="sig-paren">)</span><a class="reference internal" href="../../../../../../_modules/airflow/providers/sftp/hooks/sftp.html#SFTPHook.list_directory"><span class="viewcode-link"><span class="pre">[source]</span></ [...]
+<dd><p>Returns a list of files on the remote system.</p>
 <dl class="field-list simple">
-<dt class="field-odd">Hooks</dt>
-<dd class="field-odd"><p><a class="reference external" href="/docs/apache-airflow-providers-samba/stable/_api/airflow/providers/samba/hooks/samba/index.html#module-airflow.providers.samba.hooks.samba" title="(in apache-airflow-providers-samba v4.0.0)"><code class="xref py py-mod docutils literal notranslate"><span class="pre">airflow.providers.samba.hooks.samba</span></code></a>.</p>
-</dd>
-<dt class="field-even">Provider</dt>
-<dd class="field-even"><p><a class="reference internal" href="../packages-ref.html#std-provider-apache-airflow-providers-samba"><code class="xref std std-provider docutils literal notranslate"><span class="pre">apache-airflow-providers-samba</span></code></a></p>
-</dd>
-<dt class="field-odd">Product documentation</dt>
-<dd class="field-odd"><p><a class="reference external" href="https://www.samba.org/">Samba</a></p>
+<dt class="field-odd">Parameters</dt>
+<dd class="field-odd"><p><strong>path</strong> (<a class="reference external" href="https://docs.python.org/3/library/stdtypes.html#str" title="(in Python v3.10)"><em>str</em></a>) – full path to the remote directory to list</p>
 </dd>
 </dl>
-</div>
-<div class="section" id="secure-shell-ssh">
-<h3>Secure Shell (SSH)<a class="headerlink" href="#secure-shell-ssh" title="Permalink to this heading">¶</a></h3>
+</dd></dl>
+
+<dl class="py method">
+<dt class="sig sig-object py" id="airflow.providers.sftp.hooks.sftp.SFTPHook.mkdir">
+<span class="sig-name descname"><span class="pre">mkdir</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">self</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">path</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">mode</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">777</span></span></em><span class="sig-paren">)</span><a cla [...]
+<dd><p>Creates a directory on the remote system.</p>
 <dl class="field-list simple">
-<dt class="field-odd">Operators</dt>
-<dd class="field-odd"><p><a class="reference external" href="/docs/apache-airflow-providers-ssh/stable/_api/airflow/providers/ssh/operators/ssh/index.html#module-airflow.providers.ssh.operators.ssh" title="(in apache-airflow-providers-ssh v3.1.0)"><code class="xref py py-mod docutils literal notranslate"><span class="pre">airflow.providers.ssh.operators.ssh</span></code></a>.</p>
-</dd>
-<dt class="field-even">Hooks</dt>
-<dd class="field-even"><p><a class="reference external" href="/docs/apache-airflow-providers-ssh/stable/_api/airflow/providers/ssh/hooks/ssh/index.html#module-airflow.providers.ssh.hooks.ssh" title="(in apache-airflow-providers-ssh v3.1.0)"><code class="xref py py-mod docutils literal notranslate"><span class="pre">airflow.providers.ssh.hooks.ssh</span></code></a>.</p>
-</dd>
-<dt class="field-odd">Provider</dt>
-<dd class="field-odd"><p><a class="reference internal" href="../packages-ref.html#std-provider-apache-airflow-providers-ssh"><code class="xref std std-provider docutils literal notranslate"><span class="pre">apache-airflow-providers-ssh</span></code></a></p>
-</dd>
-<dt class="field-even">Product documentation</dt>
-<dd class="field-even"><p><a class="reference external" href="https://tools.ietf.org/html/rfc4251">Secure Shell (SSH)</a></p>
+<dt class="field-odd">Parameters</dt>
+<dd class="field-odd"><ul class="simple">
+<li><p><strong>path</strong> (<a class="reference external" href="https://docs.python.org/3/library/stdtypes.html#str" title="(in Python v3.10)"><em>str</em></a>) – full path to the remote directory to create</p></li>
+<li><p><strong>mode</strong> (<a class="reference external" href="https://docs.python.org/3/library/functions.html#int" title="(in Python v3.10)"><em>int</em></a>) – permissions to set the directory with</p></li>
+</ul>
 </dd>
 </dl>
-</div>
-<div class="section" id="ssh-file-transfer-protocol-sftp">
-<h3>SSH File Transfer Protocol (SFTP)<a class="headerlink" href="#ssh-file-transfer-protocol-sftp" title="Permalink to this heading">¶</a></h3>
+</dd></dl>
+
+<dl class="py method">
+<dt class="sig sig-object py" id="airflow.providers.sftp.hooks.sftp.SFTPHook.isdir">
+<span class="sig-name descname"><span class="pre">isdir</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">self</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">path</span></span></em><span class="sig-paren">)</span><a class="reference internal" href="../../../../../../_modules/airflow/providers/sftp/hooks/sftp.html#SFTPHook.isdir"><span class="viewcode-link"><span class="pre">[source]</span></span></a><a class= [...]
+<dd><p>Checks if the path provided is a directory or not.</p>
 <dl class="field-list simple">
-<dt class="field-odd">Operators</dt>
-<dd class="field-odd"><p><a class="reference external" href="/docs/apache-airflow-providers-sftp/stable/_api/airflow/providers/sftp/operators/sftp/index.html#module-airflow.providers.sftp.operators.sftp" title="(in apache-airflow-providers-sftp v3.1.0)"><code class="xref py py-mod docutils literal notranslate"><span class="pre">airflow.providers.sftp.operators.sftp</span></code></a>.</p>
-</dd>
-<dt class="field-even">Hooks</dt>
-<dd class="field-even"><p><a class="reference external" href="/docs/apache-airflow-providers-sftp/stable/_api/airflow/providers/sftp/hooks/sftp/index.html#module-airflow.providers.sftp.hooks.sftp" title="(in apache-airflow-providers-sftp v3.1.0)"><code class="xref py py-mod docutils literal notranslate"><span class="pre">airflow.providers.sftp.hooks.sftp</span></code></a>.</p>
-</dd>
-<dt class="field-odd">Provider</dt>
-<dd class="field-odd"><p><a class="reference internal" href="../packages-ref.html#std-provider-apache-airflow-providers-sftp"><code class="xref std std-provider docutils literal notranslate"><span class="pre">apache-airflow-providers-sftp</span></code></a></p>
-</dd>
-<dt class="field-even">Product documentation</dt>
-<dd class="field-even"><p><a class="reference external" href="https://tools.ietf.org/wg/secsh/draft-ietf-secsh-filexfer/">SSH File Transfer Protocol (SFTP)</a></p>
+<dt class="field-odd">Parameters</dt>
+<dd class="field-odd"><p><strong>path</strong> (<a class="reference external" href="https://docs.python.org/3/library/stdtypes.html#str" title="(in Python v3.10)"><em>str</em></a>) – full path to the remote directory to check</p>
 </dd>
 </dl>
-</div>
-<div class="section" id="windows-powershell-remoting-protocol">
-<h3>Windows PowerShell Remoting Protocol<a class="headerlink" href="#windows-powershell-remoting-protocol" title="Permalink to this heading">¶</a></h3>
+</dd></dl>
+
+<dl class="py method">
+<dt class="sig sig-object py" id="airflow.providers.sftp.hooks.sftp.SFTPHook.isfile">
+<span class="sig-name descname"><span class="pre">isfile</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">self</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">path</span></span></em><span class="sig-paren">)</span><a class="reference internal" href="../../../../../../_modules/airflow/providers/sftp/hooks/sftp.html#SFTPHook.isfile"><span class="viewcode-link"><span class="pre">[source]</span></span></a><a clas [...]
+<dd><p>Checks if the path provided is a file or not.</p>
 <dl class="field-list simple">
-<dt class="field-odd">Operators</dt>
-<dd class="field-odd"><p><a class="reference external" href="/docs/apache-airflow-providers-microsoft-psrp/stable/_api/airflow/providers/microsoft/psrp/operators/psrp/index.html#module-airflow.providers.microsoft.psrp.operators.psrp" title="(in apache-airflow-providers-microsoft-psrp v2.0.0)"><code class="xref py py-mod docutils literal notranslate"><span class="pre">airflow.providers.microsoft.psrp.operators.psrp</span></code></a>.</p>
-</dd>
-<dt class="field-even">Hooks</dt>
-<dd class="field-even"><p><a class="reference external" href="/docs/apache-airflow-providers-microsoft-psrp/stable/_api/airflow/providers/microsoft/psrp/hooks/psrp/index.html#module-airflow.providers.microsoft.psrp.hooks.psrp" title="(in apache-airflow-providers-microsoft-psrp v2.0.0)"><code class="xref py py-mod docutils literal notranslate"><span class="pre">airflow.providers.microsoft.psrp.hooks.psrp</span></code></a>.</p>
-</dd>
-<dt class="field-odd">Provider</dt>
-<dd class="field-odd"><p><a class="reference internal" href="../packages-ref.html#std-provider-apache-airflow-providers-microsoft-psrp"><code class="xref std std-provider docutils literal notranslate"><span class="pre">apache-airflow-providers-microsoft-psrp</span></code></a></p>
-</dd>
-<dt class="field-even">Product documentation</dt>
-<dd class="field-even"><p><a class="reference external" href="https://docs.microsoft.com/en-us/openspecs/windows_protocols/ms-psrp/">Windows PowerShell Remoting Protocol</a></p>
+<dt class="field-odd">Parameters</dt>
+<dd class="field-odd"><p><strong>path</strong> (<a class="reference external" href="https://docs.python.org/3/library/stdtypes.html#str" title="(in Python v3.10)"><em>str</em></a>) – full path to the remote file to check</p>
 </dd>
 </dl>
-</div>
-<div class="section" id="windows-remote-management-winrm">
-<h3>Windows Remote Management (WinRM)<a class="headerlink" href="#windows-remote-management-winrm" title="Permalink to this heading">¶</a></h3>
+</dd></dl>
+
+<dl class="py method">
+<dt class="sig sig-object py" id="airflow.providers.sftp.hooks.sftp.SFTPHook.create_directory">
+<span class="sig-name descname"><span class="pre">create_directory</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">self</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">path</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">mode</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">777</span></span></em><span class="sig-paren">)</ [...]
+<dd><p>Creates a directory on the remote system.</p>
 <dl class="field-list simple">
-<dt class="field-odd">Operators</dt>
-<dd class="field-odd"><p><a class="reference external" href="/docs/apache-airflow-providers-microsoft-winrm/stable/_api/airflow/providers/microsoft/winrm/operators/winrm/index.html#module-airflow.providers.microsoft.winrm.operators.winrm" title="(in apache-airflow-providers-microsoft-winrm v3.0.0)"><code class="xref py py-mod docutils literal notranslate"><span class="pre">airflow.providers.microsoft.winrm.operators.winrm</span></code></a>.</p>
-</dd>
-<dt class="field-even">Hooks</dt>
-<dd class="field-even"><p><a class="reference external" href="/docs/apache-airflow-providers-microsoft-winrm/stable/_api/airflow/providers/microsoft/winrm/hooks/winrm/index.html#module-airflow.providers.microsoft.winrm.hooks.winrm" title="(in apache-airflow-providers-microsoft-winrm v3.0.0)"><code class="xref py py-mod docutils literal notranslate"><span class="pre">airflow.providers.microsoft.winrm.hooks.winrm</span></code></a>.</p>
-</dd>
-<dt class="field-odd">Guides</dt>
-<dd class="field-odd"><p><a class="reference external" href="/docs/apache-airflow-providers-microsoft-winrm/stable/operators.html" title="(in apache-airflow-providers-microsoft-winrm v3.0.0)"><span>Microsoft WinRM Operators</span></a>.</p>
-</dd>
-<dt class="field-even">Provider</dt>
-<dd class="field-even"><p><a class="reference internal" href="../packages-ref.html#std-provider-apache-airflow-providers-microsoft-winrm"><code class="xref std std-provider docutils literal notranslate"><span class="pre">apache-airflow-providers-microsoft-winrm</span></code></a></p>
-</dd>
-<dt class="field-odd">Product documentation</dt>
-<dd class="field-odd"><p><a class="reference external" href="https://docs.microsoft.com/en-us/windows/win32/winrm/portal">Windows Remote Management (WinRM)</a></p>
+<dt class="field-odd">Parameters</dt>
+<dd class="field-odd"><ul class="simple">
+<li><p><strong>path</strong> (<a class="reference external" href="https://docs.python.org/3/library/stdtypes.html#str" title="(in Python v3.10)"><em>str</em></a>) – full path to the remote directory to create</p></li>
+<li><p><strong>mode</strong> (<a class="reference external" href="https://docs.python.org/3/library/functions.html#int" title="(in Python v3.10)"><em>int</em></a>) – int representation of octal mode for directory</p></li>
+</ul>
 </dd>
 </dl>
-</div>
-</div>
-<div class="section" id="transfers">
-<h2>Transfers<a class="headerlink" href="#transfers" title="Permalink to this heading">¶</a></h2>
-<p>These integrations allow you to copy data.</p>
-<div class="section" id="internet-message-access-protocol-imap-to-amazon-simple-storage-service-s3">
-<h3>Internet Message Access Protocol (IMAP) to Amazon Simple Storage Service (S3)<a class="headerlink" href="#internet-message-access-protocol-imap-to-amazon-simple-storage-service-s3" title="Permalink to this heading">¶</a></h3>
+</dd></dl>
+
+<dl class="py method">
+<dt class="sig sig-object py" id="airflow.providers.sftp.hooks.sftp.SFTPHook.delete_directory">
+<span class="sig-name descname"><span class="pre">delete_directory</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">self</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">path</span></span></em><span class="sig-paren">)</span><a class="reference internal" href="../../../../../../_modules/airflow/providers/sftp/hooks/sftp.html#SFTPHook.delete_directory"><span class="viewcode-link"><span class="pre">[source]</spa [...]
+<dd><p>Deletes a directory on the remote system.</p>
 <dl class="field-list simple">
-<dt class="field-odd">Source product documentation</dt>
-<dd class="field-odd"><p><a class="reference external" href="https://tools.ietf.org/html/rfc3501">Internet Message Access Protocol (IMAP)</a></p>
-</dd>
-<dt class="field-even">Target product documentation</dt>
-<dd class="field-even"><p><a class="reference external" href="https://aws.amazon.com/s3/">Amazon Simple Storage Service (S3)</a></p>
-</dd>
-<dt class="field-odd">Operator guide</dt>
-<dd class="field-odd"><p><a class="reference external" href="/docs/apache-airflow-providers-amazon/stable/operators/transfer/imap_attachment_to_s3.html" title="(in apache-airflow-providers-amazon v4.1.0)"><span>Imap Attachment to Amazon S3</span></a></p>
-</dd>
-<dt class="field-even">Python API</dt>
-<dd class="field-even"><p><a class="reference external" href="/docs/apache-airflow-providers-amazon/stable/_api/airflow/providers/amazon/aws/transfers/imap_attachment_to_s3/index.html#module-airflow.providers.amazon.aws.transfers.imap_attachment_to_s3" title="(in apache-airflow-providers-amazon v4.1.0)"><code class="xref py py-mod docutils literal notranslate"><span class="pre">airflow.providers.amazon.aws.transfers.imap_attachment_to_s3</span></code></a></p>
-</dd>
-<dt class="field-odd">Provider</dt>
-<dd class="field-odd"><p><a class="reference internal" href="../packages-ref.html#std-provider-apache-airflow-providers-amazon"><code class="xref std std-provider docutils literal notranslate"><span class="pre">apache-airflow-providers-amazon</span></code></a></p>
+<dt class="field-odd">Parameters</dt>
+<dd class="field-odd"><p><strong>path</strong> (<a class="reference external" href="https://docs.python.org/3/library/stdtypes.html#str" title="(in Python v3.10)"><em>str</em></a>) – full path to the remote directory to delete</p>
 </dd>
 </dl>
-</div>
-<div class="section" id="amazon-simple-storage-service-s3-to-ssh-file-transfer-protocol-sftp">
-<h3>Amazon Simple Storage Service (S3) to SSH File Transfer Protocol (SFTP)<a class="headerlink" href="#amazon-simple-storage-service-s3-to-ssh-file-transfer-protocol-sftp" title="Permalink to this heading">¶</a></h3>
+</dd></dl>
+
+<dl class="py method">
+<dt class="sig sig-object py" id="airflow.providers.sftp.hooks.sftp.SFTPHook.retrieve_file">
+<span class="sig-name descname"><span class="pre">retrieve_file</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">self</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">remote_full_path</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">local_full_path</span></span></em><span class="sig-paren">)</span><a class="reference internal" href="../../../../../../_modules/airflow/providers/sftp/h [...]
+<dd><p>Transfers the remote file to a local location.
+If local_full_path is a string path, the file will be put
+at that location</p>
 <dl class="field-list simple">
-<dt class="field-odd">Source product documentation</dt>
-<dd class="field-odd"><p><a class="reference external" href="https://aws.amazon.com/s3/">Amazon Simple Storage Service (S3)</a></p>
-</dd>
-<dt class="field-even">Target product documentation</dt>
-<dd class="field-even"><p><a class="reference external" href="https://tools.ietf.org/wg/secsh/draft-ietf-secsh-filexfer/">SSH File Transfer Protocol (SFTP)</a></p>
-</dd>
-<dt class="field-odd">Operator guide</dt>
-<dd class="field-odd"><p><a class="reference external" href="/docs/apache-airflow-providers-amazon/stable/operators/transfer/s3_to_sftp.html" title="(in apache-airflow-providers-amazon v4.1.0)"><span>Amazon S3 to SFTP</span></a></p>
-</dd>
-<dt class="field-even">Python API</dt>
-<dd class="field-even"><p><a class="reference external" href="/docs/apache-airflow-providers-amazon/stable/_api/airflow/providers/amazon/aws/transfers/s3_to_sftp/index.html#module-airflow.providers.amazon.aws.transfers.s3_to_sftp" title="(in apache-airflow-providers-amazon v4.1.0)"><code class="xref py py-mod docutils literal notranslate"><span class="pre">airflow.providers.amazon.aws.transfers.s3_to_sftp</span></code></a></p>
-</dd>
-<dt class="field-odd">Provider</dt>
-<dd class="field-odd"><p><a class="reference internal" href="../packages-ref.html#std-provider-apache-airflow-providers-amazon"><code class="xref std std-provider docutils literal notranslate"><span class="pre">apache-airflow-providers-amazon</span></code></a></p>
+<dt class="field-odd">Parameters</dt>
+<dd class="field-odd"><ul class="simple">
+<li><p><strong>remote_full_path</strong> (<a class="reference external" href="https://docs.python.org/3/library/stdtypes.html#str" title="(in Python v3.10)"><em>str</em></a>) – full path to the remote file</p></li>
+<li><p><strong>local_full_path</strong> (<a class="reference external" href="https://docs.python.org/3/library/stdtypes.html#str" title="(in Python v3.10)"><em>str</em></a>) – full path to the local file</p></li>
+</ul>
 </dd>
 </dl>
-</div>
-<div class="section" id="ssh-file-transfer-protocol-sftp-to-amazon-simple-storage-service-s3">
-<h3>SSH File Transfer Protocol (SFTP) to Amazon Simple Storage Service (S3)<a class="headerlink" href="#ssh-file-transfer-protocol-sftp-to-amazon-simple-storage-service-s3" title="Permalink to this heading">¶</a></h3>
+</dd></dl>
+
+<dl class="py method">
+<dt class="sig sig-object py" id="airflow.providers.sftp.hooks.sftp.SFTPHook.store_file">
+<span class="sig-name descname"><span class="pre">store_file</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">self</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">remote_full_path</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">local_full_path</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">confirm</span></span><span class="o"><span class="pre">=</span>< [...]
+<dd><p>Transfers a local file to the remote location.
+If local_full_path_or_buffer is a string path, the file will be read
+from that location</p>
 <dl class="field-list simple">
-<dt class="field-odd">Source product documentation</dt>
-<dd class="field-odd"><p><a class="reference external" href="https://tools.ietf.org/wg/secsh/draft-ietf-secsh-filexfer/">SSH File Transfer Protocol (SFTP)</a></p>
-</dd>
-<dt class="field-even">Target product documentation</dt>
-<dd class="field-even"><p><a class="reference external" href="https://aws.amazon.com/s3/">Amazon Simple Storage Service (S3)</a></p>
-</dd>
-<dt class="field-odd">Operator guide</dt>
-<dd class="field-odd"><p><a class="reference external" href="/docs/apache-airflow-providers-amazon/stable/operators/transfer/sftp_to_s3.html" title="(in apache-airflow-providers-amazon v4.1.0)"><span>SFTP to Amazon S3</span></a></p>
-</dd>
-<dt class="field-even">Python API</dt>
-<dd class="field-even"><p><a class="reference external" href="/docs/apache-airflow-providers-amazon/stable/_api/airflow/providers/amazon/aws/transfers/sftp_to_s3/index.html#module-airflow.providers.amazon.aws.transfers.sftp_to_s3" title="(in apache-airflow-providers-amazon v4.1.0)"><code class="xref py py-mod docutils literal notranslate"><span class="pre">airflow.providers.amazon.aws.transfers.sftp_to_s3</span></code></a></p>
-</dd>
-<dt class="field-odd">Provider</dt>
-<dd class="field-odd"><p><a class="reference internal" href="../packages-ref.html#std-provider-apache-airflow-providers-amazon"><code class="xref std std-provider docutils literal notranslate"><span class="pre">apache-airflow-providers-amazon</span></code></a></p>
+<dt class="field-odd">Parameters</dt>
+<dd class="field-odd"><ul class="simple">
+<li><p><strong>remote_full_path</strong> (<a class="reference external" href="https://docs.python.org/3/library/stdtypes.html#str" title="(in Python v3.10)"><em>str</em></a>) – full path to the remote file</p></li>
+<li><p><strong>local_full_path</strong> (<a class="reference external" href="https://docs.python.org/3/library/stdtypes.html#str" title="(in Python v3.10)"><em>str</em></a>) – full path to the local file</p></li>
+</ul>
 </dd>
 </dl>
-</div>
-<div class="section" id="amazon-simple-storage-service-s3-to-file-transfer-protocol-ftp">
-<h3>Amazon Simple Storage Service (S3) to File Transfer Protocol (FTP)<a class="headerlink" href="#amazon-simple-storage-service-s3-to-file-transfer-protocol-ftp" title="Permalink to this heading">¶</a></h3>
+</dd></dl>
+
+<dl class="py method">
+<dt class="sig sig-object py" id="airflow.providers.sftp.hooks.sftp.SFTPHook.delete_file">
+<span class="sig-name descname"><span class="pre">delete_file</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">self</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">path</span></span></em><span class="sig-paren">)</span><a class="reference internal" href="../../../../../../_modules/airflow/providers/sftp/hooks/sftp.html#SFTPHook.delete_file"><span class="viewcode-link"><span class="pre">[source]</span></span>< [...]
+<dd><p>Removes a file on the FTP Server</p>
 <dl class="field-list simple">
-<dt class="field-odd">Source product documentation</dt>
-<dd class="field-odd"><p><a class="reference external" href="https://aws.amazon.com/s3/">Amazon Simple Storage Service (S3)</a></p>
-</dd>
-<dt class="field-even">Target product documentation</dt>
-<dd class="field-even"><p><a class="reference external" href="https://tools.ietf.org/html/rfc114">File Transfer Protocol (FTP)</a></p>
-</dd>
-<dt class="field-odd">Operator guide</dt>
-<dd class="field-odd"><p><a class="reference external" href="/docs/apache-airflow-providers-amazon/stable/operators/transfer/s3_to_ftp.html" title="(in apache-airflow-providers-amazon v4.1.0)"><span>Amazon S3 to FTP</span></a></p>
-</dd>
-<dt class="field-even">Python API</dt>
-<dd class="field-even"><p><a class="reference external" href="/docs/apache-airflow-providers-amazon/stable/_api/airflow/providers/amazon/aws/transfers/s3_to_ftp/index.html#module-airflow.providers.amazon.aws.transfers.s3_to_ftp" title="(in apache-airflow-providers-amazon v4.1.0)"><code class="xref py py-mod docutils literal notranslate"><span class="pre">airflow.providers.amazon.aws.transfers.s3_to_ftp</span></code></a></p>
-</dd>
-<dt class="field-odd">Provider</dt>
-<dd class="field-odd"><p><a class="reference internal" href="../packages-ref.html#std-provider-apache-airflow-providers-amazon"><code class="xref std std-provider docutils literal notranslate"><span class="pre">apache-airflow-providers-amazon</span></code></a></p>
+<dt class="field-odd">Parameters</dt>
+<dd class="field-odd"><p><strong>path</strong> (<a class="reference external" href="https://docs.python.org/3/library/stdtypes.html#str" title="(in Python v3.10)"><em>str</em></a>) – full path to the remote file</p>
 </dd>
 </dl>
-</div>
-<div class="section" id="file-transfer-protocol-ftp-to-amazon-simple-storage-service-s3">
-<h3>File Transfer Protocol (FTP) to Amazon Simple Storage Service (S3)<a class="headerlink" href="#file-transfer-protocol-ftp-to-amazon-simple-storage-service-s3" title="Permalink to this heading">¶</a></h3>
+</dd></dl>
+
+<dl class="py method">
+<dt class="sig sig-object py" id="airflow.providers.sftp.hooks.sftp.SFTPHook.get_mod_time">
+<span class="sig-name descname"><span class="pre">get_mod_time</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">self</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">path</span></span></em><span class="sig-paren">)</span><a class="reference internal" href="../../../../../../_modules/airflow/providers/sftp/hooks/sftp.html#SFTPHook.get_mod_time"><span class="viewcode-link"><span class="pre">[source]</span></span [...]
+<dd><p>Returns modification time.</p>
 <dl class="field-list simple">
-<dt class="field-odd">Source product documentation</dt>
-<dd class="field-odd"><p><a class="reference external" href="https://tools.ietf.org/html/rfc114">File Transfer Protocol (FTP)</a></p>
-</dd>
-<dt class="field-even">Target product documentation</dt>
-<dd class="field-even"><p><a class="reference external" href="https://aws.amazon.com/s3/">Amazon Simple Storage Service (S3)</a></p>
-</dd>
-<dt class="field-odd">Operator guide</dt>
-<dd class="field-odd"><p><a class="reference external" href="/docs/apache-airflow-providers-amazon/stable/operators/transfer/ftp_to_s3.html" title="(in apache-airflow-providers-amazon v4.1.0)"><span>FTP to Amazon S3</span></a></p>
-</dd>
-<dt class="field-even">Python API</dt>
-<dd class="field-even"><p><a class="reference external" href="/docs/apache-airflow-providers-amazon/stable/_api/airflow/providers/amazon/aws/transfers/ftp_to_s3/index.html#module-airflow.providers.amazon.aws.transfers.ftp_to_s3" title="(in apache-airflow-providers-amazon v4.1.0)"><code class="xref py py-mod docutils literal notranslate"><span class="pre">airflow.providers.amazon.aws.transfers.ftp_to_s3</span></code></a></p>
-</dd>
-<dt class="field-odd">Provider</dt>
-<dd class="field-odd"><p><a class="reference internal" href="../packages-ref.html#std-provider-apache-airflow-providers-amazon"><code class="xref std std-provider docutils literal notranslate"><span class="pre">apache-airflow-providers-amazon</span></code></a></p>
+<dt class="field-odd">Parameters</dt>
+<dd class="field-odd"><p><strong>path</strong> (<a class="reference external" href="https://docs.python.org/3/library/stdtypes.html#str" title="(in Python v3.10)"><em>str</em></a>) – full path to the remote file</p>
 </dd>
 </dl>
-</div>
-<div class="section" id="apache-hive-to-samba">
-<h3>Apache Hive to Samba<a class="headerlink" href="#apache-hive-to-samba" title="Permalink to this heading">¶</a></h3>
+</dd></dl>
+
+<dl class="py method">
+<dt class="sig sig-object py" id="airflow.providers.sftp.hooks.sftp.SFTPHook.path_exists">
+<span class="sig-name descname"><span class="pre">path_exists</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">self</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">path</span></span></em><span class="sig-paren">)</span><a class="reference internal" href="../../../../../../_modules/airflow/providers/sftp/hooks/sftp.html#SFTPHook.path_exists"><span class="viewcode-link"><span class="pre">[source]</span></span>< [...]
+<dd><p>Returns True if a remote entity exists</p>
 <dl class="field-list simple">
-<dt class="field-odd">Source product documentation</dt>
-<dd class="field-odd"><p><a class="reference external" href="https://hive.apache.org/">Apache Hive</a></p>
-</dd>
-<dt class="field-even">Target product documentation</dt>
-<dd class="field-even"><p><a class="reference external" href="https://www.samba.org/">Samba</a></p>
-</dd>
-<dt class="field-odd">Python API</dt>
-<dd class="field-odd"><p><a class="reference external" href="/docs/apache-airflow-providers-apache-hive/stable/_api/airflow/providers/apache/hive/transfers/hive_to_samba/index.html#module-airflow.providers.apache.hive.transfers.hive_to_samba" title="(in apache-airflow-providers-apache-hive v3.1.0)"><code class="xref py py-mod docutils literal notranslate"><span class="pre">airflow.providers.apache.hive.transfers.hive_to_samba</span></code></a></p>
-</dd>
-<dt class="field-even">Provider</dt>
-<dd class="field-even"><p><a class="reference internal" href="../packages-ref.html#std-provider-apache-airflow-providers-apache-hive"><code class="xref std std-provider docutils literal notranslate"><span class="pre">apache-airflow-providers-apache-hive</span></code></a></p>
+<dt class="field-odd">Parameters</dt>
+<dd class="field-odd"><p><strong>path</strong> (<a class="reference external" href="https://docs.python.org/3/library/stdtypes.html#str" title="(in Python v3.10)"><em>str</em></a>) – full path to the remote file or directory</p>
 </dd>
 </dl>
-</div>
-<div class="section" id="google-cloud-storage-gcs-to-ssh-file-transfer-protocol-sftp">
-<h3>Google Cloud Storage (GCS) to SSH File Transfer Protocol (SFTP)<a class="headerlink" href="#google-cloud-storage-gcs-to-ssh-file-transfer-protocol-sftp" title="Permalink to this heading">¶</a></h3>
+</dd></dl>
+
+<dl class="py method">
+<dt class="sig sig-object py" id="airflow.providers.sftp.hooks.sftp.SFTPHook.walktree">
+<span class="sig-name descname"><span class="pre">walktree</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">self</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">path</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">fcallback</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">dcallback</span></span></em>, <em class="sig-param"><span class="n"><span class="pre [...]
+<dd><p>Recursively descend, depth first, the directory tree rooted at
+path, calling discreet callback functions for each regular file,
+directory and unknown file type.</p>
 <dl class="field-list simple">
-<dt class="field-odd">Source product documentation</dt>
-<dd class="field-odd"><p><a class="reference external" href="https://cloud.google.com/storage/">Google Cloud Storage (GCS)</a></p>
-</dd>
-<dt class="field-even">Target product documentation</dt>
-<dd class="field-even"><p><a class="reference external" href="https://tools.ietf.org/wg/secsh/draft-ietf-secsh-filexfer/">SSH File Transfer Protocol (SFTP)</a></p>
-</dd>
-<dt class="field-odd">Operator guide</dt>
-<dd class="field-odd"><p><a class="reference external" href="/docs/apache-airflow-providers-google/stable/operators/transfer/gcs_to_sftp.html" title="(in apache-airflow-providers-google v8.1.0)"><span>Google Cloud Storage Transfer Operator to SFTP</span></a></p>
+<dt class="field-odd">Parameters</dt>
+<dd class="field-odd"><ul class="simple">
+<li><p><strong>path</strong> (<a class="reference external" href="https://docs.python.org/3/library/stdtypes.html#str" title="(in Python v3.10)"><em>str</em></a>) – root of remote directory to descend, use ‘.’ to start at
+<code class="xref py py-attr docutils literal notranslate"><span class="pre">pwd</span></code></p></li>
+<li><p><strong>fcallback</strong> (<em>callable</em>) – callback function to invoke for a regular file.
+(form: <code class="docutils literal notranslate"><span class="pre">func(str)</span></code>)</p></li>
+<li><p><strong>dcallback</strong> (<em>callable</em>) – callback function to invoke for a directory. (form: <code class="docutils literal notranslate"><span class="pre">func(str)</span></code>)</p></li>
+<li><p><strong>ucallback</strong> (<em>callable</em>) – callback function to invoke for an unknown file type.
+(form: <code class="docutils literal notranslate"><span class="pre">func(str)</span></code>)</p></li>
+<li><p><strong>recurse</strong> (<a class="reference external" href="https://docs.python.org/3/library/functions.html#bool" title="(in Python v3.10)"><em>bool</em></a>) – <em>Default: True</em> - should it recurse</p></li>
+</ul>
 </dd>
-<dt class="field-even">Python API</dt>
-<dd class="field-even"><p><a class="reference external" href="/docs/apache-airflow-providers-google/stable/_api/airflow/providers/google/cloud/transfers/gcs_to_sftp/index.html#module-airflow.providers.google.cloud.transfers.gcs_to_sftp" title="(in apache-airflow-providers-google v8.1.0)"><code class="xref py py-mod docutils literal notranslate"><span class="pre">airflow.providers.google.cloud.transfers.gcs_to_sftp</span></code></a></p>
+<dt class="field-even">Returns</dt>
+<dd class="field-even"><p>None</p>
 </dd>
-<dt class="field-odd">Provider</dt>
-<dd class="field-odd"><p><a class="reference internal" href="../packages-ref.html#std-provider-apache-airflow-providers-google"><code class="xref std std-provider docutils literal notranslate"><span class="pre">apache-airflow-providers-google</span></code></a></p>
+<dt class="field-odd">Return type</dt>
+<dd class="field-odd"><p>None</p>
 </dd>
 </dl>
-</div>
-<div class="section" id="ssh-file-transfer-protocol-sftp-to-google-cloud-storage-gcs">
-<h3>SSH File Transfer Protocol (SFTP) to Google Cloud Storage (GCS)<a class="headerlink" href="#ssh-file-transfer-protocol-sftp-to-google-cloud-storage-gcs" title="Permalink to this heading">¶</a></h3>
+</dd></dl>
+
+<dl class="py method">
+<dt class="sig sig-object py" id="airflow.providers.sftp.hooks.sftp.SFTPHook.get_tree_map">
+<span class="sig-name descname"><span class="pre">get_tree_map</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">self</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">path</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">prefix</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">None</span></span></em>, <em class="sig-param"><spa [...]
+<dd><p>Return tuple with recursive lists of files, directories and unknown paths from given path.
+It is possible to filter results by giving prefix and/or delimiter parameters.</p>
 <dl class="field-list simple">
-<dt class="field-odd">Source product documentation</dt>
-<dd class="field-odd"><p><a class="reference external" href="https://tools.ietf.org/wg/secsh/draft-ietf-secsh-filexfer/">SSH File Transfer Protocol (SFTP)</a></p>
-</dd>
-<dt class="field-even">Target product documentation</dt>
-<dd class="field-even"><p><a class="reference external" href="https://cloud.google.com/storage/">Google Cloud Storage (GCS)</a></p>
-</dd>
-<dt class="field-odd">Operator guide</dt>
-<dd class="field-odd"><p><a class="reference external" href="/docs/apache-airflow-providers-google/stable/operators/transfer/sftp_to_gcs.html" title="(in apache-airflow-providers-google v8.1.0)"><span>SFTP to Google Cloud Storage Transfer Operator</span></a></p>
+<dt class="field-odd">Parameters</dt>
+<dd class="field-odd"><ul class="simple">
+<li><p><strong>path</strong> (<a class="reference external" href="https://docs.python.org/3/library/stdtypes.html#str" title="(in Python v3.10)"><em>str</em></a>) – path from which tree will be built</p></li>
+<li><p><strong>prefix</strong> (<em>Optional</em><em>[</em><a class="reference external" href="https://docs.python.org/3/library/stdtypes.html#str" title="(in Python v3.10)"><em>str</em></a><em>]</em>) – if set paths will be added if start with prefix</p></li>
+<li><p><strong>delimiter</strong> (<em>Optional</em><em>[</em><a class="reference external" href="https://docs.python.org/3/library/stdtypes.html#str" title="(in Python v3.10)"><em>str</em></a><em>]</em>) – if set paths will be added if end with delimiter</p></li>
+</ul>
 </dd>
-<dt class="field-even">Python API</dt>
-<dd class="field-even"><p><a class="reference external" href="/docs/apache-airflow-providers-google/stable/_api/airflow/providers/google/cloud/transfers/sftp_to_gcs/index.html#module-airflow.providers.google.cloud.transfers.sftp_to_gcs" title="(in apache-airflow-providers-google v8.1.0)"><code class="xref py py-mod docutils literal notranslate"><span class="pre">airflow.providers.google.cloud.transfers.sftp_to_gcs</span></code></a></p>
+<dt class="field-even">Returns</dt>
+<dd class="field-even"><p>tuple with list of files, dirs and unknown items</p>
 </dd>
-<dt class="field-odd">Provider</dt>
-<dd class="field-odd"><p><a class="reference internal" href="../packages-ref.html#std-provider-apache-airflow-providers-google"><code class="xref std std-provider docutils literal notranslate"><span class="pre">apache-airflow-providers-google</span></code></a></p>
+<dt class="field-odd">Return type</dt>
+<dd class="field-odd"><p>Tuple[List[<a class="reference external" href="https://docs.python.org/3/library/stdtypes.html#str" title="(in Python v3.10)">str</a>], List[<a class="reference external" href="https://docs.python.org/3/library/stdtypes.html#str" title="(in Python v3.10)">str</a>], List[<a class="reference external" href="https://docs.python.org/3/library/stdtypes.html#str" title="(in Python v3.10)">str</a>]]</p>
 </dd>
 </dl>
-</div>
-<div class="section" id="ssh-file-transfer-protocol-sftp-to-microsoft-azure-blob-storage">
-<h3>SSH File Transfer Protocol (SFTP) to Microsoft Azure Blob Storage<a class="headerlink" href="#ssh-file-transfer-protocol-sftp-to-microsoft-azure-blob-storage" title="Permalink to this heading">¶</a></h3>
+</dd></dl>
+
+<dl class="py method">
+<dt class="sig sig-object py" id="airflow.providers.sftp.hooks.sftp.SFTPHook.test_connection">
+<span class="sig-name descname"><span class="pre">test_connection</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">self</span></span></em><span class="sig-paren">)</span><a class="reference internal" href="../../../../../../_modules/airflow/providers/sftp/hooks/sftp.html#SFTPHook.test_connection"><span class="viewcode-link"><span class="pre">[source]</span></span></a><a class="headerlink" href="#airflow.providers.sftp.hooks.sftp.SFTPHoo [...]
+<dd><p>Test the SFTP connection by calling path with directory</p>
 <dl class="field-list simple">
-<dt class="field-odd">Source product documentation</dt>
-<dd class="field-odd"><p><a class="reference external" href="https://tools.ietf.org/wg/secsh/draft-ietf-secsh-filexfer/">SSH File Transfer Protocol (SFTP)</a></p>
-</dd>
-<dt class="field-even">Target product documentation</dt>
-<dd class="field-even"><p><a class="reference external" href="https://azure.microsoft.com/en-us/services/storage/blobs/">Microsoft Azure Blob Storage</a></p>
-</dd>
-<dt class="field-odd">Operator guide</dt>
-<dd class="field-odd"><p><a class="reference external" href="/docs/apache-airflow-providers-microsoft-azure/stable/operators/sftp_to_wasb.html" title="(in apache-airflow-providers-microsoft-azure v4.1.0)"><span>Azure Blob Storage Transfer Operator</span></a></p>
+</dl>
+</dd></dl>
+
+<dl class="py method">
+<dt class="sig sig-object py" id="airflow.providers.sftp.hooks.sftp.SFTPHook.get_file_by_pattern">
+<span class="sig-name descname"><span class="pre">get_file_by_pattern</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">self</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">path</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">fnmatch_pattern</span></span></em><span class="sig-paren">)</span><a class="reference internal" href="../../../../../../_modules/airflow/providers/sftp/hooks/s [...]
+<dd><p>Returning the first matching file based on the given fnmatch type pattern</p>
+<dl class="field-list simple">
+<dt class="field-odd">Parameters</dt>
+<dd class="field-odd"><ul class="simple">
+<li><p><strong>path</strong> – path to be checked</p></li>
+<li><p><strong>fnmatch_pattern</strong> – The pattern that will be matched with <cite>fnmatch</cite></p></li>
+</ul>
 </dd>
-<dt class="field-even">Python API</dt>
-<dd class="field-even"><p><a class="reference external" href="/docs/apache-airflow-providers-microsoft-azure/stable/_api/airflow/providers/microsoft/azure/transfers/sftp_to_wasb/index.html#module-airflow.providers.microsoft.azure.transfers.sftp_to_wasb" title="(in apache-airflow-providers-microsoft-azure v4.1.0)"><code class="xref py py-mod docutils literal notranslate"><span class="pre">airflow.providers.microsoft.azure.transfers.sftp_to_wasb</span></code></a></p>
+<dt class="field-even">Returns</dt>
+<dd class="field-even"><p>string containing the first found file, or an empty string if none matched</p>
 </dd>
-<dt class="field-odd">Provider</dt>
-<dd class="field-odd"><p><a class="reference internal" href="../packages-ref.html#std-provider-apache-airflow-providers-microsoft-azure"><code class="xref std std-provider docutils literal notranslate"><span class="pre">apache-airflow-providers-microsoft-azure</span></code></a></p>
+<dt class="field-odd">Return type</dt>
+<dd class="field-odd"><p><a class="reference external" href="https://docs.python.org/3/library/stdtypes.html#str" title="(in Python v3.10)">str</a></p>
 </dd>
 </dl>
+</dd></dl>
+
+</dd></dl>
+
 </div>
 </div>
 </div>
 
 
     <div class="pager" role="navigation" aria-label="related navigation">
-            <a rel="prev" title="Google" href="google.html" >
+            <a rel="prev" title="airflow.providers.sftp.hooks" href="../index.html" >
                 <button class="btn-hollow btn-blue bodytext__medium--cerulean-blue" accesskey="p">Previous</button>
             </a>
-            <a rel="next" title="Services" href="services.html" >
+            <a rel="next" title="airflow.providers.sftp.operators" href="../../operators/index.html" >
                 <button class="btn-hollow btn-blue bodytext__medium--cerulean-blue" accesskey="n">Next</button>
             </a>
     </div>
@@ -1010,31 +986,37 @@ communication protocols or interface.</p>
     <nav class="wy-nav-side-toc">
         <div class="wy-menu-vertical">
             <ul>
-<li><a class="reference internal" href="#">Protocol integrations</a><ul>
-<li><a class="reference internal" href="#protocols">Protocols</a><ul>
-<li><a class="reference internal" href="#file-transfer-protocol-ftp">File Transfer Protocol (FTP)</a></li>
-<li><a class="reference internal" href="#grpc">gRPC</a></li>
-<li><a class="reference internal" href="#hypertext-transfer-protocol-http">Hypertext Transfer Protocol (HTTP)</a></li>
-<li><a class="reference internal" href="#internet-message-access-protocol-imap">Internet Message Access Protocol (IMAP)</a></li>
-<li><a class="reference internal" href="#java-database-connectivity-jdbc">Java Database Connectivity (JDBC)</a></li>
-<li><a class="reference internal" href="#odbc">ODBC</a></li>
-<li><a class="reference internal" href="#samba">Samba</a></li>
-<li><a class="reference internal" href="#secure-shell-ssh">Secure Shell (SSH)</a></li>
-<li><a class="reference internal" href="#ssh-file-transfer-protocol-sftp">SSH File Transfer Protocol (SFTP)</a></li>
-<li><a class="reference internal" href="#windows-powershell-remoting-protocol">Windows PowerShell Remoting Protocol</a></li>
-<li><a class="reference internal" href="#windows-remote-management-winrm">Windows Remote Management (WinRM)</a></li>
+<li><a class="reference internal" href="#"><code class="xref py py-mod docutils literal notranslate"><span class="pre">airflow.providers.sftp.hooks.sftp</span></code></a><ul>
+<li><a class="reference internal" href="#module-contents">Module Contents</a><ul>
+<li><a class="reference internal" href="#classes">Classes</a><ul>
+<li><a class="reference internal" href="#airflow.providers.sftp.hooks.sftp.SFTPHook">SFTPHook</a><ul>
+<li><a class="reference internal" href="#airflow.providers.sftp.hooks.sftp.SFTPHook.conn_name_attr">conn_name_attr</a></li>
+<li><a class="reference internal" href="#airflow.providers.sftp.hooks.sftp.SFTPHook.default_conn_name">default_conn_name</a></li>
+<li><a class="reference internal" href="#airflow.providers.sftp.hooks.sftp.SFTPHook.conn_type">conn_type</a></li>
+<li><a class="reference internal" href="#airflow.providers.sftp.hooks.sftp.SFTPHook.hook_name">hook_name</a></li>
+<li><a class="reference internal" href="#airflow.providers.sftp.hooks.sftp.SFTPHook.get_ui_field_behaviour">get_ui_field_behaviour</a></li>
+<li><a class="reference internal" href="#airflow.providers.sftp.hooks.sftp.SFTPHook.get_conn">get_conn</a></li>
+<li><a class="reference internal" href="#airflow.providers.sftp.hooks.sftp.SFTPHook.close_conn">close_conn</a></li>
+<li><a class="reference internal" href="#airflow.providers.sftp.hooks.sftp.SFTPHook.describe_directory">describe_directory</a></li>
+<li><a class="reference internal" href="#airflow.providers.sftp.hooks.sftp.SFTPHook.list_directory">list_directory</a></li>
+<li><a class="reference internal" href="#airflow.providers.sftp.hooks.sftp.SFTPHook.mkdir">mkdir</a></li>
+<li><a class="reference internal" href="#airflow.providers.sftp.hooks.sftp.SFTPHook.isdir">isdir</a></li>
+<li><a class="reference internal" href="#airflow.providers.sftp.hooks.sftp.SFTPHook.isfile">isfile</a></li>
+<li><a class="reference internal" href="#airflow.providers.sftp.hooks.sftp.SFTPHook.create_directory">create_directory</a></li>
+<li><a class="reference internal" href="#airflow.providers.sftp.hooks.sftp.SFTPHook.delete_directory">delete_directory</a></li>
+<li><a class="reference internal" href="#airflow.providers.sftp.hooks.sftp.SFTPHook.retrieve_file">retrieve_file</a></li>
+<li><a class="reference internal" href="#airflow.providers.sftp.hooks.sftp.SFTPHook.store_file">store_file</a></li>
+<li><a class="reference internal" href="#airflow.providers.sftp.hooks.sftp.SFTPHook.delete_file">delete_file</a></li>
+<li><a class="reference internal" href="#airflow.providers.sftp.hooks.sftp.SFTPHook.get_mod_time">get_mod_time</a></li>
+<li><a class="reference internal" href="#airflow.providers.sftp.hooks.sftp.SFTPHook.path_exists">path_exists</a></li>
+<li><a class="reference internal" href="#airflow.providers.sftp.hooks.sftp.SFTPHook.walktree">walktree</a></li>
+<li><a class="reference internal" href="#airflow.providers.sftp.hooks.sftp.SFTPHook.get_tree_map">get_tree_map</a></li>
+<li><a class="reference internal" href="#airflow.providers.sftp.hooks.sftp.SFTPHook.test_connection">test_connection</a></li>
+<li><a class="reference internal" href="#airflow.providers.sftp.hooks.sftp.SFTPHook.get_file_by_pattern">get_file_by_pattern</a></li>
+</ul>
+</li>
 </ul>
 </li>
-<li><a class="reference internal" href="#transfers">Transfers</a><ul>
-<li><a class="reference internal" href="#internet-message-access-protocol-imap-to-amazon-simple-storage-service-s3">Internet Message Access Protocol (IMAP) to Amazon Simple Storage Service (S3)</a></li>
-<li><a class="reference internal" href="#amazon-simple-storage-service-s3-to-ssh-file-transfer-protocol-sftp">Amazon Simple Storage Service (S3) to SSH File Transfer Protocol (SFTP)</a></li>
-<li><a class="reference internal" href="#ssh-file-transfer-protocol-sftp-to-amazon-simple-storage-service-s3">SSH File Transfer Protocol (SFTP) to Amazon Simple Storage Service (S3)</a></li>
-<li><a class="reference internal" href="#amazon-simple-storage-service-s3-to-file-transfer-protocol-ftp">Amazon Simple Storage Service (S3) to File Transfer Protocol (FTP)</a></li>
-<li><a class="reference internal" href="#file-transfer-protocol-ftp-to-amazon-simple-storage-service-s3">File Transfer Protocol (FTP) to Amazon Simple Storage Service (S3)</a></li>
-<li><a class="reference internal" href="#apache-hive-to-samba">Apache Hive to Samba</a></li>
-<li><a class="reference internal" href="#google-cloud-storage-gcs-to-ssh-file-transfer-protocol-sftp">Google Cloud Storage (GCS) to SSH File Transfer Protocol (SFTP)</a></li>
-<li><a class="reference internal" href="#ssh-file-transfer-protocol-sftp-to-google-cloud-storage-gcs">SSH File Transfer Protocol (SFTP) to Google Cloud Storage (GCS)</a></li>
-<li><a class="reference internal" href="#ssh-file-transfer-protocol-sftp-to-microsoft-azure-blob-storage">SSH File Transfer Protocol (SFTP) to Microsoft Azure Blob Storage</a></li>
 </ul>
 </li>
 </ul>
@@ -1061,7 +1043,7 @@ communication protocols or interface.</p>
             
         
         <div class="base-layout--button">
-            <a href="https://github.com/apache/airflow/edit/main/docs/apache-airflow-providers/operators-and-hooks-ref/protocol.rst" rel="nofollow">
+            <a href="https://github.com/apache/airflow/edit/main/docs/apache-airflow-providers-sftp/_api/airflow/providers/sftp/hooks/sftp/index.rst" rel="nofollow">
 
                 <button class="btn-hollow btn-brown btn-with-icon with-box-shadow button-fixed">
                     <svg xmlns="http://www.w3.org/2000/svg" width="30.76" height="30">
@@ -1195,17 +1177,17 @@ communication protocols or interface.</p>
         </span>
     </div>
 </footer>
-    <script type="text/javascript" src="../_static/_gen/js/docs.js"></script>
-    <script type="text/javascript" id="documentation_options" data-url_root="../" src="../_static/documentation_options.js"></script>
+    <script type="text/javascript" src="../../../../../../_static/_gen/js/docs.js"></script>
+    <script type="text/javascript" id="documentation_options" data-url_root="../../../../../../" src="../../../../../../_static/documentation_options.js"></script>
     <script src="https://code.jquery.com/jquery-3.4.1.min.js" integrity="sha256-CSXorXvZcTkaix6Yvo6HppcZGetbYMGWSFlBw8HfCJo=" crossorigin="anonymous"></script>
     <script src="https://cdnjs.cloudflare.com/ajax/libs/popper.js/1.14.3/umd/popper.min.js" integrity="sha384-ZMP7rVo3mIykV+2+9J3UJ46jBk0WLaUAdn689aCwoqbBJiSnjAK/l8WvCWPIPm49" crossorigin="anonymous"></script>
     <script src="https://stackpath.bootstrapcdn.com/bootstrap/4.1.3/js/bootstrap.min.js" integrity="sha384-ChfqqxuZUCnJSK3+MXmPNIyE6ZbWh2IMqE241rYiqJxyMiZ6OW/JmZQ5stwEULTy" crossorigin="anonymous"></script>
-        <script data-url_root="../" id="documentation_options" src="../_static/documentation_options.js"></script>
-        <script src="../_static/jquery.js"></script>
-        <script src="../_static/underscore.js"></script>
-        <script src="../_static/_sphinx_javascript_frameworks_compat.js"></script>
-        <script src="../_static/doctools.js"></script>
-        <script src="../_static/clipboard.min.js"></script>
-        <script src="../_static/copybutton.js"></script>
+        <script data-url_root="../../../../../../" id="documentation_options" src="../../../../../../_static/documentation_options.js"></script>
+        <script src="../../../../../../_static/jquery.js"></script>
+        <script src="../../../../../../_static/underscore.js"></script>
+        <script src="../../../../../../_static/_sphinx_javascript_frameworks_compat.js"></script>
+        <script src="../../../../../../_static/doctools.js"></script>
+        <script src="../../../../../../_static/clipboard.min.js"></script>
+        <script src="../../../../../../_static/copybutton.js"></script>
 </body>
 </html>
\ No newline at end of file
diff --git a/docs-archive/apache-airflow-providers/core-extensions/secrets-backends.html b/docs-archive/apache-airflow-providers-sftp/4.0.0/_api/airflow/providers/sftp/index.html
similarity index 89%
copy from docs-archive/apache-airflow-providers/core-extensions/secrets-backends.html
copy to docs-archive/apache-airflow-providers-sftp/4.0.0/_api/airflow/providers/sftp/index.html
index f7628ed6ab..6b92109f85 100644
--- a/docs-archive/apache-airflow-providers/core-extensions/secrets-backends.html
+++ b/docs-archive/apache-airflow-providers-sftp/4.0.0/_api/airflow/providers/sftp/index.html
@@ -9,17 +9,18 @@
 <head>
         <meta charset="utf-8" />
     <meta name="viewport" content="width=device-width, initial-scale=1">
-        <title>Secret backends &mdash; apache-airflow-providers Documentation</title>
-    <link rel="stylesheet" href="../_static/_gen/css/main.min.css" type="text/css" />
-            <link rel="stylesheet" type="text/css" href="../_static/pygments.css" />
-            <link rel="stylesheet" type="text/css" href="../_static/_gen/css/main.min.css" />
-            <link rel="stylesheet" type="text/css" href="../_static/copybutton.css" />
-            <link rel="stylesheet" type="text/css" href="../_static/_gen/css/main-custom.min.css" />
-            <link rel="shortcut icon" href="../_static/pin_32.png"/>
-            <link rel="index" title="Index" href="../genindex.html" />
-            <link rel="search" title="Search" href="../search.html" />
-            <link rel="next" title="Community Providers" href="../howto/create-update-providers.html" />
-            <link rel="prev" title="Writing logs" href="logging.html" />
+        <title>airflow.providers.sftp &mdash; apache-airflow-providers-sftp Documentation</title>
+    <link rel="stylesheet" href="../../../../_static/_gen/css/main.min.css" type="text/css" />
+            <link rel="stylesheet" type="text/css" href="../../../../_static/pygments.css" />
+            <link rel="stylesheet" type="text/css" href="../../../../_static/_gen/css/main.min.css" />
+            <link rel="stylesheet" type="text/css" href="../../../../_static/copybutton.css" />
+            <link rel="stylesheet" type="text/css" href="../../../../_static/_gen/css/main-custom.min.css" />
+            <link rel="stylesheet" type="text/css" href="../../../../_static/graphviz.css" />
+            <link rel="shortcut icon" href="../../../../_static/pin_32.png"/>
+            <link rel="index" title="Index" href="../../../../genindex.html" />
+            <link rel="search" title="Search" href="../../../../search.html" />
+            <link rel="next" title="airflow.providers.sftp.hooks" href="hooks/index.html" />
+            <link rel="prev" title="SFTP Connection" href="../../../../connections/sftp.html" />
     <!-- Matomo -->
     <script>
         var _paq = window._paq = window._paq || [];
@@ -280,8 +281,21 @@
             <div class="content-drawer">
                 <div class="td-sidebar">
 
+<div id="docs-version-selector" class="docs-version-selector sidebar__version-selector">
+    <a class="dropdown-toggle" href="#" id="versionDropdown" role="button" data-toggle="dropdown" aria-haspopup="true"
+       aria-expanded="false">
+        <span class="bodytext__medium--greyish-brown">Version: </span><span class="version">4.0.0</span>
+    </a>
+    <div class="dropdown-menu" aria-labelledby="navbarDropdownMenuLink">
+
+    </div>
+    <script type="application/x-template" id="version-item-template">
+        <a class="dropdown-item"></a>
+    </script>
+</div>
+
 <div class="searchb-box">
-    <form class="search-form" action="../search.html" method="get">
+    <form class="search-form" action="../../../../search.html" method="get">
         <input class="search-form__input" type="text" name="q" placeholder="Search docs" size="16">
         <input type="hidden" name="check_keywords" value="yes" />
         <input type="hidden" name="area" value="default" />
@@ -311,21 +325,19 @@
 
 
 <div class="toctree" role="navigation" aria-label="main navigation">
-    <ul class="current">
-<li class="toctree-l1"><a class="reference internal" href="../index.html">Providers</a></li>
-<li class="toctree-l1"><a class="reference internal" href="../packages-ref.html">Packages</a></li>
-<li class="toctree-l1"><a class="reference internal" href="../operators-and-hooks-ref/index.html">Operators and hooks</a></li>
-<li class="toctree-l1 current"><a class="reference internal" href="index.html">Core Extensions</a><ul class="current">
-<li class="toctree-l2"><a class="reference internal" href="auth-backends.html">Auth backends</a></li>
-<li class="toctree-l2"><a class="reference internal" href="connections.html">Connections</a></li>
-<li class="toctree-l2"><a class="reference internal" href="extra-links.html">Extra Links</a></li>
-<li class="toctree-l2"><a class="reference internal" href="logging.html">Writing logs</a></li>
-<li class="toctree-l2 current"><a class="current reference internal" href="#">Secret backends</a></li>
+    <p class="caption" role="heading"><span class="caption-text">References</span></p>
+<ul class="current">
+<li class="toctree-l1"><a class="reference internal" href="../../../../connections/sftp.html">Connection types</a></li>
+<li class="toctree-l1 current"><a class="current reference internal" href="#">Python API</a></li>
 </ul>
-</li>
-<li class="toctree-l1"><a class="reference internal" href="../howto/create-update-providers.html">Update community providers</a></li>
-<li class="toctree-l1"><a class="reference internal" href="../installing-from-sources.html">Installing from sources</a></li>
-<li class="toctree-l1"><a class="reference internal" href="../installing-from-pypi.html">Installing from PyPI</a></li>
+<p class="caption" role="heading"><span class="caption-text">Resources</span></p>
+<ul>
+<li class="toctree-l1"><a class="reference external" href="https://pypi.org/project/apache-airflow-providers-sftp/">PyPI Repository</a></li>
+<li class="toctree-l1"><a class="reference internal" href="../../../../installing-providers-from-sources.html">Installing from sources</a></li>
+</ul>
+<p class="caption" role="heading"><span class="caption-text">Commits</span></p>
+<ul>
+<li class="toctree-l1"><a class="reference internal" href="../../../../commits.html">Detailed list of commits</a></li>
 </ul>
 
 </div>
@@ -406,8 +418,21 @@
             
     <div class="td-sidebar desktop-only d-print-none">
 
+<div id="docs-version-selector" class="docs-version-selector sidebar__version-selector">
+    <a class="dropdown-toggle" href="#" id="versionDropdown" role="button" data-toggle="dropdown" aria-haspopup="true"
+       aria-expanded="false">
+        <span class="bodytext__medium--greyish-brown">Version: </span><span class="version">4.0.0</span>
+    </a>
+    <div class="dropdown-menu" aria-labelledby="navbarDropdownMenuLink">
+
+    </div>
+    <script type="application/x-template" id="version-item-template">
+        <a class="dropdown-item"></a>
+    </script>
+</div>
+
 <div class="searchb-box">
-    <form class="search-form" action="../search.html" method="get">
+    <form class="search-form" action="../../../../search.html" method="get">
         <input class="search-form__input" type="text" name="q" placeholder="Search docs" size="16">
         <input type="hidden" name="check_keywords" value="yes" />
         <input type="hidden" name="area" value="default" />
@@ -437,21 +462,19 @@
 
 
 <div class="toctree" role="navigation" aria-label="main navigation">
-    <ul class="current">
-<li class="toctree-l1"><a class="reference internal" href="../index.html">Providers</a></li>
-<li class="toctree-l1"><a class="reference internal" href="../packages-ref.html">Packages</a></li>
-<li class="toctree-l1"><a class="reference internal" href="../operators-and-hooks-ref/index.html">Operators and hooks</a></li>
-<li class="toctree-l1 current"><a class="reference internal" href="index.html">Core Extensions</a><ul class="current">
-<li class="toctree-l2"><a class="reference internal" href="auth-backends.html">Auth backends</a></li>
-<li class="toctree-l2"><a class="reference internal" href="connections.html">Connections</a></li>
-<li class="toctree-l2"><a class="reference internal" href="extra-links.html">Extra Links</a></li>
-<li class="toctree-l2"><a class="reference internal" href="logging.html">Writing logs</a></li>
-<li class="toctree-l2 current"><a class="current reference internal" href="#">Secret backends</a></li>
+    <p class="caption" role="heading"><span class="caption-text">References</span></p>
+<ul class="current">
+<li class="toctree-l1"><a class="reference internal" href="../../../../connections/sftp.html">Connection types</a></li>
+<li class="toctree-l1 current"><a class="current reference internal" href="#">Python API</a></li>
 </ul>
-</li>
-<li class="toctree-l1"><a class="reference internal" href="../howto/create-update-providers.html">Update community providers</a></li>
-<li class="toctree-l1"><a class="reference internal" href="../installing-from-sources.html">Installing from sources</a></li>
-<li class="toctree-l1"><a class="reference internal" href="../installing-from-pypi.html">Installing from PyPI</a></li>
+<p class="caption" role="heading"><span class="caption-text">Resources</span></p>
+<ul>
+<li class="toctree-l1"><a class="reference external" href="https://pypi.org/project/apache-airflow-providers-sftp/">PyPI Repository</a></li>
+<li class="toctree-l1"><a class="reference internal" href="../../../../installing-providers-from-sources.html">Installing from sources</a></li>
+</ul>
+<p class="caption" role="heading"><span class="caption-text">Commits</span></p>
+<ul>
+<li class="toctree-l1"><a class="reference internal" href="../../../../commits.html">Detailed list of commits</a></li>
 </ul>
 
 </div>
@@ -540,11 +563,9 @@
 
     <ul class="breadcrumb">
         
-            <li class="breadcrumb-item"><a href="../index.html" class="icon icon-home"> Home</a></li>
+            <li class="breadcrumb-item"><a href="../../../../index.html" class="icon icon-home"> Home</a></li>
             
-                <li class="breadcrumb-item"><a href="index.html">Core Extensions</a></li>
-            
-            <li class="breadcrumb-item"><a href="secrets-backends.html"> Secret backends</a></li>
+            <li class="breadcrumb-item"><a href="index.html"> <code class="xref py py-mod docutils literal notranslate"><span class="pre">airflow.providers.sftp</span></code></a></li>
         
     </ul>
 </div>
@@ -555,54 +576,35 @@
                                 <div class="bodywrapper">
                                     <div class="body" role="main">
                                         
-  <blockquote>
-<div></div></blockquote>
-<div class="section" id="secret-backends">
-<h1>Secret backends<a class="headerlink" href="#secret-backends" title="Permalink to this heading">¶</a></h1>
-<p>This is a summary of all Apache Airflow Community provided implementations of secret backends
-exposed via community-managed providers.</p>
-<p>Airflow has the capability of reading connections, variables and configuration from Secret Backends rather
-than from its own Database. While storing such information in Airflow’s database is possible, many of the
-enterprise customers already have some secret managers storing secrets, and Airflow can tap into those
-via providers that implement secrets backends for services Airflow integrates with.</p>
-<p>You can also take a
-look at Secret backends available in the core Airflow in
-<a class="reference external" href="/docs/apache-airflow/stable/security/secrets/secrets-backend/index.html" title="(in apache-airflow v2.4.0.dev0)"><span>Secrets Backend</span></a> and here you can see the ones
-provided by the community-managed providers:</p>
-<div class="section" id="amazon">
-<h2>Amazon<a class="headerlink" href="#amazon" title="Permalink to this heading">¶</a></h2>
-<ul class="simple">
-<li><p><a class="reference external" href="/docs/apache-airflow-providers-amazon/stable/_api/airflow/providers/amazon/aws/secrets/secrets_manager/index.html#airflow.providers.amazon.aws.secrets.secrets_manager.SecretsManagerBackend" title="(in apache-airflow-providers-amazon v4.1.0)"><code class="xref py py-class docutils literal notranslate"><span class="pre">SecretsManagerBackend</span></code></a></p></li>
-<li><p><a class="reference external" href="/docs/apache-airflow-providers-amazon/stable/_api/airflow/providers/amazon/aws/secrets/systems_manager/index.html#airflow.providers.amazon.aws.secrets.systems_manager.SystemsManagerParameterStoreBackend" title="(in apache-airflow-providers-amazon v4.1.0)"><code class="xref py py-class docutils literal notranslate"><span class="pre">SystemsManagerParameterStoreBackend</span></code></a></p></li>
+  <div class="section" id="module-airflow.providers.sftp">
+<span id="airflow-providers-sftp"></span><h1><a class="reference internal" href="#module-airflow.providers.sftp" title="airflow.providers.sftp"><code class="xref py py-mod docutils literal notranslate"><span class="pre">airflow.providers.sftp</span></code></a><a class="headerlink" href="#module-airflow.providers.sftp" title="Permalink to this heading">¶</a></h1>
+<div class="section" id="subpackages">
+<h2>Subpackages<a class="headerlink" href="#subpackages" title="Permalink to this heading">¶</a></h2>
+<div class="toctree-wrapper compound">
+<ul>
+<li class="toctree-l1"><a class="reference internal" href="hooks/index.html"><code class="xref py py-mod docutils literal notranslate"><span class="pre">airflow.providers.sftp.hooks</span></code></a><ul>
+<li class="toctree-l2"><a class="reference internal" href="hooks/sftp/index.html"><code class="xref py py-mod docutils literal notranslate"><span class="pre">airflow.providers.sftp.hooks.sftp</span></code></a></li>
 </ul>
-</div>
-<div class="section" id="google">
-<h2>Google<a class="headerlink" href="#google" title="Permalink to this heading">¶</a></h2>
-<ul class="simple">
-<li><p><a class="reference external" href="/docs/apache-airflow-providers-google/stable/_api/airflow/providers/google/cloud/secrets/secret_manager/index.html#airflow.providers.google.cloud.secrets.secret_manager.CloudSecretManagerBackend" title="(in apache-airflow-providers-google v8.1.0)"><code class="xref py py-class docutils literal notranslate"><span class="pre">CloudSecretManagerBackend</span></code></a></p></li>
+</li>
+<li class="toctree-l1"><a class="reference internal" href="operators/index.html"><code class="xref py py-mod docutils literal notranslate"><span class="pre">airflow.providers.sftp.operators</span></code></a><ul>
+<li class="toctree-l2"><a class="reference internal" href="operators/sftp/index.html"><code class="xref py py-mod docutils literal notranslate"><span class="pre">airflow.providers.sftp.operators.sftp</span></code></a></li>
 </ul>
-</div>
-<div class="section" id="hashicorp">
-<h2>Hashicorp<a class="headerlink" href="#hashicorp" title="Permalink to this heading">¶</a></h2>
-<ul class="simple">
-<li><p><a class="reference external" href="/docs/apache-airflow-providers-hashicorp/stable/_api/airflow/providers/hashicorp/secrets/vault/index.html#airflow.providers.hashicorp.secrets.vault.VaultBackend" title="(in apache-airflow-providers-hashicorp v3.0.1)"><code class="xref py py-class docutils literal notranslate"><span class="pre">VaultBackend</span></code></a></p></li>
+</li>
+<li class="toctree-l1"><a class="reference internal" href="sensors/index.html"><code class="xref py py-mod docutils literal notranslate"><span class="pre">airflow.providers.sftp.sensors</span></code></a><ul>
+<li class="toctree-l2"><a class="reference internal" href="sensors/sftp/index.html"><code class="xref py py-mod docutils literal notranslate"><span class="pre">airflow.providers.sftp.sensors.sftp</span></code></a></li>
 </ul>
-</div>
-<div class="section" id="microsoft-azure">
-<h2>Microsoft Azure<a class="headerlink" href="#microsoft-azure" title="Permalink to this heading">¶</a></h2>
-<ul class="simple">
-<li><p><a class="reference external" href="/docs/apache-airflow-providers-microsoft-azure/stable/_api/airflow/providers/microsoft/azure/secrets/key_vault/index.html#airflow.providers.microsoft.azure.secrets.key_vault.AzureKeyVaultBackend" title="(in apache-airflow-providers-microsoft-azure v4.1.0)"><code class="xref py py-class docutils literal notranslate"><span class="pre">AzureKeyVaultBackend</span></code></a></p></li>
-<li><p><code class="xref py py-class docutils literal notranslate"><span class="pre">AzureKeyVaultBackend</span></code></p></li>
+</li>
 </ul>
 </div>
+</div>
 </div>
 
 
     <div class="pager" role="navigation" aria-label="related navigation">
-            <a rel="prev" title="Writing logs" href="logging.html" >
+            <a rel="prev" title="SFTP Connection" href="../../../../connections/sftp.html" >
                 <button class="btn-hollow btn-blue bodytext__medium--cerulean-blue" accesskey="p">Previous</button>
             </a>
-            <a rel="next" title="Community Providers" href="../howto/create-update-providers.html" >
+            <a rel="next" title="airflow.providers.sftp.hooks" href="hooks/index.html" >
                 <button class="btn-hollow btn-blue bodytext__medium--cerulean-blue" accesskey="n">Next</button>
             </a>
     </div>
@@ -672,11 +674,8 @@ provided by the community-managed providers:</p>
     <nav class="wy-nav-side-toc">
         <div class="wy-menu-vertical">
             <ul>
-<li><a class="reference internal" href="#">Secret backends</a><ul>
-<li><a class="reference internal" href="#amazon">Amazon</a></li>
-<li><a class="reference internal" href="#google">Google</a></li>
-<li><a class="reference internal" href="#hashicorp">Hashicorp</a></li>
-<li><a class="reference internal" href="#microsoft-azure">Microsoft Azure</a></li>
+<li><a class="reference internal" href="#"><code class="xref py py-mod docutils literal notranslate"><span class="pre">airflow.providers.sftp</span></code></a><ul>
+<li><a class="reference internal" href="#subpackages">Subpackages</a></li>
 </ul>
 </li>
 </ul>
@@ -701,7 +700,7 @@ provided by the community-managed providers:</p>
             
         
         <div class="base-layout--button">
-            <a href="https://github.com/apache/airflow/edit/main/docs/apache-airflow-providers/core-extensions/secrets-backends.rst" rel="nofollow">
+            <a href="https://github.com/apache/airflow/edit/main/docs/apache-airflow-providers-sftp/_api/airflow/providers/sftp/index.rst" rel="nofollow">
 
                 <button class="btn-hollow btn-brown btn-with-icon with-box-shadow button-fixed">
                     <svg xmlns="http://www.w3.org/2000/svg" width="30.76" height="30">
@@ -835,17 +834,17 @@ provided by the community-managed providers:</p>
         </span>
     </div>
 </footer>
-    <script type="text/javascript" src="../_static/_gen/js/docs.js"></script>
-    <script type="text/javascript" id="documentation_options" data-url_root="../" src="../_static/documentation_options.js"></script>
+    <script type="text/javascript" src="../../../../_static/_gen/js/docs.js"></script>
+    <script type="text/javascript" id="documentation_options" data-url_root="../../../../" src="../../../../_static/documentation_options.js"></script>
     <script src="https://code.jquery.com/jquery-3.4.1.min.js" integrity="sha256-CSXorXvZcTkaix6Yvo6HppcZGetbYMGWSFlBw8HfCJo=" crossorigin="anonymous"></script>
     <script src="https://cdnjs.cloudflare.com/ajax/libs/popper.js/1.14.3/umd/popper.min.js" integrity="sha384-ZMP7rVo3mIykV+2+9J3UJ46jBk0WLaUAdn689aCwoqbBJiSnjAK/l8WvCWPIPm49" crossorigin="anonymous"></script>
     <script src="https://stackpath.bootstrapcdn.com/bootstrap/4.1.3/js/bootstrap.min.js" integrity="sha384-ChfqqxuZUCnJSK3+MXmPNIyE6ZbWh2IMqE241rYiqJxyMiZ6OW/JmZQ5stwEULTy" crossorigin="anonymous"></script>
-        <script data-url_root="../" id="documentation_options" src="../_static/documentation_options.js"></script>
-        <script src="../_static/jquery.js"></script>
-        <script src="../_static/underscore.js"></script>
-        <script src="../_static/_sphinx_javascript_frameworks_compat.js"></script>
-        <script src="../_static/doctools.js"></script>
-        <script src="../_static/clipboard.min.js"></script>
-        <script src="../_static/copybutton.js"></script>
+        <script data-url_root="../../../../" id="documentation_options" src="../../../../_static/documentation_options.js"></script>
+        <script src="../../../../_static/jquery.js"></script>
+        <script src="../../../../_static/underscore.js"></script>
+        <script src="../../../../_static/_sphinx_javascript_frameworks_compat.js"></script>
+        <script src="../../../../_static/doctools.js"></script>
+        <script src="../../../../_static/clipboard.min.js"></script>
+        <script src="../../../../_static/copybutton.js"></script>
 </body>
 </html>
\ No newline at end of file
diff --git a/docs-archive/apache-airflow-providers/core-extensions/secrets-backends.html b/docs-archive/apache-airflow-providers-sftp/4.0.0/_api/airflow/providers/sftp/operators/index.html
similarity index 89%
copy from docs-archive/apache-airflow-providers/core-extensions/secrets-backends.html
copy to docs-archive/apache-airflow-providers-sftp/4.0.0/_api/airflow/providers/sftp/operators/index.html
index f7628ed6ab..45ac1a8635 100644
--- a/docs-archive/apache-airflow-providers/core-extensions/secrets-backends.html
+++ b/docs-archive/apache-airflow-providers-sftp/4.0.0/_api/airflow/providers/sftp/operators/index.html
@@ -9,17 +9,18 @@
 <head>
         <meta charset="utf-8" />
     <meta name="viewport" content="width=device-width, initial-scale=1">
-        <title>Secret backends &mdash; apache-airflow-providers Documentation</title>
-    <link rel="stylesheet" href="../_static/_gen/css/main.min.css" type="text/css" />
-            <link rel="stylesheet" type="text/css" href="../_static/pygments.css" />
-            <link rel="stylesheet" type="text/css" href="../_static/_gen/css/main.min.css" />
-            <link rel="stylesheet" type="text/css" href="../_static/copybutton.css" />
-            <link rel="stylesheet" type="text/css" href="../_static/_gen/css/main-custom.min.css" />
-            <link rel="shortcut icon" href="../_static/pin_32.png"/>
-            <link rel="index" title="Index" href="../genindex.html" />
-            <link rel="search" title="Search" href="../search.html" />
-            <link rel="next" title="Community Providers" href="../howto/create-update-providers.html" />
-            <link rel="prev" title="Writing logs" href="logging.html" />
+        <title>airflow.providers.sftp.operators &mdash; apache-airflow-providers-sftp Documentation</title>
+    <link rel="stylesheet" href="../../../../../_static/_gen/css/main.min.css" type="text/css" />
+            <link rel="stylesheet" type="text/css" href="../../../../../_static/pygments.css" />
+            <link rel="stylesheet" type="text/css" href="../../../../../_static/_gen/css/main.min.css" />
+            <link rel="stylesheet" type="text/css" href="../../../../../_static/copybutton.css" />
+            <link rel="stylesheet" type="text/css" href="../../../../../_static/_gen/css/main-custom.min.css" />
+            <link rel="stylesheet" type="text/css" href="../../../../../_static/graphviz.css" />
+            <link rel="shortcut icon" href="../../../../../_static/pin_32.png"/>
+            <link rel="index" title="Index" href="../../../../../genindex.html" />
+            <link rel="search" title="Search" href="../../../../../search.html" />
+            <link rel="next" title="airflow.providers.sftp.operators.sftp" href="sftp/index.html" />
+            <link rel="prev" title="airflow.providers.sftp.hooks.sftp" href="../hooks/sftp/index.html" />
     <!-- Matomo -->
     <script>
         var _paq = window._paq = window._paq || [];
@@ -280,8 +281,21 @@
             <div class="content-drawer">
                 <div class="td-sidebar">
 
+<div id="docs-version-selector" class="docs-version-selector sidebar__version-selector">
+    <a class="dropdown-toggle" href="#" id="versionDropdown" role="button" data-toggle="dropdown" aria-haspopup="true"
+       aria-expanded="false">
+        <span class="bodytext__medium--greyish-brown">Version: </span><span class="version">4.0.0</span>
+    </a>
+    <div class="dropdown-menu" aria-labelledby="navbarDropdownMenuLink">
+
+    </div>
+    <script type="application/x-template" id="version-item-template">
+        <a class="dropdown-item"></a>
+    </script>
+</div>
+
 <div class="searchb-box">
-    <form class="search-form" action="../search.html" method="get">
+    <form class="search-form" action="../../../../../search.html" method="get">
         <input class="search-form__input" type="text" name="q" placeholder="Search docs" size="16">
         <input type="hidden" name="check_keywords" value="yes" />
         <input type="hidden" name="area" value="default" />
@@ -311,21 +325,19 @@
 
 
 <div class="toctree" role="navigation" aria-label="main navigation">
-    <ul class="current">
-<li class="toctree-l1"><a class="reference internal" href="../index.html">Providers</a></li>
-<li class="toctree-l1"><a class="reference internal" href="../packages-ref.html">Packages</a></li>
-<li class="toctree-l1"><a class="reference internal" href="../operators-and-hooks-ref/index.html">Operators and hooks</a></li>
-<li class="toctree-l1 current"><a class="reference internal" href="index.html">Core Extensions</a><ul class="current">
-<li class="toctree-l2"><a class="reference internal" href="auth-backends.html">Auth backends</a></li>
-<li class="toctree-l2"><a class="reference internal" href="connections.html">Connections</a></li>
-<li class="toctree-l2"><a class="reference internal" href="extra-links.html">Extra Links</a></li>
-<li class="toctree-l2"><a class="reference internal" href="logging.html">Writing logs</a></li>
-<li class="toctree-l2 current"><a class="current reference internal" href="#">Secret backends</a></li>
+    <p class="caption" role="heading"><span class="caption-text">References</span></p>
+<ul class="current">
+<li class="toctree-l1"><a class="reference internal" href="../../../../../connections/sftp.html">Connection types</a></li>
+<li class="toctree-l1 current"><a class="reference internal" href="../index.html">Python API</a></li>
 </ul>
-</li>
-<li class="toctree-l1"><a class="reference internal" href="../howto/create-update-providers.html">Update community providers</a></li>
-<li class="toctree-l1"><a class="reference internal" href="../installing-from-sources.html">Installing from sources</a></li>
-<li class="toctree-l1"><a class="reference internal" href="../installing-from-pypi.html">Installing from PyPI</a></li>
+<p class="caption" role="heading"><span class="caption-text">Resources</span></p>
+<ul>
+<li class="toctree-l1"><a class="reference external" href="https://pypi.org/project/apache-airflow-providers-sftp/">PyPI Repository</a></li>
+<li class="toctree-l1"><a class="reference internal" href="../../../../../installing-providers-from-sources.html">Installing from sources</a></li>
+</ul>
+<p class="caption" role="heading"><span class="caption-text">Commits</span></p>
+<ul>
+<li class="toctree-l1"><a class="reference internal" href="../../../../../commits.html">Detailed list of commits</a></li>
 </ul>
 
 </div>
@@ -406,8 +418,21 @@
             
     <div class="td-sidebar desktop-only d-print-none">
 
+<div id="docs-version-selector" class="docs-version-selector sidebar__version-selector">
+    <a class="dropdown-toggle" href="#" id="versionDropdown" role="button" data-toggle="dropdown" aria-haspopup="true"
+       aria-expanded="false">
+        <span class="bodytext__medium--greyish-brown">Version: </span><span class="version">4.0.0</span>
+    </a>
+    <div class="dropdown-menu" aria-labelledby="navbarDropdownMenuLink">
+
+    </div>
+    <script type="application/x-template" id="version-item-template">
+        <a class="dropdown-item"></a>
+    </script>
+</div>
+
 <div class="searchb-box">
-    <form class="search-form" action="../search.html" method="get">
+    <form class="search-form" action="../../../../../search.html" method="get">
         <input class="search-form__input" type="text" name="q" placeholder="Search docs" size="16">
         <input type="hidden" name="check_keywords" value="yes" />
         <input type="hidden" name="area" value="default" />
@@ -437,21 +462,19 @@
 
 
 <div class="toctree" role="navigation" aria-label="main navigation">
-    <ul class="current">
-<li class="toctree-l1"><a class="reference internal" href="../index.html">Providers</a></li>
-<li class="toctree-l1"><a class="reference internal" href="../packages-ref.html">Packages</a></li>
-<li class="toctree-l1"><a class="reference internal" href="../operators-and-hooks-ref/index.html">Operators and hooks</a></li>
-<li class="toctree-l1 current"><a class="reference internal" href="index.html">Core Extensions</a><ul class="current">
-<li class="toctree-l2"><a class="reference internal" href="auth-backends.html">Auth backends</a></li>
-<li class="toctree-l2"><a class="reference internal" href="connections.html">Connections</a></li>
-<li class="toctree-l2"><a class="reference internal" href="extra-links.html">Extra Links</a></li>
-<li class="toctree-l2"><a class="reference internal" href="logging.html">Writing logs</a></li>
-<li class="toctree-l2 current"><a class="current reference internal" href="#">Secret backends</a></li>
+    <p class="caption" role="heading"><span class="caption-text">References</span></p>
+<ul class="current">
+<li class="toctree-l1"><a class="reference internal" href="../../../../../connections/sftp.html">Connection types</a></li>
+<li class="toctree-l1 current"><a class="reference internal" href="../index.html">Python API</a></li>
 </ul>
-</li>
-<li class="toctree-l1"><a class="reference internal" href="../howto/create-update-providers.html">Update community providers</a></li>
-<li class="toctree-l1"><a class="reference internal" href="../installing-from-sources.html">Installing from sources</a></li>
-<li class="toctree-l1"><a class="reference internal" href="../installing-from-pypi.html">Installing from PyPI</a></li>
+<p class="caption" role="heading"><span class="caption-text">Resources</span></p>
+<ul>
+<li class="toctree-l1"><a class="reference external" href="https://pypi.org/project/apache-airflow-providers-sftp/">PyPI Repository</a></li>
+<li class="toctree-l1"><a class="reference internal" href="../../../../../installing-providers-from-sources.html">Installing from sources</a></li>
+</ul>
+<p class="caption" role="heading"><span class="caption-text">Commits</span></p>
+<ul>
+<li class="toctree-l1"><a class="reference internal" href="../../../../../commits.html">Detailed list of commits</a></li>
 </ul>
 
 </div>
@@ -540,11 +563,11 @@
 
     <ul class="breadcrumb">
         
-            <li class="breadcrumb-item"><a href="../index.html" class="icon icon-home"> Home</a></li>
+            <li class="breadcrumb-item"><a href="../../../../../index.html" class="icon icon-home"> Home</a></li>
             
-                <li class="breadcrumb-item"><a href="index.html">Core Extensions</a></li>
+                <li class="breadcrumb-item"><a href="../index.html"><code class="xref py py-mod docutils literal notranslate"><span class="pre">airflow.providers.sftp</span></code></a></li>
             
-            <li class="breadcrumb-item"><a href="secrets-backends.html"> Secret backends</a></li>
+            <li class="breadcrumb-item"><a href="index.html"> <code class="xref py py-mod docutils literal notranslate"><span class="pre">airflow.providers.sftp.operators</span></code></a></li>
         
     </ul>
 </div>
@@ -555,54 +578,24 @@
                                 <div class="bodywrapper">
                                     <div class="body" role="main">
                                         
-  <blockquote>
-<div></div></blockquote>
-<div class="section" id="secret-backends">
-<h1>Secret backends<a class="headerlink" href="#secret-backends" title="Permalink to this heading">¶</a></h1>
-<p>This is a summary of all Apache Airflow Community provided implementations of secret backends
-exposed via community-managed providers.</p>
-<p>Airflow has the capability of reading connections, variables and configuration from Secret Backends rather
-than from its own Database. While storing such information in Airflow’s database is possible, many of the
-enterprise customers already have some secret managers storing secrets, and Airflow can tap into those
-via providers that implement secrets backends for services Airflow integrates with.</p>
-<p>You can also take a
-look at Secret backends available in the core Airflow in
-<a class="reference external" href="/docs/apache-airflow/stable/security/secrets/secrets-backend/index.html" title="(in apache-airflow v2.4.0.dev0)"><span>Secrets Backend</span></a> and here you can see the ones
-provided by the community-managed providers:</p>
-<div class="section" id="amazon">
-<h2>Amazon<a class="headerlink" href="#amazon" title="Permalink to this heading">¶</a></h2>
-<ul class="simple">
-<li><p><a class="reference external" href="/docs/apache-airflow-providers-amazon/stable/_api/airflow/providers/amazon/aws/secrets/secrets_manager/index.html#airflow.providers.amazon.aws.secrets.secrets_manager.SecretsManagerBackend" title="(in apache-airflow-providers-amazon v4.1.0)"><code class="xref py py-class docutils literal notranslate"><span class="pre">SecretsManagerBackend</span></code></a></p></li>
-<li><p><a class="reference external" href="/docs/apache-airflow-providers-amazon/stable/_api/airflow/providers/amazon/aws/secrets/systems_manager/index.html#airflow.providers.amazon.aws.secrets.systems_manager.SystemsManagerParameterStoreBackend" title="(in apache-airflow-providers-amazon v4.1.0)"><code class="xref py py-class docutils literal notranslate"><span class="pre">SystemsManagerParameterStoreBackend</span></code></a></p></li>
+  <div class="section" id="module-airflow.providers.sftp.operators">
+<span id="airflow-providers-sftp-operators"></span><h1><a class="reference internal" href="#module-airflow.providers.sftp.operators" title="airflow.providers.sftp.operators"><code class="xref py py-mod docutils literal notranslate"><span class="pre">airflow.providers.sftp.operators</span></code></a><a class="headerlink" href="#module-airflow.providers.sftp.operators" title="Permalink to this heading">¶</a></h1>
+<div class="section" id="submodules">
+<h2>Submodules<a class="headerlink" href="#submodules" title="Permalink to this heading">¶</a></h2>
+<div class="toctree-wrapper compound">
+<ul>
+<li class="toctree-l1"><a class="reference internal" href="sftp/index.html"><code class="xref py py-mod docutils literal notranslate"><span class="pre">airflow.providers.sftp.operators.sftp</span></code></a></li>
 </ul>
 </div>
-<div class="section" id="google">
-<h2>Google<a class="headerlink" href="#google" title="Permalink to this heading">¶</a></h2>
-<ul class="simple">
-<li><p><a class="reference external" href="/docs/apache-airflow-providers-google/stable/_api/airflow/providers/google/cloud/secrets/secret_manager/index.html#airflow.providers.google.cloud.secrets.secret_manager.CloudSecretManagerBackend" title="(in apache-airflow-providers-google v8.1.0)"><code class="xref py py-class docutils literal notranslate"><span class="pre">CloudSecretManagerBackend</span></code></a></p></li>
-</ul>
-</div>
-<div class="section" id="hashicorp">
-<h2>Hashicorp<a class="headerlink" href="#hashicorp" title="Permalink to this heading">¶</a></h2>
-<ul class="simple">
-<li><p><a class="reference external" href="/docs/apache-airflow-providers-hashicorp/stable/_api/airflow/providers/hashicorp/secrets/vault/index.html#airflow.providers.hashicorp.secrets.vault.VaultBackend" title="(in apache-airflow-providers-hashicorp v3.0.1)"><code class="xref py py-class docutils literal notranslate"><span class="pre">VaultBackend</span></code></a></p></li>
-</ul>
-</div>
-<div class="section" id="microsoft-azure">
-<h2>Microsoft Azure<a class="headerlink" href="#microsoft-azure" title="Permalink to this heading">¶</a></h2>
-<ul class="simple">
-<li><p><a class="reference external" href="/docs/apache-airflow-providers-microsoft-azure/stable/_api/airflow/providers/microsoft/azure/secrets/key_vault/index.html#airflow.providers.microsoft.azure.secrets.key_vault.AzureKeyVaultBackend" title="(in apache-airflow-providers-microsoft-azure v4.1.0)"><code class="xref py py-class docutils literal notranslate"><span class="pre">AzureKeyVaultBackend</span></code></a></p></li>
-<li><p><code class="xref py py-class docutils literal notranslate"><span class="pre">AzureKeyVaultBackend</span></code></p></li>
-</ul>
 </div>
 </div>
 
 
     <div class="pager" role="navigation" aria-label="related navigation">
-            <a rel="prev" title="Writing logs" href="logging.html" >
+            <a rel="prev" title="airflow.providers.sftp.hooks.sftp" href="../hooks/sftp/index.html" >
                 <button class="btn-hollow btn-blue bodytext__medium--cerulean-blue" accesskey="p">Previous</button>
             </a>
-            <a rel="next" title="Community Providers" href="../howto/create-update-providers.html" >
+            <a rel="next" title="airflow.providers.sftp.operators.sftp" href="sftp/index.html" >
                 <button class="btn-hollow btn-blue bodytext__medium--cerulean-blue" accesskey="n">Next</button>
             </a>
     </div>
@@ -672,11 +665,8 @@ provided by the community-managed providers:</p>
     <nav class="wy-nav-side-toc">
         <div class="wy-menu-vertical">
             <ul>
-<li><a class="reference internal" href="#">Secret backends</a><ul>
-<li><a class="reference internal" href="#amazon">Amazon</a></li>
-<li><a class="reference internal" href="#google">Google</a></li>
-<li><a class="reference internal" href="#hashicorp">Hashicorp</a></li>
-<li><a class="reference internal" href="#microsoft-azure">Microsoft Azure</a></li>
+<li><a class="reference internal" href="#"><code class="xref py py-mod docutils literal notranslate"><span class="pre">airflow.providers.sftp.operators</span></code></a><ul>
+<li><a class="reference internal" href="#submodules">Submodules</a></li>
 </ul>
 </li>
 </ul>
@@ -701,7 +691,7 @@ provided by the community-managed providers:</p>
             
         
         <div class="base-layout--button">
-            <a href="https://github.com/apache/airflow/edit/main/docs/apache-airflow-providers/core-extensions/secrets-backends.rst" rel="nofollow">
+            <a href="https://github.com/apache/airflow/edit/main/docs/apache-airflow-providers-sftp/_api/airflow/providers/sftp/operators/index.rst" rel="nofollow">
 
                 <button class="btn-hollow btn-brown btn-with-icon with-box-shadow button-fixed">
                     <svg xmlns="http://www.w3.org/2000/svg" width="30.76" height="30">
@@ -835,17 +825,17 @@ provided by the community-managed providers:</p>
         </span>
     </div>
 </footer>
-    <script type="text/javascript" src="../_static/_gen/js/docs.js"></script>
-    <script type="text/javascript" id="documentation_options" data-url_root="../" src="../_static/documentation_options.js"></script>
+    <script type="text/javascript" src="../../../../../_static/_gen/js/docs.js"></script>
+    <script type="text/javascript" id="documentation_options" data-url_root="../../../../../" src="../../../../../_static/documentation_options.js"></script>
     <script src="https://code.jquery.com/jquery-3.4.1.min.js" integrity="sha256-CSXorXvZcTkaix6Yvo6HppcZGetbYMGWSFlBw8HfCJo=" crossorigin="anonymous"></script>
     <script src="https://cdnjs.cloudflare.com/ajax/libs/popper.js/1.14.3/umd/popper.min.js" integrity="sha384-ZMP7rVo3mIykV+2+9J3UJ46jBk0WLaUAdn689aCwoqbBJiSnjAK/l8WvCWPIPm49" crossorigin="anonymous"></script>
     <script src="https://stackpath.bootstrapcdn.com/bootstrap/4.1.3/js/bootstrap.min.js" integrity="sha384-ChfqqxuZUCnJSK3+MXmPNIyE6ZbWh2IMqE241rYiqJxyMiZ6OW/JmZQ5stwEULTy" crossorigin="anonymous"></script>
-        <script data-url_root="../" id="documentation_options" src="../_static/documentation_options.js"></script>
-        <script src="../_static/jquery.js"></script>
-        <script src="../_static/underscore.js"></script>
-        <script src="../_static/_sphinx_javascript_frameworks_compat.js"></script>
-        <script src="../_static/doctools.js"></script>
-        <script src="../_static/clipboard.min.js"></script>
-        <script src="../_static/copybutton.js"></script>
+        <script data-url_root="../../../../../" id="documentation_options" src="../../../../../_static/documentation_options.js"></script>
+        <script src="../../../../../_static/jquery.js"></script>
+        <script src="../../../../../_static/underscore.js"></script>
+        <script src="../../../../../_static/_sphinx_javascript_frameworks_compat.js"></script>
+        <script src="../../../../../_static/doctools.js"></script>
+        <script src="../../../../../_static/clipboard.min.js"></script>
+        <script src="../../../../../_static/copybutton.js"></script>
 </body>
 </html>
\ No newline at end of file
diff --git a/docs-archive/apache-airflow-providers/core-extensions/secrets-backends.html b/docs-archive/apache-airflow-providers-sftp/4.0.0/_api/airflow/providers/sftp/operators/sftp/index.html
similarity index 79%
copy from docs-archive/apache-airflow-providers/core-extensions/secrets-backends.html
copy to docs-archive/apache-airflow-providers-sftp/4.0.0/_api/airflow/providers/sftp/operators/sftp/index.html
index f7628ed6ab..e9492fc78e 100644
--- a/docs-archive/apache-airflow-providers/core-extensions/secrets-backends.html
+++ b/docs-archive/apache-airflow-providers-sftp/4.0.0/_api/airflow/providers/sftp/operators/sftp/index.html
@@ -9,17 +9,18 @@
 <head>
         <meta charset="utf-8" />
     <meta name="viewport" content="width=device-width, initial-scale=1">
-        <title>Secret backends &mdash; apache-airflow-providers Documentation</title>
-    <link rel="stylesheet" href="../_static/_gen/css/main.min.css" type="text/css" />
-            <link rel="stylesheet" type="text/css" href="../_static/pygments.css" />
-            <link rel="stylesheet" type="text/css" href="../_static/_gen/css/main.min.css" />
-            <link rel="stylesheet" type="text/css" href="../_static/copybutton.css" />
-            <link rel="stylesheet" type="text/css" href="../_static/_gen/css/main-custom.min.css" />
-            <link rel="shortcut icon" href="../_static/pin_32.png"/>
-            <link rel="index" title="Index" href="../genindex.html" />
-            <link rel="search" title="Search" href="../search.html" />
-            <link rel="next" title="Community Providers" href="../howto/create-update-providers.html" />
-            <link rel="prev" title="Writing logs" href="logging.html" />
+        <title>airflow.providers.sftp.operators.sftp &mdash; apache-airflow-providers-sftp Documentation</title>
+    <link rel="stylesheet" href="../../../../../../_static/_gen/css/main.min.css" type="text/css" />
+            <link rel="stylesheet" type="text/css" href="../../../../../../_static/pygments.css" />
+            <link rel="stylesheet" type="text/css" href="../../../../../../_static/_gen/css/main.min.css" />
+            <link rel="stylesheet" type="text/css" href="../../../../../../_static/copybutton.css" />
+            <link rel="stylesheet" type="text/css" href="../../../../../../_static/_gen/css/main-custom.min.css" />
+            <link rel="stylesheet" type="text/css" href="../../../../../../_static/graphviz.css" />
+            <link rel="shortcut icon" href="../../../../../../_static/pin_32.png"/>
+            <link rel="index" title="Index" href="../../../../../../genindex.html" />
+            <link rel="search" title="Search" href="../../../../../../search.html" />
+            <link rel="next" title="airflow.providers.sftp.sensors" href="../../sensors/index.html" />
+            <link rel="prev" title="airflow.providers.sftp.operators" href="../index.html" />
     <!-- Matomo -->
     <script>
         var _paq = window._paq = window._paq || [];
@@ -280,8 +281,21 @@
             <div class="content-drawer">
                 <div class="td-sidebar">
 
+<div id="docs-version-selector" class="docs-version-selector sidebar__version-selector">
+    <a class="dropdown-toggle" href="#" id="versionDropdown" role="button" data-toggle="dropdown" aria-haspopup="true"
+       aria-expanded="false">
+        <span class="bodytext__medium--greyish-brown">Version: </span><span class="version">4.0.0</span>
+    </a>
+    <div class="dropdown-menu" aria-labelledby="navbarDropdownMenuLink">
+
+    </div>
+    <script type="application/x-template" id="version-item-template">
+        <a class="dropdown-item"></a>
+    </script>
+</div>
+
 <div class="searchb-box">
-    <form class="search-form" action="../search.html" method="get">
+    <form class="search-form" action="../../../../../../search.html" method="get">
         <input class="search-form__input" type="text" name="q" placeholder="Search docs" size="16">
         <input type="hidden" name="check_keywords" value="yes" />
         <input type="hidden" name="area" value="default" />
@@ -311,21 +325,19 @@
 
 
 <div class="toctree" role="navigation" aria-label="main navigation">
-    <ul class="current">
-<li class="toctree-l1"><a class="reference internal" href="../index.html">Providers</a></li>
-<li class="toctree-l1"><a class="reference internal" href="../packages-ref.html">Packages</a></li>
-<li class="toctree-l1"><a class="reference internal" href="../operators-and-hooks-ref/index.html">Operators and hooks</a></li>
-<li class="toctree-l1 current"><a class="reference internal" href="index.html">Core Extensions</a><ul class="current">
-<li class="toctree-l2"><a class="reference internal" href="auth-backends.html">Auth backends</a></li>
-<li class="toctree-l2"><a class="reference internal" href="connections.html">Connections</a></li>
-<li class="toctree-l2"><a class="reference internal" href="extra-links.html">Extra Links</a></li>
-<li class="toctree-l2"><a class="reference internal" href="logging.html">Writing logs</a></li>
-<li class="toctree-l2 current"><a class="current reference internal" href="#">Secret backends</a></li>
+    <p class="caption" role="heading"><span class="caption-text">References</span></p>
+<ul class="current">
+<li class="toctree-l1"><a class="reference internal" href="../../../../../../connections/sftp.html">Connection types</a></li>
+<li class="toctree-l1 current"><a class="reference internal" href="../../index.html">Python API</a></li>
 </ul>
-</li>
-<li class="toctree-l1"><a class="reference internal" href="../howto/create-update-providers.html">Update community providers</a></li>
-<li class="toctree-l1"><a class="reference internal" href="../installing-from-sources.html">Installing from sources</a></li>
-<li class="toctree-l1"><a class="reference internal" href="../installing-from-pypi.html">Installing from PyPI</a></li>
+<p class="caption" role="heading"><span class="caption-text">Resources</span></p>
+<ul>
+<li class="toctree-l1"><a class="reference external" href="https://pypi.org/project/apache-airflow-providers-sftp/">PyPI Repository</a></li>
+<li class="toctree-l1"><a class="reference internal" href="../../../../../../installing-providers-from-sources.html">Installing from sources</a></li>
+</ul>
+<p class="caption" role="heading"><span class="caption-text">Commits</span></p>
+<ul>
+<li class="toctree-l1"><a class="reference internal" href="../../../../../../commits.html">Detailed list of commits</a></li>
 </ul>
 
 </div>
@@ -406,8 +418,21 @@
             
     <div class="td-sidebar desktop-only d-print-none">
 
+<div id="docs-version-selector" class="docs-version-selector sidebar__version-selector">
+    <a class="dropdown-toggle" href="#" id="versionDropdown" role="button" data-toggle="dropdown" aria-haspopup="true"
+       aria-expanded="false">
+        <span class="bodytext__medium--greyish-brown">Version: </span><span class="version">4.0.0</span>
+    </a>
+    <div class="dropdown-menu" aria-labelledby="navbarDropdownMenuLink">
+
+    </div>
+    <script type="application/x-template" id="version-item-template">
+        <a class="dropdown-item"></a>
+    </script>
+</div>
+
 <div class="searchb-box">
-    <form class="search-form" action="../search.html" method="get">
+    <form class="search-form" action="../../../../../../search.html" method="get">
         <input class="search-form__input" type="text" name="q" placeholder="Search docs" size="16">
         <input type="hidden" name="check_keywords" value="yes" />
         <input type="hidden" name="area" value="default" />
@@ -437,21 +462,19 @@
 
 
 <div class="toctree" role="navigation" aria-label="main navigation">
-    <ul class="current">
-<li class="toctree-l1"><a class="reference internal" href="../index.html">Providers</a></li>
-<li class="toctree-l1"><a class="reference internal" href="../packages-ref.html">Packages</a></li>
-<li class="toctree-l1"><a class="reference internal" href="../operators-and-hooks-ref/index.html">Operators and hooks</a></li>
-<li class="toctree-l1 current"><a class="reference internal" href="index.html">Core Extensions</a><ul class="current">
-<li class="toctree-l2"><a class="reference internal" href="auth-backends.html">Auth backends</a></li>
-<li class="toctree-l2"><a class="reference internal" href="connections.html">Connections</a></li>
-<li class="toctree-l2"><a class="reference internal" href="extra-links.html">Extra Links</a></li>
-<li class="toctree-l2"><a class="reference internal" href="logging.html">Writing logs</a></li>
-<li class="toctree-l2 current"><a class="current reference internal" href="#">Secret backends</a></li>
+    <p class="caption" role="heading"><span class="caption-text">References</span></p>
+<ul class="current">
+<li class="toctree-l1"><a class="reference internal" href="../../../../../../connections/sftp.html">Connection types</a></li>
+<li class="toctree-l1 current"><a class="reference internal" href="../../index.html">Python API</a></li>
 </ul>
-</li>
-<li class="toctree-l1"><a class="reference internal" href="../howto/create-update-providers.html">Update community providers</a></li>
-<li class="toctree-l1"><a class="reference internal" href="../installing-from-sources.html">Installing from sources</a></li>
-<li class="toctree-l1"><a class="reference internal" href="../installing-from-pypi.html">Installing from PyPI</a></li>
+<p class="caption" role="heading"><span class="caption-text">Resources</span></p>
+<ul>
+<li class="toctree-l1"><a class="reference external" href="https://pypi.org/project/apache-airflow-providers-sftp/">PyPI Repository</a></li>
+<li class="toctree-l1"><a class="reference internal" href="../../../../../../installing-providers-from-sources.html">Installing from sources</a></li>
+</ul>
+<p class="caption" role="heading"><span class="caption-text">Commits</span></p>
+<ul>
+<li class="toctree-l1"><a class="reference internal" href="../../../../../../commits.html">Detailed list of commits</a></li>
 </ul>
 
 </div>
@@ -540,11 +563,13 @@
 
     <ul class="breadcrumb">
         
-            <li class="breadcrumb-item"><a href="../index.html" class="icon icon-home"> Home</a></li>
+            <li class="breadcrumb-item"><a href="../../../../../../index.html" class="icon icon-home"> Home</a></li>
             
-                <li class="breadcrumb-item"><a href="index.html">Core Extensions</a></li>
+                <li class="breadcrumb-item"><a href="../../index.html"><code class="xref py py-mod docutils literal notranslate"><span class="pre">airflow.providers.sftp</span></code></a></li>
             
-            <li class="breadcrumb-item"><a href="secrets-backends.html"> Secret backends</a></li>
+                <li class="breadcrumb-item"><a href="../index.html"><code class="xref py py-mod docutils literal notranslate"><span class="pre">airflow.providers.sftp.operators</span></code></a></li>
+            
+            <li class="breadcrumb-item"><a href="index.html"> <code class="xref py py-mod docutils literal notranslate"><span class="pre">airflow.providers.sftp.operators.sftp</span></code></a></li>
         
     </ul>
 </div>
@@ -555,54 +580,115 @@
                                 <div class="bodywrapper">
                                     <div class="body" role="main">
                                         
-  <blockquote>
-<div></div></blockquote>
-<div class="section" id="secret-backends">
-<h1>Secret backends<a class="headerlink" href="#secret-backends" title="Permalink to this heading">¶</a></h1>
-<p>This is a summary of all Apache Airflow Community provided implementations of secret backends
-exposed via community-managed providers.</p>
-<p>Airflow has the capability of reading connections, variables and configuration from Secret Backends rather
-than from its own Database. While storing such information in Airflow’s database is possible, many of the
-enterprise customers already have some secret managers storing secrets, and Airflow can tap into those
-via providers that implement secrets backends for services Airflow integrates with.</p>
-<p>You can also take a
-look at Secret backends available in the core Airflow in
-<a class="reference external" href="/docs/apache-airflow/stable/security/secrets/secrets-backend/index.html" title="(in apache-airflow v2.4.0.dev0)"><span>Secrets Backend</span></a> and here you can see the ones
-provided by the community-managed providers:</p>
-<div class="section" id="amazon">
-<h2>Amazon<a class="headerlink" href="#amazon" title="Permalink to this heading">¶</a></h2>
-<ul class="simple">
-<li><p><a class="reference external" href="/docs/apache-airflow-providers-amazon/stable/_api/airflow/providers/amazon/aws/secrets/secrets_manager/index.html#airflow.providers.amazon.aws.secrets.secrets_manager.SecretsManagerBackend" title="(in apache-airflow-providers-amazon v4.1.0)"><code class="xref py py-class docutils literal notranslate"><span class="pre">SecretsManagerBackend</span></code></a></p></li>
-<li><p><a class="reference external" href="/docs/apache-airflow-providers-amazon/stable/_api/airflow/providers/amazon/aws/secrets/systems_manager/index.html#airflow.providers.amazon.aws.secrets.systems_manager.SystemsManagerParameterStoreBackend" title="(in apache-airflow-providers-amazon v4.1.0)"><code class="xref py py-class docutils literal notranslate"><span class="pre">SystemsManagerParameterStoreBackend</span></code></a></p></li>
-</ul>
-</div>
-<div class="section" id="google">
-<h2>Google<a class="headerlink" href="#google" title="Permalink to this heading">¶</a></h2>
-<ul class="simple">
-<li><p><a class="reference external" href="/docs/apache-airflow-providers-google/stable/_api/airflow/providers/google/cloud/secrets/secret_manager/index.html#airflow.providers.google.cloud.secrets.secret_manager.CloudSecretManagerBackend" title="(in apache-airflow-providers-google v8.1.0)"><code class="xref py py-class docutils literal notranslate"><span class="pre">CloudSecretManagerBackend</span></code></a></p></li>
-</ul>
+  <div class="section" id="module-airflow.providers.sftp.operators.sftp">
+<span id="airflow-providers-sftp-operators-sftp"></span><h1><a class="reference internal" href="#module-airflow.providers.sftp.operators.sftp" title="airflow.providers.sftp.operators.sftp"><code class="xref py py-mod docutils literal notranslate"><span class="pre">airflow.providers.sftp.operators.sftp</span></code></a><a class="headerlink" href="#module-airflow.providers.sftp.operators.sftp" title="Permalink to this heading">¶</a></h1>
+<p>This module contains SFTP operator.</p>
+<div class="section" id="module-contents">
+<h2>Module Contents<a class="headerlink" href="#module-contents" title="Permalink to this heading">¶</a></h2>
+<div class="section" id="classes">
+<h3>Classes<a class="headerlink" href="#classes" title="Permalink to this heading">¶</a></h3>
+<table class="autosummary longtable docutils align-default">
+<colgroup>
+<col style="width: 10%" />
+<col style="width: 90%" />
+</colgroup>
+<tbody>
+<tr class="row-odd"><td><p><a class="reference internal" href="#airflow.providers.sftp.operators.sftp.SFTPOperation" title="airflow.providers.sftp.operators.sftp.SFTPOperation"><code class="xref py py-obj docutils literal notranslate"><span class="pre">SFTPOperation</span></code></a></p></td>
+<td><p>Operation that can be used with SFTP</p></td>
+</tr>
+<tr class="row-even"><td><p><a class="reference internal" href="#airflow.providers.sftp.operators.sftp.SFTPOperator" title="airflow.providers.sftp.operators.sftp.SFTPOperator"><code class="xref py py-obj docutils literal notranslate"><span class="pre">SFTPOperator</span></code></a></p></td>
+<td><p>SFTPOperator for transferring files from remote host to local or vice a versa.</p></td>
+</tr>
+</tbody>
+</table>
+<dl class="py class">
+<dt class="sig sig-object py" id="airflow.providers.sftp.operators.sftp.SFTPOperation">
+<em class="property"><span class="pre">class</span><span class="w"> </span></em><span class="sig-prename descclassname"><span class="pre">airflow.providers.sftp.operators.sftp.</span></span><span class="sig-name descname"><span class="pre">SFTPOperation</span></span><a class="reference internal" href="../../../../../../_modules/airflow/providers/sftp/operators/sftp.html#SFTPOperation"><span class="viewcode-link"><span class="pre">[source]</span></span></a><a class="headerlink" href="#air [...]
+<dd><p>Operation that can be used with SFTP</p>
+<dl class="py attribute">
+<dt class="sig sig-object py" id="airflow.providers.sftp.operators.sftp.SFTPOperation.PUT">
+<span class="sig-name descname"><span class="pre">PUT</span></span><em class="property"><span class="w"> </span><span class="pre">=</span> <span class="pre">put</span></em><a class="reference internal" href="../../../../../../_modules/airflow/providers/sftp/operators/sftp.html#SFTPOperation.PUT"><span class="viewcode-link"><span class="pre">[source]</span></span></a><a class="headerlink" href="#airflow.providers.sftp.operators.sftp.SFTPOperation.PUT" title="Permalink to this definition"> [...]
+<dd></dd></dl>
+
+<dl class="py attribute">
+<dt class="sig sig-object py" id="airflow.providers.sftp.operators.sftp.SFTPOperation.GET">
+<span class="sig-name descname"><span class="pre">GET</span></span><em class="property"><span class="w"> </span><span class="pre">=</span> <span class="pre">get</span></em><a class="reference internal" href="../../../../../../_modules/airflow/providers/sftp/operators/sftp.html#SFTPOperation.GET"><span class="viewcode-link"><span class="pre">[source]</span></span></a><a class="headerlink" href="#airflow.providers.sftp.operators.sftp.SFTPOperation.GET" title="Permalink to this definition"> [...]
+<dd></dd></dl>
+
+</dd></dl>
+
+<dl class="py class">
+<dt class="sig sig-object py" id="airflow.providers.sftp.operators.sftp.SFTPOperator">
+<em class="property"><span class="pre">class</span><span class="w"> </span></em><span class="sig-prename descclassname"><span class="pre">airflow.providers.sftp.operators.sftp.</span></span><span class="sig-name descname"><span class="pre">SFTPOperator</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="o"><span class="pre">*</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">ssh_hook</span></span><span class="o"><span class="pre">=</s [...]
+<dd><p>Bases: <code class="xref py py-obj docutils literal notranslate"><span class="pre">airflow.models.BaseOperator</span></code></p>
+<p>SFTPOperator for transferring files from remote host to local or vice a versa.
+This operator uses sftp_hook to open sftp transport channel that serve as basis
+for file transfer.</p>
+<dl class="field-list simple">
+<dt class="field-odd">Parameters</dt>
+<dd class="field-odd"><ul class="simple">
+<li><p><strong>ssh_conn_id</strong> (<em>Optional</em><em>[</em><a class="reference external" href="https://docs.python.org/3/library/stdtypes.html#str" title="(in Python v3.10)"><em>str</em></a><em>]</em>) – <a class="reference external" href="/docs/apache-airflow-providers-ssh/stable/connections/ssh.html#howto-connection-ssh" title="(in apache-airflow-providers-ssh v3.1.0)"><span class="xref std std-ref">ssh connection id</span></a>
+from airflow Connections. <cite>ssh_conn_id</cite> will be ignored if <cite>ssh_hook</cite>
+or <cite>sftp_hook</cite> is provided.</p></li>
+<li><p><strong>sftp_hook</strong> (<em>Optional</em><em>[</em><a class="reference internal" href="../../hooks/sftp/index.html#airflow.providers.sftp.hooks.sftp.SFTPHook" title="airflow.providers.sftp.hooks.sftp.SFTPHook"><em>airflow.providers.sftp.hooks.sftp.SFTPHook</em></a><em>]</em>) – predefined SFTPHook to use
+Either <cite>sftp_hook</cite> or <cite>ssh_conn_id</cite> needs to be provided.</p></li>
+<li><p><strong>ssh_hook</strong> (<em>Optional</em><em>[</em><a class="reference external" href="/docs/apache-airflow-providers-ssh/stable/_api/airflow/providers/ssh/hooks/ssh/index.html#airflow.providers.ssh.hooks.ssh.SSHHook" title="(in apache-airflow-providers-ssh v3.1.0)"><em>airflow.providers.ssh.hooks.ssh.SSHHook</em></a><em>]</em>) – Deprecated - predefined SSHHook to use for remote execution
+Use <cite>sftp_hook</cite> instead.</p></li>
+<li><p><strong>remote_host</strong> (<em>Optional</em><em>[</em><a class="reference external" href="https://docs.python.org/3/library/stdtypes.html#str" title="(in Python v3.10)"><em>str</em></a><em>]</em>) – remote host to connect (templated)
+Nullable. If provided, it will replace the <cite>remote_host</cite> which was
+defined in <cite>sftp_hook</cite>/<cite>ssh_hook</cite> or predefined in the connection of <cite>ssh_conn_id</cite>.</p></li>
+<li><p><strong>local_filepath</strong> (<a class="reference external" href="https://docs.python.org/3/library/stdtypes.html#str" title="(in Python v3.10)"><em>str</em></a>) – local file path to get or put. (templated)</p></li>
+<li><p><strong>remote_filepath</strong> (<a class="reference external" href="https://docs.python.org/3/library/stdtypes.html#str" title="(in Python v3.10)"><em>str</em></a>) – remote file path to get or put. (templated)</p></li>
+<li><p><strong>operation</strong> (<a class="reference external" href="https://docs.python.org/3/library/stdtypes.html#str" title="(in Python v3.10)"><em>str</em></a>) – specify operation ‘get’ or ‘put’, defaults to put</p></li>
+<li><p><strong>confirm</strong> (<a class="reference external" href="https://docs.python.org/3/library/functions.html#bool" title="(in Python v3.10)"><em>bool</em></a>) – specify if the SFTP operation should be confirmed, defaults to True</p></li>
+<li><p><strong>create_intermediate_dirs</strong> (<a class="reference external" href="https://docs.python.org/3/library/functions.html#bool" title="(in Python v3.10)"><em>bool</em></a>) – <p>create missing intermediate directories when
+copying from remote to local and vice-versa. Default is False.</p>
+<p>Example: The following task would copy <code class="docutils literal notranslate"><span class="pre">file.txt</span></code> to the remote host
+at <code class="docutils literal notranslate"><span class="pre">/tmp/tmp1/tmp2/</span></code> while creating <code class="docutils literal notranslate"><span class="pre">tmp</span></code>,``tmp1`` and <code class="docutils literal notranslate"><span class="pre">tmp2</span></code> if they
+don’t exist. If the parameter is not passed it would error as the directory
+does not exist.</p>
+<div class="highlight-default notranslate"><div class="highlight"><pre><span></span><span class="n">put_file</span> <span class="o">=</span> <span class="n">SFTPOperator</span><span class="p">(</span>
+    <span class="n">task_id</span><span class="o">=</span><span class="s2">&quot;test_sftp&quot;</span><span class="p">,</span>
+    <span class="n">ssh_conn_id</span><span class="o">=</span><span class="s2">&quot;ssh_default&quot;</span><span class="p">,</span>
+    <span class="n">local_filepath</span><span class="o">=</span><span class="s2">&quot;/tmp/file.txt&quot;</span><span class="p">,</span>
+    <span class="n">remote_filepath</span><span class="o">=</span><span class="s2">&quot;/tmp/tmp1/tmp2/file.txt&quot;</span><span class="p">,</span>
+    <span class="n">operation</span><span class="o">=</span><span class="s2">&quot;put&quot;</span><span class="p">,</span>
+    <span class="n">create_intermediate_dirs</span><span class="o">=</span><span class="kc">True</span><span class="p">,</span>
+    <span class="n">dag</span><span class="o">=</span><span class="n">dag</span>
+<span class="p">)</span>
+</pre></div>
 </div>
-<div class="section" id="hashicorp">
-<h2>Hashicorp<a class="headerlink" href="#hashicorp" title="Permalink to this heading">¶</a></h2>
-<ul class="simple">
-<li><p><a class="reference external" href="/docs/apache-airflow-providers-hashicorp/stable/_api/airflow/providers/hashicorp/secrets/vault/index.html#airflow.providers.hashicorp.secrets.vault.VaultBackend" title="(in apache-airflow-providers-hashicorp v3.0.1)"><code class="xref py py-class docutils literal notranslate"><span class="pre">VaultBackend</span></code></a></p></li>
+</p></li>
 </ul>
+</dd>
+</dl>
+<dl class="py attribute">
+<dt class="sig sig-object py" id="airflow.providers.sftp.operators.sftp.SFTPOperator.template_fields">
+<span class="sig-name descname"><span class="pre">template_fields</span></span><em class="property"><span class="w"> </span><span class="pre">:Sequence[str]</span> <span class="pre">=</span> <span class="pre">['local_filepath',</span> <span class="pre">'remote_filepath',</span> <span class="pre">'remote_host']</span></em><a class="reference internal" href="../../../../../../_modules/airflow/providers/sftp/operators/sftp.html#SFTPOperator.template_fields"><span class="viewcode-link"><span [...]
+<dd></dd></dl>
+
+<dl class="py method">
+<dt class="sig sig-object py" id="airflow.providers.sftp.operators.sftp.SFTPOperator.execute">
+<span class="sig-name descname"><span class="pre">execute</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">self</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">context</span></span></em><span class="sig-paren">)</span><a class="reference internal" href="../../../../../../_modules/airflow/providers/sftp/operators/sftp.html#SFTPOperator.execute"><span class="viewcode-link"><span class="pre">[source]</span></spa [...]
+<dd><p>This is the main method to derive when creating an operator.
+Context is the same dictionary used as when rendering jinja templates.</p>
+<p>Refer to get_template_context for more context.</p>
+<dl class="field-list simple">
+</dl>
+</dd></dl>
+
+</dd></dl>
+
 </div>
-<div class="section" id="microsoft-azure">
-<h2>Microsoft Azure<a class="headerlink" href="#microsoft-azure" title="Permalink to this heading">¶</a></h2>
-<ul class="simple">
-<li><p><a class="reference external" href="/docs/apache-airflow-providers-microsoft-azure/stable/_api/airflow/providers/microsoft/azure/secrets/key_vault/index.html#airflow.providers.microsoft.azure.secrets.key_vault.AzureKeyVaultBackend" title="(in apache-airflow-providers-microsoft-azure v4.1.0)"><code class="xref py py-class docutils literal notranslate"><span class="pre">AzureKeyVaultBackend</span></code></a></p></li>
-<li><p><code class="xref py py-class docutils literal notranslate"><span class="pre">AzureKeyVaultBackend</span></code></p></li>
-</ul>
 </div>
 </div>
 
 
     <div class="pager" role="navigation" aria-label="related navigation">
-            <a rel="prev" title="Writing logs" href="logging.html" >
+            <a rel="prev" title="airflow.providers.sftp.operators" href="../index.html" >
                 <button class="btn-hollow btn-blue bodytext__medium--cerulean-blue" accesskey="p">Previous</button>
             </a>
-            <a rel="next" title="Community Providers" href="../howto/create-update-providers.html" >
+            <a rel="next" title="airflow.providers.sftp.sensors" href="../../sensors/index.html" >
                 <button class="btn-hollow btn-blue bodytext__medium--cerulean-blue" accesskey="n">Next</button>
             </a>
     </div>
@@ -672,11 +758,23 @@ provided by the community-managed providers:</p>
     <nav class="wy-nav-side-toc">
         <div class="wy-menu-vertical">
             <ul>
-<li><a class="reference internal" href="#">Secret backends</a><ul>
-<li><a class="reference internal" href="#amazon">Amazon</a></li>
-<li><a class="reference internal" href="#google">Google</a></li>
-<li><a class="reference internal" href="#hashicorp">Hashicorp</a></li>
-<li><a class="reference internal" href="#microsoft-azure">Microsoft Azure</a></li>
+<li><a class="reference internal" href="#"><code class="xref py py-mod docutils literal notranslate"><span class="pre">airflow.providers.sftp.operators.sftp</span></code></a><ul>
+<li><a class="reference internal" href="#module-contents">Module Contents</a><ul>
+<li><a class="reference internal" href="#classes">Classes</a><ul>
+<li><a class="reference internal" href="#airflow.providers.sftp.operators.sftp.SFTPOperation">SFTPOperation</a><ul>
+<li><a class="reference internal" href="#airflow.providers.sftp.operators.sftp.SFTPOperation.PUT">PUT</a></li>
+<li><a class="reference internal" href="#airflow.providers.sftp.operators.sftp.SFTPOperation.GET">GET</a></li>
+</ul>
+</li>
+<li><a class="reference internal" href="#airflow.providers.sftp.operators.sftp.SFTPOperator">SFTPOperator</a><ul>
+<li><a class="reference internal" href="#airflow.providers.sftp.operators.sftp.SFTPOperator.template_fields">template_fields</a></li>
+<li><a class="reference internal" href="#airflow.providers.sftp.operators.sftp.SFTPOperator.execute">execute</a></li>
+</ul>
+</li>
+</ul>
+</li>
+</ul>
+</li>
 </ul>
 </li>
 </ul>
@@ -701,7 +799,7 @@ provided by the community-managed providers:</p>
             
         
         <div class="base-layout--button">
-            <a href="https://github.com/apache/airflow/edit/main/docs/apache-airflow-providers/core-extensions/secrets-backends.rst" rel="nofollow">
+            <a href="https://github.com/apache/airflow/edit/main/docs/apache-airflow-providers-sftp/_api/airflow/providers/sftp/operators/sftp/index.rst" rel="nofollow">
 
                 <button class="btn-hollow btn-brown btn-with-icon with-box-shadow button-fixed">
                     <svg xmlns="http://www.w3.org/2000/svg" width="30.76" height="30">
@@ -835,17 +933,17 @@ provided by the community-managed providers:</p>
         </span>
     </div>
 </footer>
-    <script type="text/javascript" src="../_static/_gen/js/docs.js"></script>
-    <script type="text/javascript" id="documentation_options" data-url_root="../" src="../_static/documentation_options.js"></script>
+    <script type="text/javascript" src="../../../../../../_static/_gen/js/docs.js"></script>
+    <script type="text/javascript" id="documentation_options" data-url_root="../../../../../../" src="../../../../../../_static/documentation_options.js"></script>
     <script src="https://code.jquery.com/jquery-3.4.1.min.js" integrity="sha256-CSXorXvZcTkaix6Yvo6HppcZGetbYMGWSFlBw8HfCJo=" crossorigin="anonymous"></script>
     <script src="https://cdnjs.cloudflare.com/ajax/libs/popper.js/1.14.3/umd/popper.min.js" integrity="sha384-ZMP7rVo3mIykV+2+9J3UJ46jBk0WLaUAdn689aCwoqbBJiSnjAK/l8WvCWPIPm49" crossorigin="anonymous"></script>
     <script src="https://stackpath.bootstrapcdn.com/bootstrap/4.1.3/js/bootstrap.min.js" integrity="sha384-ChfqqxuZUCnJSK3+MXmPNIyE6ZbWh2IMqE241rYiqJxyMiZ6OW/JmZQ5stwEULTy" crossorigin="anonymous"></script>
-        <script data-url_root="../" id="documentation_options" src="../_static/documentation_options.js"></script>
-        <script src="../_static/jquery.js"></script>
-        <script src="../_static/underscore.js"></script>
-        <script src="../_static/_sphinx_javascript_frameworks_compat.js"></script>
-        <script src="../_static/doctools.js"></script>
-        <script src="../_static/clipboard.min.js"></script>
-        <script src="../_static/copybutton.js"></script>
+        <script data-url_root="../../../../../../" id="documentation_options" src="../../../../../../_static/documentation_options.js"></script>
+        <script src="../../../../../../_static/jquery.js"></script>
+        <script src="../../../../../../_static/underscore.js"></script>
+        <script src="../../../../../../_static/_sphinx_javascript_frameworks_compat.js"></script>
+        <script src="../../../../../../_static/doctools.js"></script>
+        <script src="../../../../../../_static/clipboard.min.js"></script>
+        <script src="../../../../../../_static/copybutton.js"></script>
 </body>
 </html>
\ No newline at end of file
diff --git a/docs-archive/apache-airflow-providers/core-extensions/secrets-backends.html b/docs-archive/apache-airflow-providers-sftp/4.0.0/_api/airflow/providers/sftp/sensors/index.html
similarity index 89%
copy from docs-archive/apache-airflow-providers/core-extensions/secrets-backends.html
copy to docs-archive/apache-airflow-providers-sftp/4.0.0/_api/airflow/providers/sftp/sensors/index.html
index f7628ed6ab..d6fb20e73a 100644
--- a/docs-archive/apache-airflow-providers/core-extensions/secrets-backends.html
+++ b/docs-archive/apache-airflow-providers-sftp/4.0.0/_api/airflow/providers/sftp/sensors/index.html
@@ -9,17 +9,18 @@
 <head>
         <meta charset="utf-8" />
     <meta name="viewport" content="width=device-width, initial-scale=1">
-        <title>Secret backends &mdash; apache-airflow-providers Documentation</title>
-    <link rel="stylesheet" href="../_static/_gen/css/main.min.css" type="text/css" />
-            <link rel="stylesheet" type="text/css" href="../_static/pygments.css" />
-            <link rel="stylesheet" type="text/css" href="../_static/_gen/css/main.min.css" />
-            <link rel="stylesheet" type="text/css" href="../_static/copybutton.css" />
-            <link rel="stylesheet" type="text/css" href="../_static/_gen/css/main-custom.min.css" />
-            <link rel="shortcut icon" href="../_static/pin_32.png"/>
-            <link rel="index" title="Index" href="../genindex.html" />
-            <link rel="search" title="Search" href="../search.html" />
-            <link rel="next" title="Community Providers" href="../howto/create-update-providers.html" />
-            <link rel="prev" title="Writing logs" href="logging.html" />
+        <title>airflow.providers.sftp.sensors &mdash; apache-airflow-providers-sftp Documentation</title>
+    <link rel="stylesheet" href="../../../../../_static/_gen/css/main.min.css" type="text/css" />
+            <link rel="stylesheet" type="text/css" href="../../../../../_static/pygments.css" />
+            <link rel="stylesheet" type="text/css" href="../../../../../_static/_gen/css/main.min.css" />
+            <link rel="stylesheet" type="text/css" href="../../../../../_static/copybutton.css" />
+            <link rel="stylesheet" type="text/css" href="../../../../../_static/_gen/css/main-custom.min.css" />
+            <link rel="stylesheet" type="text/css" href="../../../../../_static/graphviz.css" />
+            <link rel="shortcut icon" href="../../../../../_static/pin_32.png"/>
+            <link rel="index" title="Index" href="../../../../../genindex.html" />
+            <link rel="search" title="Search" href="../../../../../search.html" />
+            <link rel="next" title="airflow.providers.sftp.sensors.sftp" href="sftp/index.html" />
+            <link rel="prev" title="airflow.providers.sftp.operators.sftp" href="../operators/sftp/index.html" />
     <!-- Matomo -->
     <script>
         var _paq = window._paq = window._paq || [];
@@ -280,8 +281,21 @@
             <div class="content-drawer">
                 <div class="td-sidebar">
 
+<div id="docs-version-selector" class="docs-version-selector sidebar__version-selector">
+    <a class="dropdown-toggle" href="#" id="versionDropdown" role="button" data-toggle="dropdown" aria-haspopup="true"
+       aria-expanded="false">
+        <span class="bodytext__medium--greyish-brown">Version: </span><span class="version">4.0.0</span>
+    </a>
+    <div class="dropdown-menu" aria-labelledby="navbarDropdownMenuLink">
+
+    </div>
+    <script type="application/x-template" id="version-item-template">
+        <a class="dropdown-item"></a>
+    </script>
+</div>
+
 <div class="searchb-box">
-    <form class="search-form" action="../search.html" method="get">
+    <form class="search-form" action="../../../../../search.html" method="get">
         <input class="search-form__input" type="text" name="q" placeholder="Search docs" size="16">
         <input type="hidden" name="check_keywords" value="yes" />
         <input type="hidden" name="area" value="default" />
@@ -311,21 +325,19 @@
 
 
 <div class="toctree" role="navigation" aria-label="main navigation">
-    <ul class="current">
-<li class="toctree-l1"><a class="reference internal" href="../index.html">Providers</a></li>
-<li class="toctree-l1"><a class="reference internal" href="../packages-ref.html">Packages</a></li>
-<li class="toctree-l1"><a class="reference internal" href="../operators-and-hooks-ref/index.html">Operators and hooks</a></li>
-<li class="toctree-l1 current"><a class="reference internal" href="index.html">Core Extensions</a><ul class="current">
-<li class="toctree-l2"><a class="reference internal" href="auth-backends.html">Auth backends</a></li>
-<li class="toctree-l2"><a class="reference internal" href="connections.html">Connections</a></li>
-<li class="toctree-l2"><a class="reference internal" href="extra-links.html">Extra Links</a></li>
-<li class="toctree-l2"><a class="reference internal" href="logging.html">Writing logs</a></li>
-<li class="toctree-l2 current"><a class="current reference internal" href="#">Secret backends</a></li>
+    <p class="caption" role="heading"><span class="caption-text">References</span></p>
+<ul class="current">
+<li class="toctree-l1"><a class="reference internal" href="../../../../../connections/sftp.html">Connection types</a></li>
+<li class="toctree-l1 current"><a class="reference internal" href="../index.html">Python API</a></li>
 </ul>
-</li>
-<li class="toctree-l1"><a class="reference internal" href="../howto/create-update-providers.html">Update community providers</a></li>
-<li class="toctree-l1"><a class="reference internal" href="../installing-from-sources.html">Installing from sources</a></li>
-<li class="toctree-l1"><a class="reference internal" href="../installing-from-pypi.html">Installing from PyPI</a></li>
+<p class="caption" role="heading"><span class="caption-text">Resources</span></p>
+<ul>
+<li class="toctree-l1"><a class="reference external" href="https://pypi.org/project/apache-airflow-providers-sftp/">PyPI Repository</a></li>
+<li class="toctree-l1"><a class="reference internal" href="../../../../../installing-providers-from-sources.html">Installing from sources</a></li>
+</ul>
+<p class="caption" role="heading"><span class="caption-text">Commits</span></p>
+<ul>
+<li class="toctree-l1"><a class="reference internal" href="../../../../../commits.html">Detailed list of commits</a></li>
 </ul>
 
 </div>
@@ -406,8 +418,21 @@
             
     <div class="td-sidebar desktop-only d-print-none">
 
+<div id="docs-version-selector" class="docs-version-selector sidebar__version-selector">
+    <a class="dropdown-toggle" href="#" id="versionDropdown" role="button" data-toggle="dropdown" aria-haspopup="true"
+       aria-expanded="false">
+        <span class="bodytext__medium--greyish-brown">Version: </span><span class="version">4.0.0</span>
+    </a>
+    <div class="dropdown-menu" aria-labelledby="navbarDropdownMenuLink">
+
+    </div>
+    <script type="application/x-template" id="version-item-template">
+        <a class="dropdown-item"></a>
+    </script>
+</div>
+
 <div class="searchb-box">
-    <form class="search-form" action="../search.html" method="get">
+    <form class="search-form" action="../../../../../search.html" method="get">
         <input class="search-form__input" type="text" name="q" placeholder="Search docs" size="16">
         <input type="hidden" name="check_keywords" value="yes" />
         <input type="hidden" name="area" value="default" />
@@ -437,21 +462,19 @@
 
 
 <div class="toctree" role="navigation" aria-label="main navigation">
-    <ul class="current">
-<li class="toctree-l1"><a class="reference internal" href="../index.html">Providers</a></li>
-<li class="toctree-l1"><a class="reference internal" href="../packages-ref.html">Packages</a></li>
-<li class="toctree-l1"><a class="reference internal" href="../operators-and-hooks-ref/index.html">Operators and hooks</a></li>
-<li class="toctree-l1 current"><a class="reference internal" href="index.html">Core Extensions</a><ul class="current">
-<li class="toctree-l2"><a class="reference internal" href="auth-backends.html">Auth backends</a></li>
-<li class="toctree-l2"><a class="reference internal" href="connections.html">Connections</a></li>
-<li class="toctree-l2"><a class="reference internal" href="extra-links.html">Extra Links</a></li>
-<li class="toctree-l2"><a class="reference internal" href="logging.html">Writing logs</a></li>
-<li class="toctree-l2 current"><a class="current reference internal" href="#">Secret backends</a></li>
+    <p class="caption" role="heading"><span class="caption-text">References</span></p>
+<ul class="current">
+<li class="toctree-l1"><a class="reference internal" href="../../../../../connections/sftp.html">Connection types</a></li>
+<li class="toctree-l1 current"><a class="reference internal" href="../index.html">Python API</a></li>
 </ul>
-</li>
-<li class="toctree-l1"><a class="reference internal" href="../howto/create-update-providers.html">Update community providers</a></li>
-<li class="toctree-l1"><a class="reference internal" href="../installing-from-sources.html">Installing from sources</a></li>
-<li class="toctree-l1"><a class="reference internal" href="../installing-from-pypi.html">Installing from PyPI</a></li>
+<p class="caption" role="heading"><span class="caption-text">Resources</span></p>
+<ul>
+<li class="toctree-l1"><a class="reference external" href="https://pypi.org/project/apache-airflow-providers-sftp/">PyPI Repository</a></li>
+<li class="toctree-l1"><a class="reference internal" href="../../../../../installing-providers-from-sources.html">Installing from sources</a></li>
+</ul>
+<p class="caption" role="heading"><span class="caption-text">Commits</span></p>
+<ul>
+<li class="toctree-l1"><a class="reference internal" href="../../../../../commits.html">Detailed list of commits</a></li>
 </ul>
 
 </div>
@@ -540,11 +563,11 @@
 
     <ul class="breadcrumb">
         
-            <li class="breadcrumb-item"><a href="../index.html" class="icon icon-home"> Home</a></li>
+            <li class="breadcrumb-item"><a href="../../../../../index.html" class="icon icon-home"> Home</a></li>
             
-                <li class="breadcrumb-item"><a href="index.html">Core Extensions</a></li>
+                <li class="breadcrumb-item"><a href="../index.html"><code class="xref py py-mod docutils literal notranslate"><span class="pre">airflow.providers.sftp</span></code></a></li>
             
-            <li class="breadcrumb-item"><a href="secrets-backends.html"> Secret backends</a></li>
+            <li class="breadcrumb-item"><a href="index.html"> <code class="xref py py-mod docutils literal notranslate"><span class="pre">airflow.providers.sftp.sensors</span></code></a></li>
         
     </ul>
 </div>
@@ -555,54 +578,24 @@
                                 <div class="bodywrapper">
                                     <div class="body" role="main">
                                         
-  <blockquote>
-<div></div></blockquote>
-<div class="section" id="secret-backends">
-<h1>Secret backends<a class="headerlink" href="#secret-backends" title="Permalink to this heading">¶</a></h1>
-<p>This is a summary of all Apache Airflow Community provided implementations of secret backends
-exposed via community-managed providers.</p>
-<p>Airflow has the capability of reading connections, variables and configuration from Secret Backends rather
-than from its own Database. While storing such information in Airflow’s database is possible, many of the
-enterprise customers already have some secret managers storing secrets, and Airflow can tap into those
-via providers that implement secrets backends for services Airflow integrates with.</p>
-<p>You can also take a
-look at Secret backends available in the core Airflow in
-<a class="reference external" href="/docs/apache-airflow/stable/security/secrets/secrets-backend/index.html" title="(in apache-airflow v2.4.0.dev0)"><span>Secrets Backend</span></a> and here you can see the ones
-provided by the community-managed providers:</p>
-<div class="section" id="amazon">
-<h2>Amazon<a class="headerlink" href="#amazon" title="Permalink to this heading">¶</a></h2>
-<ul class="simple">
-<li><p><a class="reference external" href="/docs/apache-airflow-providers-amazon/stable/_api/airflow/providers/amazon/aws/secrets/secrets_manager/index.html#airflow.providers.amazon.aws.secrets.secrets_manager.SecretsManagerBackend" title="(in apache-airflow-providers-amazon v4.1.0)"><code class="xref py py-class docutils literal notranslate"><span class="pre">SecretsManagerBackend</span></code></a></p></li>
-<li><p><a class="reference external" href="/docs/apache-airflow-providers-amazon/stable/_api/airflow/providers/amazon/aws/secrets/systems_manager/index.html#airflow.providers.amazon.aws.secrets.systems_manager.SystemsManagerParameterStoreBackend" title="(in apache-airflow-providers-amazon v4.1.0)"><code class="xref py py-class docutils literal notranslate"><span class="pre">SystemsManagerParameterStoreBackend</span></code></a></p></li>
+  <div class="section" id="module-airflow.providers.sftp.sensors">
+<span id="airflow-providers-sftp-sensors"></span><h1><a class="reference internal" href="#module-airflow.providers.sftp.sensors" title="airflow.providers.sftp.sensors"><code class="xref py py-mod docutils literal notranslate"><span class="pre">airflow.providers.sftp.sensors</span></code></a><a class="headerlink" href="#module-airflow.providers.sftp.sensors" title="Permalink to this heading">¶</a></h1>
+<div class="section" id="submodules">
+<h2>Submodules<a class="headerlink" href="#submodules" title="Permalink to this heading">¶</a></h2>
+<div class="toctree-wrapper compound">
+<ul>
+<li class="toctree-l1"><a class="reference internal" href="sftp/index.html"><code class="xref py py-mod docutils literal notranslate"><span class="pre">airflow.providers.sftp.sensors.sftp</span></code></a></li>
 </ul>
 </div>
-<div class="section" id="google">
-<h2>Google<a class="headerlink" href="#google" title="Permalink to this heading">¶</a></h2>
-<ul class="simple">
-<li><p><a class="reference external" href="/docs/apache-airflow-providers-google/stable/_api/airflow/providers/google/cloud/secrets/secret_manager/index.html#airflow.providers.google.cloud.secrets.secret_manager.CloudSecretManagerBackend" title="(in apache-airflow-providers-google v8.1.0)"><code class="xref py py-class docutils literal notranslate"><span class="pre">CloudSecretManagerBackend</span></code></a></p></li>
-</ul>
-</div>
-<div class="section" id="hashicorp">
-<h2>Hashicorp<a class="headerlink" href="#hashicorp" title="Permalink to this heading">¶</a></h2>
-<ul class="simple">
-<li><p><a class="reference external" href="/docs/apache-airflow-providers-hashicorp/stable/_api/airflow/providers/hashicorp/secrets/vault/index.html#airflow.providers.hashicorp.secrets.vault.VaultBackend" title="(in apache-airflow-providers-hashicorp v3.0.1)"><code class="xref py py-class docutils literal notranslate"><span class="pre">VaultBackend</span></code></a></p></li>
-</ul>
-</div>
-<div class="section" id="microsoft-azure">
-<h2>Microsoft Azure<a class="headerlink" href="#microsoft-azure" title="Permalink to this heading">¶</a></h2>
-<ul class="simple">
-<li><p><a class="reference external" href="/docs/apache-airflow-providers-microsoft-azure/stable/_api/airflow/providers/microsoft/azure/secrets/key_vault/index.html#airflow.providers.microsoft.azure.secrets.key_vault.AzureKeyVaultBackend" title="(in apache-airflow-providers-microsoft-azure v4.1.0)"><code class="xref py py-class docutils literal notranslate"><span class="pre">AzureKeyVaultBackend</span></code></a></p></li>
-<li><p><code class="xref py py-class docutils literal notranslate"><span class="pre">AzureKeyVaultBackend</span></code></p></li>
-</ul>
 </div>
 </div>
 
 
     <div class="pager" role="navigation" aria-label="related navigation">
-            <a rel="prev" title="Writing logs" href="logging.html" >
+            <a rel="prev" title="airflow.providers.sftp.operators.sftp" href="../operators/sftp/index.html" >
                 <button class="btn-hollow btn-blue bodytext__medium--cerulean-blue" accesskey="p">Previous</button>
             </a>
-            <a rel="next" title="Community Providers" href="../howto/create-update-providers.html" >
+            <a rel="next" title="airflow.providers.sftp.sensors.sftp" href="sftp/index.html" >
                 <button class="btn-hollow btn-blue bodytext__medium--cerulean-blue" accesskey="n">Next</button>
             </a>
     </div>
@@ -672,11 +665,8 @@ provided by the community-managed providers:</p>
     <nav class="wy-nav-side-toc">
         <div class="wy-menu-vertical">
             <ul>
-<li><a class="reference internal" href="#">Secret backends</a><ul>
-<li><a class="reference internal" href="#amazon">Amazon</a></li>
-<li><a class="reference internal" href="#google">Google</a></li>
-<li><a class="reference internal" href="#hashicorp">Hashicorp</a></li>
-<li><a class="reference internal" href="#microsoft-azure">Microsoft Azure</a></li>
+<li><a class="reference internal" href="#"><code class="xref py py-mod docutils literal notranslate"><span class="pre">airflow.providers.sftp.sensors</span></code></a><ul>
+<li><a class="reference internal" href="#submodules">Submodules</a></li>
 </ul>
 </li>
 </ul>
@@ -701,7 +691,7 @@ provided by the community-managed providers:</p>
             
         
         <div class="base-layout--button">
-            <a href="https://github.com/apache/airflow/edit/main/docs/apache-airflow-providers/core-extensions/secrets-backends.rst" rel="nofollow">
+            <a href="https://github.com/apache/airflow/edit/main/docs/apache-airflow-providers-sftp/_api/airflow/providers/sftp/sensors/index.rst" rel="nofollow">
 
                 <button class="btn-hollow btn-brown btn-with-icon with-box-shadow button-fixed">
                     <svg xmlns="http://www.w3.org/2000/svg" width="30.76" height="30">
@@ -835,17 +825,17 @@ provided by the community-managed providers:</p>
         </span>
     </div>
 </footer>
-    <script type="text/javascript" src="../_static/_gen/js/docs.js"></script>
-    <script type="text/javascript" id="documentation_options" data-url_root="../" src="../_static/documentation_options.js"></script>
+    <script type="text/javascript" src="../../../../../_static/_gen/js/docs.js"></script>
+    <script type="text/javascript" id="documentation_options" data-url_root="../../../../../" src="../../../../../_static/documentation_options.js"></script>
     <script src="https://code.jquery.com/jquery-3.4.1.min.js" integrity="sha256-CSXorXvZcTkaix6Yvo6HppcZGetbYMGWSFlBw8HfCJo=" crossorigin="anonymous"></script>
     <script src="https://cdnjs.cloudflare.com/ajax/libs/popper.js/1.14.3/umd/popper.min.js" integrity="sha384-ZMP7rVo3mIykV+2+9J3UJ46jBk0WLaUAdn689aCwoqbBJiSnjAK/l8WvCWPIPm49" crossorigin="anonymous"></script>
     <script src="https://stackpath.bootstrapcdn.com/bootstrap/4.1.3/js/bootstrap.min.js" integrity="sha384-ChfqqxuZUCnJSK3+MXmPNIyE6ZbWh2IMqE241rYiqJxyMiZ6OW/JmZQ5stwEULTy" crossorigin="anonymous"></script>
-        <script data-url_root="../" id="documentation_options" src="../_static/documentation_options.js"></script>
-        <script src="../_static/jquery.js"></script>
-        <script src="../_static/underscore.js"></script>
-        <script src="../_static/_sphinx_javascript_frameworks_compat.js"></script>
-        <script src="../_static/doctools.js"></script>
-        <script src="../_static/clipboard.min.js"></script>
-        <script src="../_static/copybutton.js"></script>
+        <script data-url_root="../../../../../" id="documentation_options" src="../../../../../_static/documentation_options.js"></script>
+        <script src="../../../../../_static/jquery.js"></script>
+        <script src="../../../../../_static/underscore.js"></script>
+        <script src="../../../../../_static/_sphinx_javascript_frameworks_compat.js"></script>
+        <script src="../../../../../_static/doctools.js"></script>
+        <script src="../../../../../_static/clipboard.min.js"></script>
+        <script src="../../../../../_static/copybutton.js"></script>
 </body>
 </html>
\ No newline at end of file
diff --git a/docs-archive/apache-airflow-providers/core-extensions/secrets-backends.html b/docs-archive/apache-airflow-providers-sftp/4.0.0/_api/airflow/providers/sftp/sensors/sftp/index.html
similarity index 86%
copy from docs-archive/apache-airflow-providers/core-extensions/secrets-backends.html
copy to docs-archive/apache-airflow-providers-sftp/4.0.0/_api/airflow/providers/sftp/sensors/sftp/index.html
index f7628ed6ab..feed312fd0 100644
--- a/docs-archive/apache-airflow-providers/core-extensions/secrets-backends.html
+++ b/docs-archive/apache-airflow-providers-sftp/4.0.0/_api/airflow/providers/sftp/sensors/sftp/index.html
@@ -9,17 +9,18 @@
 <head>
         <meta charset="utf-8" />
     <meta name="viewport" content="width=device-width, initial-scale=1">
-        <title>Secret backends &mdash; apache-airflow-providers Documentation</title>
-    <link rel="stylesheet" href="../_static/_gen/css/main.min.css" type="text/css" />
-            <link rel="stylesheet" type="text/css" href="../_static/pygments.css" />
-            <link rel="stylesheet" type="text/css" href="../_static/_gen/css/main.min.css" />
-            <link rel="stylesheet" type="text/css" href="../_static/copybutton.css" />
-            <link rel="stylesheet" type="text/css" href="../_static/_gen/css/main-custom.min.css" />
-            <link rel="shortcut icon" href="../_static/pin_32.png"/>
-            <link rel="index" title="Index" href="../genindex.html" />
-            <link rel="search" title="Search" href="../search.html" />
-            <link rel="next" title="Community Providers" href="../howto/create-update-providers.html" />
-            <link rel="prev" title="Writing logs" href="logging.html" />
+        <title>airflow.providers.sftp.sensors.sftp &mdash; apache-airflow-providers-sftp Documentation</title>
+    <link rel="stylesheet" href="../../../../../../_static/_gen/css/main.min.css" type="text/css" />
+            <link rel="stylesheet" type="text/css" href="../../../../../../_static/pygments.css" />
+            <link rel="stylesheet" type="text/css" href="../../../../../../_static/_gen/css/main.min.css" />
+            <link rel="stylesheet" type="text/css" href="../../../../../../_static/copybutton.css" />
+            <link rel="stylesheet" type="text/css" href="../../../../../../_static/_gen/css/main-custom.min.css" />
+            <link rel="stylesheet" type="text/css" href="../../../../../../_static/graphviz.css" />
+            <link rel="shortcut icon" href="../../../../../../_static/pin_32.png"/>
+            <link rel="index" title="Index" href="../../../../../../genindex.html" />
+            <link rel="search" title="Search" href="../../../../../../search.html" />
+            <link rel="next" title="Installing from sources" href="../../../../../../installing-providers-from-sources.html" />
+            <link rel="prev" title="airflow.providers.sftp.sensors" href="../index.html" />
     <!-- Matomo -->
     <script>
         var _paq = window._paq = window._paq || [];
@@ -280,8 +281,21 @@
             <div class="content-drawer">
                 <div class="td-sidebar">
 
+<div id="docs-version-selector" class="docs-version-selector sidebar__version-selector">
+    <a class="dropdown-toggle" href="#" id="versionDropdown" role="button" data-toggle="dropdown" aria-haspopup="true"
+       aria-expanded="false">
+        <span class="bodytext__medium--greyish-brown">Version: </span><span class="version">4.0.0</span>
+    </a>
+    <div class="dropdown-menu" aria-labelledby="navbarDropdownMenuLink">
+
+    </div>
+    <script type="application/x-template" id="version-item-template">
+        <a class="dropdown-item"></a>
+    </script>
+</div>
+
 <div class="searchb-box">
-    <form class="search-form" action="../search.html" method="get">
+    <form class="search-form" action="../../../../../../search.html" method="get">
         <input class="search-form__input" type="text" name="q" placeholder="Search docs" size="16">
         <input type="hidden" name="check_keywords" value="yes" />
         <input type="hidden" name="area" value="default" />
@@ -311,21 +325,19 @@
 
 
 <div class="toctree" role="navigation" aria-label="main navigation">
-    <ul class="current">
-<li class="toctree-l1"><a class="reference internal" href="../index.html">Providers</a></li>
-<li class="toctree-l1"><a class="reference internal" href="../packages-ref.html">Packages</a></li>
-<li class="toctree-l1"><a class="reference internal" href="../operators-and-hooks-ref/index.html">Operators and hooks</a></li>
-<li class="toctree-l1 current"><a class="reference internal" href="index.html">Core Extensions</a><ul class="current">
-<li class="toctree-l2"><a class="reference internal" href="auth-backends.html">Auth backends</a></li>
-<li class="toctree-l2"><a class="reference internal" href="connections.html">Connections</a></li>
-<li class="toctree-l2"><a class="reference internal" href="extra-links.html">Extra Links</a></li>
-<li class="toctree-l2"><a class="reference internal" href="logging.html">Writing logs</a></li>
-<li class="toctree-l2 current"><a class="current reference internal" href="#">Secret backends</a></li>
+    <p class="caption" role="heading"><span class="caption-text">References</span></p>
+<ul class="current">
+<li class="toctree-l1"><a class="reference internal" href="../../../../../../connections/sftp.html">Connection types</a></li>
+<li class="toctree-l1 current"><a class="reference internal" href="../../index.html">Python API</a></li>
 </ul>
-</li>
-<li class="toctree-l1"><a class="reference internal" href="../howto/create-update-providers.html">Update community providers</a></li>
-<li class="toctree-l1"><a class="reference internal" href="../installing-from-sources.html">Installing from sources</a></li>
-<li class="toctree-l1"><a class="reference internal" href="../installing-from-pypi.html">Installing from PyPI</a></li>
+<p class="caption" role="heading"><span class="caption-text">Resources</span></p>
+<ul>
+<li class="toctree-l1"><a class="reference external" href="https://pypi.org/project/apache-airflow-providers-sftp/">PyPI Repository</a></li>
+<li class="toctree-l1"><a class="reference internal" href="../../../../../../installing-providers-from-sources.html">Installing from sources</a></li>
+</ul>
+<p class="caption" role="heading"><span class="caption-text">Commits</span></p>
+<ul>
+<li class="toctree-l1"><a class="reference internal" href="../../../../../../commits.html">Detailed list of commits</a></li>
 </ul>
 
 </div>
@@ -406,8 +418,21 @@
             
     <div class="td-sidebar desktop-only d-print-none">
 
+<div id="docs-version-selector" class="docs-version-selector sidebar__version-selector">
+    <a class="dropdown-toggle" href="#" id="versionDropdown" role="button" data-toggle="dropdown" aria-haspopup="true"
+       aria-expanded="false">
+        <span class="bodytext__medium--greyish-brown">Version: </span><span class="version">4.0.0</span>
+    </a>
+    <div class="dropdown-menu" aria-labelledby="navbarDropdownMenuLink">
+
+    </div>
+    <script type="application/x-template" id="version-item-template">
+        <a class="dropdown-item"></a>
+    </script>
+</div>
+
 <div class="searchb-box">
-    <form class="search-form" action="../search.html" method="get">
+    <form class="search-form" action="../../../../../../search.html" method="get">
         <input class="search-form__input" type="text" name="q" placeholder="Search docs" size="16">
         <input type="hidden" name="check_keywords" value="yes" />
         <input type="hidden" name="area" value="default" />
@@ -437,21 +462,19 @@
 
 
 <div class="toctree" role="navigation" aria-label="main navigation">
-    <ul class="current">
-<li class="toctree-l1"><a class="reference internal" href="../index.html">Providers</a></li>
-<li class="toctree-l1"><a class="reference internal" href="../packages-ref.html">Packages</a></li>
-<li class="toctree-l1"><a class="reference internal" href="../operators-and-hooks-ref/index.html">Operators and hooks</a></li>
-<li class="toctree-l1 current"><a class="reference internal" href="index.html">Core Extensions</a><ul class="current">
-<li class="toctree-l2"><a class="reference internal" href="auth-backends.html">Auth backends</a></li>
-<li class="toctree-l2"><a class="reference internal" href="connections.html">Connections</a></li>
-<li class="toctree-l2"><a class="reference internal" href="extra-links.html">Extra Links</a></li>
-<li class="toctree-l2"><a class="reference internal" href="logging.html">Writing logs</a></li>
-<li class="toctree-l2 current"><a class="current reference internal" href="#">Secret backends</a></li>
+    <p class="caption" role="heading"><span class="caption-text">References</span></p>
+<ul class="current">
+<li class="toctree-l1"><a class="reference internal" href="../../../../../../connections/sftp.html">Connection types</a></li>
+<li class="toctree-l1 current"><a class="reference internal" href="../../index.html">Python API</a></li>
 </ul>
-</li>
-<li class="toctree-l1"><a class="reference internal" href="../howto/create-update-providers.html">Update community providers</a></li>
-<li class="toctree-l1"><a class="reference internal" href="../installing-from-sources.html">Installing from sources</a></li>
-<li class="toctree-l1"><a class="reference internal" href="../installing-from-pypi.html">Installing from PyPI</a></li>
+<p class="caption" role="heading"><span class="caption-text">Resources</span></p>
+<ul>
+<li class="toctree-l1"><a class="reference external" href="https://pypi.org/project/apache-airflow-providers-sftp/">PyPI Repository</a></li>
+<li class="toctree-l1"><a class="reference internal" href="../../../../../../installing-providers-from-sources.html">Installing from sources</a></li>
+</ul>
+<p class="caption" role="heading"><span class="caption-text">Commits</span></p>
+<ul>
+<li class="toctree-l1"><a class="reference internal" href="../../../../../../commits.html">Detailed list of commits</a></li>
 </ul>
 
 </div>
@@ -540,11 +563,13 @@
 
     <ul class="breadcrumb">
         
-            <li class="breadcrumb-item"><a href="../index.html" class="icon icon-home"> Home</a></li>
+            <li class="breadcrumb-item"><a href="../../../../../../index.html" class="icon icon-home"> Home</a></li>
             
-                <li class="breadcrumb-item"><a href="index.html">Core Extensions</a></li>
+                <li class="breadcrumb-item"><a href="../../index.html"><code class="xref py py-mod docutils literal notranslate"><span class="pre">airflow.providers.sftp</span></code></a></li>
             
-            <li class="breadcrumb-item"><a href="secrets-backends.html"> Secret backends</a></li>
+                <li class="breadcrumb-item"><a href="../index.html"><code class="xref py py-mod docutils literal notranslate"><span class="pre">airflow.providers.sftp.sensors</span></code></a></li>
+            
+            <li class="breadcrumb-item"><a href="index.html"> <code class="xref py py-mod docutils literal notranslate"><span class="pre">airflow.providers.sftp.sensors.sftp</span></code></a></li>
         
     </ul>
 </div>
@@ -555,54 +580,65 @@
                                 <div class="bodywrapper">
                                     <div class="body" role="main">
                                         
-  <blockquote>
-<div></div></blockquote>
-<div class="section" id="secret-backends">
-<h1>Secret backends<a class="headerlink" href="#secret-backends" title="Permalink to this heading">¶</a></h1>
-<p>This is a summary of all Apache Airflow Community provided implementations of secret backends
-exposed via community-managed providers.</p>
-<p>Airflow has the capability of reading connections, variables and configuration from Secret Backends rather
-than from its own Database. While storing such information in Airflow’s database is possible, many of the
-enterprise customers already have some secret managers storing secrets, and Airflow can tap into those
-via providers that implement secrets backends for services Airflow integrates with.</p>
-<p>You can also take a
-look at Secret backends available in the core Airflow in
-<a class="reference external" href="/docs/apache-airflow/stable/security/secrets/secrets-backend/index.html" title="(in apache-airflow v2.4.0.dev0)"><span>Secrets Backend</span></a> and here you can see the ones
-provided by the community-managed providers:</p>
-<div class="section" id="amazon">
-<h2>Amazon<a class="headerlink" href="#amazon" title="Permalink to this heading">¶</a></h2>
-<ul class="simple">
-<li><p><a class="reference external" href="/docs/apache-airflow-providers-amazon/stable/_api/airflow/providers/amazon/aws/secrets/secrets_manager/index.html#airflow.providers.amazon.aws.secrets.secrets_manager.SecretsManagerBackend" title="(in apache-airflow-providers-amazon v4.1.0)"><code class="xref py py-class docutils literal notranslate"><span class="pre">SecretsManagerBackend</span></code></a></p></li>
-<li><p><a class="reference external" href="/docs/apache-airflow-providers-amazon/stable/_api/airflow/providers/amazon/aws/secrets/systems_manager/index.html#airflow.providers.amazon.aws.secrets.systems_manager.SystemsManagerParameterStoreBackend" title="(in apache-airflow-providers-amazon v4.1.0)"><code class="xref py py-class docutils literal notranslate"><span class="pre">SystemsManagerParameterStoreBackend</span></code></a></p></li>
-</ul>
-</div>
-<div class="section" id="google">
-<h2>Google<a class="headerlink" href="#google" title="Permalink to this heading">¶</a></h2>
-<ul class="simple">
-<li><p><a class="reference external" href="/docs/apache-airflow-providers-google/stable/_api/airflow/providers/google/cloud/secrets/secret_manager/index.html#airflow.providers.google.cloud.secrets.secret_manager.CloudSecretManagerBackend" title="(in apache-airflow-providers-google v8.1.0)"><code class="xref py py-class docutils literal notranslate"><span class="pre">CloudSecretManagerBackend</span></code></a></p></li>
-</ul>
-</div>
-<div class="section" id="hashicorp">
-<h2>Hashicorp<a class="headerlink" href="#hashicorp" title="Permalink to this heading">¶</a></h2>
-<ul class="simple">
-<li><p><a class="reference external" href="/docs/apache-airflow-providers-hashicorp/stable/_api/airflow/providers/hashicorp/secrets/vault/index.html#airflow.providers.hashicorp.secrets.vault.VaultBackend" title="(in apache-airflow-providers-hashicorp v3.0.1)"><code class="xref py py-class docutils literal notranslate"><span class="pre">VaultBackend</span></code></a></p></li>
+  <div class="section" id="module-airflow.providers.sftp.sensors.sftp">
+<span id="airflow-providers-sftp-sensors-sftp"></span><h1><a class="reference internal" href="#module-airflow.providers.sftp.sensors.sftp" title="airflow.providers.sftp.sensors.sftp"><code class="xref py py-mod docutils literal notranslate"><span class="pre">airflow.providers.sftp.sensors.sftp</span></code></a><a class="headerlink" href="#module-airflow.providers.sftp.sensors.sftp" title="Permalink to this heading">¶</a></h1>
+<p>This module contains SFTP sensor.</p>
+<div class="section" id="module-contents">
+<h2>Module Contents<a class="headerlink" href="#module-contents" title="Permalink to this heading">¶</a></h2>
+<div class="section" id="classes">
+<h3>Classes<a class="headerlink" href="#classes" title="Permalink to this heading">¶</a></h3>
+<table class="autosummary longtable docutils align-default">
+<colgroup>
+<col style="width: 10%" />
+<col style="width: 90%" />
+</colgroup>
+<tbody>
+<tr class="row-odd"><td><p><a class="reference internal" href="#airflow.providers.sftp.sensors.sftp.SFTPSensor" title="airflow.providers.sftp.sensors.sftp.SFTPSensor"><code class="xref py py-obj docutils literal notranslate"><span class="pre">SFTPSensor</span></code></a></p></td>
+<td><p>Waits for a file or directory to be present on SFTP.</p></td>
+</tr>
+</tbody>
+</table>
+<dl class="py class">
+<dt class="sig sig-object py" id="airflow.providers.sftp.sensors.sftp.SFTPSensor">
+<em class="property"><span class="pre">class</span><span class="w"> </span></em><span class="sig-prename descclassname"><span class="pre">airflow.providers.sftp.sensors.sftp.</span></span><span class="sig-name descname"><span class="pre">SFTPSensor</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="o"><span class="pre">*</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">path</span></span></em>, <em class="sig-param"><span class="n">< [...]
+<dd><p>Bases: <a class="reference external" href="/docs/apache-airflow/stable/_api/airflow/sensors/base/index.html#airflow.sensors.base.BaseSensorOperator" title="(in apache-airflow v2.4.0.dev0)"><code class="xref py py-obj docutils literal notranslate"><span class="pre">airflow.sensors.base.BaseSensorOperator</span></code></a></p>
+<p>Waits for a file or directory to be present on SFTP.</p>
+<dl class="field-list simple">
+<dt class="field-odd">Parameters</dt>
+<dd class="field-odd"><ul class="simple">
+<li><p><strong>path</strong> (<a class="reference external" href="https://docs.python.org/3/library/stdtypes.html#str" title="(in Python v3.10)"><em>str</em></a>) – Remote file or directory path</p></li>
+<li><p><strong>file_pattern</strong> (<a class="reference external" href="https://docs.python.org/3/library/stdtypes.html#str" title="(in Python v3.10)"><em>str</em></a>) – The pattern that will be used to match the file (fnmatch format)</p></li>
+<li><p><strong>sftp_conn_id</strong> (<a class="reference external" href="https://docs.python.org/3/library/stdtypes.html#str" title="(in Python v3.10)"><em>str</em></a>) – The connection to run the sensor against</p></li>
+<li><p><strong>newer_than</strong> (<em>Optional</em><em>[</em><a class="reference external" href="https://docs.python.org/3/library/datetime.html#datetime.datetime" title="(in Python v3.10)"><em>datetime.datetime</em></a><em>]</em>) – DateTime for which the file or file path should be newer than, comparison is inclusive</p></li>
 </ul>
+</dd>
+</dl>
+<dl class="py attribute">
+<dt class="sig sig-object py" id="airflow.providers.sftp.sensors.sftp.SFTPSensor.template_fields">
+<span class="sig-name descname"><span class="pre">template_fields</span></span><em class="property"><span class="w"> </span><span class="pre">:Sequence[str]</span> <span class="pre">=</span> <span class="pre">['path',</span> <span class="pre">'newer_than']</span></em><a class="reference internal" href="../../../../../../_modules/airflow/providers/sftp/sensors/sftp.html#SFTPSensor.template_fields"><span class="viewcode-link"><span class="pre">[source]</span></span></a><a class="headerlink [...]
+<dd></dd></dl>
+
+<dl class="py method">
+<dt class="sig sig-object py" id="airflow.providers.sftp.sensors.sftp.SFTPSensor.poke">
+<span class="sig-name descname"><span class="pre">poke</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">self</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">context</span></span></em><span class="sig-paren">)</span><a class="reference internal" href="../../../../../../_modules/airflow/providers/sftp/sensors/sftp.html#SFTPSensor.poke"><span class="viewcode-link"><span class="pre">[source]</span></span></a><a c [...]
+<dd><p>Function that the sensors defined while deriving this class should
+override.</p>
+<dl class="field-list simple">
+</dl>
+</dd></dl>
+
+</dd></dl>
+
 </div>
-<div class="section" id="microsoft-azure">
-<h2>Microsoft Azure<a class="headerlink" href="#microsoft-azure" title="Permalink to this heading">¶</a></h2>
-<ul class="simple">
-<li><p><a class="reference external" href="/docs/apache-airflow-providers-microsoft-azure/stable/_api/airflow/providers/microsoft/azure/secrets/key_vault/index.html#airflow.providers.microsoft.azure.secrets.key_vault.AzureKeyVaultBackend" title="(in apache-airflow-providers-microsoft-azure v4.1.0)"><code class="xref py py-class docutils literal notranslate"><span class="pre">AzureKeyVaultBackend</span></code></a></p></li>
-<li><p><code class="xref py py-class docutils literal notranslate"><span class="pre">AzureKeyVaultBackend</span></code></p></li>
-</ul>
 </div>
 </div>
 
 
     <div class="pager" role="navigation" aria-label="related navigation">
-            <a rel="prev" title="Writing logs" href="logging.html" >
+            <a rel="prev" title="airflow.providers.sftp.sensors" href="../index.html" >
                 <button class="btn-hollow btn-blue bodytext__medium--cerulean-blue" accesskey="p">Previous</button>
             </a>
-            <a rel="next" title="Community Providers" href="../howto/create-update-providers.html" >
+            <a rel="next" title="Installing from sources" href="../../../../../../installing-providers-from-sources.html" >
                 <button class="btn-hollow btn-blue bodytext__medium--cerulean-blue" accesskey="n">Next</button>
             </a>
     </div>
@@ -672,11 +708,18 @@ provided by the community-managed providers:</p>
     <nav class="wy-nav-side-toc">
         <div class="wy-menu-vertical">
             <ul>
-<li><a class="reference internal" href="#">Secret backends</a><ul>
-<li><a class="reference internal" href="#amazon">Amazon</a></li>
-<li><a class="reference internal" href="#google">Google</a></li>
-<li><a class="reference internal" href="#hashicorp">Hashicorp</a></li>
-<li><a class="reference internal" href="#microsoft-azure">Microsoft Azure</a></li>
+<li><a class="reference internal" href="#"><code class="xref py py-mod docutils literal notranslate"><span class="pre">airflow.providers.sftp.sensors.sftp</span></code></a><ul>
+<li><a class="reference internal" href="#module-contents">Module Contents</a><ul>
+<li><a class="reference internal" href="#classes">Classes</a><ul>
+<li><a class="reference internal" href="#airflow.providers.sftp.sensors.sftp.SFTPSensor">SFTPSensor</a><ul>
+<li><a class="reference internal" href="#airflow.providers.sftp.sensors.sftp.SFTPSensor.template_fields">template_fields</a></li>
+<li><a class="reference internal" href="#airflow.providers.sftp.sensors.sftp.SFTPSensor.poke">poke</a></li>
+</ul>
+</li>
+</ul>
+</li>
+</ul>
+</li>
 </ul>
 </li>
 </ul>
@@ -701,7 +744,7 @@ provided by the community-managed providers:</p>
             
         
         <div class="base-layout--button">
-            <a href="https://github.com/apache/airflow/edit/main/docs/apache-airflow-providers/core-extensions/secrets-backends.rst" rel="nofollow">
+            <a href="https://github.com/apache/airflow/edit/main/docs/apache-airflow-providers-sftp/_api/airflow/providers/sftp/sensors/sftp/index.rst" rel="nofollow">
 
                 <button class="btn-hollow btn-brown btn-with-icon with-box-shadow button-fixed">
                     <svg xmlns="http://www.w3.org/2000/svg" width="30.76" height="30">
@@ -835,17 +878,17 @@ provided by the community-managed providers:</p>
         </span>
     </div>
 </footer>
-    <script type="text/javascript" src="../_static/_gen/js/docs.js"></script>
-    <script type="text/javascript" id="documentation_options" data-url_root="../" src="../_static/documentation_options.js"></script>
+    <script type="text/javascript" src="../../../../../../_static/_gen/js/docs.js"></script>
+    <script type="text/javascript" id="documentation_options" data-url_root="../../../../../../" src="../../../../../../_static/documentation_options.js"></script>
     <script src="https://code.jquery.com/jquery-3.4.1.min.js" integrity="sha256-CSXorXvZcTkaix6Yvo6HppcZGetbYMGWSFlBw8HfCJo=" crossorigin="anonymous"></script>
     <script src="https://cdnjs.cloudflare.com/ajax/libs/popper.js/1.14.3/umd/popper.min.js" integrity="sha384-ZMP7rVo3mIykV+2+9J3UJ46jBk0WLaUAdn689aCwoqbBJiSnjAK/l8WvCWPIPm49" crossorigin="anonymous"></script>
     <script src="https://stackpath.bootstrapcdn.com/bootstrap/4.1.3/js/bootstrap.min.js" integrity="sha384-ChfqqxuZUCnJSK3+MXmPNIyE6ZbWh2IMqE241rYiqJxyMiZ6OW/JmZQ5stwEULTy" crossorigin="anonymous"></script>
-        <script data-url_root="../" id="documentation_options" src="../_static/documentation_options.js"></script>
-        <script src="../_static/jquery.js"></script>
-        <script src="../_static/underscore.js"></script>
-        <script src="../_static/_sphinx_javascript_frameworks_compat.js"></script>
-        <script src="../_static/doctools.js"></script>
-        <script src="../_static/clipboard.min.js"></script>
-        <script src="../_static/copybutton.js"></script>
+        <script data-url_root="../../../../../../" id="documentation_options" src="../../../../../../_static/documentation_options.js"></script>
+        <script src="../../../../../../_static/jquery.js"></script>
+        <script src="../../../../../../_static/underscore.js"></script>
+        <script src="../../../../../../_static/_sphinx_javascript_frameworks_compat.js"></script>
+        <script src="../../../../../../_static/doctools.js"></script>
+        <script src="../../../../../../_static/clipboard.min.js"></script>
+        <script src="../../../../../../_static/copybutton.js"></script>
 </body>
 </html>
\ No newline at end of file
diff --git a/docs-archive/apache-airflow-providers/operators-and-hooks-ref/apache.html b/docs-archive/apache-airflow-providers-sftp/4.0.0/_modules/airflow/providers/sftp/hooks/sftp.html
similarity index 56%
copy from docs-archive/apache-airflow-providers/operators-and-hooks-ref/apache.html
copy to docs-archive/apache-airflow-providers-sftp/4.0.0/_modules/airflow/providers/sftp/hooks/sftp.html
index c8382957e0..6fb097797a 100644
--- a/docs-archive/apache-airflow-providers/operators-and-hooks-ref/apache.html
+++ b/docs-archive/apache-airflow-providers-sftp/4.0.0/_modules/airflow/providers/sftp/hooks/sftp.html
@@ -9,17 +9,16 @@
 <head>
         <meta charset="utf-8" />
     <meta name="viewport" content="width=device-width, initial-scale=1">
-        <title>ASF: Apache Software Foundation &mdash; apache-airflow-providers Documentation</title>
-    <link rel="stylesheet" href="../_static/_gen/css/main.min.css" type="text/css" />
-            <link rel="stylesheet" type="text/css" href="../_static/pygments.css" />
-            <link rel="stylesheet" type="text/css" href="../_static/_gen/css/main.min.css" />
-            <link rel="stylesheet" type="text/css" href="../_static/copybutton.css" />
-            <link rel="stylesheet" type="text/css" href="../_static/_gen/css/main-custom.min.css" />
-            <link rel="shortcut icon" href="../_static/pin_32.png"/>
-            <link rel="index" title="Index" href="../genindex.html" />
-            <link rel="search" title="Search" href="../search.html" />
-            <link rel="next" title="AWS: Amazon Web Services" href="aws.html" />
-            <link rel="prev" title="Operators and Hooks Reference" href="index.html" />
+        <title>airflow.providers.sftp.hooks.sftp &mdash; apache-airflow-providers-sftp Documentation</title>
+    <link rel="stylesheet" href="../../../../../_static/_gen/css/main.min.css" type="text/css" />
+            <link rel="stylesheet" type="text/css" href="../../../../../_static/pygments.css" />
+            <link rel="stylesheet" type="text/css" href="../../../../../_static/_gen/css/main.min.css" />
+            <link rel="stylesheet" type="text/css" href="../../../../../_static/copybutton.css" />
+            <link rel="stylesheet" type="text/css" href="../../../../../_static/_gen/css/main-custom.min.css" />
+            <link rel="stylesheet" type="text/css" href="../../../../../_static/graphviz.css" />
+            <link rel="shortcut icon" href="../../../../../_static/pin_32.png"/>
+            <link rel="index" title="Index" href="../../../../../genindex.html" />
+            <link rel="search" title="Search" href="../../../../../search.html" />
     <!-- Matomo -->
     <script>
         var _paq = window._paq = window._paq || [];
@@ -280,8 +279,21 @@
             <div class="content-drawer">
                 <div class="td-sidebar">
 
+<div id="docs-version-selector" class="docs-version-selector sidebar__version-selector">
+    <a class="dropdown-toggle" href="#" id="versionDropdown" role="button" data-toggle="dropdown" aria-haspopup="true"
+       aria-expanded="false">
+        <span class="bodytext__medium--greyish-brown">Version: </span><span class="version">4.0.0</span>
+    </a>
+    <div class="dropdown-menu" aria-labelledby="navbarDropdownMenuLink">
+
+    </div>
+    <script type="application/x-template" id="version-item-template">
+        <a class="dropdown-item"></a>
+    </script>
+</div>
+
 <div class="searchb-box">
-    <form class="search-form" action="../search.html" method="get">
+    <form class="search-form" action="../../../../../search.html" method="get">
         <input class="search-form__input" type="text" name="q" placeholder="Search docs" size="16">
         <input type="hidden" name="check_keywords" value="yes" />
         <input type="hidden" name="area" value="default" />
@@ -311,23 +323,19 @@
 
 
 <div class="toctree" role="navigation" aria-label="main navigation">
-    <ul class="current">
-<li class="toctree-l1"><a class="reference internal" href="../index.html">Providers</a></li>
-<li class="toctree-l1"><a class="reference internal" href="../packages-ref.html">Packages</a></li>
-<li class="toctree-l1 current"><a class="reference internal" href="index.html">Operators and hooks</a><ul class="current">
-<li class="toctree-l2 current"><a class="current reference internal" href="#">ASF: Apache Software Foundation</a></li>
-<li class="toctree-l2"><a class="reference internal" href="aws.html">AWS: Amazon Web Services</a></li>
-<li class="toctree-l2"><a class="reference internal" href="azure.html">Azure: Microsoft Azure</a></li>
-<li class="toctree-l2"><a class="reference internal" href="google.html">Google</a></li>
-<li class="toctree-l2"><a class="reference internal" href="protocol.html">Protocol integrations</a></li>
-<li class="toctree-l2"><a class="reference internal" href="services.html">Services</a></li>
-<li class="toctree-l2"><a class="reference internal" href="software.html">Software integrations</a></li>
+    <p class="caption" role="heading"><span class="caption-text">References</span></p>
+<ul>
+<li class="toctree-l1"><a class="reference internal" href="../../../../../connections/sftp.html">Connection types</a></li>
+<li class="toctree-l1"><a class="reference internal" href="../../../../../_api/airflow/providers/sftp/index.html">Python API</a></li>
+</ul>
+<p class="caption" role="heading"><span class="caption-text">Resources</span></p>
+<ul>
+<li class="toctree-l1"><a class="reference external" href="https://pypi.org/project/apache-airflow-providers-sftp/">PyPI Repository</a></li>
+<li class="toctree-l1"><a class="reference internal" href="../../../../../installing-providers-from-sources.html">Installing from sources</a></li>
 </ul>
-</li>
-<li class="toctree-l1"><a class="reference internal" href="../core-extensions/index.html">Core Extensions</a></li>
-<li class="toctree-l1"><a class="reference internal" href="../howto/create-update-providers.html">Update community providers</a></li>
-<li class="toctree-l1"><a class="reference internal" href="../installing-from-sources.html">Installing from sources</a></li>
-<li class="toctree-l1"><a class="reference internal" href="../installing-from-pypi.html">Installing from PyPI</a></li>
+<p class="caption" role="heading"><span class="caption-text">Commits</span></p>
+<ul>
+<li class="toctree-l1"><a class="reference internal" href="../../../../../commits.html">Detailed list of commits</a></li>
 </ul>
 
 </div>
@@ -408,8 +416,21 @@
             
     <div class="td-sidebar desktop-only d-print-none">
 
+<div id="docs-version-selector" class="docs-version-selector sidebar__version-selector">
+    <a class="dropdown-toggle" href="#" id="versionDropdown" role="button" data-toggle="dropdown" aria-haspopup="true"
+       aria-expanded="false">
+        <span class="bodytext__medium--greyish-brown">Version: </span><span class="version">4.0.0</span>
+    </a>
+    <div class="dropdown-menu" aria-labelledby="navbarDropdownMenuLink">
+
+    </div>
+    <script type="application/x-template" id="version-item-template">
+        <a class="dropdown-item"></a>
+    </script>
+</div>
+
 <div class="searchb-box">
-    <form class="search-form" action="../search.html" method="get">
+    <form class="search-form" action="../../../../../search.html" method="get">
         <input class="search-form__input" type="text" name="q" placeholder="Search docs" size="16">
         <input type="hidden" name="check_keywords" value="yes" />
         <input type="hidden" name="area" value="default" />
@@ -439,23 +460,19 @@
 
 
 <div class="toctree" role="navigation" aria-label="main navigation">
-    <ul class="current">
-<li class="toctree-l1"><a class="reference internal" href="../index.html">Providers</a></li>
-<li class="toctree-l1"><a class="reference internal" href="../packages-ref.html">Packages</a></li>
-<li class="toctree-l1 current"><a class="reference internal" href="index.html">Operators and hooks</a><ul class="current">
-<li class="toctree-l2 current"><a class="current reference internal" href="#">ASF: Apache Software Foundation</a></li>
-<li class="toctree-l2"><a class="reference internal" href="aws.html">AWS: Amazon Web Services</a></li>
-<li class="toctree-l2"><a class="reference internal" href="azure.html">Azure: Microsoft Azure</a></li>
-<li class="toctree-l2"><a class="reference internal" href="google.html">Google</a></li>
-<li class="toctree-l2"><a class="reference internal" href="protocol.html">Protocol integrations</a></li>
-<li class="toctree-l2"><a class="reference internal" href="services.html">Services</a></li>
-<li class="toctree-l2"><a class="reference internal" href="software.html">Software integrations</a></li>
+    <p class="caption" role="heading"><span class="caption-text">References</span></p>
+<ul>
+<li class="toctree-l1"><a class="reference internal" href="../../../../../connections/sftp.html">Connection types</a></li>
+<li class="toctree-l1"><a class="reference internal" href="../../../../../_api/airflow/providers/sftp/index.html">Python API</a></li>
+</ul>
+<p class="caption" role="heading"><span class="caption-text">Resources</span></p>
+<ul>
+<li class="toctree-l1"><a class="reference external" href="https://pypi.org/project/apache-airflow-providers-sftp/">PyPI Repository</a></li>
+<li class="toctree-l1"><a class="reference internal" href="../../../../../installing-providers-from-sources.html">Installing from sources</a></li>
 </ul>
-</li>
-<li class="toctree-l1"><a class="reference internal" href="../core-extensions/index.html">Core Extensions</a></li>
-<li class="toctree-l1"><a class="reference internal" href="../howto/create-update-providers.html">Update community providers</a></li>
-<li class="toctree-l1"><a class="reference internal" href="../installing-from-sources.html">Installing from sources</a></li>
-<li class="toctree-l1"><a class="reference internal" href="../installing-from-pypi.html">Installing from PyPI</a></li>
+<p class="caption" role="heading"><span class="caption-text">Commits</span></p>
+<ul>
+<li class="toctree-l1"><a class="reference internal" href="../../../../../commits.html">Detailed list of commits</a></li>
 </ul>
 
 </div>
@@ -544,11 +561,11 @@
 
     <ul class="breadcrumb">
         
-            <li class="breadcrumb-item"><a href="../index.html" class="icon icon-home"> Home</a></li>
+            <li class="breadcrumb-item"><a href="../../../../../index.html" class="icon icon-home"> Home</a></li>
             
-                <li class="breadcrumb-item"><a href="index.html">Operators and Hooks Reference</a></li>
+                <li class="breadcrumb-item"><a href="../../../../index.html">Module code</a></li>
             
-            <li class="breadcrumb-item"><a href="apache.html"> ASF: Apache Software Foundation</a></li>
+            <li class="breadcrumb-item"><a href="sftp.html"> airflow.providers.sftp.hooks.sftp</a></li>
         
     </ul>
 </div>
@@ -559,420 +576,408 @@
                                 <div class="bodywrapper">
                                     <div class="body" role="main">
                                         
-  <blockquote>
-<div></div></blockquote>
-<div class="section" id="asf-apache-software-foundation">
-<h1>ASF: Apache Software Foundation<a class="headerlink" href="#asf-apache-software-foundation" title="Permalink to this heading">¶</a></h1>
-<p>Airflow supports various software created by <a class="reference external" href="https://www.apache.org/foundation/">Apache Software Foundation</a>.</p>
-<div class="section" id="software">
-<h2>Software<a class="headerlink" href="#software" title="Permalink to this heading">¶</a></h2>
-<p>These integrations allow you to perform various operations within software developed by Apache Software
-Foundation.</p>
-<div class="section" id="apache-beam">
-<h3>Apache Beam<a class="headerlink" href="#apache-beam" title="Permalink to this heading">¶</a></h3>
-<dl class="field-list simple">
-<dt class="field-odd">Operators</dt>
-<dd class="field-odd"><p><a class="reference external" href="/docs/apache-airflow-providers-apache-beam/stable/_api/airflow/providers/apache/beam/operators/beam/index.html#module-airflow.providers.apache.beam.operators.beam" title="(in apache-airflow-providers-apache-beam v4.0.0)"><code class="xref py py-mod docutils literal notranslate"><span class="pre">airflow.providers.apache.beam.operators.beam</span></code></a>.</p>
-</dd>
-<dt class="field-even">Hooks</dt>
-<dd class="field-even"><p><a class="reference external" href="/docs/apache-airflow-providers-apache-beam/stable/_api/airflow/providers/apache/beam/hooks/beam/index.html#module-airflow.providers.apache.beam.hooks.beam" title="(in apache-airflow-providers-apache-beam v4.0.0)"><code class="xref py py-mod docutils literal notranslate"><span class="pre">airflow.providers.apache.beam.hooks.beam</span></code></a>.</p>
-</dd>
-<dt class="field-odd">Guides</dt>
-<dd class="field-odd"><p><a class="reference external" href="/docs/apache-airflow-providers-apache-beam/stable/operators.html" title="(in apache-airflow-providers-apache-beam v4.0.0)"><span>Apache Beam Operators</span></a>.</p>
-</dd>
-<dt class="field-even">Provider</dt>
-<dd class="field-even"><p><a class="reference internal" href="../packages-ref.html#std-provider-apache-airflow-providers-apache-beam"><code class="xref std std-provider docutils literal notranslate"><span class="pre">apache-airflow-providers-apache-beam</span></code></a></p>
-</dd>
-<dt class="field-odd">Product documentation</dt>
-<dd class="field-odd"><p><a class="reference external" href="https://beam.apache.org/">Apache Beam</a></p>
-</dd>
-</dl>
-</div>
-<div class="section" id="apache-cassandra">
-<h3>Apache Cassandra<a class="headerlink" href="#apache-cassandra" title="Permalink to this heading">¶</a></h3>
-<dl class="field-list simple">
-<dt class="field-odd">Hooks</dt>
-<dd class="field-odd"><p><a class="reference external" href="/docs/apache-airflow-providers-apache-cassandra/stable/_api/airflow/providers/apache/cassandra/hooks/cassandra/index.html#module-airflow.providers.apache.cassandra.hooks.cassandra" title="(in apache-airflow-providers-apache-cassandra v3.0.0)"><code class="xref py py-mod docutils literal notranslate"><span class="pre">airflow.providers.apache.cassandra.hooks.cassandra</span></code></a>.</p>
-</dd>
-<dt class="field-even">Provider</dt>
-<dd class="field-even"><p><a class="reference internal" href="../packages-ref.html#std-provider-apache-airflow-providers-apache-cassandra"><code class="xref std std-provider docutils literal notranslate"><span class="pre">apache-airflow-providers-apache-cassandra</span></code></a></p>
-</dd>
-<dt class="field-odd">Product documentation</dt>
-<dd class="field-odd"><p><a class="reference external" href="http://cassandra.apache.org/">Apache Cassandra</a></p>
-</dd>
-</dl>
-</div>
-<div class="section" id="apache-drill">
-<h3>Apache Drill<a class="headerlink" href="#apache-drill" title="Permalink to this heading">¶</a></h3>
-<dl class="field-list simple">
-<dt class="field-odd">Operators</dt>
-<dd class="field-odd"><p><a class="reference external" href="/docs/apache-airflow-providers-apache-drill/stable/_api/airflow/providers/apache/drill/operators/drill/index.html#module-airflow.providers.apache.drill.operators.drill" title="(in apache-airflow-providers-apache-drill v2.1.0)"><code class="xref py py-mod docutils literal notranslate"><span class="pre">airflow.providers.apache.drill.operators.drill</span></code></a>.</p>
-</dd>
-<dt class="field-even">Hooks</dt>
-<dd class="field-even"><p><a class="reference external" href="/docs/apache-airflow-providers-apache-drill/stable/_api/airflow/providers/apache/drill/hooks/drill/index.html#module-airflow.providers.apache.drill.hooks.drill" title="(in apache-airflow-providers-apache-drill v2.1.0)"><code class="xref py py-mod docutils literal notranslate"><span class="pre">airflow.providers.apache.drill.hooks.drill</span></code></a>.</p>
-</dd>
-<dt class="field-odd">Guides</dt>
-<dd class="field-odd"><p><a class="reference external" href="/docs/apache-airflow-providers-apache-drill/stable/operators.html" title="(in apache-airflow-providers-apache-drill v2.1.0)"><span>Apache Drill Operators</span></a>.</p>
-</dd>
-<dt class="field-even">Provider</dt>
-<dd class="field-even"><p><a class="reference internal" href="../packages-ref.html#std-provider-apache-airflow-providers-apache-drill"><code class="xref std std-provider docutils literal notranslate"><span class="pre">apache-airflow-providers-apache-drill</span></code></a></p>
-</dd>
-<dt class="field-odd">Product documentation</dt>
-<dd class="field-odd"><p><a class="reference external" href="https://drill.apache.org/">Apache Drill</a></p>
-</dd>
-</dl>
-</div>
-<div class="section" id="apache-druid">
-<h3>Apache Druid<a class="headerlink" href="#apache-druid" title="Permalink to this heading">¶</a></h3>
-<dl class="field-list simple">
-<dt class="field-odd">Operators</dt>
-<dd class="field-odd"><p><a class="reference external" href="/docs/apache-airflow-providers-apache-druid/stable/_api/airflow/providers/apache/druid/operators/druid/index.html#module-airflow.providers.apache.druid.operators.druid" title="(in apache-airflow-providers-apache-druid v3.1.0)"><code class="xref py py-mod docutils literal notranslate"><span class="pre">airflow.providers.apache.druid.operators.druid</span></code></a>, <a class="reference external" href="/docs/apache-airflow-provi [...]
-</dd>
-<dt class="field-even">Hooks</dt>
-<dd class="field-even"><p><a class="reference external" href="/docs/apache-airflow-providers-apache-druid/stable/_api/airflow/providers/apache/druid/hooks/druid/index.html#module-airflow.providers.apache.druid.hooks.druid" title="(in apache-airflow-providers-apache-druid v3.1.0)"><code class="xref py py-mod docutils literal notranslate"><span class="pre">airflow.providers.apache.druid.hooks.druid</span></code></a>.</p>
-</dd>
-<dt class="field-odd">Guides</dt>
-<dd class="field-odd"><p><a class="reference external" href="/docs/apache-airflow-providers-apache-druid/stable/operators.html" title="(in apache-airflow-providers-apache-druid v3.1.0)"><span>Apache Druid Operators</span></a>.</p>
-</dd>
-<dt class="field-even">Provider</dt>
-<dd class="field-even"><p><a class="reference internal" href="../packages-ref.html#std-provider-apache-airflow-providers-apache-druid"><code class="xref std std-provider docutils literal notranslate"><span class="pre">apache-airflow-providers-apache-druid</span></code></a></p>
-</dd>
-<dt class="field-odd">Product documentation</dt>
-<dd class="field-odd"><p><a class="reference external" href="https://druid.apache.org/">Apache Druid</a></p>
-</dd>
-</dl>
-</div>
-<div class="section" id="apache-hive">
-<h3>Apache Hive<a class="headerlink" href="#apache-hive" title="Permalink to this heading">¶</a></h3>
-<dl class="field-list simple">
-<dt class="field-odd">Operators</dt>
-<dd class="field-odd"><p><a class="reference external" href="/docs/apache-airflow-providers-apache-hive/stable/_api/airflow/providers/apache/hive/operators/hive/index.html#module-airflow.providers.apache.hive.operators.hive" title="(in apache-airflow-providers-apache-hive v3.1.0)"><code class="xref py py-mod docutils literal notranslate"><span class="pre">airflow.providers.apache.hive.operators.hive</span></code></a>, <a class="reference external" href="/docs/apache-airflow-providers-apa [...]
-</dd>
-<dt class="field-even">Hooks</dt>
-<dd class="field-even"><p><a class="reference external" href="/docs/apache-airflow-providers-apache-hive/stable/_api/airflow/providers/apache/hive/hooks/hive/index.html#module-airflow.providers.apache.hive.hooks.hive" title="(in apache-airflow-providers-apache-hive v3.1.0)"><code class="xref py py-mod docutils literal notranslate"><span class="pre">airflow.providers.apache.hive.hooks.hive</span></code></a>.</p>
-</dd>
-<dt class="field-odd">Guides</dt>
-<dd class="field-odd"><p><a class="reference external" href="/docs/apache-airflow-providers-apache-hive/stable/operators.html" title="(in apache-airflow-providers-apache-hive v3.1.0)"><span>Apache Hive Operators</span></a>.</p>
-</dd>
-<dt class="field-even">Provider</dt>
-<dd class="field-even"><p><a class="reference internal" href="../packages-ref.html#std-provider-apache-airflow-providers-apache-hive"><code class="xref std std-provider docutils literal notranslate"><span class="pre">apache-airflow-providers-apache-hive</span></code></a></p>
-</dd>
-<dt class="field-odd">Product documentation</dt>
-<dd class="field-odd"><p><a class="reference external" href="https://hive.apache.org/">Apache Hive</a></p>
-</dd>
-</dl>
-</div>
-<div class="section" id="apache-kylin">
-<h3>Apache Kylin<a class="headerlink" href="#apache-kylin" title="Permalink to this heading">¶</a></h3>
-<dl class="field-list simple">
-<dt class="field-odd">Operators</dt>
-<dd class="field-odd"><p><a class="reference external" href="/docs/apache-airflow-providers-apache-kylin/stable/_api/airflow/providers/apache/kylin/operators/kylin_cube/index.html#module-airflow.providers.apache.kylin.operators.kylin_cube" title="(in apache-airflow-providers-apache-kylin v3.0.0)"><code class="xref py py-mod docutils literal notranslate"><span class="pre">airflow.providers.apache.kylin.operators.kylin_cube</span></code></a>.</p>
-</dd>
-<dt class="field-even">Hooks</dt>
-<dd class="field-even"><p><a class="reference external" href="/docs/apache-airflow-providers-apache-kylin/stable/_api/airflow/providers/apache/kylin/hooks/kylin/index.html#module-airflow.providers.apache.kylin.hooks.kylin" title="(in apache-airflow-providers-apache-kylin v3.0.0)"><code class="xref py py-mod docutils literal notranslate"><span class="pre">airflow.providers.apache.kylin.hooks.kylin</span></code></a>.</p>
-</dd>
-<dt class="field-odd">Provider</dt>
-<dd class="field-odd"><p><a class="reference internal" href="../packages-ref.html#std-provider-apache-airflow-providers-apache-kylin"><code class="xref std std-provider docutils literal notranslate"><span class="pre">apache-airflow-providers-apache-kylin</span></code></a></p>
-</dd>
-<dt class="field-even">Product documentation</dt>
-<dd class="field-even"><p><a class="reference external" href="https://kylin.apache.org/">Apache Kylin</a></p>
-</dd>
-</dl>
-</div>
-<div class="section" id="apache-livy">
-<h3>Apache Livy<a class="headerlink" href="#apache-livy" title="Permalink to this heading">¶</a></h3>
-<dl class="field-list simple">
-<dt class="field-odd">Operators</dt>
-<dd class="field-odd"><p><a class="reference external" href="/docs/apache-airflow-providers-apache-livy/stable/_api/airflow/providers/apache/livy/operators/livy/index.html#module-airflow.providers.apache.livy.operators.livy" title="(in apache-airflow-providers-apache-livy v3.0.0)"><code class="xref py py-mod docutils literal notranslate"><span class="pre">airflow.providers.apache.livy.operators.livy</span></code></a>.</p>
-</dd>
-<dt class="field-even">Hooks</dt>
-<dd class="field-even"><p><a class="reference external" href="/docs/apache-airflow-providers-apache-livy/stable/_api/airflow/providers/apache/livy/hooks/livy/index.html#module-airflow.providers.apache.livy.hooks.livy" title="(in apache-airflow-providers-apache-livy v3.0.0)"><code class="xref py py-mod docutils literal notranslate"><span class="pre">airflow.providers.apache.livy.hooks.livy</span></code></a>.</p>
-</dd>
-<dt class="field-odd">Guides</dt>
-<dd class="field-odd"><p><a class="reference external" href="/docs/apache-airflow-providers-apache-livy/stable/operators.html" title="(in apache-airflow-providers-apache-livy v3.0.0)"><span>Apache Livy Operators</span></a>.</p>
-</dd>
-<dt class="field-even">Provider</dt>
-<dd class="field-even"><p><a class="reference internal" href="../packages-ref.html#std-provider-apache-airflow-providers-apache-livy"><code class="xref std std-provider docutils literal notranslate"><span class="pre">apache-airflow-providers-apache-livy</span></code></a></p>
-</dd>
-<dt class="field-odd">Product documentation</dt>
-<dd class="field-odd"><p><a class="reference external" href="https://livy.apache.org/">Apache Livy</a></p>
-</dd>
-</dl>
-</div>
-<div class="section" id="apache-pig">
-<h3>Apache Pig<a class="headerlink" href="#apache-pig" title="Permalink to this heading">¶</a></h3>
-<dl class="field-list simple">
-<dt class="field-odd">Operators</dt>
-<dd class="field-odd"><p><a class="reference external" href="/docs/apache-airflow-providers-apache-pig/stable/_api/airflow/providers/apache/pig/operators/pig/index.html#module-airflow.providers.apache.pig.operators.pig" title="(in apache-airflow-providers-apache-pig v3.0.0)"><code class="xref py py-mod docutils literal notranslate"><span class="pre">airflow.providers.apache.pig.operators.pig</span></code></a>.</p>
-</dd>
-<dt class="field-even">Hooks</dt>
-<dd class="field-even"><p><a class="reference external" href="/docs/apache-airflow-providers-apache-pig/stable/_api/airflow/providers/apache/pig/hooks/pig/index.html#module-airflow.providers.apache.pig.hooks.pig" title="(in apache-airflow-providers-apache-pig v3.0.0)"><code class="xref py py-mod docutils literal notranslate"><span class="pre">airflow.providers.apache.pig.hooks.pig</span></code></a>.</p>
-</dd>
-<dt class="field-odd">Guides</dt>
-<dd class="field-odd"><p><a class="reference external" href="/docs/apache-airflow-providers-apache-pig/stable/operators.html" title="(in apache-airflow-providers-apache-pig v3.0.0)"><span>Apache Pig Operators</span></a>.</p>
-</dd>
-<dt class="field-even">Provider</dt>
-<dd class="field-even"><p><a class="reference internal" href="../packages-ref.html#std-provider-apache-airflow-providers-apache-pig"><code class="xref std std-provider docutils literal notranslate"><span class="pre">apache-airflow-providers-apache-pig</span></code></a></p>
-</dd>
-<dt class="field-odd">Product documentation</dt>
-<dd class="field-odd"><p><a class="reference external" href="https://pig.apache.org/">Apache Pig</a></p>
-</dd>
-</dl>
-</div>
-<div class="section" id="apache-pinot">
-<h3>Apache Pinot<a class="headerlink" href="#apache-pinot" title="Permalink to this heading">¶</a></h3>
-<dl class="field-list simple">
-<dt class="field-odd">Hooks</dt>
-<dd class="field-odd"><p><a class="reference external" href="/docs/apache-airflow-providers-apache-pinot/stable/_api/airflow/providers/apache/pinot/hooks/pinot/index.html#module-airflow.providers.apache.pinot.hooks.pinot" title="(in apache-airflow-providers-apache-pinot v3.1.0)"><code class="xref py py-mod docutils literal notranslate"><span class="pre">airflow.providers.apache.pinot.hooks.pinot</span></code></a>.</p>
-</dd>
-<dt class="field-even">Provider</dt>
-<dd class="field-even"><p><a class="reference internal" href="../packages-ref.html#std-provider-apache-airflow-providers-apache-pinot"><code class="xref std std-provider docutils literal notranslate"><span class="pre">apache-airflow-providers-apache-pinot</span></code></a></p>
-</dd>
-<dt class="field-odd">Product documentation</dt>
-<dd class="field-odd"><p><a class="reference external" href="https://pinot.apache.org/">Apache Pinot</a></p>
-</dd>
-</dl>
-</div>
-<div class="section" id="apache-spark">
-<h3>Apache Spark<a class="headerlink" href="#apache-spark" title="Permalink to this heading">¶</a></h3>
-<dl class="field-list simple">
-<dt class="field-odd">Operators</dt>
-<dd class="field-odd"><p><a class="reference external" href="/docs/apache-airflow-providers-apache-spark/stable/_api/airflow/providers/apache/spark/operators/spark_jdbc/index.html#module-airflow.providers.apache.spark.operators.spark_jdbc" title="(in apache-airflow-providers-apache-spark v3.0.0)"><code class="xref py py-mod docutils literal notranslate"><span class="pre">airflow.providers.apache.spark.operators.spark_jdbc</span></code></a>, <a class="reference external" href="/docs/apach [...]
-</dd>
-<dt class="field-even">Hooks</dt>
-<dd class="field-even"><p><a class="reference external" href="/docs/apache-airflow-providers-apache-spark/stable/_api/airflow/providers/apache/spark/hooks/spark_jdbc/index.html#module-airflow.providers.apache.spark.hooks.spark_jdbc" title="(in apache-airflow-providers-apache-spark v3.0.0)"><code class="xref py py-mod docutils literal notranslate"><span class="pre">airflow.providers.apache.spark.hooks.spark_jdbc</span></code></a>, <a class="reference external" href="/docs/apache-airflow-p [...]
-</dd>
-<dt class="field-odd">Guides</dt>
-<dd class="field-odd"><p><a class="reference external" href="/docs/apache-airflow-providers-apache-spark/stable/operators.html" title="(in apache-airflow-providers-apache-spark v3.0.0)"><span>Apache Spark Operators</span></a>.</p>
-</dd>
-<dt class="field-even">Provider</dt>
-<dd class="field-even"><p><a class="reference internal" href="../packages-ref.html#std-provider-apache-airflow-providers-apache-spark"><code class="xref std std-provider docutils literal notranslate"><span class="pre">apache-airflow-providers-apache-spark</span></code></a></p>
-</dd>
-<dt class="field-odd">Product documentation</dt>
-<dd class="field-odd"><p><a class="reference external" href="https://spark.apache.org/">Apache Spark</a></p>
-</dd>
-</dl>
-</div>
-<div class="section" id="apache-sqoop">
-<h3>Apache Sqoop<a class="headerlink" href="#apache-sqoop" title="Permalink to this heading">¶</a></h3>
-<dl class="field-list simple">
-<dt class="field-odd">Operators</dt>
-<dd class="field-odd"><p><a class="reference external" href="/docs/apache-airflow-providers-apache-sqoop/stable/_api/airflow/providers/apache/sqoop/operators/sqoop/index.html#module-airflow.providers.apache.sqoop.operators.sqoop" title="(in apache-airflow-providers-apache-sqoop v3.0.0)"><code class="xref py py-mod docutils literal notranslate"><span class="pre">airflow.providers.apache.sqoop.operators.sqoop</span></code></a>.</p>
-</dd>
-<dt class="field-even">Hooks</dt>
-<dd class="field-even"><p><a class="reference external" href="/docs/apache-airflow-providers-apache-sqoop/stable/_api/airflow/providers/apache/sqoop/hooks/sqoop/index.html#module-airflow.providers.apache.sqoop.hooks.sqoop" title="(in apache-airflow-providers-apache-sqoop v3.0.0)"><code class="xref py py-mod docutils literal notranslate"><span class="pre">airflow.providers.apache.sqoop.hooks.sqoop</span></code></a>.</p>
-</dd>
-<dt class="field-odd">Guides</dt>
-<dd class="field-odd"><p><a class="reference external" href="/docs/apache-airflow-providers-apache-sqoop/stable/operators.html" title="(in apache-airflow-providers-apache-sqoop v3.0.0)"><span>Apache Sqoop Operators</span></a>.</p>
-</dd>
-<dt class="field-even">Provider</dt>
-<dd class="field-even"><p><a class="reference internal" href="../packages-ref.html#std-provider-apache-airflow-providers-apache-sqoop"><code class="xref std std-provider docutils literal notranslate"><span class="pre">apache-airflow-providers-apache-sqoop</span></code></a></p>
-</dd>
-<dt class="field-odd">Product documentation</dt>
-<dd class="field-odd"><p><a class="reference external" href="https://sqoop.apache.org/">Apache Sqoop</a></p>
-</dd>
-</dl>
-</div>
-<div class="section" id="hadoop-distributed-file-system-hdfs">
-<h3>Hadoop Distributed File System (HDFS)<a class="headerlink" href="#hadoop-distributed-file-system-hdfs" title="Permalink to this heading">¶</a></h3>
-<dl class="field-list simple">
-<dt class="field-odd">Hooks</dt>
-<dd class="field-odd"><p><a class="reference external" href="/docs/apache-airflow-providers-apache-hdfs/stable/_api/airflow/providers/apache/hdfs/hooks/hdfs/index.html#module-airflow.providers.apache.hdfs.hooks.hdfs" title="(in apache-airflow-providers-apache-hdfs v3.0.1)"><code class="xref py py-mod docutils literal notranslate"><span class="pre">airflow.providers.apache.hdfs.hooks.hdfs</span></code></a>.</p>
-</dd>
-<dt class="field-even">Provider</dt>
-<dd class="field-even"><p><a class="reference internal" href="../packages-ref.html#std-provider-apache-airflow-providers-apache-hdfs"><code class="xref std std-provider docutils literal notranslate"><span class="pre">apache-airflow-providers-apache-hdfs</span></code></a></p>
-</dd>
-<dt class="field-odd">Product documentation</dt>
-<dd class="field-odd"><p><a class="reference external" href="https://hadoop.apache.org/docs/r1.2.1/hdfs_design.html">Hadoop Distributed File System (HDFS)</a></p>
-</dd>
-</dl>
-</div>
-<div class="section" id="webhdfs">
-<h3>WebHDFS<a class="headerlink" href="#webhdfs" title="Permalink to this heading">¶</a></h3>
-<dl class="field-list simple">
-<dt class="field-odd">Hooks</dt>
-<dd class="field-odd"><p><a class="reference external" href="/docs/apache-airflow-providers-apache-hdfs/stable/_api/airflow/providers/apache/hdfs/hooks/webhdfs/index.html#module-airflow.providers.apache.hdfs.hooks.webhdfs" title="(in apache-airflow-providers-apache-hdfs v3.0.1)"><code class="xref py py-mod docutils literal notranslate"><span class="pre">airflow.providers.apache.hdfs.hooks.webhdfs</span></code></a>.</p>
-</dd>
-<dt class="field-even">Provider</dt>
-<dd class="field-even"><p><a class="reference internal" href="../packages-ref.html#std-provider-apache-airflow-providers-apache-hdfs"><code class="xref std std-provider docutils literal notranslate"><span class="pre">apache-airflow-providers-apache-hdfs</span></code></a></p>
-</dd>
-<dt class="field-odd">Product documentation</dt>
-<dd class="field-odd"><p><a class="reference external" href="https://hadoop.apache.org/docs/current/hadoop-project-dist/hadoop-hdfs/WebHDFS.html">WebHDFS</a></p>
-</dd>
-</dl>
-</div>
-</div>
-<div class="section" id="transfers">
-<h2>Transfers<a class="headerlink" href="#transfers" title="Permalink to this heading">¶</a></h2>
-<p>These integrations allow you to copy data from/to software developed by Apache Software
-Foundation.</p>
-<div class="section" id="apache-hive-to-amazon-dynamodb">
-<h3>Apache Hive to Amazon DynamoDB<a class="headerlink" href="#apache-hive-to-amazon-dynamodb" title="Permalink to this heading">¶</a></h3>
-<dl class="field-list simple">
-<dt class="field-odd">Source product documentation</dt>
-<dd class="field-odd"><p><a class="reference external" href="https://hive.apache.org/">Apache Hive</a></p>
-</dd>
-<dt class="field-even">Target product documentation</dt>
-<dd class="field-even"><p><a class="reference external" href="https://aws.amazon.com/dynamodb/">Amazon DynamoDB</a></p>
-</dd>
-<dt class="field-odd">Operator guide</dt>
-<dd class="field-odd"><p><a class="reference external" href="/docs/apache-airflow-providers-amazon/stable/operators/transfer/hive_to_dynamodb.html" title="(in apache-airflow-providers-amazon v4.1.0)"><span>Apache Hive to Amazon DynamoDB</span></a></p>
-</dd>
-<dt class="field-even">Python API</dt>
-<dd class="field-even"><p><a class="reference external" href="/docs/apache-airflow-providers-amazon/stable/_api/airflow/providers/amazon/aws/transfers/hive_to_dynamodb/index.html#module-airflow.providers.amazon.aws.transfers.hive_to_dynamodb" title="(in apache-airflow-providers-amazon v4.1.0)"><code class="xref py py-mod docutils literal notranslate"><span class="pre">airflow.providers.amazon.aws.transfers.hive_to_dynamodb</span></code></a></p>
-</dd>
-<dt class="field-odd">Provider</dt>
-<dd class="field-odd"><p><a class="reference internal" href="../packages-ref.html#std-provider-apache-airflow-providers-amazon"><code class="xref std std-provider docutils literal notranslate"><span class="pre">apache-airflow-providers-amazon</span></code></a></p>
-</dd>
-</dl>
-</div>
-<div class="section" id="apache-hive-to-apache-druid">
-<h3>Apache Hive to Apache Druid<a class="headerlink" href="#apache-hive-to-apache-druid" title="Permalink to this heading">¶</a></h3>
-<dl class="field-list simple">
-<dt class="field-odd">Source product documentation</dt>
-<dd class="field-odd"><p><a class="reference external" href="https://hive.apache.org/">Apache Hive</a></p>
-</dd>
-<dt class="field-even">Target product documentation</dt>
-<dd class="field-even"><p><a class="reference external" href="https://druid.apache.org/">Apache Druid</a></p>
-</dd>
-<dt class="field-odd">Python API</dt>
-<dd class="field-odd"><p><a class="reference external" href="/docs/apache-airflow-providers-apache-druid/stable/_api/airflow/providers/apache/druid/transfers/hive_to_druid/index.html#module-airflow.providers.apache.druid.transfers.hive_to_druid" title="(in apache-airflow-providers-apache-druid v3.1.0)"><code class="xref py py-mod docutils literal notranslate"><span class="pre">airflow.providers.apache.druid.transfers.hive_to_druid</span></code></a></p>
-</dd>
-<dt class="field-even">Provider</dt>
-<dd class="field-even"><p><a class="reference internal" href="../packages-ref.html#std-provider-apache-airflow-providers-apache-druid"><code class="xref std std-provider docutils literal notranslate"><span class="pre">apache-airflow-providers-apache-druid</span></code></a></p>
-</dd>
-</dl>
-</div>
-<div class="section" id="vertica-to-apache-hive">
-<h3>Vertica to Apache Hive<a class="headerlink" href="#vertica-to-apache-hive" title="Permalink to this heading">¶</a></h3>
-<dl class="field-list simple">
-<dt class="field-odd">Source product documentation</dt>
-<dd class="field-odd"><p><a class="reference external" href="https://www.vertica.com/">Vertica</a></p>
-</dd>
-<dt class="field-even">Target product documentation</dt>
-<dd class="field-even"><p><a class="reference external" href="https://hive.apache.org/">Apache Hive</a></p>
-</dd>
-<dt class="field-odd">Python API</dt>
-<dd class="field-odd"><p><a class="reference external" href="/docs/apache-airflow-providers-apache-hive/stable/_api/airflow/providers/apache/hive/transfers/vertica_to_hive/index.html#module-airflow.providers.apache.hive.transfers.vertica_to_hive" title="(in apache-airflow-providers-apache-hive v3.1.0)"><code class="xref py py-mod docutils literal notranslate"><span class="pre">airflow.providers.apache.hive.transfers.vertica_to_hive</span></code></a></p>
-</dd>
-<dt class="field-even">Provider</dt>
-<dd class="field-even"><p><a class="reference internal" href="../packages-ref.html#std-provider-apache-airflow-providers-apache-hive"><code class="xref std std-provider docutils literal notranslate"><span class="pre">apache-airflow-providers-apache-hive</span></code></a></p>
-</dd>
-</dl>
-</div>
-<div class="section" id="apache-hive-to-mysql">
-<h3>Apache Hive to MySQL<a class="headerlink" href="#apache-hive-to-mysql" title="Permalink to this heading">¶</a></h3>
-<dl class="field-list simple">
-<dt class="field-odd">Source product documentation</dt>
-<dd class="field-odd"><p><a class="reference external" href="https://hive.apache.org/">Apache Hive</a></p>
-</dd>
-<dt class="field-even">Target product documentation</dt>
-<dd class="field-even"><p><a class="reference external" href="https://www.mysql.com/">MySQL</a></p>
-</dd>
-<dt class="field-odd">Python API</dt>
-<dd class="field-odd"><p><a class="reference external" href="/docs/apache-airflow-providers-apache-hive/stable/_api/airflow/providers/apache/hive/transfers/hive_to_mysql/index.html#module-airflow.providers.apache.hive.transfers.hive_to_mysql" title="(in apache-airflow-providers-apache-hive v3.1.0)"><code class="xref py py-mod docutils literal notranslate"><span class="pre">airflow.providers.apache.hive.transfers.hive_to_mysql</span></code></a></p>
-</dd>
-<dt class="field-even">Provider</dt>
-<dd class="field-even"><p><a class="reference internal" href="../packages-ref.html#std-provider-apache-airflow-providers-apache-hive"><code class="xref std std-provider docutils literal notranslate"><span class="pre">apache-airflow-providers-apache-hive</span></code></a></p>
-</dd>
-</dl>
-</div>
-<div class="section" id="apache-hive-to-samba">
-<h3>Apache Hive to Samba<a class="headerlink" href="#apache-hive-to-samba" title="Permalink to this heading">¶</a></h3>
-<dl class="field-list simple">
-<dt class="field-odd">Source product documentation</dt>
-<dd class="field-odd"><p><a class="reference external" href="https://hive.apache.org/">Apache Hive</a></p>
-</dd>
-<dt class="field-even">Target product documentation</dt>
-<dd class="field-even"><p><a class="reference external" href="https://www.samba.org/">Samba</a></p>
-</dd>
-<dt class="field-odd">Python API</dt>
-<dd class="field-odd"><p><a class="reference external" href="/docs/apache-airflow-providers-apache-hive/stable/_api/airflow/providers/apache/hive/transfers/hive_to_samba/index.html#module-airflow.providers.apache.hive.transfers.hive_to_samba" title="(in apache-airflow-providers-apache-hive v3.1.0)"><code class="xref py py-mod docutils literal notranslate"><span class="pre">airflow.providers.apache.hive.transfers.hive_to_samba</span></code></a></p>
-</dd>
-<dt class="field-even">Provider</dt>
-<dd class="field-even"><p><a class="reference internal" href="../packages-ref.html#std-provider-apache-airflow-providers-apache-hive"><code class="xref std std-provider docutils literal notranslate"><span class="pre">apache-airflow-providers-apache-hive</span></code></a></p>
-</dd>
-</dl>
-</div>
-<div class="section" id="amazon-simple-storage-service-s3-to-apache-hive">
-<h3>Amazon Simple Storage Service (S3) to Apache Hive<a class="headerlink" href="#amazon-simple-storage-service-s3-to-apache-hive" title="Permalink to this heading">¶</a></h3>
-<dl class="field-list simple">
-<dt class="field-odd">Source product documentation</dt>
-<dd class="field-odd"><p><a class="reference external" href="https://aws.amazon.com/s3/">Amazon Simple Storage Service (S3)</a></p>
-</dd>
-<dt class="field-even">Target product documentation</dt>
-<dd class="field-even"><p><a class="reference external" href="https://hive.apache.org/">Apache Hive</a></p>
-</dd>
-<dt class="field-odd">Python API</dt>
-<dd class="field-odd"><p><a class="reference external" href="/docs/apache-airflow-providers-apache-hive/stable/_api/airflow/providers/apache/hive/transfers/s3_to_hive/index.html#module-airflow.providers.apache.hive.transfers.s3_to_hive" title="(in apache-airflow-providers-apache-hive v3.1.0)"><code class="xref py py-mod docutils literal notranslate"><span class="pre">airflow.providers.apache.hive.transfers.s3_to_hive</span></code></a></p>
-</dd>
-<dt class="field-even">Provider</dt>
-<dd class="field-even"><p><a class="reference internal" href="../packages-ref.html#std-provider-apache-airflow-providers-apache-hive"><code class="xref std std-provider docutils literal notranslate"><span class="pre">apache-airflow-providers-apache-hive</span></code></a></p>
-</dd>
-</dl>
-</div>
-<div class="section" id="mysql-to-apache-hive">
-<h3>MySQL to Apache Hive<a class="headerlink" href="#mysql-to-apache-hive" title="Permalink to this heading">¶</a></h3>
-<dl class="field-list simple">
-<dt class="field-odd">Source product documentation</dt>
-<dd class="field-odd"><p><a class="reference external" href="https://www.mysql.com/">MySQL</a></p>
-</dd>
-<dt class="field-even">Target product documentation</dt>
-<dd class="field-even"><p><a class="reference external" href="https://hive.apache.org/">Apache Hive</a></p>
-</dd>
-<dt class="field-odd">Python API</dt>
-<dd class="field-odd"><p><a class="reference external" href="/docs/apache-airflow-providers-apache-hive/stable/_api/airflow/providers/apache/hive/transfers/mysql_to_hive/index.html#module-airflow.providers.apache.hive.transfers.mysql_to_hive" title="(in apache-airflow-providers-apache-hive v3.1.0)"><code class="xref py py-mod docutils literal notranslate"><span class="pre">airflow.providers.apache.hive.transfers.mysql_to_hive</span></code></a></p>
-</dd>
-<dt class="field-even">Provider</dt>
-<dd class="field-even"><p><a class="reference internal" href="../packages-ref.html#std-provider-apache-airflow-providers-apache-hive"><code class="xref std std-provider docutils literal notranslate"><span class="pre">apache-airflow-providers-apache-hive</span></code></a></p>
-</dd>
-</dl>
-</div>
-<div class="section" id="microsoft-sql-server-mssql-to-apache-hive">
-<h3>Microsoft SQL Server (MSSQL) to Apache Hive<a class="headerlink" href="#microsoft-sql-server-mssql-to-apache-hive" title="Permalink to this heading">¶</a></h3>
-<dl class="field-list simple">
-<dt class="field-odd">Source product documentation</dt>
-<dd class="field-odd"><p><a class="reference external" href="https://www.microsoft.com/en-us/sql-server/sql-server-downloads">Microsoft SQL Server (MSSQL)</a></p>
-</dd>
-<dt class="field-even">Target product documentation</dt>
-<dd class="field-even"><p><a class="reference external" href="https://hive.apache.org/">Apache Hive</a></p>
-</dd>
-<dt class="field-odd">Python API</dt>
-<dd class="field-odd"><p><a class="reference external" href="/docs/apache-airflow-providers-apache-hive/stable/_api/airflow/providers/apache/hive/transfers/mssql_to_hive/index.html#module-airflow.providers.apache.hive.transfers.mssql_to_hive" title="(in apache-airflow-providers-apache-hive v3.1.0)"><code class="xref py py-mod docutils literal notranslate"><span class="pre">airflow.providers.apache.hive.transfers.mssql_to_hive</span></code></a></p>
-</dd>
-<dt class="field-even">Provider</dt>
-<dd class="field-even"><p><a class="reference internal" href="../packages-ref.html#std-provider-apache-airflow-providers-apache-hive"><code class="xref std std-provider docutils literal notranslate"><span class="pre">apache-airflow-providers-apache-hive</span></code></a></p>
-</dd>
-</dl>
-</div>
-<div class="section" id="apache-cassandra-to-google-cloud-storage-gcs">
-<h3>Apache Cassandra to Google Cloud Storage (GCS)<a class="headerlink" href="#apache-cassandra-to-google-cloud-storage-gcs" title="Permalink to this heading">¶</a></h3>
-<dl class="field-list simple">
-<dt class="field-odd">Source product documentation</dt>
-<dd class="field-odd"><p><a class="reference external" href="http://cassandra.apache.org/">Apache Cassandra</a></p>
-</dd>
-<dt class="field-even">Target product documentation</dt>
-<dd class="field-even"><p><a class="reference external" href="https://cloud.google.com/storage/">Google Cloud Storage (GCS)</a></p>
-</dd>
-<dt class="field-odd">Python API</dt>
-<dd class="field-odd"><p><a class="reference external" href="/docs/apache-airflow-providers-google/stable/_api/airflow/providers/google/cloud/transfers/cassandra_to_gcs/index.html#module-airflow.providers.google.cloud.transfers.cassandra_to_gcs" title="(in apache-airflow-providers-google v8.1.0)"><code class="xref py py-mod docutils literal notranslate"><span class="pre">airflow.providers.google.cloud.transfers.cassandra_to_gcs</span></code></a></p>
-</dd>
-<dt class="field-even">Provider</dt>
-<dd class="field-even"><p><a class="reference internal" href="../packages-ref.html#std-provider-apache-airflow-providers-google"><code class="xref std std-provider docutils literal notranslate"><span class="pre">apache-airflow-providers-google</span></code></a></p>
-</dd>
-</dl>
-</div>
-</div>
-</div>
-
-
-    <div class="pager" role="navigation" aria-label="related navigation">
-            <a rel="prev" title="Operators and Hooks Reference" href="index.html" >
-                <button class="btn-hollow btn-blue bodytext__medium--cerulean-blue" accesskey="p">Previous</button>
-            </a>
-            <a rel="next" title="AWS: Amazon Web Services" href="aws.html" >
-                <button class="btn-hollow btn-blue bodytext__medium--cerulean-blue" accesskey="n">Next</button>
-            </a>
+  <h1>Source code for airflow.providers.sftp.hooks.sftp</h1><div class="highlight"><pre>
+<span></span><span class="c1">#</span>
+<span class="c1"># Licensed to the Apache Software Foundation (ASF) under one</span>
+<span class="c1"># or more contributor license agreements.  See the NOTICE file</span>
+<span class="c1"># distributed with this work for additional information</span>
+<span class="c1"># regarding copyright ownership.  The ASF licenses this file</span>
+<span class="c1"># to you under the Apache License, Version 2.0 (the</span>
+<span class="c1"># &quot;License&quot;); you may not use this file except in compliance</span>
+<span class="c1"># with the License.  You may obtain a copy of the License at</span>
+<span class="c1">#</span>
+<span class="c1">#   http://www.apache.org/licenses/LICENSE-2.0</span>
+<span class="c1">#</span>
+<span class="c1"># Unless required by applicable law or agreed to in writing,</span>
+<span class="c1"># software distributed under the License is distributed on an</span>
+<span class="c1"># &quot;AS IS&quot; BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY</span>
+<span class="c1"># KIND, either express or implied.  See the License for the</span>
+<span class="c1"># specific language governing permissions and limitations</span>
+<span class="c1"># under the License.</span>
+<span class="sd">&quot;&quot;&quot;This module contains SFTP hook.&quot;&quot;&quot;</span>
+<span class="kn">import</span> <span class="nn">datetime</span>
+<span class="kn">import</span> <span class="nn">os</span>
+<span class="kn">import</span> <span class="nn">stat</span>
+<span class="kn">import</span> <span class="nn">warnings</span>
+<span class="kn">from</span> <span class="nn">fnmatch</span> <span class="kn">import</span> <span class="n">fnmatch</span>
+<span class="kn">from</span> <span class="nn">typing</span> <span class="kn">import</span> <span class="n">Any</span><span class="p">,</span> <span class="n">Callable</span><span class="p">,</span> <span class="n">Dict</span><span class="p">,</span> <span class="n">List</span><span class="p">,</span> <span class="n">Optional</span><span class="p">,</span> <span class="n">Tuple</span><span class="p">,</span> <span class="n">Union</span>
+
+<span class="kn">import</span> <span class="nn">paramiko</span>
+
+<span class="kn">from</span> <span class="nn">airflow.exceptions</span> <span class="kn">import</span> <span class="n">AirflowException</span>
+<span class="kn">from</span> <span class="nn">airflow.providers.ssh.hooks.ssh</span> <span class="kn">import</span> <span class="n">SSHHook</span>
+
+
+<div class="viewcode-block" id="SFTPHook"><a class="viewcode-back" href="../../../../../_api/airflow/providers/sftp/hooks/sftp/index.html#airflow.providers.sftp.hooks.sftp.SFTPHook">[docs]</a><span class="k">class</span> <span class="nc">SFTPHook</span><span class="p">(</span><span class="n">SSHHook</span><span class="p">):</span>
+    <span class="sd">&quot;&quot;&quot;</span>
+<span class="sd">    This hook is inherited from SSH hook. Please refer to SSH hook for the input</span>
+<span class="sd">    arguments.</span>
+
+<span class="sd">    Interact with SFTP.</span>
+
+<span class="sd">    :Pitfalls::</span>
+
+<span class="sd">        - In contrast with FTPHook describe_directory only returns size, type and</span>
+<span class="sd">          modify. It doesn&#39;t return unix.owner, unix.mode, perm, unix.group and</span>
+<span class="sd">          unique.</span>
+<span class="sd">        - retrieve_file and store_file only take a local full path and not a</span>
+<span class="sd">           buffer.</span>
+<span class="sd">        - If no mode is passed to create_directory it will be created with 777</span>
+<span class="sd">          permissions.</span>
+
+<span class="sd">    Errors that may occur throughout but should be handled downstream.</span>
+
+<span class="sd">    For consistency reasons with SSHHook, the preferred parameter is &quot;ssh_conn_id&quot;.</span>
+
+<span class="sd">    :param ssh_conn_id: The :ref:`sftp connection id&lt;howto/connection:sftp&gt;`</span>
+<span class="sd">    :param ssh_hook: Optional SSH hook (included to support passing of an SSH hook to the SFTP operator)</span>
+<span class="sd">    &quot;&quot;&quot;</span>
+
+<div class="viewcode-block" id="SFTPHook.conn_name_attr"><a class="viewcode-back" href="../../../../../_api/airflow/providers/sftp/hooks/sftp/index.html#airflow.providers.sftp.hooks.sftp.SFTPHook.conn_name_attr">[docs]</a>    <span class="n">conn_name_attr</span> <span class="o">=</span> <span class="s1">&#39;ssh_conn_id&#39;</span></div>
+<div class="viewcode-block" id="SFTPHook.default_conn_name"><a class="viewcode-back" href="../../../../../_api/airflow/providers/sftp/hooks/sftp/index.html#airflow.providers.sftp.hooks.sftp.SFTPHook.default_conn_name">[docs]</a>    <span class="n">default_conn_name</span> <span class="o">=</span> <span class="s1">&#39;sftp_default&#39;</span></div>
+<div class="viewcode-block" id="SFTPHook.conn_type"><a class="viewcode-back" href="../../../../../_api/airflow/providers/sftp/hooks/sftp/index.html#airflow.providers.sftp.hooks.sftp.SFTPHook.conn_type">[docs]</a>    <span class="n">conn_type</span> <span class="o">=</span> <span class="s1">&#39;sftp&#39;</span></div>
+<div class="viewcode-block" id="SFTPHook.hook_name"><a class="viewcode-back" href="../../../../../_api/airflow/providers/sftp/hooks/sftp/index.html#airflow.providers.sftp.hooks.sftp.SFTPHook.hook_name">[docs]</a>    <span class="n">hook_name</span> <span class="o">=</span> <span class="s1">&#39;SFTP&#39;</span></div>
+
+    <span class="nd">@staticmethod</span>
+<div class="viewcode-block" id="SFTPHook.get_ui_field_behaviour"><a class="viewcode-back" href="../../../../../_api/airflow/providers/sftp/hooks/sftp/index.html#airflow.providers.sftp.hooks.sftp.SFTPHook.get_ui_field_behaviour">[docs]</a>    <span class="k">def</span> <span class="nf">get_ui_field_behaviour</span><span class="p">()</span> <span class="o">-&gt;</span> <span class="n">Dict</span><span class="p">[</span><span class="nb">str</span><span class="p">,</span> <span class="n">Any [...]
+        <span class="k">return</span> <span class="p">{</span>
+            <span class="s2">&quot;hidden_fields&quot;</span><span class="p">:</span> <span class="p">[</span><span class="s1">&#39;schema&#39;</span><span class="p">],</span>
+            <span class="s2">&quot;relabeling&quot;</span><span class="p">:</span> <span class="p">{</span>
+                <span class="s1">&#39;login&#39;</span><span class="p">:</span> <span class="s1">&#39;Username&#39;</span><span class="p">,</span></div>
+            <span class="p">},</span>
+        <span class="p">}</span>
+
+    <span class="k">def</span> <span class="fm">__init__</span><span class="p">(</span>
+        <span class="bp">self</span><span class="p">,</span>
+        <span class="n">ssh_conn_id</span><span class="p">:</span> <span class="n">Optional</span><span class="p">[</span><span class="nb">str</span><span class="p">]</span> <span class="o">=</span> <span class="s1">&#39;sftp_default&#39;</span><span class="p">,</span>
+        <span class="n">ssh_hook</span><span class="p">:</span> <span class="n">Optional</span><span class="p">[</span><span class="n">SSHHook</span><span class="p">]</span> <span class="o">=</span> <span class="kc">None</span><span class="p">,</span>
+        <span class="o">*</span><span class="n">args</span><span class="p">,</span>
+        <span class="o">**</span><span class="n">kwargs</span><span class="p">,</span>
+    <span class="p">)</span> <span class="o">-&gt;</span> <span class="kc">None</span><span class="p">:</span>
+        <span class="bp">self</span><span class="o">.</span><span class="n">conn</span><span class="p">:</span> <span class="n">Optional</span><span class="p">[</span><span class="n">paramiko</span><span class="o">.</span><span class="n">SFTPClient</span><span class="p">]</span> <span class="o">=</span> <span class="kc">None</span>
+
+        <span class="c1"># TODO: remove support for ssh_hook when it is removed from SFTPOperator</span>
+        <span class="bp">self</span><span class="o">.</span><span class="n">ssh_hook</span> <span class="o">=</span> <span class="n">ssh_hook</span>
+
+        <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">ssh_hook</span> <span class="ow">is</span> <span class="ow">not</span> <span class="kc">None</span><span class="p">:</span>
+            <span class="n">warnings</span><span class="o">.</span><span class="n">warn</span><span class="p">(</span>
+                <span class="s1">&#39;Parameter `ssh_hook` is deprecated and will be removed in a future version.&#39;</span><span class="p">,</span>
+                <span class="ne">DeprecationWarning</span><span class="p">,</span>
+                <span class="n">stacklevel</span><span class="o">=</span><span class="mi">2</span><span class="p">,</span>
+            <span class="p">)</span>
+            <span class="k">if</span> <span class="ow">not</span> <span class="nb">isinstance</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">ssh_hook</span><span class="p">,</span> <span class="n">SSHHook</span><span class="p">):</span>
+                <span class="k">raise</span> <span class="n">AirflowException</span><span class="p">(</span>
+                    <span class="sa">f</span><span class="s1">&#39;ssh_hook must be an instance of SSHHook, but got </span><span class="si">{</span><span class="nb">type</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">ssh_hook</span><span class="p">)</span><span class="si">}</span><span class="s1">&#39;</span>
+                <span class="p">)</span>
+            <span class="bp">self</span><span class="o">.</span><span class="n">log</span><span class="o">.</span><span class="n">info</span><span class="p">(</span><span class="s1">&#39;ssh_hook is provided. It will be used to generate SFTP connection.&#39;</span><span class="p">)</span>
+            <span class="bp">self</span><span class="o">.</span><span class="n">ssh_conn_id</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">ssh_hook</span><span class="o">.</span><span class="n">ssh_conn_id</span>
+            <span class="k">return</span>
+
+        <span class="n">ftp_conn_id</span> <span class="o">=</span> <span class="n">kwargs</span><span class="o">.</span><span class="n">pop</span><span class="p">(</span><span class="s1">&#39;ftp_conn_id&#39;</span><span class="p">,</span> <span class="kc">None</span><span class="p">)</span>
+        <span class="k">if</span> <span class="n">ftp_conn_id</span><span class="p">:</span>
+            <span class="n">warnings</span><span class="o">.</span><span class="n">warn</span><span class="p">(</span>
+                <span class="s1">&#39;Parameter `ftp_conn_id` is deprecated. Please use `ssh_conn_id` instead.&#39;</span><span class="p">,</span>
+                <span class="ne">DeprecationWarning</span><span class="p">,</span>
+                <span class="n">stacklevel</span><span class="o">=</span><span class="mi">2</span><span class="p">,</span>
+            <span class="p">)</span>
+            <span class="n">ssh_conn_id</span> <span class="o">=</span> <span class="n">ftp_conn_id</span>
+
+        <span class="n">kwargs</span><span class="p">[</span><span class="s1">&#39;ssh_conn_id&#39;</span><span class="p">]</span> <span class="o">=</span> <span class="n">ssh_conn_id</span>
+        <span class="bp">self</span><span class="o">.</span><span class="n">ssh_conn_id</span> <span class="o">=</span> <span class="n">ssh_conn_id</span>
+
+        <span class="nb">super</span><span class="p">()</span><span class="o">.</span><span class="fm">__init__</span><span class="p">(</span><span class="o">*</span><span class="n">args</span><span class="p">,</span> <span class="o">**</span><span class="n">kwargs</span><span class="p">)</span>
+
+<div class="viewcode-block" id="SFTPHook.get_conn"><a class="viewcode-back" href="../../../../../_api/airflow/providers/sftp/hooks/sftp/index.html#airflow.providers.sftp.hooks.sftp.SFTPHook.get_conn">[docs]</a>    <span class="k">def</span> <span class="nf">get_conn</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">paramiko</span><span class="o">.</span><span class="n">SFTPClient</span><span class="p">:</span>  [...]
+        <span class="sd">&quot;&quot;&quot;</span>
+<span class="sd">        Opens an SFTP connection to the remote host</span>
+
+<span class="sd">        :rtype: paramiko.SFTPClient</span>
+<span class="sd">        &quot;&quot;&quot;</span>
+        <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">conn</span> <span class="ow">is</span> <span class="kc">None</span><span class="p">:</span>
+            <span class="c1"># TODO: remove support for ssh_hook when it is removed from SFTPOperator</span>
+            <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">ssh_hook</span> <span class="ow">is</span> <span class="ow">not</span> <span class="kc">None</span><span class="p">:</span>
+                <span class="bp">self</span><span class="o">.</span><span class="n">conn</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">ssh_hook</span><span class="o">.</span><span class="n">get_conn</span><span class="p">()</span><span class="o">.</span><span class="n">open_sftp</span><span class="p">()</span>
+            <span class="k">else</span><span class="p">:</span>
+                <span class="bp">self</span><span class="o">.</span><span class="n">conn</span> <span class="o">=</span> <span class="nb">super</span><span class="p">()</span><span class="o">.</span><span class="n">get_conn</span><span class="p">()</span><span class="o">.</span><span class="n">open_sftp</span><span class="p">()</span>
+        <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">conn</span></div>
+
+<div class="viewcode-block" id="SFTPHook.close_conn"><a class="viewcode-back" href="../../../../../_api/airflow/providers/sftp/hooks/sftp/index.html#airflow.providers.sftp.hooks.sftp.SFTPHook.close_conn">[docs]</a>    <span class="k">def</span> <span class="nf">close_conn</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="kc">None</span><span class="p">:</span>
+        <span class="sd">&quot;&quot;&quot;Closes the SFTP connection&quot;&quot;&quot;</span>
+        <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">conn</span> <span class="ow">is</span> <span class="ow">not</span> <span class="kc">None</span><span class="p">:</span>
+            <span class="bp">self</span><span class="o">.</span><span class="n">conn</span><span class="o">.</span><span class="n">close</span><span class="p">()</span>
+            <span class="bp">self</span><span class="o">.</span><span class="n">conn</span> <span class="o">=</span> <span class="kc">None</span></div>
+
+<div class="viewcode-block" id="SFTPHook.describe_directory"><a class="viewcode-back" href="../../../../../_api/airflow/providers/sftp/hooks/sftp/index.html#airflow.providers.sftp.hooks.sftp.SFTPHook.describe_directory">[docs]</a>    <span class="k">def</span> <span class="nf">describe_directory</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">path</span><span class="p">:</span> <span class="nb">str</span><span class="p">)</span> <span cl [...]
+        <span class="sd">&quot;&quot;&quot;</span>
+<span class="sd">        Returns a dictionary of {filename: {attributes}} for all files</span>
+<span class="sd">        on the remote system (where the MLSD command is supported).</span>
+
+<span class="sd">        :param path: full path to the remote directory</span>
+<span class="sd">        &quot;&quot;&quot;</span>
+        <span class="n">conn</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">get_conn</span><span class="p">()</span>
+        <span class="n">flist</span> <span class="o">=</span> <span class="nb">sorted</span><span class="p">(</span><span class="n">conn</span><span class="o">.</span><span class="n">listdir_attr</span><span class="p">(</span><span class="n">path</span><span class="p">),</span> <span class="n">key</span><span class="o">=</span><span class="k">lambda</span> <span class="n">x</span><span class="p">:</span> <span class="n">x</span><span class="o">.</span><span class="n">filename</span><span [...]
+        <span class="n">files</span> <span class="o">=</span> <span class="p">{}</span>
+        <span class="k">for</span> <span class="n">f</span> <span class="ow">in</span> <span class="n">flist</span><span class="p">:</span>
+            <span class="n">modify</span> <span class="o">=</span> <span class="n">datetime</span><span class="o">.</span><span class="n">datetime</span><span class="o">.</span><span class="n">fromtimestamp</span><span class="p">(</span><span class="n">f</span><span class="o">.</span><span class="n">st_mtime</span><span class="p">)</span><span class="o">.</span><span class="n">strftime</span><span class="p">(</span><span class="s1">&#39;%Y%m</span><span class="si">%d</span><span class="s [...]
+            <span class="n">files</span><span class="p">[</span><span class="n">f</span><span class="o">.</span><span class="n">filename</span><span class="p">]</span> <span class="o">=</span> <span class="p">{</span>
+                <span class="s1">&#39;size&#39;</span><span class="p">:</span> <span class="n">f</span><span class="o">.</span><span class="n">st_size</span><span class="p">,</span>
+                <span class="s1">&#39;type&#39;</span><span class="p">:</span> <span class="s1">&#39;dir&#39;</span> <span class="k">if</span> <span class="n">stat</span><span class="o">.</span><span class="n">S_ISDIR</span><span class="p">(</span><span class="n">f</span><span class="o">.</span><span class="n">st_mode</span><span class="p">)</span> <span class="k">else</span> <span class="s1">&#39;file&#39;</span><span class="p">,</span>  <span class="c1"># type: ignore</span>
+                <span class="s1">&#39;modify&#39;</span><span class="p">:</span> <span class="n">modify</span><span class="p">,</span>
+            <span class="p">}</span>
+        <span class="k">return</span> <span class="n">files</span></div>
+
+<div class="viewcode-block" id="SFTPHook.list_directory"><a class="viewcode-back" href="../../../../../_api/airflow/providers/sftp/hooks/sftp/index.html#airflow.providers.sftp.hooks.sftp.SFTPHook.list_directory">[docs]</a>    <span class="k">def</span> <span class="nf">list_directory</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">path</span><span class="p">:</span> <span class="nb">str</span><span class="p">)</span> <span class="o">-&gt [...]
+        <span class="sd">&quot;&quot;&quot;</span>
+<span class="sd">        Returns a list of files on the remote system.</span>
+
+<span class="sd">        :param path: full path to the remote directory to list</span>
+<span class="sd">        &quot;&quot;&quot;</span>
+        <span class="n">conn</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">get_conn</span><span class="p">()</span>
+        <span class="n">files</span> <span class="o">=</span> <span class="nb">sorted</span><span class="p">(</span><span class="n">conn</span><span class="o">.</span><span class="n">listdir</span><span class="p">(</span><span class="n">path</span><span class="p">))</span>
+        <span class="k">return</span> <span class="n">files</span></div>
+
+<div class="viewcode-block" id="SFTPHook.mkdir"><a class="viewcode-back" href="../../../../../_api/airflow/providers/sftp/hooks/sftp/index.html#airflow.providers.sftp.hooks.sftp.SFTPHook.mkdir">[docs]</a>    <span class="k">def</span> <span class="nf">mkdir</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">path</span><span class="p">:</span> <span class="nb">str</span><span class="p">,</span> <span class="n">mode</span><span class="p">:</s [...]
+        <span class="sd">&quot;&quot;&quot;</span>
+<span class="sd">        Creates a directory on the remote system.</span>
+
+<span class="sd">        :param path: full path to the remote directory to create</span>
+<span class="sd">        :param mode: permissions to set the directory with</span>
+<span class="sd">        &quot;&quot;&quot;</span>
+        <span class="n">conn</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">get_conn</span><span class="p">()</span>
+        <span class="n">conn</span><span class="o">.</span><span class="n">mkdir</span><span class="p">(</span><span class="n">path</span><span class="p">,</span> <span class="n">mode</span><span class="o">=</span><span class="nb">int</span><span class="p">(</span><span class="nb">str</span><span class="p">(</span><span class="n">mode</span><span class="p">),</span> <span class="mi">8</span><span class="p">))</span></div>
+
+<div class="viewcode-block" id="SFTPHook.isdir"><a class="viewcode-back" href="../../../../../_api/airflow/providers/sftp/hooks/sftp/index.html#airflow.providers.sftp.hooks.sftp.SFTPHook.isdir">[docs]</a>    <span class="k">def</span> <span class="nf">isdir</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">path</span><span class="p">:</span> <span class="nb">str</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">b [...]
+        <span class="sd">&quot;&quot;&quot;</span>
+<span class="sd">        Checks if the path provided is a directory or not.</span>
+
+<span class="sd">        :param path: full path to the remote directory to check</span>
+<span class="sd">        &quot;&quot;&quot;</span>
+        <span class="n">conn</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">get_conn</span><span class="p">()</span>
+        <span class="k">try</span><span class="p">:</span>
+            <span class="n">result</span> <span class="o">=</span> <span class="n">stat</span><span class="o">.</span><span class="n">S_ISDIR</span><span class="p">(</span><span class="n">conn</span><span class="o">.</span><span class="n">stat</span><span class="p">(</span><span class="n">path</span><span class="p">)</span><span class="o">.</span><span class="n">st_mode</span><span class="p">)</span>  <span class="c1"># type: ignore</span>
+        <span class="k">except</span> <span class="ne">OSError</span><span class="p">:</span>
+            <span class="n">result</span> <span class="o">=</span> <span class="kc">False</span>
+        <span class="k">return</span> <span class="n">result</span></div>
+
+<div class="viewcode-block" id="SFTPHook.isfile"><a class="viewcode-back" href="../../../../../_api/airflow/providers/sftp/hooks/sftp/index.html#airflow.providers.sftp.hooks.sftp.SFTPHook.isfile">[docs]</a>    <span class="k">def</span> <span class="nf">isfile</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">path</span><span class="p">:</span> <span class="nb">str</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb [...]
+        <span class="sd">&quot;&quot;&quot;</span>
+<span class="sd">        Checks if the path provided is a file or not.</span>
+
+<span class="sd">        :param path: full path to the remote file to check</span>
+<span class="sd">        &quot;&quot;&quot;</span>
+        <span class="n">conn</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">get_conn</span><span class="p">()</span>
+        <span class="k">try</span><span class="p">:</span>
+            <span class="n">result</span> <span class="o">=</span> <span class="n">stat</span><span class="o">.</span><span class="n">S_ISREG</span><span class="p">(</span><span class="n">conn</span><span class="o">.</span><span class="n">stat</span><span class="p">(</span><span class="n">path</span><span class="p">)</span><span class="o">.</span><span class="n">st_mode</span><span class="p">)</span>  <span class="c1"># type: ignore</span>
+        <span class="k">except</span> <span class="ne">OSError</span><span class="p">:</span>
+            <span class="n">result</span> <span class="o">=</span> <span class="kc">False</span>
+        <span class="k">return</span> <span class="n">result</span></div>
+
+<div class="viewcode-block" id="SFTPHook.create_directory"><a class="viewcode-back" href="../../../../../_api/airflow/providers/sftp/hooks/sftp/index.html#airflow.providers.sftp.hooks.sftp.SFTPHook.create_directory">[docs]</a>    <span class="k">def</span> <span class="nf">create_directory</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">path</span><span class="p">:</span> <span class="nb">str</span><span class="p">,</span> <span class="n [...]
+        <span class="sd">&quot;&quot;&quot;</span>
+<span class="sd">        Creates a directory on the remote system.</span>
+
+<span class="sd">        :param path: full path to the remote directory to create</span>
+<span class="sd">        :param mode: int representation of octal mode for directory</span>
+<span class="sd">        &quot;&quot;&quot;</span>
+        <span class="n">conn</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">get_conn</span><span class="p">()</span>
+        <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">isdir</span><span class="p">(</span><span class="n">path</span><span class="p">):</span>
+            <span class="bp">self</span><span class="o">.</span><span class="n">log</span><span class="o">.</span><span class="n">info</span><span class="p">(</span><span class="s2">&quot;</span><span class="si">%s</span><span class="s2"> already exists&quot;</span><span class="p">,</span> <span class="n">path</span><span class="p">)</span>
+            <span class="k">return</span>
+        <span class="k">elif</span> <span class="bp">self</span><span class="o">.</span><span class="n">isfile</span><span class="p">(</span><span class="n">path</span><span class="p">):</span>
+            <span class="k">raise</span> <span class="n">AirflowException</span><span class="p">(</span><span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">path</span><span class="si">}</span><span class="s2"> already exists and is a file&quot;</span><span class="p">)</span>
+        <span class="k">else</span><span class="p">:</span>
+            <span class="n">dirname</span><span class="p">,</span> <span class="n">basename</span> <span class="o">=</span> <span class="n">os</span><span class="o">.</span><span class="n">path</span><span class="o">.</span><span class="n">split</span><span class="p">(</span><span class="n">path</span><span class="p">)</span>
+            <span class="k">if</span> <span class="n">dirname</span> <span class="ow">and</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">isdir</span><span class="p">(</span><span class="n">dirname</span><span class="p">):</span>
+                <span class="bp">self</span><span class="o">.</span><span class="n">create_directory</span><span class="p">(</span><span class="n">dirname</span><span class="p">,</span> <span class="n">mode</span><span class="p">)</span>
+            <span class="k">if</span> <span class="n">basename</span><span class="p">:</span>
+                <span class="bp">self</span><span class="o">.</span><span class="n">log</span><span class="o">.</span><span class="n">info</span><span class="p">(</span><span class="s2">&quot;Creating </span><span class="si">%s</span><span class="s2">&quot;</span><span class="p">,</span> <span class="n">path</span><span class="p">)</span>
+                <span class="n">conn</span><span class="o">.</span><span class="n">mkdir</span><span class="p">(</span><span class="n">path</span><span class="p">,</span> <span class="n">mode</span><span class="o">=</span><span class="n">mode</span><span class="p">)</span></div>
+
+<div class="viewcode-block" id="SFTPHook.delete_directory"><a class="viewcode-back" href="../../../../../_api/airflow/providers/sftp/hooks/sftp/index.html#airflow.providers.sftp.hooks.sftp.SFTPHook.delete_directory">[docs]</a>    <span class="k">def</span> <span class="nf">delete_directory</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">path</span><span class="p">:</span> <span class="nb">str</span><span class="p">)</span> <span class="o [...]
+        <span class="sd">&quot;&quot;&quot;</span>
+<span class="sd">        Deletes a directory on the remote system.</span>
+
+<span class="sd">        :param path: full path to the remote directory to delete</span>
+<span class="sd">        &quot;&quot;&quot;</span>
+        <span class="n">conn</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">get_conn</span><span class="p">()</span>
+        <span class="n">conn</span><span class="o">.</span><span class="n">rmdir</span><span class="p">(</span><span class="n">path</span><span class="p">)</span></div>
+
+<div class="viewcode-block" id="SFTPHook.retrieve_file"><a class="viewcode-back" href="../../../../../_api/airflow/providers/sftp/hooks/sftp/index.html#airflow.providers.sftp.hooks.sftp.SFTPHook.retrieve_file">[docs]</a>    <span class="k">def</span> <span class="nf">retrieve_file</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">remote_full_path</span><span class="p">:</span> <span class="nb">str</span><span class="p">,</span> <span class [...]
+        <span class="sd">&quot;&quot;&quot;</span>
+<span class="sd">        Transfers the remote file to a local location.</span>
+<span class="sd">        If local_full_path is a string path, the file will be put</span>
+<span class="sd">        at that location</span>
+
+<span class="sd">        :param remote_full_path: full path to the remote file</span>
+<span class="sd">        :param local_full_path: full path to the local file</span>
+<span class="sd">        &quot;&quot;&quot;</span>
+        <span class="n">conn</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">get_conn</span><span class="p">()</span>
+        <span class="n">conn</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="n">remote_full_path</span><span class="p">,</span> <span class="n">local_full_path</span><span class="p">)</span></div>
+
+<div class="viewcode-block" id="SFTPHook.store_file"><a class="viewcode-back" href="../../../../../_api/airflow/providers/sftp/hooks/sftp/index.html#airflow.providers.sftp.hooks.sftp.SFTPHook.store_file">[docs]</a>    <span class="k">def</span> <span class="nf">store_file</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">remote_full_path</span><span class="p">:</span> <span class="nb">str</span><span class="p">,</span> <span class="n">loca [...]
+        <span class="sd">&quot;&quot;&quot;</span>
+<span class="sd">        Transfers a local file to the remote location.</span>
+<span class="sd">        If local_full_path_or_buffer is a string path, the file will be read</span>
+<span class="sd">        from that location</span>
+
+<span class="sd">        :param remote_full_path: full path to the remote file</span>
+<span class="sd">        :param local_full_path: full path to the local file</span>
+<span class="sd">        &quot;&quot;&quot;</span>
+        <span class="n">conn</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">get_conn</span><span class="p">()</span>
+        <span class="n">conn</span><span class="o">.</span><span class="n">put</span><span class="p">(</span><span class="n">local_full_path</span><span class="p">,</span> <span class="n">remote_full_path</span><span class="p">,</span> <span class="n">confirm</span><span class="o">=</span><span class="n">confirm</span><span class="p">)</span></div>
+
+<div class="viewcode-block" id="SFTPHook.delete_file"><a class="viewcode-back" href="../../../../../_api/airflow/providers/sftp/hooks/sftp/index.html#airflow.providers.sftp.hooks.sftp.SFTPHook.delete_file">[docs]</a>    <span class="k">def</span> <span class="nf">delete_file</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">path</span><span class="p">:</span> <span class="nb">str</span><span class="p">)</span> <span class="o">-&gt;</span>  [...]
+        <span class="sd">&quot;&quot;&quot;</span>
+<span class="sd">        Removes a file on the FTP Server</span>
+
+<span class="sd">        :param path: full path to the remote file</span>
+<span class="sd">        &quot;&quot;&quot;</span>
+        <span class="n">conn</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">get_conn</span><span class="p">()</span>
+        <span class="n">conn</span><span class="o">.</span><span class="n">remove</span><span class="p">(</span><span class="n">path</span><span class="p">)</span></div>
+
+<div class="viewcode-block" id="SFTPHook.get_mod_time"><a class="viewcode-back" href="../../../../../_api/airflow/providers/sftp/hooks/sftp/index.html#airflow.providers.sftp.hooks.sftp.SFTPHook.get_mod_time">[docs]</a>    <span class="k">def</span> <span class="nf">get_mod_time</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">path</span><span class="p">:</span> <span class="nb">str</span><span class="p">)</span> <span class="o">-&gt;</spa [...]
+        <span class="sd">&quot;&quot;&quot;</span>
+<span class="sd">        Returns modification time.</span>
+
+<span class="sd">        :param path: full path to the remote file</span>
+<span class="sd">        &quot;&quot;&quot;</span>
+        <span class="n">conn</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">get_conn</span><span class="p">()</span>
+        <span class="n">ftp_mdtm</span> <span class="o">=</span> <span class="n">conn</span><span class="o">.</span><span class="n">stat</span><span class="p">(</span><span class="n">path</span><span class="p">)</span><span class="o">.</span><span class="n">st_mtime</span>
+        <span class="k">return</span> <span class="n">datetime</span><span class="o">.</span><span class="n">datetime</span><span class="o">.</span><span class="n">fromtimestamp</span><span class="p">(</span><span class="n">ftp_mdtm</span><span class="p">)</span><span class="o">.</span><span class="n">strftime</span><span class="p">(</span><span class="s1">&#39;%Y%m</span><span class="si">%d</span><span class="s1">%H%M%S&#39;</span><span class="p">)</span>  <span class="c1"># type: ignor [...]
+
+<div class="viewcode-block" id="SFTPHook.path_exists"><a class="viewcode-back" href="../../../../../_api/airflow/providers/sftp/hooks/sftp/index.html#airflow.providers.sftp.hooks.sftp.SFTPHook.path_exists">[docs]</a>    <span class="k">def</span> <span class="nf">path_exists</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">path</span><span class="p">:</span> <span class="nb">str</span><span class="p">)</span> <span class="o">-&gt;</span>  [...]
+        <span class="sd">&quot;&quot;&quot;</span>
+<span class="sd">        Returns True if a remote entity exists</span>
+
+<span class="sd">        :param path: full path to the remote file or directory</span>
+<span class="sd">        &quot;&quot;&quot;</span>
+        <span class="n">conn</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">get_conn</span><span class="p">()</span>
+        <span class="k">try</span><span class="p">:</span>
+            <span class="n">conn</span><span class="o">.</span><span class="n">stat</span><span class="p">(</span><span class="n">path</span><span class="p">)</span>
+        <span class="k">except</span> <span class="ne">OSError</span><span class="p">:</span>
+            <span class="k">return</span> <span class="kc">False</span>
+        <span class="k">return</span> <span class="kc">True</span></div>
+
+    <span class="nd">@staticmethod</span>
+    <span class="k">def</span> <span class="nf">_is_path_match</span><span class="p">(</span><span class="n">path</span><span class="p">:</span> <span class="nb">str</span><span class="p">,</span> <span class="n">prefix</span><span class="p">:</span> <span class="n">Optional</span><span class="p">[</span><span class="nb">str</span><span class="p">]</span> <span class="o">=</span> <span class="kc">None</span><span class="p">,</span> <span class="n">delimiter</span><span class="p">:</span> [...]
+        <span class="sd">&quot;&quot;&quot;</span>
+<span class="sd">        Return True if given path starts with prefix (if set) and ends with delimiter (if set).</span>
+
+<span class="sd">        :param path: path to be checked</span>
+<span class="sd">        :param prefix: if set path will be checked is starting with prefix</span>
+<span class="sd">        :param delimiter: if set path will be checked is ending with suffix</span>
+<span class="sd">        :return: bool</span>
+<span class="sd">        &quot;&quot;&quot;</span>
+        <span class="k">if</span> <span class="n">prefix</span> <span class="ow">is</span> <span class="ow">not</span> <span class="kc">None</span> <span class="ow">and</span> <span class="ow">not</span> <span class="n">path</span><span class="o">.</span><span class="n">startswith</span><span class="p">(</span><span class="n">prefix</span><span class="p">):</span>
+            <span class="k">return</span> <span class="kc">False</span>
+        <span class="k">if</span> <span class="n">delimiter</span> <span class="ow">is</span> <span class="ow">not</span> <span class="kc">None</span> <span class="ow">and</span> <span class="ow">not</span> <span class="n">path</span><span class="o">.</span><span class="n">endswith</span><span class="p">(</span><span class="n">delimiter</span><span class="p">):</span>
+            <span class="k">return</span> <span class="kc">False</span>
+        <span class="k">return</span> <span class="kc">True</span>
+
+<div class="viewcode-block" id="SFTPHook.walktree"><a class="viewcode-back" href="../../../../../_api/airflow/providers/sftp/hooks/sftp/index.html#airflow.providers.sftp.hooks.sftp.SFTPHook.walktree">[docs]</a>    <span class="k">def</span> <span class="nf">walktree</span><span class="p">(</span>
+        <span class="bp">self</span><span class="p">,</span>
+        <span class="n">path</span><span class="p">:</span> <span class="nb">str</span><span class="p">,</span>
+        <span class="n">fcallback</span><span class="p">:</span> <span class="n">Callable</span><span class="p">[[</span><span class="nb">str</span><span class="p">],</span> <span class="n">Optional</span><span class="p">[</span><span class="n">Any</span><span class="p">]],</span>
+        <span class="n">dcallback</span><span class="p">:</span> <span class="n">Callable</span><span class="p">[[</span><span class="nb">str</span><span class="p">],</span> <span class="n">Optional</span><span class="p">[</span><span class="n">Any</span><span class="p">]],</span>
+        <span class="n">ucallback</span><span class="p">:</span> <span class="n">Callable</span><span class="p">[[</span><span class="nb">str</span><span class="p">],</span> <span class="n">Optional</span><span class="p">[</span><span class="n">Any</span><span class="p">]],</span>
+        <span class="n">recurse</span><span class="p">:</span> <span class="nb">bool</span> <span class="o">=</span> <span class="kc">True</span><span class="p">,</span>
+    <span class="p">)</span> <span class="o">-&gt;</span> <span class="kc">None</span><span class="p">:</span>
+        <span class="sd">&quot;&quot;&quot;</span>
+<span class="sd">        Recursively descend, depth first, the directory tree rooted at</span>
+<span class="sd">        path, calling discreet callback functions for each regular file,</span>
+<span class="sd">        directory and unknown file type.</span>
+
+<span class="sd">        :param str path:</span>
+<span class="sd">            root of remote directory to descend, use &#39;.&#39; to start at</span>
+<span class="sd">            :attr:`.pwd`</span>
+<span class="sd">        :param callable fcallback:</span>
+<span class="sd">            callback function to invoke for a regular file.</span>
+<span class="sd">            (form: ``func(str)``)</span>
+<span class="sd">        :param callable dcallback:</span>
+<span class="sd">            callback function to invoke for a directory. (form: ``func(str)``)</span>
+<span class="sd">        :param callable ucallback:</span>
+<span class="sd">            callback function to invoke for an unknown file type.</span>
+<span class="sd">            (form: ``func(str)``)</span>
+<span class="sd">        :param bool recurse: *Default: True* - should it recurse</span>
+
+<span class="sd">        :returns: None</span>
+<span class="sd">        &quot;&quot;&quot;</span>
+        <span class="n">conn</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">get_conn</span><span class="p">()</span>
+        <span class="k">for</span> <span class="n">entry</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">list_directory</span><span class="p">(</span><span class="n">path</span><span class="p">):</span>
+            <span class="n">pathname</span> <span class="o">=</span> <span class="n">os</span><span class="o">.</span><span class="n">path</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="n">path</span><span class="p">,</span> <span class="n">entry</span><span class="p">)</span>
+            <span class="n">mode</span> <span class="o">=</span> <span class="n">conn</span><span class="o">.</span><span class="n">stat</span><span class="p">(</span><span class="n">pathname</span><span class="p">)</span><span class="o">.</span><span class="n">st_mode</span>
+            <span class="k">if</span> <span class="n">stat</span><span class="o">.</span><span class="n">S_ISDIR</span><span class="p">(</span><span class="n">mode</span><span class="p">):</span>  <span class="c1"># type: ignore</span>
+                <span class="c1"># It&#39;s a directory, call the dcallback function</span>
+                <span class="n">dcallback</span><span class="p">(</span><span class="n">pathname</span><span class="p">)</span>
+                <span class="k">if</span> <span class="n">recurse</span><span class="p">:</span>
+                    <span class="c1"># now, recurse into it</span>
+                    <span class="bp">self</span><span class="o">.</span><span class="n">walktree</span><span class="p">(</span><span class="n">pathname</span><span class="p">,</span> <span class="n">fcallback</span><span class="p">,</span> <span class="n">dcallback</span><span class="p">,</span> <span class="n">ucallback</span><span class="p">)</span>
+            <span class="k">elif</span> <span class="n">stat</span><span class="o">.</span><span class="n">S_ISREG</span><span class="p">(</span><span class="n">mode</span><span class="p">):</span>  <span class="c1"># type: ignore</span>
+                <span class="c1"># It&#39;s a file, call the fcallback function</span>
+                <span class="n">fcallback</span><span class="p">(</span><span class="n">pathname</span><span class="p">)</span>
+            <span class="k">else</span><span class="p">:</span>
+                <span class="c1"># Unknown file type</span>
+                <span class="n">ucallback</span><span class="p">(</span><span class="n">pathname</span><span class="p">)</span></div>
+
+<div class="viewcode-block" id="SFTPHook.get_tree_map"><a class="viewcode-back" href="../../../../../_api/airflow/providers/sftp/hooks/sftp/index.html#airflow.providers.sftp.hooks.sftp.SFTPHook.get_tree_map">[docs]</a>    <span class="k">def</span> <span class="nf">get_tree_map</span><span class="p">(</span>
+        <span class="bp">self</span><span class="p">,</span> <span class="n">path</span><span class="p">:</span> <span class="nb">str</span><span class="p">,</span> <span class="n">prefix</span><span class="p">:</span> <span class="n">Optional</span><span class="p">[</span><span class="nb">str</span><span class="p">]</span> <span class="o">=</span> <span class="kc">None</span><span class="p">,</span> <span class="n">delimiter</span><span class="p">:</span> <span class="n">Optional</span> [...]
+    <span class="p">)</span> <span class="o">-&gt;</span> <span class="n">Tuple</span><span class="p">[</span><span class="n">List</span><span class="p">[</span><span class="nb">str</span><span class="p">],</span> <span class="n">List</span><span class="p">[</span><span class="nb">str</span><span class="p">],</span> <span class="n">List</span><span class="p">[</span><span class="nb">str</span><span class="p">]]:</span>
+        <span class="sd">&quot;&quot;&quot;</span>
+<span class="sd">        Return tuple with recursive lists of files, directories and unknown paths from given path.</span>
+<span class="sd">        It is possible to filter results by giving prefix and/or delimiter parameters.</span>
+
+<span class="sd">        :param path: path from which tree will be built</span>
+<span class="sd">        :param prefix: if set paths will be added if start with prefix</span>
+<span class="sd">        :param delimiter: if set paths will be added if end with delimiter</span>
+<span class="sd">        :return: tuple with list of files, dirs and unknown items</span>
+<span class="sd">        :rtype: Tuple[List[str], List[str], List[str]]</span>
+<span class="sd">        &quot;&quot;&quot;</span>
+        <span class="n">files</span><span class="p">:</span> <span class="n">List</span><span class="p">[</span><span class="nb">str</span><span class="p">]</span> <span class="o">=</span> <span class="p">[]</span>
+        <span class="n">dirs</span><span class="p">:</span> <span class="n">List</span><span class="p">[</span><span class="nb">str</span><span class="p">]</span> <span class="o">=</span> <span class="p">[]</span>
+        <span class="n">unknowns</span><span class="p">:</span> <span class="n">List</span><span class="p">[</span><span class="nb">str</span><span class="p">]</span> <span class="o">=</span> <span class="p">[]</span>
+
+        <span class="k">def</span> <span class="nf">append_matching_path_callback</span><span class="p">(</span><span class="n">list_</span><span class="p">:</span> <span class="n">List</span><span class="p">[</span><span class="nb">str</span><span class="p">])</span> <span class="o">-&gt;</span> <span class="n">Callable</span><span class="p">:</span>
+            <span class="k">return</span> <span class="k">lambda</span> <span class="n">item</span><span class="p">:</span> <span class="n">list_</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">item</span><span class="p">)</span> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_is_path_match</span><span class="p">(</span><span class="n">item</span><span class="p">,</span> <span class="n">pref [...]
+
+        <span class="bp">self</span><span class="o">.</span><span class="n">walktree</span><span class="p">(</span>
+            <span class="n">path</span><span class="o">=</span><span class="n">path</span><span class="p">,</span>
+            <span class="n">fcallback</span><span class="o">=</span><span class="n">append_matching_path_callback</span><span class="p">(</span><span class="n">files</span><span class="p">),</span>
+            <span class="n">dcallback</span><span class="o">=</span><span class="n">append_matching_path_callback</span><span class="p">(</span><span class="n">dirs</span><span class="p">),</span>
+            <span class="n">ucallback</span><span class="o">=</span><span class="n">append_matching_path_callback</span><span class="p">(</span><span class="n">unknowns</span><span class="p">),</span>
+            <span class="n">recurse</span><span class="o">=</span><span class="kc">True</span><span class="p">,</span>
+        <span class="p">)</span>
+
+        <span class="k">return</span> <span class="n">files</span><span class="p">,</span> <span class="n">dirs</span><span class="p">,</span> <span class="n">unknowns</span></div>
+
+<div class="viewcode-block" id="SFTPHook.test_connection"><a class="viewcode-back" href="../../../../../_api/airflow/providers/sftp/hooks/sftp/index.html#airflow.providers.sftp.hooks.sftp.SFTPHook.test_connection">[docs]</a>    <span class="k">def</span> <span class="nf">test_connection</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">Tuple</span><span class="p">[</span><span class="nb">bool</span><span class= [...]
+        <span class="sd">&quot;&quot;&quot;Test the SFTP connection by calling path with directory&quot;&quot;&quot;</span>
+        <span class="k">try</span><span class="p">:</span>
+            <span class="n">conn</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">get_conn</span><span class="p">()</span>
+            <span class="n">conn</span><span class="o">.</span><span class="n">normalize</span><span class="p">(</span><span class="s1">&#39;.&#39;</span><span class="p">)</span>
+            <span class="k">return</span> <span class="kc">True</span><span class="p">,</span> <span class="s2">&quot;Connection successfully tested&quot;</span>
+        <span class="k">except</span> <span class="ne">Exception</span> <span class="k">as</span> <span class="n">e</span><span class="p">:</span>
+            <span class="k">return</span> <span class="kc">False</span><span class="p">,</span> <span class="nb">str</span><span class="p">(</span><span class="n">e</span><span class="p">)</span></div>
+
+<div class="viewcode-block" id="SFTPHook.get_file_by_pattern"><a class="viewcode-back" href="../../../../../_api/airflow/providers/sftp/hooks/sftp/index.html#airflow.providers.sftp.hooks.sftp.SFTPHook.get_file_by_pattern">[docs]</a>    <span class="k">def</span> <span class="nf">get_file_by_pattern</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">path</span><span class="p">,</span> <span class="n">fnmatch_pattern</span><span class="p">)</ [...]
+        <span class="sd">&quot;&quot;&quot;</span>
+<span class="sd">        Returning the first matching file based on the given fnmatch type pattern</span>
+
+<span class="sd">        :param path: path to be checked</span>
+<span class="sd">        :param fnmatch_pattern: The pattern that will be matched with `fnmatch`</span>
+<span class="sd">        :return: string containing the first found file, or an empty string if none matched</span>
+<span class="sd">        &quot;&quot;&quot;</span>
+        <span class="n">files_list</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">list_directory</span><span class="p">(</span><span class="n">path</span><span class="p">)</span>
+
+        <span class="k">for</span> <span class="n">file</span> <span class="ow">in</span> <span class="n">files_list</span><span class="p">:</span>
+            <span class="k">if</span> <span class="ow">not</span> <span class="n">fnmatch</span><span class="p">(</span><span class="n">file</span><span class="p">,</span> <span class="n">fnmatch_pattern</span><span class="p">):</span>
+                <span class="k">pass</span>
+            <span class="k">else</span><span class="p">:</span>
+                <span class="k">return</span> <span class="n">file</span>
+
+        <span class="k">return</span> <span class="s2">&quot;&quot;</span></div></div>
+</pre></div>
+
+    <div class="pager" role="navigation" aria-label="related navigation"><button class="btn-hollow btn-blue bodytext__medium--cerulean-blue" disabled>Previous</button><button class="btn-hollow btn-blue bodytext__medium--cerulean-blue" disabled>Next</button>
     </div>
                                     </div>
 
@@ -1039,40 +1044,7 @@ Foundation.</p>
             
     <nav class="wy-nav-side-toc">
         <div class="wy-menu-vertical">
-            <ul>
-<li><a class="reference internal" href="#">ASF: Apache Software Foundation</a><ul>
-<li><a class="reference internal" href="#software">Software</a><ul>
-<li><a class="reference internal" href="#apache-beam">Apache Beam</a></li>
-<li><a class="reference internal" href="#apache-cassandra">Apache Cassandra</a></li>
-<li><a class="reference internal" href="#apache-drill">Apache Drill</a></li>
-<li><a class="reference internal" href="#apache-druid">Apache Druid</a></li>
-<li><a class="reference internal" href="#apache-hive">Apache Hive</a></li>
-<li><a class="reference internal" href="#apache-kylin">Apache Kylin</a></li>
-<li><a class="reference internal" href="#apache-livy">Apache Livy</a></li>
-<li><a class="reference internal" href="#apache-pig">Apache Pig</a></li>
-<li><a class="reference internal" href="#apache-pinot">Apache Pinot</a></li>
-<li><a class="reference internal" href="#apache-spark">Apache Spark</a></li>
-<li><a class="reference internal" href="#apache-sqoop">Apache Sqoop</a></li>
-<li><a class="reference internal" href="#hadoop-distributed-file-system-hdfs">Hadoop Distributed File System (HDFS)</a></li>
-<li><a class="reference internal" href="#webhdfs">WebHDFS</a></li>
-</ul>
-</li>
-<li><a class="reference internal" href="#transfers">Transfers</a><ul>
-<li><a class="reference internal" href="#apache-hive-to-amazon-dynamodb">Apache Hive to Amazon DynamoDB</a></li>
-<li><a class="reference internal" href="#apache-hive-to-apache-druid">Apache Hive to Apache Druid</a></li>
-<li><a class="reference internal" href="#vertica-to-apache-hive">Vertica to Apache Hive</a></li>
-<li><a class="reference internal" href="#apache-hive-to-mysql">Apache Hive to MySQL</a></li>
-<li><a class="reference internal" href="#apache-hive-to-samba">Apache Hive to Samba</a></li>
-<li><a class="reference internal" href="#amazon-simple-storage-service-s3-to-apache-hive">Amazon Simple Storage Service (S3) to Apache Hive</a></li>
-<li><a class="reference internal" href="#mysql-to-apache-hive">MySQL to Apache Hive</a></li>
-<li><a class="reference internal" href="#microsoft-sql-server-mssql-to-apache-hive">Microsoft SQL Server (MSSQL) to Apache Hive</a></li>
-<li><a class="reference internal" href="#apache-cassandra-to-google-cloud-storage-gcs">Apache Cassandra to Google Cloud Storage (GCS)</a></li>
-</ul>
-</li>
-</ul>
-</li>
-</ul>
-
+            
         </div>
     </nav>
             
@@ -1088,24 +1060,6 @@ Foundation.</p>
 
 
 
-    
-        
-            
-        
-        <div class="base-layout--button">
-            <a href="https://github.com/apache/airflow/edit/main/docs/apache-airflow-providers/operators-and-hooks-ref/apache.rst" rel="nofollow">
-
-                <button class="btn-hollow btn-brown btn-with-icon with-box-shadow button-fixed">
-                    <svg xmlns="http://www.w3.org/2000/svg" width="30.76" height="30">
-                        <path d="M15.379 0a15.381 15.381 0 00-4.86 29.974c.769.141 1.05-.334 1.05-.741 0-.365-.013-1.332-.021-2.616-4.278.929-5.181-2.062-5.181-2.062a4.071 4.071 0 00-1.708-2.25c-1.4-.954.106-.935.106-.935a3.231 3.231 0 012.356 1.585 3.274 3.274 0 004.476 1.278 3.287 3.287 0 01.976-2.056c-3.415-.388-7.005-1.707-7.005-7.6a5.947 5.947 0 011.583-4.127 5.53 5.53 0 01.151-4.07s1.291-.413 4.229 1.577a14.577 14.577 0 017.7 0c2.936-1.99 4.225-1.577 4.225-1.577a5.523 5.523 0 01.15 [...]
-                    </svg>
-
-                    <span class="bodytext__medium--brownish-grey">Suggest a change on this page</span>
-                </button>
-            </a>
-        </div>
-    
-
     </div>
 
 
@@ -1227,17 +1181,17 @@ Foundation.</p>
         </span>
     </div>
 </footer>
-    <script type="text/javascript" src="../_static/_gen/js/docs.js"></script>
-    <script type="text/javascript" id="documentation_options" data-url_root="../" src="../_static/documentation_options.js"></script>
+    <script type="text/javascript" src="../../../../../_static/_gen/js/docs.js"></script>
+    <script type="text/javascript" id="documentation_options" data-url_root="../../../../../" src="../../../../../_static/documentation_options.js"></script>
     <script src="https://code.jquery.com/jquery-3.4.1.min.js" integrity="sha256-CSXorXvZcTkaix6Yvo6HppcZGetbYMGWSFlBw8HfCJo=" crossorigin="anonymous"></script>
     <script src="https://cdnjs.cloudflare.com/ajax/libs/popper.js/1.14.3/umd/popper.min.js" integrity="sha384-ZMP7rVo3mIykV+2+9J3UJ46jBk0WLaUAdn689aCwoqbBJiSnjAK/l8WvCWPIPm49" crossorigin="anonymous"></script>
     <script src="https://stackpath.bootstrapcdn.com/bootstrap/4.1.3/js/bootstrap.min.js" integrity="sha384-ChfqqxuZUCnJSK3+MXmPNIyE6ZbWh2IMqE241rYiqJxyMiZ6OW/JmZQ5stwEULTy" crossorigin="anonymous"></script>
-        <script data-url_root="../" id="documentation_options" src="../_static/documentation_options.js"></script>
-        <script src="../_static/jquery.js"></script>
-        <script src="../_static/underscore.js"></script>
-        <script src="../_static/_sphinx_javascript_frameworks_compat.js"></script>
-        <script src="../_static/doctools.js"></script>
-        <script src="../_static/clipboard.min.js"></script>
-        <script src="../_static/copybutton.js"></script>
+        <script data-url_root="../../../../../" id="documentation_options" src="../../../../../_static/documentation_options.js"></script>
+        <script src="../../../../../_static/jquery.js"></script>
+        <script src="../../../../../_static/underscore.js"></script>
+        <script src="../../../../../_static/_sphinx_javascript_frameworks_compat.js"></script>
+        <script src="../../../../../_static/doctools.js"></script>
+        <script src="../../../../../_static/clipboard.min.js"></script>
+        <script src="../../../../../_static/copybutton.js"></script>
 </body>
 </html>
\ No newline at end of file
diff --git a/docs-archive/apache-airflow-providers/core-extensions/secrets-backends.html b/docs-archive/apache-airflow-providers-sftp/4.0.0/_modules/airflow/providers/sftp/operators/sftp.html
similarity index 72%
copy from docs-archive/apache-airflow-providers/core-extensions/secrets-backends.html
copy to docs-archive/apache-airflow-providers-sftp/4.0.0/_modules/airflow/providers/sftp/operators/sftp.html
index f7628ed6ab..5779b1a59b 100644
--- a/docs-archive/apache-airflow-providers/core-extensions/secrets-backends.html
+++ b/docs-archive/apache-airflow-providers-sftp/4.0.0/_modules/airflow/providers/sftp/operators/sftp.html
@@ -9,17 +9,16 @@
 <head>
         <meta charset="utf-8" />
     <meta name="viewport" content="width=device-width, initial-scale=1">
-        <title>Secret backends &mdash; apache-airflow-providers Documentation</title>
-    <link rel="stylesheet" href="../_static/_gen/css/main.min.css" type="text/css" />
-            <link rel="stylesheet" type="text/css" href="../_static/pygments.css" />
-            <link rel="stylesheet" type="text/css" href="../_static/_gen/css/main.min.css" />
-            <link rel="stylesheet" type="text/css" href="../_static/copybutton.css" />
-            <link rel="stylesheet" type="text/css" href="../_static/_gen/css/main-custom.min.css" />
-            <link rel="shortcut icon" href="../_static/pin_32.png"/>
-            <link rel="index" title="Index" href="../genindex.html" />
-            <link rel="search" title="Search" href="../search.html" />
-            <link rel="next" title="Community Providers" href="../howto/create-update-providers.html" />
-            <link rel="prev" title="Writing logs" href="logging.html" />
+        <title>airflow.providers.sftp.operators.sftp &mdash; apache-airflow-providers-sftp Documentation</title>
+    <link rel="stylesheet" href="../../../../../_static/_gen/css/main.min.css" type="text/css" />
+            <link rel="stylesheet" type="text/css" href="../../../../../_static/pygments.css" />
+            <link rel="stylesheet" type="text/css" href="../../../../../_static/_gen/css/main.min.css" />
+            <link rel="stylesheet" type="text/css" href="../../../../../_static/copybutton.css" />
+            <link rel="stylesheet" type="text/css" href="../../../../../_static/_gen/css/main-custom.min.css" />
+            <link rel="stylesheet" type="text/css" href="../../../../../_static/graphviz.css" />
+            <link rel="shortcut icon" href="../../../../../_static/pin_32.png"/>
+            <link rel="index" title="Index" href="../../../../../genindex.html" />
+            <link rel="search" title="Search" href="../../../../../search.html" />
     <!-- Matomo -->
     <script>
         var _paq = window._paq = window._paq || [];
@@ -280,8 +279,21 @@
             <div class="content-drawer">
                 <div class="td-sidebar">
 
+<div id="docs-version-selector" class="docs-version-selector sidebar__version-selector">
+    <a class="dropdown-toggle" href="#" id="versionDropdown" role="button" data-toggle="dropdown" aria-haspopup="true"
+       aria-expanded="false">
+        <span class="bodytext__medium--greyish-brown">Version: </span><span class="version">4.0.0</span>
+    </a>
+    <div class="dropdown-menu" aria-labelledby="navbarDropdownMenuLink">
+
+    </div>
+    <script type="application/x-template" id="version-item-template">
+        <a class="dropdown-item"></a>
+    </script>
+</div>
+
 <div class="searchb-box">
-    <form class="search-form" action="../search.html" method="get">
+    <form class="search-form" action="../../../../../search.html" method="get">
         <input class="search-form__input" type="text" name="q" placeholder="Search docs" size="16">
         <input type="hidden" name="check_keywords" value="yes" />
         <input type="hidden" name="area" value="default" />
@@ -311,21 +323,19 @@
 
 
 <div class="toctree" role="navigation" aria-label="main navigation">
-    <ul class="current">
-<li class="toctree-l1"><a class="reference internal" href="../index.html">Providers</a></li>
-<li class="toctree-l1"><a class="reference internal" href="../packages-ref.html">Packages</a></li>
-<li class="toctree-l1"><a class="reference internal" href="../operators-and-hooks-ref/index.html">Operators and hooks</a></li>
-<li class="toctree-l1 current"><a class="reference internal" href="index.html">Core Extensions</a><ul class="current">
-<li class="toctree-l2"><a class="reference internal" href="auth-backends.html">Auth backends</a></li>
-<li class="toctree-l2"><a class="reference internal" href="connections.html">Connections</a></li>
-<li class="toctree-l2"><a class="reference internal" href="extra-links.html">Extra Links</a></li>
-<li class="toctree-l2"><a class="reference internal" href="logging.html">Writing logs</a></li>
-<li class="toctree-l2 current"><a class="current reference internal" href="#">Secret backends</a></li>
+    <p class="caption" role="heading"><span class="caption-text">References</span></p>
+<ul>
+<li class="toctree-l1"><a class="reference internal" href="../../../../../connections/sftp.html">Connection types</a></li>
+<li class="toctree-l1"><a class="reference internal" href="../../../../../_api/airflow/providers/sftp/index.html">Python API</a></li>
 </ul>
-</li>
-<li class="toctree-l1"><a class="reference internal" href="../howto/create-update-providers.html">Update community providers</a></li>
-<li class="toctree-l1"><a class="reference internal" href="../installing-from-sources.html">Installing from sources</a></li>
-<li class="toctree-l1"><a class="reference internal" href="../installing-from-pypi.html">Installing from PyPI</a></li>
+<p class="caption" role="heading"><span class="caption-text">Resources</span></p>
+<ul>
+<li class="toctree-l1"><a class="reference external" href="https://pypi.org/project/apache-airflow-providers-sftp/">PyPI Repository</a></li>
+<li class="toctree-l1"><a class="reference internal" href="../../../../../installing-providers-from-sources.html">Installing from sources</a></li>
+</ul>
+<p class="caption" role="heading"><span class="caption-text">Commits</span></p>
+<ul>
+<li class="toctree-l1"><a class="reference internal" href="../../../../../commits.html">Detailed list of commits</a></li>
 </ul>
 
 </div>
@@ -406,8 +416,21 @@
             
     <div class="td-sidebar desktop-only d-print-none">
 
+<div id="docs-version-selector" class="docs-version-selector sidebar__version-selector">
+    <a class="dropdown-toggle" href="#" id="versionDropdown" role="button" data-toggle="dropdown" aria-haspopup="true"
+       aria-expanded="false">
+        <span class="bodytext__medium--greyish-brown">Version: </span><span class="version">4.0.0</span>
+    </a>
+    <div class="dropdown-menu" aria-labelledby="navbarDropdownMenuLink">
+
+    </div>
+    <script type="application/x-template" id="version-item-template">
+        <a class="dropdown-item"></a>
+    </script>
+</div>
+
 <div class="searchb-box">
-    <form class="search-form" action="../search.html" method="get">
+    <form class="search-form" action="../../../../../search.html" method="get">
         <input class="search-form__input" type="text" name="q" placeholder="Search docs" size="16">
         <input type="hidden" name="check_keywords" value="yes" />
         <input type="hidden" name="area" value="default" />
@@ -437,21 +460,19 @@
 
 
 <div class="toctree" role="navigation" aria-label="main navigation">
-    <ul class="current">
-<li class="toctree-l1"><a class="reference internal" href="../index.html">Providers</a></li>
-<li class="toctree-l1"><a class="reference internal" href="../packages-ref.html">Packages</a></li>
-<li class="toctree-l1"><a class="reference internal" href="../operators-and-hooks-ref/index.html">Operators and hooks</a></li>
-<li class="toctree-l1 current"><a class="reference internal" href="index.html">Core Extensions</a><ul class="current">
-<li class="toctree-l2"><a class="reference internal" href="auth-backends.html">Auth backends</a></li>
-<li class="toctree-l2"><a class="reference internal" href="connections.html">Connections</a></li>
-<li class="toctree-l2"><a class="reference internal" href="extra-links.html">Extra Links</a></li>
-<li class="toctree-l2"><a class="reference internal" href="logging.html">Writing logs</a></li>
-<li class="toctree-l2 current"><a class="current reference internal" href="#">Secret backends</a></li>
+    <p class="caption" role="heading"><span class="caption-text">References</span></p>
+<ul>
+<li class="toctree-l1"><a class="reference internal" href="../../../../../connections/sftp.html">Connection types</a></li>
+<li class="toctree-l1"><a class="reference internal" href="../../../../../_api/airflow/providers/sftp/index.html">Python API</a></li>
+</ul>
+<p class="caption" role="heading"><span class="caption-text">Resources</span></p>
+<ul>
+<li class="toctree-l1"><a class="reference external" href="https://pypi.org/project/apache-airflow-providers-sftp/">PyPI Repository</a></li>
+<li class="toctree-l1"><a class="reference internal" href="../../../../../installing-providers-from-sources.html">Installing from sources</a></li>
 </ul>
-</li>
-<li class="toctree-l1"><a class="reference internal" href="../howto/create-update-providers.html">Update community providers</a></li>
-<li class="toctree-l1"><a class="reference internal" href="../installing-from-sources.html">Installing from sources</a></li>
-<li class="toctree-l1"><a class="reference internal" href="../installing-from-pypi.html">Installing from PyPI</a></li>
+<p class="caption" role="heading"><span class="caption-text">Commits</span></p>
+<ul>
+<li class="toctree-l1"><a class="reference internal" href="../../../../../commits.html">Detailed list of commits</a></li>
 </ul>
 
 </div>
@@ -540,11 +561,11 @@
 
     <ul class="breadcrumb">
         
-            <li class="breadcrumb-item"><a href="../index.html" class="icon icon-home"> Home</a></li>
+            <li class="breadcrumb-item"><a href="../../../../../index.html" class="icon icon-home"> Home</a></li>
             
-                <li class="breadcrumb-item"><a href="index.html">Core Extensions</a></li>
+                <li class="breadcrumb-item"><a href="../../../../index.html">Module code</a></li>
             
-            <li class="breadcrumb-item"><a href="secrets-backends.html"> Secret backends</a></li>
+            <li class="breadcrumb-item"><a href="sftp.html"> airflow.providers.sftp.operators.sftp</a></li>
         
     </ul>
 </div>
@@ -555,56 +576,181 @@
                                 <div class="bodywrapper">
                                     <div class="body" role="main">
                                         
-  <blockquote>
-<div></div></blockquote>
-<div class="section" id="secret-backends">
-<h1>Secret backends<a class="headerlink" href="#secret-backends" title="Permalink to this heading">¶</a></h1>
-<p>This is a summary of all Apache Airflow Community provided implementations of secret backends
-exposed via community-managed providers.</p>
-<p>Airflow has the capability of reading connections, variables and configuration from Secret Backends rather
-than from its own Database. While storing such information in Airflow’s database is possible, many of the
-enterprise customers already have some secret managers storing secrets, and Airflow can tap into those
-via providers that implement secrets backends for services Airflow integrates with.</p>
-<p>You can also take a
-look at Secret backends available in the core Airflow in
-<a class="reference external" href="/docs/apache-airflow/stable/security/secrets/secrets-backend/index.html" title="(in apache-airflow v2.4.0.dev0)"><span>Secrets Backend</span></a> and here you can see the ones
-provided by the community-managed providers:</p>
-<div class="section" id="amazon">
-<h2>Amazon<a class="headerlink" href="#amazon" title="Permalink to this heading">¶</a></h2>
-<ul class="simple">
-<li><p><a class="reference external" href="/docs/apache-airflow-providers-amazon/stable/_api/airflow/providers/amazon/aws/secrets/secrets_manager/index.html#airflow.providers.amazon.aws.secrets.secrets_manager.SecretsManagerBackend" title="(in apache-airflow-providers-amazon v4.1.0)"><code class="xref py py-class docutils literal notranslate"><span class="pre">SecretsManagerBackend</span></code></a></p></li>
-<li><p><a class="reference external" href="/docs/apache-airflow-providers-amazon/stable/_api/airflow/providers/amazon/aws/secrets/systems_manager/index.html#airflow.providers.amazon.aws.secrets.systems_manager.SystemsManagerParameterStoreBackend" title="(in apache-airflow-providers-amazon v4.1.0)"><code class="xref py py-class docutils literal notranslate"><span class="pre">SystemsManagerParameterStoreBackend</span></code></a></p></li>
-</ul>
-</div>
-<div class="section" id="google">
-<h2>Google<a class="headerlink" href="#google" title="Permalink to this heading">¶</a></h2>
-<ul class="simple">
-<li><p><a class="reference external" href="/docs/apache-airflow-providers-google/stable/_api/airflow/providers/google/cloud/secrets/secret_manager/index.html#airflow.providers.google.cloud.secrets.secret_manager.CloudSecretManagerBackend" title="(in apache-airflow-providers-google v8.1.0)"><code class="xref py py-class docutils literal notranslate"><span class="pre">CloudSecretManagerBackend</span></code></a></p></li>
-</ul>
-</div>
-<div class="section" id="hashicorp">
-<h2>Hashicorp<a class="headerlink" href="#hashicorp" title="Permalink to this heading">¶</a></h2>
-<ul class="simple">
-<li><p><a class="reference external" href="/docs/apache-airflow-providers-hashicorp/stable/_api/airflow/providers/hashicorp/secrets/vault/index.html#airflow.providers.hashicorp.secrets.vault.VaultBackend" title="(in apache-airflow-providers-hashicorp v3.0.1)"><code class="xref py py-class docutils literal notranslate"><span class="pre">VaultBackend</span></code></a></p></li>
-</ul>
-</div>
-<div class="section" id="microsoft-azure">
-<h2>Microsoft Azure<a class="headerlink" href="#microsoft-azure" title="Permalink to this heading">¶</a></h2>
-<ul class="simple">
-<li><p><a class="reference external" href="/docs/apache-airflow-providers-microsoft-azure/stable/_api/airflow/providers/microsoft/azure/secrets/key_vault/index.html#airflow.providers.microsoft.azure.secrets.key_vault.AzureKeyVaultBackend" title="(in apache-airflow-providers-microsoft-azure v4.1.0)"><code class="xref py py-class docutils literal notranslate"><span class="pre">AzureKeyVaultBackend</span></code></a></p></li>
-<li><p><code class="xref py py-class docutils literal notranslate"><span class="pre">AzureKeyVaultBackend</span></code></p></li>
-</ul>
-</div>
-</div>
-
-
-    <div class="pager" role="navigation" aria-label="related navigation">
-            <a rel="prev" title="Writing logs" href="logging.html" >
-                <button class="btn-hollow btn-blue bodytext__medium--cerulean-blue" accesskey="p">Previous</button>
-            </a>
-            <a rel="next" title="Community Providers" href="../howto/create-update-providers.html" >
-                <button class="btn-hollow btn-blue bodytext__medium--cerulean-blue" accesskey="n">Next</button>
-            </a>
+  <h1>Source code for airflow.providers.sftp.operators.sftp</h1><div class="highlight"><pre>
+<span></span><span class="c1">#</span>
+<span class="c1"># Licensed to the Apache Software Foundation (ASF) under one</span>
+<span class="c1"># or more contributor license agreements.  See the NOTICE file</span>
+<span class="c1"># distributed with this work for additional information</span>
+<span class="c1"># regarding copyright ownership.  The ASF licenses this file</span>
+<span class="c1"># to you under the Apache License, Version 2.0 (the</span>
+<span class="c1"># &quot;License&quot;); you may not use this file except in compliance</span>
+<span class="c1"># with the License.  You may obtain a copy of the License at</span>
+<span class="c1">#</span>
+<span class="c1">#   http://www.apache.org/licenses/LICENSE-2.0</span>
+<span class="c1">#</span>
+<span class="c1"># Unless required by applicable law or agreed to in writing,</span>
+<span class="c1"># software distributed under the License is distributed on an</span>
+<span class="c1"># &quot;AS IS&quot; BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY</span>
+<span class="c1"># KIND, either express or implied.  See the License for the</span>
+<span class="c1"># specific language governing permissions and limitations</span>
+<span class="c1"># under the License.</span>
+<span class="sd">&quot;&quot;&quot;This module contains SFTP operator.&quot;&quot;&quot;</span>
+<span class="kn">import</span> <span class="nn">os</span>
+<span class="kn">import</span> <span class="nn">warnings</span>
+<span class="kn">from</span> <span class="nn">pathlib</span> <span class="kn">import</span> <span class="n">Path</span>
+<span class="kn">from</span> <span class="nn">typing</span> <span class="kn">import</span> <span class="n">Any</span><span class="p">,</span> <span class="n">Optional</span><span class="p">,</span> <span class="n">Sequence</span>
+
+<span class="kn">from</span> <span class="nn">airflow.exceptions</span> <span class="kn">import</span> <span class="n">AirflowException</span>
+<span class="kn">from</span> <span class="nn">airflow.models</span> <span class="kn">import</span> <span class="n">BaseOperator</span>
+<span class="kn">from</span> <span class="nn">airflow.providers.sftp.hooks.sftp</span> <span class="kn">import</span> <span class="n">SFTPHook</span>
+<span class="kn">from</span> <span class="nn">airflow.providers.ssh.hooks.ssh</span> <span class="kn">import</span> <span class="n">SSHHook</span>
+
+
+<div class="viewcode-block" id="SFTPOperation"><a class="viewcode-back" href="../../../../../_api/airflow/providers/sftp/operators/sftp/index.html#airflow.providers.sftp.operators.sftp.SFTPOperation">[docs]</a><span class="k">class</span> <span class="nc">SFTPOperation</span><span class="p">:</span>
+    <span class="sd">&quot;&quot;&quot;Operation that can be used with SFTP&quot;&quot;&quot;</span>
+
+<div class="viewcode-block" id="SFTPOperation.PUT"><a class="viewcode-back" href="../../../../../_api/airflow/providers/sftp/operators/sftp/index.html#airflow.providers.sftp.operators.sftp.SFTPOperation.PUT">[docs]</a>    <span class="n">PUT</span> <span class="o">=</span> <span class="s1">&#39;put&#39;</span></div>
+<div class="viewcode-block" id="SFTPOperation.GET"><a class="viewcode-back" href="../../../../../_api/airflow/providers/sftp/operators/sftp/index.html#airflow.providers.sftp.operators.sftp.SFTPOperation.GET">[docs]</a>    <span class="n">GET</span> <span class="o">=</span> <span class="s1">&#39;get&#39;</span></div></div>
+
+
+<div class="viewcode-block" id="SFTPOperator"><a class="viewcode-back" href="../../../../../_api/airflow/providers/sftp/operators/sftp/index.html#airflow.providers.sftp.operators.sftp.SFTPOperator">[docs]</a><span class="k">class</span> <span class="nc">SFTPOperator</span><span class="p">(</span><span class="n">BaseOperator</span><span class="p">):</span>
+    <span class="sd">&quot;&quot;&quot;</span>
+<span class="sd">    SFTPOperator for transferring files from remote host to local or vice a versa.</span>
+<span class="sd">    This operator uses sftp_hook to open sftp transport channel that serve as basis</span>
+<span class="sd">    for file transfer.</span>
+
+<span class="sd">    :param ssh_conn_id: :ref:`ssh connection id&lt;howto/connection:ssh&gt;`</span>
+<span class="sd">        from airflow Connections. `ssh_conn_id` will be ignored if `ssh_hook`</span>
+<span class="sd">        or `sftp_hook` is provided.</span>
+<span class="sd">    :param sftp_hook: predefined SFTPHook to use</span>
+<span class="sd">        Either `sftp_hook` or `ssh_conn_id` needs to be provided.</span>
+<span class="sd">    :param ssh_hook: Deprecated - predefined SSHHook to use for remote execution</span>
+<span class="sd">        Use `sftp_hook` instead.</span>
+<span class="sd">    :param remote_host: remote host to connect (templated)</span>
+<span class="sd">        Nullable. If provided, it will replace the `remote_host` which was</span>
+<span class="sd">        defined in `sftp_hook`/`ssh_hook` or predefined in the connection of `ssh_conn_id`.</span>
+<span class="sd">    :param local_filepath: local file path to get or put. (templated)</span>
+<span class="sd">    :param remote_filepath: remote file path to get or put. (templated)</span>
+<span class="sd">    :param operation: specify operation &#39;get&#39; or &#39;put&#39;, defaults to put</span>
+<span class="sd">    :param confirm: specify if the SFTP operation should be confirmed, defaults to True</span>
+<span class="sd">    :param create_intermediate_dirs: create missing intermediate directories when</span>
+<span class="sd">        copying from remote to local and vice-versa. Default is False.</span>
+
+<span class="sd">        Example: The following task would copy ``file.txt`` to the remote host</span>
+<span class="sd">        at ``/tmp/tmp1/tmp2/`` while creating ``tmp``,``tmp1`` and ``tmp2`` if they</span>
+<span class="sd">        don&#39;t exist. If the parameter is not passed it would error as the directory</span>
+<span class="sd">        does not exist. ::</span>
+
+<span class="sd">            put_file = SFTPOperator(</span>
+<span class="sd">                task_id=&quot;test_sftp&quot;,</span>
+<span class="sd">                ssh_conn_id=&quot;ssh_default&quot;,</span>
+<span class="sd">                local_filepath=&quot;/tmp/file.txt&quot;,</span>
+<span class="sd">                remote_filepath=&quot;/tmp/tmp1/tmp2/file.txt&quot;,</span>
+<span class="sd">                operation=&quot;put&quot;,</span>
+<span class="sd">                create_intermediate_dirs=True,</span>
+<span class="sd">                dag=dag</span>
+<span class="sd">            )</span>
+
+<span class="sd">    &quot;&quot;&quot;</span>
+
+<div class="viewcode-block" id="SFTPOperator.template_fields"><a class="viewcode-back" href="../../../../../_api/airflow/providers/sftp/operators/sftp/index.html#airflow.providers.sftp.operators.sftp.SFTPOperator.template_fields">[docs]</a>    <span class="n">template_fields</span><span class="p">:</span> <span class="n">Sequence</span><span class="p">[</span><span class="nb">str</span><span class="p">]</span> <span class="o">=</span> <span class="p">(</span><span class="s1">&#39;local_f [...]
+
+    <span class="k">def</span> <span class="fm">__init__</span><span class="p">(</span>
+        <span class="bp">self</span><span class="p">,</span>
+        <span class="o">*</span><span class="p">,</span>
+        <span class="n">ssh_hook</span><span class="p">:</span> <span class="n">Optional</span><span class="p">[</span><span class="n">SSHHook</span><span class="p">]</span> <span class="o">=</span> <span class="kc">None</span><span class="p">,</span>
+        <span class="n">sftp_hook</span><span class="p">:</span> <span class="n">Optional</span><span class="p">[</span><span class="n">SFTPHook</span><span class="p">]</span> <span class="o">=</span> <span class="kc">None</span><span class="p">,</span>
+        <span class="n">ssh_conn_id</span><span class="p">:</span> <span class="n">Optional</span><span class="p">[</span><span class="nb">str</span><span class="p">]</span> <span class="o">=</span> <span class="kc">None</span><span class="p">,</span>
+        <span class="n">remote_host</span><span class="p">:</span> <span class="n">Optional</span><span class="p">[</span><span class="nb">str</span><span class="p">]</span> <span class="o">=</span> <span class="kc">None</span><span class="p">,</span>
+        <span class="n">local_filepath</span><span class="p">:</span> <span class="nb">str</span><span class="p">,</span>
+        <span class="n">remote_filepath</span><span class="p">:</span> <span class="nb">str</span><span class="p">,</span>
+        <span class="n">operation</span><span class="p">:</span> <span class="nb">str</span> <span class="o">=</span> <span class="n">SFTPOperation</span><span class="o">.</span><span class="n">PUT</span><span class="p">,</span>
+        <span class="n">confirm</span><span class="p">:</span> <span class="nb">bool</span> <span class="o">=</span> <span class="kc">True</span><span class="p">,</span>
+        <span class="n">create_intermediate_dirs</span><span class="p">:</span> <span class="nb">bool</span> <span class="o">=</span> <span class="kc">False</span><span class="p">,</span>
+        <span class="o">**</span><span class="n">kwargs</span><span class="p">,</span>
+    <span class="p">)</span> <span class="o">-&gt;</span> <span class="kc">None</span><span class="p">:</span>
+        <span class="nb">super</span><span class="p">()</span><span class="o">.</span><span class="fm">__init__</span><span class="p">(</span><span class="o">**</span><span class="n">kwargs</span><span class="p">)</span>
+        <span class="bp">self</span><span class="o">.</span><span class="n">ssh_hook</span> <span class="o">=</span> <span class="n">ssh_hook</span>
+        <span class="bp">self</span><span class="o">.</span><span class="n">sftp_hook</span> <span class="o">=</span> <span class="n">sftp_hook</span>
+        <span class="bp">self</span><span class="o">.</span><span class="n">ssh_conn_id</span> <span class="o">=</span> <span class="n">ssh_conn_id</span>
+        <span class="bp">self</span><span class="o">.</span><span class="n">remote_host</span> <span class="o">=</span> <span class="n">remote_host</span>
+        <span class="bp">self</span><span class="o">.</span><span class="n">local_filepath</span> <span class="o">=</span> <span class="n">local_filepath</span>
+        <span class="bp">self</span><span class="o">.</span><span class="n">remote_filepath</span> <span class="o">=</span> <span class="n">remote_filepath</span>
+        <span class="bp">self</span><span class="o">.</span><span class="n">operation</span> <span class="o">=</span> <span class="n">operation</span>
+        <span class="bp">self</span><span class="o">.</span><span class="n">confirm</span> <span class="o">=</span> <span class="n">confirm</span>
+        <span class="bp">self</span><span class="o">.</span><span class="n">create_intermediate_dirs</span> <span class="o">=</span> <span class="n">create_intermediate_dirs</span>
+
+        <span class="k">if</span> <span class="ow">not</span> <span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">operation</span><span class="o">.</span><span class="n">lower</span><span class="p">()</span> <span class="o">==</span> <span class="n">SFTPOperation</span><span class="o">.</span><span class="n">GET</span> <span class="ow">or</span> <span class="bp">self</span><span class="o">.</span><span class="n">operation</span><span class="o">.</s [...]
+            <span class="k">raise</span> <span class="ne">TypeError</span><span class="p">(</span>
+                <span class="sa">f</span><span class="s2">&quot;Unsupported operation value </span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">operation</span><span class="si">}</span><span class="s2">, &quot;</span>
+                <span class="sa">f</span><span class="s2">&quot;expected </span><span class="si">{</span><span class="n">SFTPOperation</span><span class="o">.</span><span class="n">GET</span><span class="si">}</span><span class="s2"> or </span><span class="si">{</span><span class="n">SFTPOperation</span><span class="o">.</span><span class="n">PUT</span><span class="si">}</span><span class="s2">.&quot;</span>
+            <span class="p">)</span>
+
+        <span class="c1"># TODO: remove support for ssh_hook in next major provider version in hook and operator</span>
+        <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">ssh_hook</span> <span class="ow">is</span> <span class="ow">not</span> <span class="kc">None</span> <span class="ow">and</span> <span class="bp">self</span><span class="o">.</span><span class="n">sftp_hook</span> <span class="ow">is</span> <span class="ow">not</span> <span class="kc">None</span><span class="p">:</span>
+            <span class="k">raise</span> <span class="n">AirflowException</span><span class="p">(</span>
+                <span class="s1">&#39;Both `ssh_hook` and `sftp_hook` are defined. Please use only one of them.&#39;</span>
+            <span class="p">)</span>
+
+        <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">ssh_hook</span> <span class="ow">is</span> <span class="ow">not</span> <span class="kc">None</span><span class="p">:</span>
+            <span class="k">if</span> <span class="ow">not</span> <span class="nb">isinstance</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">ssh_hook</span><span class="p">,</span> <span class="n">SSHHook</span><span class="p">):</span>
+                <span class="bp">self</span><span class="o">.</span><span class="n">log</span><span class="o">.</span><span class="n">info</span><span class="p">(</span><span class="s1">&#39;ssh_hook is invalid. Trying ssh_conn_id to create SFTPHook.&#39;</span><span class="p">)</span>
+                <span class="bp">self</span><span class="o">.</span><span class="n">sftp_hook</span> <span class="o">=</span> <span class="n">SFTPHook</span><span class="p">(</span><span class="n">ssh_conn_id</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">ssh_conn_id</span><span class="p">)</span>
+            <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">sftp_hook</span> <span class="ow">is</span> <span class="kc">None</span><span class="p">:</span>
+                <span class="n">warnings</span><span class="o">.</span><span class="n">warn</span><span class="p">(</span>
+                    <span class="s1">&#39;Parameter `ssh_hook` is deprecated&#39;</span>
+                    <span class="s1">&#39;Please use `sftp_hook` instead.&#39;</span>
+                    <span class="s1">&#39;The old parameter `ssh_hook` will be removed in a future version.&#39;</span><span class="p">,</span>
+                    <span class="ne">DeprecationWarning</span><span class="p">,</span>
+                    <span class="n">stacklevel</span><span class="o">=</span><span class="mi">2</span><span class="p">,</span>
+                <span class="p">)</span>
+                <span class="bp">self</span><span class="o">.</span><span class="n">sftp_hook</span> <span class="o">=</span> <span class="n">SFTPHook</span><span class="p">(</span><span class="n">ssh_hook</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">ssh_hook</span><span class="p">)</span>
+
+<div class="viewcode-block" id="SFTPOperator.execute"><a class="viewcode-back" href="../../../../../_api/airflow/providers/sftp/operators/sftp/index.html#airflow.providers.sftp.operators.sftp.SFTPOperator.execute">[docs]</a>    <span class="k">def</span> <span class="nf">execute</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">context</span><span class="p">:</span> <span class="n">Any</span><span class="p">)</span> <span class="o">-&gt;</ [...]
+        <span class="n">file_msg</span> <span class="o">=</span> <span class="kc">None</span>
+        <span class="k">try</span><span class="p">:</span>
+            <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">ssh_conn_id</span><span class="p">:</span>
+                <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">sftp_hook</span> <span class="ow">and</span> <span class="nb">isinstance</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">sftp_hook</span><span class="p">,</span> <span class="n">SFTPHook</span><span class="p">):</span>
+                    <span class="bp">self</span><span class="o">.</span><span class="n">log</span><span class="o">.</span><span class="n">info</span><span class="p">(</span><span class="s2">&quot;ssh_conn_id is ignored when sftp_hook/ssh_hook is provided.&quot;</span><span class="p">)</span>
+                <span class="k">else</span><span class="p">:</span>
+                    <span class="bp">self</span><span class="o">.</span><span class="n">log</span><span class="o">.</span><span class="n">info</span><span class="p">(</span>
+                        <span class="s1">&#39;sftp_hook/ssh_hook not provided or invalid. Trying ssh_conn_id to create SFTPHook.&#39;</span>
+                    <span class="p">)</span>
+                    <span class="bp">self</span><span class="o">.</span><span class="n">sftp_hook</span> <span class="o">=</span> <span class="n">SFTPHook</span><span class="p">(</span><span class="n">ssh_conn_id</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">ssh_conn_id</span><span class="p">)</span>
+
+            <span class="k">if</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">sftp_hook</span><span class="p">:</span>
+                <span class="k">raise</span> <span class="n">AirflowException</span><span class="p">(</span><span class="s2">&quot;Cannot operate without sftp_hook or ssh_conn_id.&quot;</span><span class="p">)</span>
+
+            <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">remote_host</span> <span class="ow">is</span> <span class="ow">not</span> <span class="kc">None</span><span class="p">:</span>
+                <span class="bp">self</span><span class="o">.</span><span class="n">log</span><span class="o">.</span><span class="n">info</span><span class="p">(</span>
+                    <span class="s2">&quot;remote_host is provided explicitly. &quot;</span>
+                    <span class="s2">&quot;It will replace the remote_host which was defined &quot;</span>
+                    <span class="s2">&quot;in sftp_hook or predefined in connection of ssh_conn_id.&quot;</span>
+                <span class="p">)</span>
+                <span class="bp">self</span><span class="o">.</span><span class="n">sftp_hook</span><span class="o">.</span><span class="n">remote_host</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">remote_host</span>
+
+            <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">operation</span><span class="o">.</span><span class="n">lower</span><span class="p">()</span> <span class="o">==</span> <span class="n">SFTPOperation</span><span class="o">.</span><span class="n">GET</span><span class="p">:</span>
+                <span class="n">local_folder</span> <span class="o">=</span> <span class="n">os</span><span class="o">.</span><span class="n">path</span><span class="o">.</span><span class="n">dirname</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">local_filepath</span><span class="p">)</span>
+                <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">create_intermediate_dirs</span><span class="p">:</span>
+                    <span class="n">Path</span><span class="p">(</span><span class="n">local_folder</span><span class="p">)</span><span class="o">.</span><span class="n">mkdir</span><span class="p">(</span><span class="n">parents</span><span class="o">=</span><span class="kc">True</span><span class="p">,</span> <span class="n">exist_ok</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
+                <span class="n">file_msg</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot;from </span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">remote_filepath</span><span class="si">}</span><span class="s2"> to </span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">local_filepath</span><span class="si">}</span><span class="s2">&quot;</span>
+                <span class="bp">self</span><span class="o">.</span><span class="n">log</span><span class="o">.</span><span class="n">info</span><span class="p">(</span><span class="s2">&quot;Starting to transfer </span><span class="si">%s</span><span class="s2">&quot;</span><span class="p">,</span> <span class="n">file_msg</span><span class="p">)</span>
+                <span class="bp">self</span><span class="o">.</span><span class="n">sftp_hook</span><span class="o">.</span><span class="n">retrieve_file</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">remote_filepath</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">local_filepath</span><span class="p">)</span>
+            <span class="k">else</span><span class="p">:</span>
+                <span class="n">remote_folder</span> <span class="o">=</span> <span class="n">os</span><span class="o">.</span><span class="n">path</span><span class="o">.</span><span class="n">dirname</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">remote_filepath</span><span class="p">)</span>
+                <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">create_intermediate_dirs</span><span class="p">:</span>
+                    <span class="bp">self</span><span class="o">.</span><span class="n">sftp_hook</span><span class="o">.</span><span class="n">create_directory</span><span class="p">(</span><span class="n">remote_folder</span><span class="p">)</span>
+                <span class="n">file_msg</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot;from </span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">local_filepath</span><span class="si">}</span><span class="s2"> to </span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">remote_filepath</span><span class="si">}</span><span class="s2">&quot;</span>
+                <span class="bp">self</span><span class="o">.</span><span class="n">log</span><span class="o">.</span><span class="n">info</span><span class="p">(</span><span class="s2">&quot;Starting to transfer file </span><span class="si">%s</span><span class="s2">&quot;</span><span class="p">,</span> <span class="n">file_msg</span><span class="p">)</span>
+                <span class="bp">self</span><span class="o">.</span><span class="n">sftp_hook</span><span class="o">.</span><span class="n">store_file</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">remote_filepath</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">local_filepath</span><span class="p">,</span> <span class="n">confirm</span><span class="o">=</span><span class="bp">self</span> [...]
+
+        <span class="k">except</span> <span class="ne">Exception</span> <span class="k">as</span> <span class="n">e</span><span class="p">:</span>
+            <span class="k">raise</span> <span class="n">AirflowException</span><span class="p">(</span><span class="sa">f</span><span class="s2">&quot;Error while transferring </span><span class="si">{</span><span class="n">file_msg</span><span class="si">}</span><span class="s2">, error: </span><span class="si">{</span><span class="nb">str</span><span class="p">(</span><span class="n">e</span><span class="p">)</span><span class="si">}</span><span class="s2">&quot;</span><span class="p" [...]
+
+        <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">local_filepath</span></div></div>
+</pre></div>
+
+    <div class="pager" role="navigation" aria-label="related navigation"><button class="btn-hollow btn-blue bodytext__medium--cerulean-blue" disabled>Previous</button><button class="btn-hollow btn-blue bodytext__medium--cerulean-blue" disabled>Next</button>
     </div>
                                     </div>
 
@@ -671,16 +817,7 @@ provided by the community-managed providers:</p>
             
     <nav class="wy-nav-side-toc">
         <div class="wy-menu-vertical">
-            <ul>
-<li><a class="reference internal" href="#">Secret backends</a><ul>
-<li><a class="reference internal" href="#amazon">Amazon</a></li>
-<li><a class="reference internal" href="#google">Google</a></li>
-<li><a class="reference internal" href="#hashicorp">Hashicorp</a></li>
-<li><a class="reference internal" href="#microsoft-azure">Microsoft Azure</a></li>
-</ul>
-</li>
-</ul>
-
+            
         </div>
     </nav>
             
@@ -696,24 +833,6 @@ provided by the community-managed providers:</p>
 
 
 
-    
-        
-            
-        
-        <div class="base-layout--button">
-            <a href="https://github.com/apache/airflow/edit/main/docs/apache-airflow-providers/core-extensions/secrets-backends.rst" rel="nofollow">
-
-                <button class="btn-hollow btn-brown btn-with-icon with-box-shadow button-fixed">
-                    <svg xmlns="http://www.w3.org/2000/svg" width="30.76" height="30">
-                        <path d="M15.379 0a15.381 15.381 0 00-4.86 29.974c.769.141 1.05-.334 1.05-.741 0-.365-.013-1.332-.021-2.616-4.278.929-5.181-2.062-5.181-2.062a4.071 4.071 0 00-1.708-2.25c-1.4-.954.106-.935.106-.935a3.231 3.231 0 012.356 1.585 3.274 3.274 0 004.476 1.278 3.287 3.287 0 01.976-2.056c-3.415-.388-7.005-1.707-7.005-7.6a5.947 5.947 0 011.583-4.127 5.53 5.53 0 01.151-4.07s1.291-.413 4.229 1.577a14.577 14.577 0 017.7 0c2.936-1.99 4.225-1.577 4.225-1.577a5.523 5.523 0 01.15 [...]
-                    </svg>
-
-                    <span class="bodytext__medium--brownish-grey">Suggest a change on this page</span>
-                </button>
-            </a>
-        </div>
-    
-
     </div>
 
 
@@ -835,17 +954,17 @@ provided by the community-managed providers:</p>
         </span>
     </div>
 </footer>
-    <script type="text/javascript" src="../_static/_gen/js/docs.js"></script>
-    <script type="text/javascript" id="documentation_options" data-url_root="../" src="../_static/documentation_options.js"></script>
+    <script type="text/javascript" src="../../../../../_static/_gen/js/docs.js"></script>
+    <script type="text/javascript" id="documentation_options" data-url_root="../../../../../" src="../../../../../_static/documentation_options.js"></script>
     <script src="https://code.jquery.com/jquery-3.4.1.min.js" integrity="sha256-CSXorXvZcTkaix6Yvo6HppcZGetbYMGWSFlBw8HfCJo=" crossorigin="anonymous"></script>
     <script src="https://cdnjs.cloudflare.com/ajax/libs/popper.js/1.14.3/umd/popper.min.js" integrity="sha384-ZMP7rVo3mIykV+2+9J3UJ46jBk0WLaUAdn689aCwoqbBJiSnjAK/l8WvCWPIPm49" crossorigin="anonymous"></script>
     <script src="https://stackpath.bootstrapcdn.com/bootstrap/4.1.3/js/bootstrap.min.js" integrity="sha384-ChfqqxuZUCnJSK3+MXmPNIyE6ZbWh2IMqE241rYiqJxyMiZ6OW/JmZQ5stwEULTy" crossorigin="anonymous"></script>
-        <script data-url_root="../" id="documentation_options" src="../_static/documentation_options.js"></script>
-        <script src="../_static/jquery.js"></script>
-        <script src="../_static/underscore.js"></script>
-        <script src="../_static/_sphinx_javascript_frameworks_compat.js"></script>
-        <script src="../_static/doctools.js"></script>
-        <script src="../_static/clipboard.min.js"></script>
-        <script src="../_static/copybutton.js"></script>
+        <script data-url_root="../../../../../" id="documentation_options" src="../../../../../_static/documentation_options.js"></script>
+        <script src="../../../../../_static/jquery.js"></script>
+        <script src="../../../../../_static/underscore.js"></script>
+        <script src="../../../../../_static/_sphinx_javascript_frameworks_compat.js"></script>
+        <script src="../../../../../_static/doctools.js"></script>
+        <script src="../../../../../_static/clipboard.min.js"></script>
+        <script src="../../../../../_static/copybutton.js"></script>
 </body>
 </html>
\ No newline at end of file
diff --git a/docs-archive/apache-airflow-providers/core-extensions/secrets-backends.html b/docs-archive/apache-airflow-providers-sftp/4.0.0/_modules/airflow/providers/sftp/sensors/sftp.html
similarity index 82%
copy from docs-archive/apache-airflow-providers/core-extensions/secrets-backends.html
copy to docs-archive/apache-airflow-providers-sftp/4.0.0/_modules/airflow/providers/sftp/sensors/sftp.html
index f7628ed6ab..0f558d3900 100644
--- a/docs-archive/apache-airflow-providers/core-extensions/secrets-backends.html
+++ b/docs-archive/apache-airflow-providers-sftp/4.0.0/_modules/airflow/providers/sftp/sensors/sftp.html
@@ -9,17 +9,16 @@
 <head>
         <meta charset="utf-8" />
     <meta name="viewport" content="width=device-width, initial-scale=1">
-        <title>Secret backends &mdash; apache-airflow-providers Documentation</title>
-    <link rel="stylesheet" href="../_static/_gen/css/main.min.css" type="text/css" />
-            <link rel="stylesheet" type="text/css" href="../_static/pygments.css" />
-            <link rel="stylesheet" type="text/css" href="../_static/_gen/css/main.min.css" />
-            <link rel="stylesheet" type="text/css" href="../_static/copybutton.css" />
-            <link rel="stylesheet" type="text/css" href="../_static/_gen/css/main-custom.min.css" />
-            <link rel="shortcut icon" href="../_static/pin_32.png"/>
-            <link rel="index" title="Index" href="../genindex.html" />
-            <link rel="search" title="Search" href="../search.html" />
-            <link rel="next" title="Community Providers" href="../howto/create-update-providers.html" />
-            <link rel="prev" title="Writing logs" href="logging.html" />
+        <title>airflow.providers.sftp.sensors.sftp &mdash; apache-airflow-providers-sftp Documentation</title>
+    <link rel="stylesheet" href="../../../../../_static/_gen/css/main.min.css" type="text/css" />
+            <link rel="stylesheet" type="text/css" href="../../../../../_static/pygments.css" />
+            <link rel="stylesheet" type="text/css" href="../../../../../_static/_gen/css/main.min.css" />
+            <link rel="stylesheet" type="text/css" href="../../../../../_static/copybutton.css" />
+            <link rel="stylesheet" type="text/css" href="../../../../../_static/_gen/css/main-custom.min.css" />
+            <link rel="stylesheet" type="text/css" href="../../../../../_static/graphviz.css" />
+            <link rel="shortcut icon" href="../../../../../_static/pin_32.png"/>
+            <link rel="index" title="Index" href="../../../../../genindex.html" />
+            <link rel="search" title="Search" href="../../../../../search.html" />
     <!-- Matomo -->
     <script>
         var _paq = window._paq = window._paq || [];
@@ -280,8 +279,21 @@
             <div class="content-drawer">
                 <div class="td-sidebar">
 
+<div id="docs-version-selector" class="docs-version-selector sidebar__version-selector">
+    <a class="dropdown-toggle" href="#" id="versionDropdown" role="button" data-toggle="dropdown" aria-haspopup="true"
+       aria-expanded="false">
+        <span class="bodytext__medium--greyish-brown">Version: </span><span class="version">4.0.0</span>
+    </a>
+    <div class="dropdown-menu" aria-labelledby="navbarDropdownMenuLink">
+
+    </div>
+    <script type="application/x-template" id="version-item-template">
+        <a class="dropdown-item"></a>
+    </script>
+</div>
+
 <div class="searchb-box">
-    <form class="search-form" action="../search.html" method="get">
+    <form class="search-form" action="../../../../../search.html" method="get">
         <input class="search-form__input" type="text" name="q" placeholder="Search docs" size="16">
         <input type="hidden" name="check_keywords" value="yes" />
         <input type="hidden" name="area" value="default" />
@@ -311,21 +323,19 @@
 
 
 <div class="toctree" role="navigation" aria-label="main navigation">
-    <ul class="current">
-<li class="toctree-l1"><a class="reference internal" href="../index.html">Providers</a></li>
-<li class="toctree-l1"><a class="reference internal" href="../packages-ref.html">Packages</a></li>
-<li class="toctree-l1"><a class="reference internal" href="../operators-and-hooks-ref/index.html">Operators and hooks</a></li>
-<li class="toctree-l1 current"><a class="reference internal" href="index.html">Core Extensions</a><ul class="current">
-<li class="toctree-l2"><a class="reference internal" href="auth-backends.html">Auth backends</a></li>
-<li class="toctree-l2"><a class="reference internal" href="connections.html">Connections</a></li>
-<li class="toctree-l2"><a class="reference internal" href="extra-links.html">Extra Links</a></li>
-<li class="toctree-l2"><a class="reference internal" href="logging.html">Writing logs</a></li>
-<li class="toctree-l2 current"><a class="current reference internal" href="#">Secret backends</a></li>
+    <p class="caption" role="heading"><span class="caption-text">References</span></p>
+<ul>
+<li class="toctree-l1"><a class="reference internal" href="../../../../../connections/sftp.html">Connection types</a></li>
+<li class="toctree-l1"><a class="reference internal" href="../../../../../_api/airflow/providers/sftp/index.html">Python API</a></li>
 </ul>
-</li>
-<li class="toctree-l1"><a class="reference internal" href="../howto/create-update-providers.html">Update community providers</a></li>
-<li class="toctree-l1"><a class="reference internal" href="../installing-from-sources.html">Installing from sources</a></li>
-<li class="toctree-l1"><a class="reference internal" href="../installing-from-pypi.html">Installing from PyPI</a></li>
+<p class="caption" role="heading"><span class="caption-text">Resources</span></p>
+<ul>
+<li class="toctree-l1"><a class="reference external" href="https://pypi.org/project/apache-airflow-providers-sftp/">PyPI Repository</a></li>
+<li class="toctree-l1"><a class="reference internal" href="../../../../../installing-providers-from-sources.html">Installing from sources</a></li>
+</ul>
+<p class="caption" role="heading"><span class="caption-text">Commits</span></p>
+<ul>
+<li class="toctree-l1"><a class="reference internal" href="../../../../../commits.html">Detailed list of commits</a></li>
 </ul>
 
 </div>
@@ -406,8 +416,21 @@
             
     <div class="td-sidebar desktop-only d-print-none">
 
+<div id="docs-version-selector" class="docs-version-selector sidebar__version-selector">
+    <a class="dropdown-toggle" href="#" id="versionDropdown" role="button" data-toggle="dropdown" aria-haspopup="true"
+       aria-expanded="false">
+        <span class="bodytext__medium--greyish-brown">Version: </span><span class="version">4.0.0</span>
+    </a>
+    <div class="dropdown-menu" aria-labelledby="navbarDropdownMenuLink">
+
+    </div>
+    <script type="application/x-template" id="version-item-template">
+        <a class="dropdown-item"></a>
+    </script>
+</div>
+
 <div class="searchb-box">
-    <form class="search-form" action="../search.html" method="get">
+    <form class="search-form" action="../../../../../search.html" method="get">
         <input class="search-form__input" type="text" name="q" placeholder="Search docs" size="16">
         <input type="hidden" name="check_keywords" value="yes" />
         <input type="hidden" name="area" value="default" />
@@ -437,21 +460,19 @@
 
 
 <div class="toctree" role="navigation" aria-label="main navigation">
-    <ul class="current">
-<li class="toctree-l1"><a class="reference internal" href="../index.html">Providers</a></li>
-<li class="toctree-l1"><a class="reference internal" href="../packages-ref.html">Packages</a></li>
-<li class="toctree-l1"><a class="reference internal" href="../operators-and-hooks-ref/index.html">Operators and hooks</a></li>
-<li class="toctree-l1 current"><a class="reference internal" href="index.html">Core Extensions</a><ul class="current">
-<li class="toctree-l2"><a class="reference internal" href="auth-backends.html">Auth backends</a></li>
-<li class="toctree-l2"><a class="reference internal" href="connections.html">Connections</a></li>
-<li class="toctree-l2"><a class="reference internal" href="extra-links.html">Extra Links</a></li>
-<li class="toctree-l2"><a class="reference internal" href="logging.html">Writing logs</a></li>
-<li class="toctree-l2 current"><a class="current reference internal" href="#">Secret backends</a></li>
+    <p class="caption" role="heading"><span class="caption-text">References</span></p>
+<ul>
+<li class="toctree-l1"><a class="reference internal" href="../../../../../connections/sftp.html">Connection types</a></li>
+<li class="toctree-l1"><a class="reference internal" href="../../../../../_api/airflow/providers/sftp/index.html">Python API</a></li>
+</ul>
+<p class="caption" role="heading"><span class="caption-text">Resources</span></p>
+<ul>
+<li class="toctree-l1"><a class="reference external" href="https://pypi.org/project/apache-airflow-providers-sftp/">PyPI Repository</a></li>
+<li class="toctree-l1"><a class="reference internal" href="../../../../../installing-providers-from-sources.html">Installing from sources</a></li>
 </ul>
-</li>
-<li class="toctree-l1"><a class="reference internal" href="../howto/create-update-providers.html">Update community providers</a></li>
-<li class="toctree-l1"><a class="reference internal" href="../installing-from-sources.html">Installing from sources</a></li>
-<li class="toctree-l1"><a class="reference internal" href="../installing-from-pypi.html">Installing from PyPI</a></li>
+<p class="caption" role="heading"><span class="caption-text">Commits</span></p>
+<ul>
+<li class="toctree-l1"><a class="reference internal" href="../../../../../commits.html">Detailed list of commits</a></li>
 </ul>
 
 </div>
@@ -540,11 +561,11 @@
 
     <ul class="breadcrumb">
         
-            <li class="breadcrumb-item"><a href="../index.html" class="icon icon-home"> Home</a></li>
+            <li class="breadcrumb-item"><a href="../../../../../index.html" class="icon icon-home"> Home</a></li>
             
-                <li class="breadcrumb-item"><a href="index.html">Core Extensions</a></li>
+                <li class="breadcrumb-item"><a href="../../../../index.html">Module code</a></li>
             
-            <li class="breadcrumb-item"><a href="secrets-backends.html"> Secret backends</a></li>
+            <li class="breadcrumb-item"><a href="sftp.html"> airflow.providers.sftp.sensors.sftp</a></li>
         
     </ul>
 </div>
@@ -555,56 +576,99 @@
                                 <div class="bodywrapper">
                                     <div class="body" role="main">
                                         
-  <blockquote>
-<div></div></blockquote>
-<div class="section" id="secret-backends">
-<h1>Secret backends<a class="headerlink" href="#secret-backends" title="Permalink to this heading">¶</a></h1>
-<p>This is a summary of all Apache Airflow Community provided implementations of secret backends
-exposed via community-managed providers.</p>
-<p>Airflow has the capability of reading connections, variables and configuration from Secret Backends rather
-than from its own Database. While storing such information in Airflow’s database is possible, many of the
-enterprise customers already have some secret managers storing secrets, and Airflow can tap into those
-via providers that implement secrets backends for services Airflow integrates with.</p>
-<p>You can also take a
-look at Secret backends available in the core Airflow in
-<a class="reference external" href="/docs/apache-airflow/stable/security/secrets/secrets-backend/index.html" title="(in apache-airflow v2.4.0.dev0)"><span>Secrets Backend</span></a> and here you can see the ones
-provided by the community-managed providers:</p>
-<div class="section" id="amazon">
-<h2>Amazon<a class="headerlink" href="#amazon" title="Permalink to this heading">¶</a></h2>
-<ul class="simple">
-<li><p><a class="reference external" href="/docs/apache-airflow-providers-amazon/stable/_api/airflow/providers/amazon/aws/secrets/secrets_manager/index.html#airflow.providers.amazon.aws.secrets.secrets_manager.SecretsManagerBackend" title="(in apache-airflow-providers-amazon v4.1.0)"><code class="xref py py-class docutils literal notranslate"><span class="pre">SecretsManagerBackend</span></code></a></p></li>
-<li><p><a class="reference external" href="/docs/apache-airflow-providers-amazon/stable/_api/airflow/providers/amazon/aws/secrets/systems_manager/index.html#airflow.providers.amazon.aws.secrets.systems_manager.SystemsManagerParameterStoreBackend" title="(in apache-airflow-providers-amazon v4.1.0)"><code class="xref py py-class docutils literal notranslate"><span class="pre">SystemsManagerParameterStoreBackend</span></code></a></p></li>
-</ul>
-</div>
-<div class="section" id="google">
-<h2>Google<a class="headerlink" href="#google" title="Permalink to this heading">¶</a></h2>
-<ul class="simple">
-<li><p><a class="reference external" href="/docs/apache-airflow-providers-google/stable/_api/airflow/providers/google/cloud/secrets/secret_manager/index.html#airflow.providers.google.cloud.secrets.secret_manager.CloudSecretManagerBackend" title="(in apache-airflow-providers-google v8.1.0)"><code class="xref py py-class docutils literal notranslate"><span class="pre">CloudSecretManagerBackend</span></code></a></p></li>
-</ul>
-</div>
-<div class="section" id="hashicorp">
-<h2>Hashicorp<a class="headerlink" href="#hashicorp" title="Permalink to this heading">¶</a></h2>
-<ul class="simple">
-<li><p><a class="reference external" href="/docs/apache-airflow-providers-hashicorp/stable/_api/airflow/providers/hashicorp/secrets/vault/index.html#airflow.providers.hashicorp.secrets.vault.VaultBackend" title="(in apache-airflow-providers-hashicorp v3.0.1)"><code class="xref py py-class docutils literal notranslate"><span class="pre">VaultBackend</span></code></a></p></li>
-</ul>
-</div>
-<div class="section" id="microsoft-azure">
-<h2>Microsoft Azure<a class="headerlink" href="#microsoft-azure" title="Permalink to this heading">¶</a></h2>
-<ul class="simple">
-<li><p><a class="reference external" href="/docs/apache-airflow-providers-microsoft-azure/stable/_api/airflow/providers/microsoft/azure/secrets/key_vault/index.html#airflow.providers.microsoft.azure.secrets.key_vault.AzureKeyVaultBackend" title="(in apache-airflow-providers-microsoft-azure v4.1.0)"><code class="xref py py-class docutils literal notranslate"><span class="pre">AzureKeyVaultBackend</span></code></a></p></li>
-<li><p><code class="xref py py-class docutils literal notranslate"><span class="pre">AzureKeyVaultBackend</span></code></p></li>
-</ul>
-</div>
-</div>
-
-
-    <div class="pager" role="navigation" aria-label="related navigation">
-            <a rel="prev" title="Writing logs" href="logging.html" >
-                <button class="btn-hollow btn-blue bodytext__medium--cerulean-blue" accesskey="p">Previous</button>
-            </a>
-            <a rel="next" title="Community Providers" href="../howto/create-update-providers.html" >
-                <button class="btn-hollow btn-blue bodytext__medium--cerulean-blue" accesskey="n">Next</button>
-            </a>
+  <h1>Source code for airflow.providers.sftp.sensors.sftp</h1><div class="highlight"><pre>
+<span></span><span class="c1">#</span>
+<span class="c1"># Licensed to the Apache Software Foundation (ASF) under one</span>
+<span class="c1"># or more contributor license agreements.  See the NOTICE file</span>
+<span class="c1"># distributed with this work for additional information</span>
+<span class="c1"># regarding copyright ownership.  The ASF licenses this file</span>
+<span class="c1"># to you under the Apache License, Version 2.0 (the</span>
+<span class="c1"># &quot;License&quot;); you may not use this file except in compliance</span>
+<span class="c1"># with the License.  You may obtain a copy of the License at</span>
+<span class="c1">#</span>
+<span class="c1">#   http://www.apache.org/licenses/LICENSE-2.0</span>
+<span class="c1">#</span>
+<span class="c1"># Unless required by applicable law or agreed to in writing,</span>
+<span class="c1"># software distributed under the License is distributed on an</span>
+<span class="c1"># &quot;AS IS&quot; BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY</span>
+<span class="c1"># KIND, either express or implied.  See the License for the</span>
+<span class="c1"># specific language governing permissions and limitations</span>
+<span class="c1"># under the License.</span>
+<span class="sd">&quot;&quot;&quot;This module contains SFTP sensor.&quot;&quot;&quot;</span>
+<span class="kn">from</span> <span class="nn">datetime</span> <span class="kn">import</span> <span class="n">datetime</span>
+<span class="kn">from</span> <span class="nn">typing</span> <span class="kn">import</span> <span class="n">TYPE_CHECKING</span><span class="p">,</span> <span class="n">Optional</span><span class="p">,</span> <span class="n">Sequence</span>
+
+<span class="kn">from</span> <span class="nn">paramiko.sftp</span> <span class="kn">import</span> <span class="n">SFTP_NO_SUCH_FILE</span>
+
+<span class="kn">from</span> <span class="nn">airflow.providers.sftp.hooks.sftp</span> <span class="kn">import</span> <span class="n">SFTPHook</span>
+<span class="kn">from</span> <span class="nn">airflow.sensors.base</span> <span class="kn">import</span> <span class="n">BaseSensorOperator</span>
+<span class="kn">from</span> <span class="nn">airflow.utils.timezone</span> <span class="kn">import</span> <span class="n">convert_to_utc</span>
+
+<span class="k">if</span> <span class="n">TYPE_CHECKING</span><span class="p">:</span>
+    <span class="kn">from</span> <span class="nn">airflow.utils.context</span> <span class="kn">import</span> <span class="n">Context</span>
+
+
+<div class="viewcode-block" id="SFTPSensor"><a class="viewcode-back" href="../../../../../_api/airflow/providers/sftp/sensors/sftp/index.html#airflow.providers.sftp.sensors.sftp.SFTPSensor">[docs]</a><span class="k">class</span> <span class="nc">SFTPSensor</span><span class="p">(</span><span class="n">BaseSensorOperator</span><span class="p">):</span>
+    <span class="sd">&quot;&quot;&quot;</span>
+<span class="sd">    Waits for a file or directory to be present on SFTP.</span>
+
+<span class="sd">    :param path: Remote file or directory path</span>
+<span class="sd">    :param file_pattern: The pattern that will be used to match the file (fnmatch format)</span>
+<span class="sd">    :param sftp_conn_id: The connection to run the sensor against</span>
+<span class="sd">    :param newer_than: DateTime for which the file or file path should be newer than, comparison is inclusive</span>
+<span class="sd">    &quot;&quot;&quot;</span>
+
+<div class="viewcode-block" id="SFTPSensor.template_fields"><a class="viewcode-back" href="../../../../../_api/airflow/providers/sftp/sensors/sftp/index.html#airflow.providers.sftp.sensors.sftp.SFTPSensor.template_fields">[docs]</a>    <span class="n">template_fields</span><span class="p">:</span> <span class="n">Sequence</span><span class="p">[</span><span class="nb">str</span><span class="p">]</span> <span class="o">=</span> <span class="p">(</span>
+        <span class="s1">&#39;path&#39;</span><span class="p">,</span>
+        <span class="s1">&#39;newer_than&#39;</span><span class="p">,</span></div>
+    <span class="p">)</span>
+
+    <span class="k">def</span> <span class="fm">__init__</span><span class="p">(</span>
+        <span class="bp">self</span><span class="p">,</span>
+        <span class="o">*</span><span class="p">,</span>
+        <span class="n">path</span><span class="p">:</span> <span class="nb">str</span><span class="p">,</span>
+        <span class="n">file_pattern</span><span class="p">:</span> <span class="nb">str</span> <span class="o">=</span> <span class="s2">&quot;&quot;</span><span class="p">,</span>
+        <span class="n">newer_than</span><span class="p">:</span> <span class="n">Optional</span><span class="p">[</span><span class="n">datetime</span><span class="p">]</span> <span class="o">=</span> <span class="kc">None</span><span class="p">,</span>
+        <span class="n">sftp_conn_id</span><span class="p">:</span> <span class="nb">str</span> <span class="o">=</span> <span class="s1">&#39;sftp_default&#39;</span><span class="p">,</span>
+        <span class="o">**</span><span class="n">kwargs</span><span class="p">,</span>
+    <span class="p">)</span> <span class="o">-&gt;</span> <span class="kc">None</span><span class="p">:</span>
+        <span class="nb">super</span><span class="p">()</span><span class="o">.</span><span class="fm">__init__</span><span class="p">(</span><span class="o">**</span><span class="n">kwargs</span><span class="p">)</span>
+        <span class="bp">self</span><span class="o">.</span><span class="n">path</span> <span class="o">=</span> <span class="n">path</span>
+        <span class="bp">self</span><span class="o">.</span><span class="n">file_pattern</span> <span class="o">=</span> <span class="n">file_pattern</span>
+        <span class="bp">self</span><span class="o">.</span><span class="n">hook</span><span class="p">:</span> <span class="n">Optional</span><span class="p">[</span><span class="n">SFTPHook</span><span class="p">]</span> <span class="o">=</span> <span class="kc">None</span>
+        <span class="bp">self</span><span class="o">.</span><span class="n">sftp_conn_id</span> <span class="o">=</span> <span class="n">sftp_conn_id</span>
+        <span class="bp">self</span><span class="o">.</span><span class="n">newer_than</span><span class="p">:</span> <span class="n">Optional</span><span class="p">[</span><span class="n">datetime</span><span class="p">]</span> <span class="o">=</span> <span class="n">newer_than</span>
+
+<div class="viewcode-block" id="SFTPSensor.poke"><a class="viewcode-back" href="../../../../../_api/airflow/providers/sftp/sensors/sftp/index.html#airflow.providers.sftp.sensors.sftp.SFTPSensor.poke">[docs]</a>    <span class="k">def</span> <span class="nf">poke</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">context</span><span class="p">:</span> <span class="s1">&#39;Context&#39;</span><span class="p">)</span> <span class="o">-&gt;</sp [...]
+        <span class="bp">self</span><span class="o">.</span><span class="n">hook</span> <span class="o">=</span> <span class="n">SFTPHook</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">sftp_conn_id</span><span class="p">)</span>
+        <span class="bp">self</span><span class="o">.</span><span class="n">log</span><span class="o">.</span><span class="n">info</span><span class="p">(</span><span class="s2">&quot;Poking for </span><span class="si">%s</span><span class="s2">, with pattern </span><span class="si">%s</span><span class="s2">&quot;</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">path</span><span class="p">,</span> <span class="bp">self</span><span class= [...]
+
+        <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">file_pattern</span><span class="p">:</span>
+            <span class="n">file_from_pattern</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">hook</span><span class="o">.</span><span class="n">get_file_by_pattern</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">path</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">file_pattern</span><span class="p">)</span>
+            <span class="k">if</span> <span class="n">file_from_pattern</span><span class="p">:</span>
+                <span class="n">actual_file_to_check</span> <span class="o">=</span> <span class="n">file_from_pattern</span>
+            <span class="k">else</span><span class="p">:</span>
+                <span class="k">return</span> <span class="kc">False</span>
+        <span class="k">else</span><span class="p">:</span>
+            <span class="n">actual_file_to_check</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">path</span>
+
+        <span class="k">try</span><span class="p">:</span>
+            <span class="n">mod_time</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">hook</span><span class="o">.</span><span class="n">get_mod_time</span><span class="p">(</span><span class="n">actual_file_to_check</span><span class="p">)</span>
+            <span class="bp">self</span><span class="o">.</span><span class="n">log</span><span class="o">.</span><span class="n">info</span><span class="p">(</span><span class="s1">&#39;Found File </span><span class="si">%s</span><span class="s1"> last modified: </span><span class="si">%s</span><span class="s1">&#39;</span><span class="p">,</span> <span class="nb">str</span><span class="p">(</span><span class="n">actual_file_to_check</span><span class="p">),</span> <span class="nb">str< [...]
+        <span class="k">except</span> <span class="ne">OSError</span> <span class="k">as</span> <span class="n">e</span><span class="p">:</span>
+            <span class="k">if</span> <span class="n">e</span><span class="o">.</span><span class="n">errno</span> <span class="o">!=</span> <span class="n">SFTP_NO_SUCH_FILE</span><span class="p">:</span>
+                <span class="k">raise</span> <span class="n">e</span>
+            <span class="k">return</span> <span class="kc">False</span>
+        <span class="bp">self</span><span class="o">.</span><span class="n">hook</span><span class="o">.</span><span class="n">close_conn</span><span class="p">()</span>
+        <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">newer_than</span><span class="p">:</span>
+            <span class="n">_mod_time</span> <span class="o">=</span> <span class="n">convert_to_utc</span><span class="p">(</span><span class="n">datetime</span><span class="o">.</span><span class="n">strptime</span><span class="p">(</span><span class="n">mod_time</span><span class="p">,</span> <span class="s1">&#39;%Y%m</span><span class="si">%d</span><span class="s1">%H%M%S&#39;</span><span class="p">))</span>
+            <span class="n">_newer_than</span> <span class="o">=</span> <span class="n">convert_to_utc</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">newer_than</span><span class="p">)</span>
+            <span class="k">return</span> <span class="n">_newer_than</span> <span class="o">&lt;=</span> <span class="n">_mod_time</span>
+        <span class="k">else</span><span class="p">:</span>
+            <span class="k">return</span> <span class="kc">True</span></div></div>
+</pre></div>
+
+    <div class="pager" role="navigation" aria-label="related navigation"><button class="btn-hollow btn-blue bodytext__medium--cerulean-blue" disabled>Previous</button><button class="btn-hollow btn-blue bodytext__medium--cerulean-blue" disabled>Next</button>
     </div>
                                     </div>
 
@@ -671,16 +735,7 @@ provided by the community-managed providers:</p>
             
     <nav class="wy-nav-side-toc">
         <div class="wy-menu-vertical">
-            <ul>
-<li><a class="reference internal" href="#">Secret backends</a><ul>
-<li><a class="reference internal" href="#amazon">Amazon</a></li>
-<li><a class="reference internal" href="#google">Google</a></li>
-<li><a class="reference internal" href="#hashicorp">Hashicorp</a></li>
-<li><a class="reference internal" href="#microsoft-azure">Microsoft Azure</a></li>
-</ul>
-</li>
-</ul>
-
+            
         </div>
     </nav>
             
@@ -696,24 +751,6 @@ provided by the community-managed providers:</p>
 
 
 
-    
-        
-            
-        
-        <div class="base-layout--button">
-            <a href="https://github.com/apache/airflow/edit/main/docs/apache-airflow-providers/core-extensions/secrets-backends.rst" rel="nofollow">
-
-                <button class="btn-hollow btn-brown btn-with-icon with-box-shadow button-fixed">
-                    <svg xmlns="http://www.w3.org/2000/svg" width="30.76" height="30">
-                        <path d="M15.379 0a15.381 15.381 0 00-4.86 29.974c.769.141 1.05-.334 1.05-.741 0-.365-.013-1.332-.021-2.616-4.278.929-5.181-2.062-5.181-2.062a4.071 4.071 0 00-1.708-2.25c-1.4-.954.106-.935.106-.935a3.231 3.231 0 012.356 1.585 3.274 3.274 0 004.476 1.278 3.287 3.287 0 01.976-2.056c-3.415-.388-7.005-1.707-7.005-7.6a5.947 5.947 0 011.583-4.127 5.53 5.53 0 01.151-4.07s1.291-.413 4.229 1.577a14.577 14.577 0 017.7 0c2.936-1.99 4.225-1.577 4.225-1.577a5.523 5.523 0 01.15 [...]
-                    </svg>
-
-                    <span class="bodytext__medium--brownish-grey">Suggest a change on this page</span>
-                </button>
-            </a>
-        </div>
-    
-
     </div>
 
 
@@ -835,17 +872,17 @@ provided by the community-managed providers:</p>
         </span>
     </div>
 </footer>
-    <script type="text/javascript" src="../_static/_gen/js/docs.js"></script>
-    <script type="text/javascript" id="documentation_options" data-url_root="../" src="../_static/documentation_options.js"></script>
+    <script type="text/javascript" src="../../../../../_static/_gen/js/docs.js"></script>
+    <script type="text/javascript" id="documentation_options" data-url_root="../../../../../" src="../../../../../_static/documentation_options.js"></script>
     <script src="https://code.jquery.com/jquery-3.4.1.min.js" integrity="sha256-CSXorXvZcTkaix6Yvo6HppcZGetbYMGWSFlBw8HfCJo=" crossorigin="anonymous"></script>
     <script src="https://cdnjs.cloudflare.com/ajax/libs/popper.js/1.14.3/umd/popper.min.js" integrity="sha384-ZMP7rVo3mIykV+2+9J3UJ46jBk0WLaUAdn689aCwoqbBJiSnjAK/l8WvCWPIPm49" crossorigin="anonymous"></script>
     <script src="https://stackpath.bootstrapcdn.com/bootstrap/4.1.3/js/bootstrap.min.js" integrity="sha384-ChfqqxuZUCnJSK3+MXmPNIyE6ZbWh2IMqE241rYiqJxyMiZ6OW/JmZQ5stwEULTy" crossorigin="anonymous"></script>
-        <script data-url_root="../" id="documentation_options" src="../_static/documentation_options.js"></script>
-        <script src="../_static/jquery.js"></script>
-        <script src="../_static/underscore.js"></script>
-        <script src="../_static/_sphinx_javascript_frameworks_compat.js"></script>
-        <script src="../_static/doctools.js"></script>
-        <script src="../_static/clipboard.min.js"></script>
-        <script src="../_static/copybutton.js"></script>
+        <script data-url_root="../../../../../" id="documentation_options" src="../../../../../_static/documentation_options.js"></script>
+        <script src="../../../../../_static/jquery.js"></script>
+        <script src="../../../../../_static/underscore.js"></script>
+        <script src="../../../../../_static/_sphinx_javascript_frameworks_compat.js"></script>
+        <script src="../../../../../_static/doctools.js"></script>
+        <script src="../../../../../_static/clipboard.min.js"></script>
+        <script src="../../../../../_static/copybutton.js"></script>
 </body>
 </html>
\ No newline at end of file
diff --git a/docs-archive/apache-airflow-providers/core-extensions/secrets-backends.html b/docs-archive/apache-airflow-providers-sftp/4.0.0/_modules/index.html
similarity index 89%
copy from docs-archive/apache-airflow-providers/core-extensions/secrets-backends.html
copy to docs-archive/apache-airflow-providers-sftp/4.0.0/_modules/index.html
index f7628ed6ab..1b2ee4860f 100644
--- a/docs-archive/apache-airflow-providers/core-extensions/secrets-backends.html
+++ b/docs-archive/apache-airflow-providers-sftp/4.0.0/_modules/index.html
@@ -9,17 +9,16 @@
 <head>
         <meta charset="utf-8" />
     <meta name="viewport" content="width=device-width, initial-scale=1">
-        <title>Secret backends &mdash; apache-airflow-providers Documentation</title>
+        <title>Overview: module code &mdash; apache-airflow-providers-sftp Documentation</title>
     <link rel="stylesheet" href="../_static/_gen/css/main.min.css" type="text/css" />
             <link rel="stylesheet" type="text/css" href="../_static/pygments.css" />
             <link rel="stylesheet" type="text/css" href="../_static/_gen/css/main.min.css" />
             <link rel="stylesheet" type="text/css" href="../_static/copybutton.css" />
             <link rel="stylesheet" type="text/css" href="../_static/_gen/css/main-custom.min.css" />
+            <link rel="stylesheet" type="text/css" href="../_static/graphviz.css" />
             <link rel="shortcut icon" href="../_static/pin_32.png"/>
             <link rel="index" title="Index" href="../genindex.html" />
             <link rel="search" title="Search" href="../search.html" />
-            <link rel="next" title="Community Providers" href="../howto/create-update-providers.html" />
-            <link rel="prev" title="Writing logs" href="logging.html" />
     <!-- Matomo -->
     <script>
         var _paq = window._paq = window._paq || [];
@@ -280,6 +279,19 @@
             <div class="content-drawer">
                 <div class="td-sidebar">
 
+<div id="docs-version-selector" class="docs-version-selector sidebar__version-selector">
+    <a class="dropdown-toggle" href="#" id="versionDropdown" role="button" data-toggle="dropdown" aria-haspopup="true"
+       aria-expanded="false">
+        <span class="bodytext__medium--greyish-brown">Version: </span><span class="version">4.0.0</span>
+    </a>
+    <div class="dropdown-menu" aria-labelledby="navbarDropdownMenuLink">
+
+    </div>
+    <script type="application/x-template" id="version-item-template">
+        <a class="dropdown-item"></a>
+    </script>
+</div>
+
 <div class="searchb-box">
     <form class="search-form" action="../search.html" method="get">
         <input class="search-form__input" type="text" name="q" placeholder="Search docs" size="16">
@@ -311,21 +323,19 @@
 
 
 <div class="toctree" role="navigation" aria-label="main navigation">
-    <ul class="current">
-<li class="toctree-l1"><a class="reference internal" href="../index.html">Providers</a></li>
-<li class="toctree-l1"><a class="reference internal" href="../packages-ref.html">Packages</a></li>
-<li class="toctree-l1"><a class="reference internal" href="../operators-and-hooks-ref/index.html">Operators and hooks</a></li>
-<li class="toctree-l1 current"><a class="reference internal" href="index.html">Core Extensions</a><ul class="current">
-<li class="toctree-l2"><a class="reference internal" href="auth-backends.html">Auth backends</a></li>
-<li class="toctree-l2"><a class="reference internal" href="connections.html">Connections</a></li>
-<li class="toctree-l2"><a class="reference internal" href="extra-links.html">Extra Links</a></li>
-<li class="toctree-l2"><a class="reference internal" href="logging.html">Writing logs</a></li>
-<li class="toctree-l2 current"><a class="current reference internal" href="#">Secret backends</a></li>
+    <p class="caption" role="heading"><span class="caption-text">References</span></p>
+<ul>
+<li class="toctree-l1"><a class="reference internal" href="../connections/sftp.html">Connection types</a></li>
+<li class="toctree-l1"><a class="reference internal" href="../_api/airflow/providers/sftp/index.html">Python API</a></li>
 </ul>
-</li>
-<li class="toctree-l1"><a class="reference internal" href="../howto/create-update-providers.html">Update community providers</a></li>
-<li class="toctree-l1"><a class="reference internal" href="../installing-from-sources.html">Installing from sources</a></li>
-<li class="toctree-l1"><a class="reference internal" href="../installing-from-pypi.html">Installing from PyPI</a></li>
+<p class="caption" role="heading"><span class="caption-text">Resources</span></p>
+<ul>
+<li class="toctree-l1"><a class="reference external" href="https://pypi.org/project/apache-airflow-providers-sftp/">PyPI Repository</a></li>
+<li class="toctree-l1"><a class="reference internal" href="../installing-providers-from-sources.html">Installing from sources</a></li>
+</ul>
+<p class="caption" role="heading"><span class="caption-text">Commits</span></p>
+<ul>
+<li class="toctree-l1"><a class="reference internal" href="../commits.html">Detailed list of commits</a></li>
 </ul>
 
 </div>
@@ -406,6 +416,19 @@
             
     <div class="td-sidebar desktop-only d-print-none">
 
+<div id="docs-version-selector" class="docs-version-selector sidebar__version-selector">
+    <a class="dropdown-toggle" href="#" id="versionDropdown" role="button" data-toggle="dropdown" aria-haspopup="true"
+       aria-expanded="false">
+        <span class="bodytext__medium--greyish-brown">Version: </span><span class="version">4.0.0</span>
+    </a>
+    <div class="dropdown-menu" aria-labelledby="navbarDropdownMenuLink">
+
+    </div>
+    <script type="application/x-template" id="version-item-template">
+        <a class="dropdown-item"></a>
+    </script>
+</div>
+
 <div class="searchb-box">
     <form class="search-form" action="../search.html" method="get">
         <input class="search-form__input" type="text" name="q" placeholder="Search docs" size="16">
@@ -437,21 +460,19 @@
 
 
 <div class="toctree" role="navigation" aria-label="main navigation">
-    <ul class="current">
-<li class="toctree-l1"><a class="reference internal" href="../index.html">Providers</a></li>
-<li class="toctree-l1"><a class="reference internal" href="../packages-ref.html">Packages</a></li>
-<li class="toctree-l1"><a class="reference internal" href="../operators-and-hooks-ref/index.html">Operators and hooks</a></li>
-<li class="toctree-l1 current"><a class="reference internal" href="index.html">Core Extensions</a><ul class="current">
-<li class="toctree-l2"><a class="reference internal" href="auth-backends.html">Auth backends</a></li>
-<li class="toctree-l2"><a class="reference internal" href="connections.html">Connections</a></li>
-<li class="toctree-l2"><a class="reference internal" href="extra-links.html">Extra Links</a></li>
-<li class="toctree-l2"><a class="reference internal" href="logging.html">Writing logs</a></li>
-<li class="toctree-l2 current"><a class="current reference internal" href="#">Secret backends</a></li>
+    <p class="caption" role="heading"><span class="caption-text">References</span></p>
+<ul>
+<li class="toctree-l1"><a class="reference internal" href="../connections/sftp.html">Connection types</a></li>
+<li class="toctree-l1"><a class="reference internal" href="../_api/airflow/providers/sftp/index.html">Python API</a></li>
+</ul>
+<p class="caption" role="heading"><span class="caption-text">Resources</span></p>
+<ul>
+<li class="toctree-l1"><a class="reference external" href="https://pypi.org/project/apache-airflow-providers-sftp/">PyPI Repository</a></li>
+<li class="toctree-l1"><a class="reference internal" href="../installing-providers-from-sources.html">Installing from sources</a></li>
 </ul>
-</li>
-<li class="toctree-l1"><a class="reference internal" href="../howto/create-update-providers.html">Update community providers</a></li>
-<li class="toctree-l1"><a class="reference internal" href="../installing-from-sources.html">Installing from sources</a></li>
-<li class="toctree-l1"><a class="reference internal" href="../installing-from-pypi.html">Installing from PyPI</a></li>
+<p class="caption" role="heading"><span class="caption-text">Commits</span></p>
+<ul>
+<li class="toctree-l1"><a class="reference internal" href="../commits.html">Detailed list of commits</a></li>
 </ul>
 
 </div>
@@ -542,9 +563,7 @@
         
             <li class="breadcrumb-item"><a href="../index.html" class="icon icon-home"> Home</a></li>
             
-                <li class="breadcrumb-item"><a href="index.html">Core Extensions</a></li>
-            
-            <li class="breadcrumb-item"><a href="secrets-backends.html"> Secret backends</a></li>
+            <li class="breadcrumb-item"><a href="index.html"> Overview: module code</a></li>
         
     </ul>
 </div>
@@ -555,56 +574,13 @@
                                 <div class="bodywrapper">
                                     <div class="body" role="main">
                                         
-  <blockquote>
-<div></div></blockquote>
-<div class="section" id="secret-backends">
-<h1>Secret backends<a class="headerlink" href="#secret-backends" title="Permalink to this heading">¶</a></h1>
-<p>This is a summary of all Apache Airflow Community provided implementations of secret backends
-exposed via community-managed providers.</p>
-<p>Airflow has the capability of reading connections, variables and configuration from Secret Backends rather
-than from its own Database. While storing such information in Airflow’s database is possible, many of the
-enterprise customers already have some secret managers storing secrets, and Airflow can tap into those
-via providers that implement secrets backends for services Airflow integrates with.</p>
-<p>You can also take a
-look at Secret backends available in the core Airflow in
-<a class="reference external" href="/docs/apache-airflow/stable/security/secrets/secrets-backend/index.html" title="(in apache-airflow v2.4.0.dev0)"><span>Secrets Backend</span></a> and here you can see the ones
-provided by the community-managed providers:</p>
-<div class="section" id="amazon">
-<h2>Amazon<a class="headerlink" href="#amazon" title="Permalink to this heading">¶</a></h2>
-<ul class="simple">
-<li><p><a class="reference external" href="/docs/apache-airflow-providers-amazon/stable/_api/airflow/providers/amazon/aws/secrets/secrets_manager/index.html#airflow.providers.amazon.aws.secrets.secrets_manager.SecretsManagerBackend" title="(in apache-airflow-providers-amazon v4.1.0)"><code class="xref py py-class docutils literal notranslate"><span class="pre">SecretsManagerBackend</span></code></a></p></li>
-<li><p><a class="reference external" href="/docs/apache-airflow-providers-amazon/stable/_api/airflow/providers/amazon/aws/secrets/systems_manager/index.html#airflow.providers.amazon.aws.secrets.systems_manager.SystemsManagerParameterStoreBackend" title="(in apache-airflow-providers-amazon v4.1.0)"><code class="xref py py-class docutils literal notranslate"><span class="pre">SystemsManagerParameterStoreBackend</span></code></a></p></li>
-</ul>
-</div>
-<div class="section" id="google">
-<h2>Google<a class="headerlink" href="#google" title="Permalink to this heading">¶</a></h2>
-<ul class="simple">
-<li><p><a class="reference external" href="/docs/apache-airflow-providers-google/stable/_api/airflow/providers/google/cloud/secrets/secret_manager/index.html#airflow.providers.google.cloud.secrets.secret_manager.CloudSecretManagerBackend" title="(in apache-airflow-providers-google v8.1.0)"><code class="xref py py-class docutils literal notranslate"><span class="pre">CloudSecretManagerBackend</span></code></a></p></li>
+  <h1>All modules for which code is available</h1>
+<ul><li><a href="airflow/providers/sftp/hooks/sftp.html">airflow.providers.sftp.hooks.sftp</a></li>
+<li><a href="airflow/providers/sftp/operators/sftp.html">airflow.providers.sftp.operators.sftp</a></li>
+<li><a href="airflow/providers/sftp/sensors/sftp.html">airflow.providers.sftp.sensors.sftp</a></li>
 </ul>
-</div>
-<div class="section" id="hashicorp">
-<h2>Hashicorp<a class="headerlink" href="#hashicorp" title="Permalink to this heading">¶</a></h2>
-<ul class="simple">
-<li><p><a class="reference external" href="/docs/apache-airflow-providers-hashicorp/stable/_api/airflow/providers/hashicorp/secrets/vault/index.html#airflow.providers.hashicorp.secrets.vault.VaultBackend" title="(in apache-airflow-providers-hashicorp v3.0.1)"><code class="xref py py-class docutils literal notranslate"><span class="pre">VaultBackend</span></code></a></p></li>
-</ul>
-</div>
-<div class="section" id="microsoft-azure">
-<h2>Microsoft Azure<a class="headerlink" href="#microsoft-azure" title="Permalink to this heading">¶</a></h2>
-<ul class="simple">
-<li><p><a class="reference external" href="/docs/apache-airflow-providers-microsoft-azure/stable/_api/airflow/providers/microsoft/azure/secrets/key_vault/index.html#airflow.providers.microsoft.azure.secrets.key_vault.AzureKeyVaultBackend" title="(in apache-airflow-providers-microsoft-azure v4.1.0)"><code class="xref py py-class docutils literal notranslate"><span class="pre">AzureKeyVaultBackend</span></code></a></p></li>
-<li><p><code class="xref py py-class docutils literal notranslate"><span class="pre">AzureKeyVaultBackend</span></code></p></li>
-</ul>
-</div>
-</div>
-
 
-    <div class="pager" role="navigation" aria-label="related navigation">
-            <a rel="prev" title="Writing logs" href="logging.html" >
-                <button class="btn-hollow btn-blue bodytext__medium--cerulean-blue" accesskey="p">Previous</button>
-            </a>
-            <a rel="next" title="Community Providers" href="../howto/create-update-providers.html" >
-                <button class="btn-hollow btn-blue bodytext__medium--cerulean-blue" accesskey="n">Next</button>
-            </a>
+    <div class="pager" role="navigation" aria-label="related navigation"><button class="btn-hollow btn-blue bodytext__medium--cerulean-blue" disabled>Previous</button><button class="btn-hollow btn-blue bodytext__medium--cerulean-blue" disabled>Next</button>
     </div>
                                     </div>
 
@@ -671,16 +647,7 @@ provided by the community-managed providers:</p>
             
     <nav class="wy-nav-side-toc">
         <div class="wy-menu-vertical">
-            <ul>
-<li><a class="reference internal" href="#">Secret backends</a><ul>
-<li><a class="reference internal" href="#amazon">Amazon</a></li>
-<li><a class="reference internal" href="#google">Google</a></li>
-<li><a class="reference internal" href="#hashicorp">Hashicorp</a></li>
-<li><a class="reference internal" href="#microsoft-azure">Microsoft Azure</a></li>
-</ul>
-</li>
-</ul>
-
+            
         </div>
     </nav>
             
@@ -696,24 +663,6 @@ provided by the community-managed providers:</p>
 
 
 
-    
-        
-            
-        
-        <div class="base-layout--button">
-            <a href="https://github.com/apache/airflow/edit/main/docs/apache-airflow-providers/core-extensions/secrets-backends.rst" rel="nofollow">
-
-                <button class="btn-hollow btn-brown btn-with-icon with-box-shadow button-fixed">
-                    <svg xmlns="http://www.w3.org/2000/svg" width="30.76" height="30">
-                        <path d="M15.379 0a15.381 15.381 0 00-4.86 29.974c.769.141 1.05-.334 1.05-.741 0-.365-.013-1.332-.021-2.616-4.278.929-5.181-2.062-5.181-2.062a4.071 4.071 0 00-1.708-2.25c-1.4-.954.106-.935.106-.935a3.231 3.231 0 012.356 1.585 3.274 3.274 0 004.476 1.278 3.287 3.287 0 01.976-2.056c-3.415-.388-7.005-1.707-7.005-7.6a5.947 5.947 0 011.583-4.127 5.53 5.53 0 01.151-4.07s1.291-.413 4.229 1.577a14.577 14.577 0 017.7 0c2.936-1.99 4.225-1.577 4.225-1.577a5.523 5.523 0 01.15 [...]
-                    </svg>
-
-                    <span class="bodytext__medium--brownish-grey">Suggest a change on this page</span>
-                </button>
-            </a>
-        </div>
-    
-
     </div>
 
 
diff --git a/docs-archive/apache-airflow-providers-sftp/4.0.0/_sources/_api/airflow/providers/sftp/hooks/index.rst.txt b/docs-archive/apache-airflow-providers-sftp/4.0.0/_sources/_api/airflow/providers/sftp/hooks/index.rst.txt
new file mode 100644
index 0000000000..14e0a11f07
--- /dev/null
+++ b/docs-archive/apache-airflow-providers-sftp/4.0.0/_sources/_api/airflow/providers/sftp/hooks/index.rst.txt
@@ -0,0 +1,15 @@
+:py:mod:`airflow.providers.sftp.hooks`
+======================================
+
+.. py:module:: airflow.providers.sftp.hooks
+
+
+Submodules
+----------
+.. toctree::
+   :titlesonly:
+   :maxdepth: 1
+
+   sftp/index.rst
+
+
diff --git a/docs-archive/apache-airflow-providers-sftp/4.0.0/_sources/_api/airflow/providers/sftp/hooks/sftp/index.rst.txt b/docs-archive/apache-airflow-providers-sftp/4.0.0/_sources/_api/airflow/providers/sftp/hooks/sftp/index.rst.txt
new file mode 100644
index 0000000000..94c97cd69d
--- /dev/null
+++ b/docs-archive/apache-airflow-providers-sftp/4.0.0/_sources/_api/airflow/providers/sftp/hooks/sftp/index.rst.txt
@@ -0,0 +1,230 @@
+:py:mod:`airflow.providers.sftp.hooks.sftp`
+===========================================
+
+.. py:module:: airflow.providers.sftp.hooks.sftp
+
+.. autoapi-nested-parse::
+
+   This module contains SFTP hook.
+
+
+
+Module Contents
+---------------
+
+Classes
+~~~~~~~
+
+.. autoapisummary::
+
+   airflow.providers.sftp.hooks.sftp.SFTPHook
+
+
+
+
+.. py:class:: SFTPHook(ssh_conn_id = 'sftp_default', ssh_hook = None, *args, **kwargs)
+
+   Bases: :py:obj:`airflow.providers.ssh.hooks.ssh.SSHHook`
+
+   This hook is inherited from SSH hook. Please refer to SSH hook for the input
+   arguments.
+
+   Interact with SFTP.
+
+   :Pitfalls::
+
+       - In contrast with FTPHook describe_directory only returns size, type and
+         modify. It doesn't return unix.owner, unix.mode, perm, unix.group and
+         unique.
+       - retrieve_file and store_file only take a local full path and not a
+          buffer.
+       - If no mode is passed to create_directory it will be created with 777
+         permissions.
+
+   Errors that may occur throughout but should be handled downstream.
+
+   For consistency reasons with SSHHook, the preferred parameter is "ssh_conn_id".
+
+   :param ssh_conn_id: The :ref:`sftp connection id<howto/connection:sftp>`
+   :param ssh_hook: Optional SSH hook (included to support passing of an SSH hook to the SFTP operator)
+
+   .. py:attribute:: conn_name_attr
+      :annotation: = ssh_conn_id
+
+      
+
+   .. py:attribute:: default_conn_name
+      :annotation: = sftp_default
+
+      
+
+   .. py:attribute:: conn_type
+      :annotation: = sftp
+
+      
+
+   .. py:attribute:: hook_name
+      :annotation: = SFTP
+
+      
+
+   .. py:method:: get_ui_field_behaviour()
+      :staticmethod:
+
+      Returns custom field behaviour
+
+
+   .. py:method:: get_conn(self)
+
+      Opens an SFTP connection to the remote host
+
+      :rtype: paramiko.SFTPClient
+
+
+   .. py:method:: close_conn(self)
+
+      Closes the SFTP connection
+
+
+   .. py:method:: describe_directory(self, path)
+
+      Returns a dictionary of {filename: {attributes}} for all files
+      on the remote system (where the MLSD command is supported).
+
+      :param path: full path to the remote directory
+
+
+   .. py:method:: list_directory(self, path)
+
+      Returns a list of files on the remote system.
+
+      :param path: full path to the remote directory to list
+
+
+   .. py:method:: mkdir(self, path, mode = 777)
+
+      Creates a directory on the remote system.
+
+      :param path: full path to the remote directory to create
+      :param mode: permissions to set the directory with
+
+
+   .. py:method:: isdir(self, path)
+
+      Checks if the path provided is a directory or not.
+
+      :param path: full path to the remote directory to check
+
+
+   .. py:method:: isfile(self, path)
+
+      Checks if the path provided is a file or not.
+
+      :param path: full path to the remote file to check
+
+
+   .. py:method:: create_directory(self, path, mode = 777)
+
+      Creates a directory on the remote system.
+
+      :param path: full path to the remote directory to create
+      :param mode: int representation of octal mode for directory
+
+
+   .. py:method:: delete_directory(self, path)
+
+      Deletes a directory on the remote system.
+
+      :param path: full path to the remote directory to delete
+
+
+   .. py:method:: retrieve_file(self, remote_full_path, local_full_path)
+
+      Transfers the remote file to a local location.
+      If local_full_path is a string path, the file will be put
+      at that location
+
+      :param remote_full_path: full path to the remote file
+      :param local_full_path: full path to the local file
+
+
+   .. py:method:: store_file(self, remote_full_path, local_full_path, confirm = True)
+
+      Transfers a local file to the remote location.
+      If local_full_path_or_buffer is a string path, the file will be read
+      from that location
+
+      :param remote_full_path: full path to the remote file
+      :param local_full_path: full path to the local file
+
+
+   .. py:method:: delete_file(self, path)
+
+      Removes a file on the FTP Server
+
+      :param path: full path to the remote file
+
+
+   .. py:method:: get_mod_time(self, path)
+
+      Returns modification time.
+
+      :param path: full path to the remote file
+
+
+   .. py:method:: path_exists(self, path)
+
+      Returns True if a remote entity exists
+
+      :param path: full path to the remote file or directory
+
+
+   .. py:method:: walktree(self, path, fcallback, dcallback, ucallback, recurse = True)
+
+      Recursively descend, depth first, the directory tree rooted at
+      path, calling discreet callback functions for each regular file,
+      directory and unknown file type.
+
+      :param str path:
+          root of remote directory to descend, use '.' to start at
+          :attr:`.pwd`
+      :param callable fcallback:
+          callback function to invoke for a regular file.
+          (form: ``func(str)``)
+      :param callable dcallback:
+          callback function to invoke for a directory. (form: ``func(str)``)
+      :param callable ucallback:
+          callback function to invoke for an unknown file type.
+          (form: ``func(str)``)
+      :param bool recurse: *Default: True* - should it recurse
+
+      :returns: None
+
+
+   .. py:method:: get_tree_map(self, path, prefix = None, delimiter = None)
+
+      Return tuple with recursive lists of files, directories and unknown paths from given path.
+      It is possible to filter results by giving prefix and/or delimiter parameters.
+
+      :param path: path from which tree will be built
+      :param prefix: if set paths will be added if start with prefix
+      :param delimiter: if set paths will be added if end with delimiter
+      :return: tuple with list of files, dirs and unknown items
+      :rtype: Tuple[List[str], List[str], List[str]]
+
+
+   .. py:method:: test_connection(self)
+
+      Test the SFTP connection by calling path with directory
+
+
+   .. py:method:: get_file_by_pattern(self, path, fnmatch_pattern)
+
+      Returning the first matching file based on the given fnmatch type pattern
+
+      :param path: path to be checked
+      :param fnmatch_pattern: The pattern that will be matched with `fnmatch`
+      :return: string containing the first found file, or an empty string if none matched
+
+
+
diff --git a/docs-archive/apache-airflow-providers-sftp/4.0.0/_sources/_api/airflow/providers/sftp/index.rst.txt b/docs-archive/apache-airflow-providers-sftp/4.0.0/_sources/_api/airflow/providers/sftp/index.rst.txt
new file mode 100644
index 0000000000..93f6f3fe80
--- /dev/null
+++ b/docs-archive/apache-airflow-providers-sftp/4.0.0/_sources/_api/airflow/providers/sftp/index.rst.txt
@@ -0,0 +1,17 @@
+:py:mod:`airflow.providers.sftp`
+================================
+
+.. py:module:: airflow.providers.sftp
+
+
+Subpackages
+-----------
+.. toctree::
+   :titlesonly:
+   :maxdepth: 3
+
+   hooks/index.rst
+   operators/index.rst
+   sensors/index.rst
+
+
diff --git a/docs-archive/apache-airflow-providers-sftp/4.0.0/_sources/_api/airflow/providers/sftp/operators/index.rst.txt b/docs-archive/apache-airflow-providers-sftp/4.0.0/_sources/_api/airflow/providers/sftp/operators/index.rst.txt
new file mode 100644
index 0000000000..7a940ddcdf
--- /dev/null
+++ b/docs-archive/apache-airflow-providers-sftp/4.0.0/_sources/_api/airflow/providers/sftp/operators/index.rst.txt
@@ -0,0 +1,15 @@
+:py:mod:`airflow.providers.sftp.operators`
+==========================================
+
+.. py:module:: airflow.providers.sftp.operators
+
+
+Submodules
+----------
+.. toctree::
+   :titlesonly:
+   :maxdepth: 1
+
+   sftp/index.rst
+
+
diff --git a/docs-archive/apache-airflow-providers-sftp/4.0.0/_sources/_api/airflow/providers/sftp/operators/sftp/index.rst.txt b/docs-archive/apache-airflow-providers-sftp/4.0.0/_sources/_api/airflow/providers/sftp/operators/sftp/index.rst.txt
new file mode 100644
index 0000000000..4589c6f1bc
--- /dev/null
+++ b/docs-archive/apache-airflow-providers-sftp/4.0.0/_sources/_api/airflow/providers/sftp/operators/sftp/index.rst.txt
@@ -0,0 +1,95 @@
+:py:mod:`airflow.providers.sftp.operators.sftp`
+===============================================
+
+.. py:module:: airflow.providers.sftp.operators.sftp
+
+.. autoapi-nested-parse::
+
+   This module contains SFTP operator.
+
+
+
+Module Contents
+---------------
+
+Classes
+~~~~~~~
+
+.. autoapisummary::
+
+   airflow.providers.sftp.operators.sftp.SFTPOperation
+   airflow.providers.sftp.operators.sftp.SFTPOperator
+
+
+
+
+.. py:class:: SFTPOperation
+
+   Operation that can be used with SFTP
+
+   .. py:attribute:: PUT
+      :annotation: = put
+
+      
+
+   .. py:attribute:: GET
+      :annotation: = get
+
+      
+
+
+.. py:class:: SFTPOperator(*, ssh_hook = None, sftp_hook = None, ssh_conn_id = None, remote_host = None, local_filepath, remote_filepath, operation = SFTPOperation.PUT, confirm = True, create_intermediate_dirs = False, **kwargs)
+
+   Bases: :py:obj:`airflow.models.BaseOperator`
+
+   SFTPOperator for transferring files from remote host to local or vice a versa.
+   This operator uses sftp_hook to open sftp transport channel that serve as basis
+   for file transfer.
+
+   :param ssh_conn_id: :ref:`ssh connection id<howto/connection:ssh>`
+       from airflow Connections. `ssh_conn_id` will be ignored if `ssh_hook`
+       or `sftp_hook` is provided.
+   :param sftp_hook: predefined SFTPHook to use
+       Either `sftp_hook` or `ssh_conn_id` needs to be provided.
+   :param ssh_hook: Deprecated - predefined SSHHook to use for remote execution
+       Use `sftp_hook` instead.
+   :param remote_host: remote host to connect (templated)
+       Nullable. If provided, it will replace the `remote_host` which was
+       defined in `sftp_hook`/`ssh_hook` or predefined in the connection of `ssh_conn_id`.
+   :param local_filepath: local file path to get or put. (templated)
+   :param remote_filepath: remote file path to get or put. (templated)
+   :param operation: specify operation 'get' or 'put', defaults to put
+   :param confirm: specify if the SFTP operation should be confirmed, defaults to True
+   :param create_intermediate_dirs: create missing intermediate directories when
+       copying from remote to local and vice-versa. Default is False.
+
+       Example: The following task would copy ``file.txt`` to the remote host
+       at ``/tmp/tmp1/tmp2/`` while creating ``tmp``,``tmp1`` and ``tmp2`` if they
+       don't exist. If the parameter is not passed it would error as the directory
+       does not exist. ::
+
+           put_file = SFTPOperator(
+               task_id="test_sftp",
+               ssh_conn_id="ssh_default",
+               local_filepath="/tmp/file.txt",
+               remote_filepath="/tmp/tmp1/tmp2/file.txt",
+               operation="put",
+               create_intermediate_dirs=True,
+               dag=dag
+           )
+
+
+   .. py:attribute:: template_fields
+      :annotation: :Sequence[str] = ['local_filepath', 'remote_filepath', 'remote_host']
+
+      
+
+   .. py:method:: execute(self, context)
+
+      This is the main method to derive when creating an operator.
+      Context is the same dictionary used as when rendering jinja templates.
+
+      Refer to get_template_context for more context.
+
+
+
diff --git a/docs-archive/apache-airflow-providers-sftp/4.0.0/_sources/_api/airflow/providers/sftp/sensors/index.rst.txt b/docs-archive/apache-airflow-providers-sftp/4.0.0/_sources/_api/airflow/providers/sftp/sensors/index.rst.txt
new file mode 100644
index 0000000000..c130339768
--- /dev/null
+++ b/docs-archive/apache-airflow-providers-sftp/4.0.0/_sources/_api/airflow/providers/sftp/sensors/index.rst.txt
@@ -0,0 +1,15 @@
+:py:mod:`airflow.providers.sftp.sensors`
+========================================
+
+.. py:module:: airflow.providers.sftp.sensors
+
+
+Submodules
+----------
+.. toctree::
+   :titlesonly:
+   :maxdepth: 1
+
+   sftp/index.rst
+
+
diff --git a/docs-archive/apache-airflow-providers-sftp/4.0.0/_sources/_api/airflow/providers/sftp/sensors/sftp/index.rst.txt b/docs-archive/apache-airflow-providers-sftp/4.0.0/_sources/_api/airflow/providers/sftp/sensors/sftp/index.rst.txt
new file mode 100644
index 0000000000..1c53d8ce52
--- /dev/null
+++ b/docs-archive/apache-airflow-providers-sftp/4.0.0/_sources/_api/airflow/providers/sftp/sensors/sftp/index.rst.txt
@@ -0,0 +1,47 @@
+:py:mod:`airflow.providers.sftp.sensors.sftp`
+=============================================
+
+.. py:module:: airflow.providers.sftp.sensors.sftp
+
+.. autoapi-nested-parse::
+
+   This module contains SFTP sensor.
+
+
+
+Module Contents
+---------------
+
+Classes
+~~~~~~~
+
+.. autoapisummary::
+
+   airflow.providers.sftp.sensors.sftp.SFTPSensor
+
+
+
+
+.. py:class:: SFTPSensor(*, path, file_pattern = '', newer_than = None, sftp_conn_id = 'sftp_default', **kwargs)
+
+   Bases: :py:obj:`airflow.sensors.base.BaseSensorOperator`
+
+   Waits for a file or directory to be present on SFTP.
+
+   :param path: Remote file or directory path
+   :param file_pattern: The pattern that will be used to match the file (fnmatch format)
+   :param sftp_conn_id: The connection to run the sensor against
+   :param newer_than: DateTime for which the file or file path should be newer than, comparison is inclusive
+
+   .. py:attribute:: template_fields
+      :annotation: :Sequence[str] = ['path', 'newer_than']
+
+      
+
+   .. py:method:: poke(self, context)
+
+      Function that the sensors defined while deriving this class should
+      override.
+
+
+
diff --git a/docs-archive/apache-airflow-providers-sftp/4.0.0/_sources/commits.rst.txt b/docs-archive/apache-airflow-providers-sftp/4.0.0/_sources/commits.rst.txt
new file mode 100644
index 0000000000..ba189ef1dd
--- /dev/null
+++ b/docs-archive/apache-airflow-providers-sftp/4.0.0/_sources/commits.rst.txt
@@ -0,0 +1,313 @@
+
+ .. 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-sftp
+------------------------------------------------------
+
+`SSH File Transfer Protocol (SFTP) <https://tools.ietf.org/wg/secsh/draft-ietf-secsh-filexfer/>`__
+
+
+This is detailed commit list of changes for versions provider package: ``sftp``.
+For high-level changelog, see :doc:`package information including changelog <index>`.
+
+
+
+4.0.0
+.....
+
+Latest change: 2022-07-13
+
+=================================================================================================  ===========  ===========================================================================
+Commit                                                                                             Committed    Subject
+=================================================================================================  ===========  ===========================================================================
+`d2459a241b <https://github.com/apache/airflow/commit/d2459a241b54d596ebdb9d81637400279fff4f2d>`_  2022-07-13   ``Add documentation for July 2022 Provider's release (#25030)``
+`acaa0635c8 <https://github.com/apache/airflow/commit/acaa0635c8477c98ab78da9f6d86e6f1bad2737d>`_  2022-07-08   ``Automatically detect if non-lazy logging interpolation is used (#24910)``
+`0de31bd73a <https://github.com/apache/airflow/commit/0de31bd73a8f41dded2907f0dee59dfa6c1ed7a1>`_  2022-06-29   ``Move provider dependencies to inside provider folders (#24672)``
+`510a6bab45 <https://github.com/apache/airflow/commit/510a6bab4595cce8bd5b1447db957309d70f35d9>`_  2022-06-28   ``Remove 'hook-class-names' from provider.yaml (#24702)``
+`f3aacebe50 <https://github.com/apache/airflow/commit/f3aacebe502c4ea5dc2b7d29373539296fa037eb>`_  2022-06-20   ``Convert sftp hook to use paramiko instead of pysftp (#24512)``
+`ad297c9177 <https://github.com/apache/airflow/commit/ad297c91777277e2b76dd7b7f0e3e3fc5c32e07c>`_  2022-06-17   ``Update 'actual_file_to_check' with rendered 'path' (#24451)``
+=================================================================================================  ===========  ===========================================================================
+
+3.0.0
+.....
+
+Latest change: 2022-06-09
+
+=================================================================================================  ===========  ==================================================================================
+Commit                                                                                             Committed    Subject
+=================================================================================================  ===========  ==================================================================================
+`dcdcf3a2b8 <https://github.com/apache/airflow/commit/dcdcf3a2b8054fa727efb4cd79d38d2c9c7e1bd5>`_  2022-06-09   ``Update release notes for RC2 release of Providers for May 2022 (#24307)``
+`717a7588bc <https://github.com/apache/airflow/commit/717a7588bc8170363fea5cb75f17efcf68689619>`_  2022-06-07   ``Update package description to remove double min-airflow specification (#24292)``
+`aeabe994b3 <https://github.com/apache/airflow/commit/aeabe994b3381d082f75678a159ddbb3cbf6f4d3>`_  2022-06-07   ``Prepare docs for May 2022 provider's release (#24231)``
+`e656e1de55 <https://github.com/apache/airflow/commit/e656e1de55094e8369cab80b9b1669b1d1225f54>`_  2022-06-06   ``Adding fnmatch type regex to SFTPSensor (#24084)``
+`027b707d21 <https://github.com/apache/airflow/commit/027b707d215a9ff1151717439790effd44bab508>`_  2022-06-05   ``Add explanatory note for contributors about updating Changelog (#24229)``
+=================================================================================================  ===========  ==================================================================================
+
+2.6.0
+.....
+
+Latest change: 2022-04-07
+
+=================================================================================================  ===========  =============================================================
+Commit                                                                                             Committed    Subject
+=================================================================================================  ===========  =============================================================
+`56ab82ed7a <https://github.com/apache/airflow/commit/56ab82ed7a5c179d024722ccc697b740b2b93b6a>`_  2022-04-07   ``Prepare mid-April provider documentation. (#22819)``
+`a6609d5268 <https://github.com/apache/airflow/commit/a6609d5268ebe55bcb150a828d249153582aa936>`_  2022-03-29   ``add newer_than parameter to SFTP sensor (#21655) (#22377)``
+=================================================================================================  ===========  =============================================================
+
+2.5.2
+.....
+
+Latest change: 2022-03-22
+
+=================================================================================================  ===========  ==============================================================
+Commit                                                                                             Committed    Subject
+=================================================================================================  ===========  ==============================================================
+`d7dbfb7e26 <https://github.com/apache/airflow/commit/d7dbfb7e26a50130d3550e781dc71a5fbcaeb3d2>`_  2022-03-22   ``Add documentation for bugfix release of Providers (#22383)``
+=================================================================================================  ===========  ==============================================================
+
+2.5.1
+.....
+
+Latest change: 2022-03-14
+
+=================================================================================================  ===========  ====================================================================
+Commit                                                                                             Committed    Subject
+=================================================================================================  ===========  ====================================================================
+`16adc035b1 <https://github.com/apache/airflow/commit/16adc035b1ecdf533f44fbb3e32bea972127bb71>`_  2022-03-14   ``Add documentation for Classifier release for March 2022 (#22226)``
+=================================================================================================  ===========  ====================================================================
+
+2.5.0
+.....
+
+Latest change: 2022-03-07
+
+=================================================================================================  ===========  ==========================================================================
+Commit                                                                                             Committed    Subject
+=================================================================================================  ===========  ==========================================================================
+`f5b96315fe <https://github.com/apache/airflow/commit/f5b96315fe65b99c0e2542831ff73a3406c4232d>`_  2022-03-07   ``Add documentation for Feb Providers release (#22056)``
+`26e8d6d766 <https://github.com/apache/airflow/commit/26e8d6d7664bbaae717438bdb41766550ff57e4f>`_  2022-03-06   ``Updates FTPHook provider to have test_connection (#21997)``
+`d94fa37830 <https://github.com/apache/airflow/commit/d94fa378305957358b910cfb1fe7cb14bc793804>`_  2022-02-08   ``Fixed changelog for January 2022 (delayed) provider's release (#21439)``
+`6c3a67d4fc <https://github.com/apache/airflow/commit/6c3a67d4fccafe4ab6cd9ec8c7bacf2677f17038>`_  2022-02-05   ``Add documentation for January 2021 providers release (#21257)``
+`cb73053211 <https://github.com/apache/airflow/commit/cb73053211367e2c2dd76d5279cdc7dc7b190124>`_  2022-01-27   ``Add optional features in providers. (#21074)``
+`602abe8394 <https://github.com/apache/airflow/commit/602abe8394fafe7de54df7e73af56de848cdf617>`_  2022-01-20   ``Remove ':type' lines now sphinx-autoapi supports typehints (#20951)``
+=================================================================================================  ===========  ==========================================================================
+
+2.4.1
+.....
+
+Latest change: 2022-01-08
+
+=================================================================================================  ===========  ======================================================================
+Commit                                                                                             Committed    Subject
+=================================================================================================  ===========  ======================================================================
+`da9210e89c <https://github.com/apache/airflow/commit/da9210e89c618611b1e450617277b738ce92ffd7>`_  2022-01-08   ``Add documentation for an ad-hoc release of 2 providers (#20765)``
+`c2fc760c90 <https://github.com/apache/airflow/commit/c2fc760c9024ce9f0bec287679d9981f6ab1fd98>`_  2022-01-08   ``Bugfix: ''SFTPHook'' does not respect ''ssh_conn_id'' arg (#20756)``
+`1c113d6b2f <https://github.com/apache/airflow/commit/1c113d6b2fe2f24a71f0a2c3911e8141fa6e3ff9>`_  2022-01-06   ``fix deprecation messages for SFTPHook (#20692)``
+=================================================================================================  ===========  ======================================================================
+
+2.4.0
+.....
+
+Latest change: 2021-12-31
+
+=================================================================================================  ===========  =================================================================================
+Commit                                                                                             Committed    Subject
+=================================================================================================  ===========  =================================================================================
+`f77417eb0d <https://github.com/apache/airflow/commit/f77417eb0d3f12e4849d80645325c02a48829278>`_  2021-12-31   ``Fix K8S changelog to be PyPI-compatible (#20614)``
+`97496ba2b4 <https://github.com/apache/airflow/commit/97496ba2b41063fa24393c58c5c648a0cdb5a7f8>`_  2021-12-31   ``Update documentation for provider December 2021 release (#20523)``
+`d56e7b56bb <https://github.com/apache/airflow/commit/d56e7b56bb9827daaf8890557147fd10bdf72a7e>`_  2021-12-30   ``Fix template_fields type to have MyPy friendly Sequence type (#20571)``
+`a0821235fb <https://github.com/apache/airflow/commit/a0821235fb6877a471973295fe42283ef452abf6>`_  2021-12-30   ``Use typed Context EVERYWHERE (#20565)``
+`f35ad27080 <https://github.com/apache/airflow/commit/f35ad27080a2e1f29efc20a9bd0613af0f6ff2ec>`_  2021-12-14   ``Making SFTPHook's constructor consistent with its superclass SSHHook (#20164)``
+`756b1207a9 <https://github.com/apache/airflow/commit/756b1207a96ff65f7e0f83864a7ad0386df9fa9d>`_  2021-12-13   ``Fix MyPy Errors for SFTP provider (#20242)``
+=================================================================================================  ===========  =================================================================================
+
+2.3.0
+.....
+
+Latest change: 2021-11-30
+
+=================================================================================================  ===========  ======================================================================
+Commit                                                                                             Committed    Subject
+=================================================================================================  ===========  ======================================================================
+`853576d901 <https://github.com/apache/airflow/commit/853576d9019d2aca8de1d9c587c883dcbe95b46a>`_  2021-11-30   ``Update documentation for November 2021 provider's release (#19882)``
+`ccb809550d <https://github.com/apache/airflow/commit/ccb809550db95089178385184cc898f5412cd266>`_  2021-11-16   ``Add test_connection method for sftp hook (#19609)``
+=================================================================================================  ===========  ======================================================================
+
+2.2.0
+.....
+
+Latest change: 2021-10-29
+
+=================================================================================================  ===========  ============================================================================
+Commit                                                                                             Committed    Subject
+=================================================================================================  ===========  ============================================================================
+`d9567eb106 <https://github.com/apache/airflow/commit/d9567eb106929b21329c01171fd398fbef2dc6c6>`_  2021-10-29   ``Prepare documentation for October Provider's release (#19321)``
+`83eb80d4ec <https://github.com/apache/airflow/commit/83eb80d4eccb881775dd44bab19818e50e42270b>`_  2021-10-27   ``SFTP hook to prefer the SSH paramiko key over the key file path (#18988)``
+`86a2a19ad2 <https://github.com/apache/airflow/commit/86a2a19ad2bdc87a9ad14bb7fde9313b2d7489bb>`_  2021-10-17   ``More f-strings (#18855)``
+=================================================================================================  ===========  ============================================================================
+
+2.1.1
+.....
+
+Latest change: 2021-08-30
+
+=================================================================================================  ===========  ============================================================================
+Commit                                                                                             Committed    Subject
+=================================================================================================  ===========  ============================================================================
+`0a68588479 <https://github.com/apache/airflow/commit/0a68588479e34cf175d744ea77b283d9d78ea71a>`_  2021-08-30   ``Add August 2021 Provider's documentation (#17890)``
+`be75dcd39c <https://github.com/apache/airflow/commit/be75dcd39cd10264048c86e74110365bd5daf8b7>`_  2021-08-23   ``Update description about the new ''connection-types'' provider meta-data``
+`76ed2a49c6 <https://github.com/apache/airflow/commit/76ed2a49c6cd285bf59706cf04f39a7444c382c9>`_  2021-08-19   ``Import Hooks lazily individually in providers manager (#17682)``
+=================================================================================================  ===========  ============================================================================
+
+2.1.0
+.....
+
+Latest change: 2021-07-26
+
+=================================================================================================  ===========  ===================================================================
+Commit                                                                                             Committed    Subject
+=================================================================================================  ===========  ===================================================================
+`87f408b1e7 <https://github.com/apache/airflow/commit/87f408b1e78968580c760acb275ae5bb042161db>`_  2021-07-26   ``Prepares docs for Rc2 release of July providers (#17116)``
+`d02ded65ea <https://github.com/apache/airflow/commit/d02ded65eaa7d2281e249b3fa028605d1b4c52fb>`_  2021-07-15   ``Fixed wrongly escaped characters in amazon's changelog (#17020)``
+`b916b75079 <https://github.com/apache/airflow/commit/b916b7507921129dc48d6add1bdc4b923b60c9b9>`_  2021-07-15   ``Prepare documentation for July release of providers. (#17015)``
+`81be82bfb7 <https://github.com/apache/airflow/commit/81be82bfb73f263ecd3b2d5f664e9c1ea751408a>`_  2021-07-02   ``Remove redundant logging in SFTP Hook (#16704)``
+`50e334df32 <https://github.com/apache/airflow/commit/50e334df3245072f55ce75c2611dca2df0cbd031>`_  2021-06-24   ``Add support for non-RSA type key for SFTP hook (#16314)``
+=================================================================================================  ===========  ===================================================================
+
+2.0.0
+.....
+
+Latest change: 2021-06-18
+
+=================================================================================================  ===========  ====================================================================================================
+Commit                                                                                             Committed    Subject
+=================================================================================================  ===========  ====================================================================================================
+`bbc627a3da <https://github.com/apache/airflow/commit/bbc627a3dab17ba4cf920dd1a26dbed6f5cebfd1>`_  2021-06-18   ``Prepares documentation for rc2 release of Providers (#16501)``
+`cbf8001d76 <https://github.com/apache/airflow/commit/cbf8001d7630530773f623a786f9eb319783b33c>`_  2021-06-16   ``Synchronizes updated changelog after buggfix release (#16464)``
+`1fba5402bb <https://github.com/apache/airflow/commit/1fba5402bb14b3ffa6429fdc683121935f88472f>`_  2021-06-15   ``More documentation update for June providers release (#16405)``
+`9351e2a2d4 <https://github.com/apache/airflow/commit/9351e2a2d43b6ec3c019df19afb445a3dcf587ac>`_  2021-06-10   ``Depreciate private_key_pass in SFTPHook conn extra and rename to private_key_passphrase (#14028)``
+`9c94b72d44 <https://github.com/apache/airflow/commit/9c94b72d440b18a9e42123d20d48b951712038f9>`_  2021-06-07   ``Updated documentation for June 2021 provider release (#16294)``
+`37681bca00 <https://github.com/apache/airflow/commit/37681bca0081dd228ac4047c17631867bba7a66f>`_  2021-05-07   ``Auto-apply apply_default decorator (#15667)``
+=================================================================================================  ===========  ====================================================================================================
+
+1.2.0
+.....
+
+Latest change: 2021-05-01
+
+=================================================================================================  ===========  ==============================================================================
+Commit                                                                                             Committed    Subject
+=================================================================================================  ===========  ==============================================================================
+`807ad32ce5 <https://github.com/apache/airflow/commit/807ad32ce59e001cb3532d98a05fa7d0d7fabb95>`_  2021-05-01   ``Prepares provider release after PIP 21 compatibility (#15576)``
+`7a0d412245 <https://github.com/apache/airflow/commit/7a0d4122459289e0f2db78ad2849d5ba42df4468>`_  2021-04-25   ``Add Connection Documentation to more Providers (#15408)``
+`15e044c7e4 <https://github.com/apache/airflow/commit/15e044c7e412a85946a8831dd7eb68424d96c164>`_  2021-04-14   ``Undeprecate private_key option in SFTPHook (#15348)``
+`44a6648fd7 <https://github.com/apache/airflow/commit/44a6648fd7482f61ca59153f0caaf0b019c5b3fd>`_  2021-04-07   ``Add logs to show last modified in SFTP, FTP and Filesystem sensor (#15134)``
+`68e4c4dcb0 <https://github.com/apache/airflow/commit/68e4c4dcb0416eb51a7011a3bb040f1e23d7bba8>`_  2021-03-20   ``Remove Backport Providers (#14886)``
+=================================================================================================  ===========  ==============================================================================
+
+1.1.1
+.....
+
+Latest change: 2021-02-27
+
+=================================================================================================  ===========  =======================================================================
+Commit                                                                                             Committed    Subject
+=================================================================================================  ===========  =======================================================================
+`589d6dec92 <https://github.com/apache/airflow/commit/589d6dec922565897785bcbc5ac6bb3b973d7f5d>`_  2021-02-27   ``Prepare to release the next wave of providers: (#14487)``
+`10343ec29f <https://github.com/apache/airflow/commit/10343ec29f8f0abc5b932ba26faf49bc63c6bcda>`_  2021-02-05   ``Corrections in docs and tools after releasing provider RCs (#14082)``
+=================================================================================================  ===========  =======================================================================
+
+1.1.0
+.....
+
+Latest change: 2021-02-04
+
+=================================================================================================  ===========  ================================================================================
+Commit                                                                                             Committed    Subject
+=================================================================================================  ===========  ================================================================================
+`d45739f7ce <https://github.com/apache/airflow/commit/d45739f7ce0de183329d67fff88a9da3943a9280>`_  2021-02-04   ``Fixes to release process after releasing 2nd wave of providers (#14059)``
+`88bdcfa0df <https://github.com/apache/airflow/commit/88bdcfa0df5bcb4c489486e05826544b428c8f43>`_  2021-02-04   ``Prepare to release a new wave of providers. (#14013)``
+`9af452aee5 <https://github.com/apache/airflow/commit/9af452aee53dd300535dadd108ce3e60c5f11a2e>`_  2021-02-03   ``Add retryer to SFTP hook connection (#13065)``
+`ac2f72c98d <https://github.com/apache/airflow/commit/ac2f72c98dc0821b33721054588adbf2bb53bb0b>`_  2021-02-01   ``Implement provider versioning tools (#13767)``
+`a9ac2b040b <https://github.com/apache/airflow/commit/a9ac2b040b64de1aa5d9c2b9def33334e36a8d22>`_  2021-01-23   ``Switch to f-strings using flynt. (#13732)``
+`3fd5ef3555 <https://github.com/apache/airflow/commit/3fd5ef355556cf0ad7896bb570bbe4b2eabbf46e>`_  2021-01-21   ``Add missing logos for integrations (#13717)``
+`52339a55c0 <https://github.com/apache/airflow/commit/52339a55c054bddd1d46253575274a3d5d141ebe>`_  2021-01-08   ``[AIRFLOW-7044] Host key can be specified via SSH connection extras. (#12944)``
+`295d66f914 <https://github.com/apache/airflow/commit/295d66f91446a69610576d040ba687b38f1c5d0a>`_  2020-12-30   ``Fix Grammar in PIP warning (#13380)``
+`6cf76d7ac0 <https://github.com/apache/airflow/commit/6cf76d7ac01270930de7f105fb26428763ee1d4e>`_  2020-12-18   ``Fix typo in pip upgrade command :( (#13148)``
+=================================================================================================  ===========  ================================================================================
+
+1.0.0
+.....
+
+Latest change: 2020-12-09
+
+=================================================================================================  ===========  ==================================================================================
+Commit                                                                                             Committed    Subject
+=================================================================================================  ===========  ==================================================================================
+`32971a1a2d <https://github.com/apache/airflow/commit/32971a1a2de1db0b4f7442ed26facdf8d3b7a36f>`_  2020-12-09   ``Updates providers versions to 1.0.0 (#12955)``
+`b40dffa085 <https://github.com/apache/airflow/commit/b40dffa08547b610162f8cacfa75847f3c4ca364>`_  2020-12-08   ``Rename remaing modules to match AIP-21 (#12917)``
+`9b39f24780 <https://github.com/apache/airflow/commit/9b39f24780e85f859236672e9060b2fbeee81b36>`_  2020-12-08   ``Add support for dynamic connection form fields per provider (#12558)``
+`c34ef853c8 <https://github.com/apache/airflow/commit/c34ef853c890e08f5468183c03dc8f3f3ce84af2>`_  2020-11-20   ``Separate out documentation building per provider  (#12444)``
+`0080354502 <https://github.com/apache/airflow/commit/00803545023b096b8db4fbd6eb473843096d7ce4>`_  2020-11-18   ``Update provider READMEs for 1.0.0b2 batch release (#12449)``
+`ae7cb4a1e2 <https://github.com/apache/airflow/commit/ae7cb4a1e2a96351f1976cf5832615e24863e05d>`_  2020-11-17   ``Update wrong commit hash in backport provider changes (#12390)``
+`6889a333cf <https://github.com/apache/airflow/commit/6889a333cff001727eb0a66e375544a28c9a5f03>`_  2020-11-15   ``Improvements for operators and hooks ref docs (#12366)``
+`7825e8f590 <https://github.com/apache/airflow/commit/7825e8f59034645ab3247229be83a3aa90baece1>`_  2020-11-13   ``Docs installation improvements (#12304)``
+`85a18e13d9 <https://github.com/apache/airflow/commit/85a18e13d9dec84275283ff69e34704b60d54a75>`_  2020-11-09   ``Point at pypi project pages for cross-dependency of provider packages (#12212)``
+`59eb5de78c <https://github.com/apache/airflow/commit/59eb5de78c70ee9c7ae6e4cba5c7a2babb8103ca>`_  2020-11-09   ``Update provider READMEs for up-coming 1.0.0beta1 releases (#12206)``
+`b2a28d1590 <https://github.com/apache/airflow/commit/b2a28d1590410630d66966aa1f2b2a049a8c3b32>`_  2020-11-09   ``Moves provider packages scripts to dev (#12082)``
+`41bf172c1d <https://github.com/apache/airflow/commit/41bf172c1dc75099f4f9d8b3f3350b4b1f523ef9>`_  2020-11-04   ``Simplify string expressions (#12093)``
+`4e8f9cc8d0 <https://github.com/apache/airflow/commit/4e8f9cc8d02b29c325b8a5a76b4837671bdf5f68>`_  2020-11-03   ``Enable Black - Python Auto Formmatter (#9550)``
+`8c42cf1b00 <https://github.com/apache/airflow/commit/8c42cf1b00c90f0d7f11b8a3a455381de8e003c5>`_  2020-11-03   ``Use PyUpgrade to use Python 3.6 features (#11447)``
+`5a439e84eb <https://github.com/apache/airflow/commit/5a439e84eb6c0544dc6c3d6a9f4ceeb2172cd5d0>`_  2020-10-26   ``Prepare providers release 0.0.2a1 (#11855)``
+`872b1566a1 <https://github.com/apache/airflow/commit/872b1566a11cb73297e657ff325161721b296574>`_  2020-10-25   ``Generated backport providers readmes/setup for 2020.10.29 (#11826)``
+`ae791e1916 <https://github.com/apache/airflow/commit/ae791e19163b4ee6e84940d2567adbf0a2626fb4>`_  2020-10-21   ``Fix formatting errors introduced in #11720 (#11733)``
+`1fb3c28e1a <https://github.com/apache/airflow/commit/1fb3c28e1a4fd54c9d83dccd413659a7a87c7315>`_  2020-10-21   ``Add support for setting ciphers for SFTPHook (#11720)``
+`349b0811c3 <https://github.com/apache/airflow/commit/349b0811c3022605426ba57d30936240a7c2848a>`_  2020-10-20   ``Add D200 pydocstyle check (#11688)``
+`16e7129719 <https://github.com/apache/airflow/commit/16e7129719f1c0940aef2a93bed81368e997a746>`_  2020-10-13   ``Added support for provider packages for Airflow 2.0 (#11487)``
+`d305876bee <https://github.com/apache/airflow/commit/d305876bee328287ff391a29cc1cd632468cc731>`_  2020-10-12   ``Remove redundant None provided as default to dict.get() (#11448)``
+`0a0e1af800 <https://github.com/apache/airflow/commit/0a0e1af80038ef89974c3c8444461fe867945daa>`_  2020-10-03   ``Fix Broken Markdown links in Providers README TOC (#11249)``
+`ca4238eb4d <https://github.com/apache/airflow/commit/ca4238eb4d9a2aef70eb641343f59ee706d27d13>`_  2020-10-02   ``Fixed month in backport packages to October (#11242)``
+`5220e4c384 <https://github.com/apache/airflow/commit/5220e4c3848a2d2c81c266ef939709df9ce581c5>`_  2020-10-02   ``Prepare Backport release 2020.09.07 (#11238)``
+`0161b5ea2b <https://github.com/apache/airflow/commit/0161b5ea2b805d62a0317e5cab6f797b92c8abf1>`_  2020-09-26   ``Increasing type coverage for multiple provider (#11159)``
+`9549274d11 <https://github.com/apache/airflow/commit/9549274d110f689a0bd709db829a4d69e274eed9>`_  2020-09-09   ``Upgrade black to 20.8b1 (#10818)``
+`fdd9b6f65b <https://github.com/apache/airflow/commit/fdd9b6f65b608c516b8a062b058972d9a45ec9e3>`_  2020-08-25   ``Enable Black on Providers Packages (#10543)``
+`3696c34c28 <https://github.com/apache/airflow/commit/3696c34c28c6bc7b442deab999d9ecba24ed0e34>`_  2020-08-24   ``Fix typo in the word "release" (#10528)``
+`ee7ca128a1 <https://github.com/apache/airflow/commit/ee7ca128a17937313566f2badb6cc569c614db94>`_  2020-08-22   ``Fix broken Markdown refernces in Providers README (#10483)``
+`cdec301254 <https://github.com/apache/airflow/commit/cdec3012542b45d23a05f62d69110944ba542e2a>`_  2020-08-07   ``Add correct signature to all operators and sensors (#10205)``
+`24c8e4c2d6 <https://github.com/apache/airflow/commit/24c8e4c2d6e359ecc2c7d6275dccc68de4a82832>`_  2020-08-06   ``Changes to all the constructors to remove the args argument (#10163)``
+`4e3799fec4 <https://github.com/apache/airflow/commit/4e3799fec4c23d0f43603a0489c5a6158aeba035>`_  2020-08-02   ``[AIRFLOW-4541] Replace os.mkdirs usage with pathlib.Path(path).mkdir (#10117)``
+`aeea71274d <https://github.com/apache/airflow/commit/aeea71274d4527ff2351102e94aa38bda6099e7f>`_  2020-08-02   ``Remove 'args' parameter from provider operator constructors (#10097)``
+`d0e7db4024 <https://github.com/apache/airflow/commit/d0e7db4024806af35e3c9a2cae460fdeedd4d2ec>`_  2020-06-19   ``Fixed release number for fresh release (#9408)``
+`12af6a0800 <https://github.com/apache/airflow/commit/12af6a08009b8776e00d8a0aab92363eb8c4e8b1>`_  2020-06-19   ``Final cleanup for 2020.6.23rc1 release preparation (#9404)``
+`c7e5bce57f <https://github.com/apache/airflow/commit/c7e5bce57fe7f51cefce4f8a41ce408ac5675d13>`_  2020-06-19   ``Prepare backport release candidate for 2020.6.23rc1 (#9370)``
+`f6bd817a3a <https://github.com/apache/airflow/commit/f6bd817a3aac0a16430fc2e3d59c1f17a69a15ac>`_  2020-06-16   ``Introduce 'transfers' packages (#9320)``
+`0b0e4f7a4c <https://github.com/apache/airflow/commit/0b0e4f7a4cceff3efe15161fb40b984782760a34>`_  2020-05-26   ``Preparing for RC3 relase of backports (#9026)``
+`00642a46d0 <https://github.com/apache/airflow/commit/00642a46d019870c4decb3d0e47c01d6a25cb88c>`_  2020-05-26   ``Fixed name of 20 remaining wrongly named operators. (#8994)``
+`375d1ca229 <https://github.com/apache/airflow/commit/375d1ca229464617780623c61c6e8a1bf570c87f>`_  2020-05-19   ``Release candidate 2 for backport packages 2020.05.20 (#8898)``
+`12c5e5d8ae <https://github.com/apache/airflow/commit/12c5e5d8ae25fa633efe63ccf4db389e2b796d79>`_  2020-05-17   ``Prepare release candidate for backport packages (#8891)``
+`f3521fb0e3 <https://github.com/apache/airflow/commit/f3521fb0e36733d8bd356123e56a453fd37a6dca>`_  2020-05-16   ``Regenerate readme files for backport package release (#8886)``
+`92585ca4cb <https://github.com/apache/airflow/commit/92585ca4cb375ac879f4ab331b3a063106eb7b92>`_  2020-05-15   ``Added automated release notes generation for backport operators (#8807)``
+`bac0ab27cf <https://github.com/apache/airflow/commit/bac0ab27cfc89e715efddc97214fcd7738084361>`_  2020-03-30   ``close sftp connection without error (#7953)``
+`42eef38217 <https://github.com/apache/airflow/commit/42eef38217e709bc7a7f71bf0286e9e61293a43e>`_  2020-03-07   ``[AIRFLOW-6877] Add cross-provider dependencies as extras (#7506)``
+`97a429f9d0 <https://github.com/apache/airflow/commit/97a429f9d0cf740c5698060ad55f11e93cb57b55>`_  2020-02-02   ``[AIRFLOW-6714] Remove magic comments about UTF-8 (#7338)``
+`ceea293c16 <https://github.com/apache/airflow/commit/ceea293c1652240e7e856c201e4341a87ef97a0f>`_  2020-01-28   ``[AIRFLOW-6656] Fix AIP-21 moving (#7272)``
+`9a04013b0e <https://github.com/apache/airflow/commit/9a04013b0e40b0d744ff4ac9f008491806d60df2>`_  2020-01-27   ``[AIRFLOW-6646][AIP-21] Move protocols classes to providers package (#7268)``
+`69629a5a94 <https://github.com/apache/airflow/commit/69629a5a948ab2c4ac04a4a4dca6ac86d19c11bd>`_  2019-12-09   ``[AIRFLOW-5807] Move SFTP from contrib to providers. (#6464)``
+=================================================================================================  ===========  ==================================================================================
diff --git a/docs-archive/apache-airflow-providers-sftp/4.0.0/_sources/connections/sftp.rst.txt b/docs-archive/apache-airflow-providers-sftp/4.0.0/_sources/connections/sftp.rst.txt
new file mode 100644
index 0000000000..6cc3cb47fb
--- /dev/null
+++ b/docs-archive/apache-airflow-providers-sftp/4.0.0/_sources/connections/sftp.rst.txt
@@ -0,0 +1,109 @@
+ .. 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.
+
+
+
+.. _howto/connection:sftp:
+
+SFTP Connection
+===============
+
+The SFTP connection type enables SFTP Integrations.
+
+Authenticating to SFTP
+-----------------------
+
+There are two ways to connect to SFTP using Airflow.
+
+1. Use ``login`` and ``password``.
+2. Use ``private_key`` or ``key_file``, along with the optional ``private_key_passphrase``
+
+Only one authorization method can be used at a time. If you need to manage multiple credentials or keys then you should
+configure multiple connections.
+
+Default Connection IDs
+----------------------
+
+Hooks, operators, and sensors related to SFTP use ``sftp_default`` by default.
+
+Configuring the Connection
+--------------------------
+
+Login (optional)
+    Specify the sftp username for the remote machine.
+
+Password (optional)
+    Specify the sftp password for the remote machine.
+
+Port (optional)
+    Specify the SSH port of the remote machine
+
+Host (optional)
+    Specify the Hostname or IP of the remote machine
+
+Extra (optional)
+    Specify the extra parameters (as json dictionary) that can be used in sftp connection.
+    The following parameters are all optional:
+
+    * ``key_file`` - Full Path of the private SSH Key file that will be used to connect to the remote_host.
+    * ``private_key`` - Content of the private key used to connect to the remote_host.
+    * ``private_key_passphrase`` - Content of the private key passphrase used to decrypt the private key.
+    * ``conn_timeout`` - An optional timeout (in seconds) for the TCP connect. Default is ``10``.
+    * ``timeout`` - Deprecated - use conn_timeout instead.
+    * ``compress`` - ``true`` to ask the remote client/server to compress traffic; ``false`` to refuse compression. Default is ``true``.
+    * ``no_host_key_check`` - Set to ``false`` to restrict connecting to hosts with no entries in ``~/.ssh/known_hosts`` (Hosts file). This provides maximum protection against trojan horse attacks, but can be troublesome when the ``/etc/ssh/ssh_known_hosts`` file is poorly maintained or connections to new hosts are frequently made. This option forces the user to manually add all new hosts. Default is ``true``, ssh will automatically add new host keys to the user known hosts files.
+    * ``allow_host_key_change`` - Set to ``true`` if you want to allow connecting to hosts that has host key changed or when you get 'REMOTE HOST IDENTIFICATION HAS CHANGED' error.  This won't protect against Man-In-The-Middle attacks. Other possible solution is to remove the host entry from ``~/.ssh/known_hosts`` file. Default is ``false``.
+    * ``look_for_keys`` - Set to ``false`` if you want to disable searching for discoverable private key files in ``~/.ssh/``
+    * ``host_key`` - The base64 encoded ssh-rsa public key of the host or "ssh-<key type> <key data>" (as you would find in the ``known_hosts`` file). Specifying this allows making the connection if and only if the public key of the endpoint matches this value.
+    * ``disabled_algorithms`` - A dictionary mapping algorithm type to an iterable of algorithm identifiers, which will be disabled for the lifetime of the transport.
+    * ``ciphers`` - A list of ciphers to use in order of preference.
+
+Example "extras" field using ``host_key``:
+
+.. code-block:: json
+
+    {
+       "no_host_key_check": "false",
+       "allow_host_key_change": "false",
+       "host_key": "AAAHD...YDWwq=="
+    }
+
+Example "extras" field using ``key_file`` or ``private_key``:
+
+.. code-block:: json
+
+    {
+       "key_file": "path/to/private_key",
+       "no_host_key_check": "true"
+    }
+
+When specifying the connection in environment variable you should specify
+it using URI syntax.
+
+Note that all components of the URI should be URL-encoded.
+
+Example connection string with ``key_file``  (path to key file provided in connection):
+
+.. code-block:: bash
+
+   export AIRFLOW_CONN_SFTP_DEFAULT='sftp://user:pass@localhost:22?key_file=%2Fhome%2Fairflow%2F.ssh%2Fid_rsa'
+
+Example connection string with ``host_key``:
+
+.. code-block:: bash
+
+    AIRFLOW_CONN_SFTP_DEFAULT='sftp://user:pass@localhost:22?host_key=AAAHD...YDWwq%3D%3D&no_host_key_check=false'
diff --git a/docs-archive/apache-airflow-providers-sftp/4.0.0/_sources/index.rst.txt b/docs-archive/apache-airflow-providers-sftp/4.0.0/_sources/index.rst.txt
new file mode 100644
index 0000000000..da3b7dcf81
--- /dev/null
+++ b/docs-archive/apache-airflow-providers-sftp/4.0.0/_sources/index.rst.txt
@@ -0,0 +1,108 @@
+
+ .. 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.
+
+``apache-airflow-providers-sftp``
+=================================
+
+Content
+-------
+
+.. toctree::
+    :maxdepth: 1
+    :caption: References
+
+    Connection types <connections/sftp>
+    Python API <_api/airflow/providers/sftp/index>
+
+.. toctree::
+    :maxdepth: 1
+    :caption: Resources
+
+    PyPI Repository <https://pypi.org/project/apache-airflow-providers-sftp/>
+    Installing from sources <installing-providers-from-sources>
+
+.. THE REMAINDER OF THE FILE IS AUTOMATICALLY GENERATED. IT WILL BE OVERWRITTEN AT RELEASE TIME!
+
+
+.. toctree::
+    :maxdepth: 1
+    :caption: Commits
+
+    Detailed list of commits <commits>
+
+
+Package apache-airflow-providers-sftp
+------------------------------------------------------
+
+`SSH File Transfer Protocol (SFTP) <https://tools.ietf.org/wg/secsh/draft-ietf-secsh-filexfer/>`__
+
+
+Release: 4.0.0
+
+Provider package
+----------------
+
+This is a provider package for ``sftp`` provider. All classes for this provider package
+are in ``airflow.providers.sftp`` python package.
+
+Installation
+------------
+
+You can install this package on top of an existing Airflow 2 installation (see ``Requirements`` below)
+for the minimum Airflow version supported) via
+``pip install apache-airflow-providers-sftp``
+
+Requirements
+------------
+
+================================  ==================
+PIP package                       Version required
+================================  ==================
+``apache-airflow``                ``>=2.2.0``
+``apache-airflow-providers-ssh``  ``>=2.1.0``
+================================  ==================
+
+Cross provider package dependencies
+-----------------------------------
+
+Those are dependencies that might be needed in order to use all the features of the package.
+You need to install the specified provider packages in order to use them.
+
+You can install such cross-provider dependencies when installing from PyPI. For example:
+
+.. code-block:: bash
+
+    pip install apache-airflow-providers-sftp[ssh]
+
+
+==============================================================================================  =======
+Dependent package                                                                               Extra
+==============================================================================================  =======
+`apache-airflow-providers-ssh <https://airflow.apache.org/docs/apache-airflow-providers-ssh>`_  ``ssh``
+==============================================================================================  =======
+
+Downloading official packages
+-----------------------------
+
+You can download officially released packages and verify their checksums and signatures from the
+`Official Apache Download site <https://downloads.apache.org/airflow/providers/>`_
+
+* `The apache-airflow-providers-sftp 4.0.0 sdist package <https://downloads.apache.org/airflow/providers/apache-airflow-providers-sftp-4.0.0.tar.gz>`_ (`asc <https://downloads.apache.org/airflow/providers/apache-airflow-providers-sftp-4.0.0.tar.gz.asc>`__, `sha512 <https://downloads.apache.org/airflow/providers/apache-airflow-providers-sftp-4.0.0.tar.gz.sha512>`__)
+* `The apache-airflow-providers-sftp 4.0.0 wheel package <https://downloads.apache.org/airflow/providers/apache_airflow_providers_sftp-4.0.0-py3-none-any.whl>`_ (`asc <https://downloads.apache.org/airflow/providers/apache_airflow_providers_sftp-4.0.0-py3-none-any.whl.asc>`__, `sha512 <https://downloads.apache.org/airflow/providers/apache_airflow_providers_sftp-4.0.0-py3-none-any.whl.sha512>`__)
+
+.. include:: ../../airflow/providers/sftp/CHANGELOG.rst
diff --git a/docs-archive/apache-airflow-providers-sftp/4.0.0/_sources/installing-providers-from-sources.rst.txt b/docs-archive/apache-airflow-providers-sftp/4.0.0/_sources/installing-providers-from-sources.rst.txt
new file mode 100644
index 0000000000..1c90205d15
--- /dev/null
+++ b/docs-archive/apache-airflow-providers-sftp/4.0.0/_sources/installing-providers-from-sources.rst.txt
@@ -0,0 +1,18 @@
+ .. 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.
+
+.. include:: ../installing-providers-from-sources.rst
diff --git a/docs-archive/apache-airflow-providers-sftp/4.0.0/_static/_gen/css/main-custom.min.css b/docs-archive/apache-airflow-providers-sftp/4.0.0/_static/_gen/css/main-custom.min.css
new file mode 100644
index 0000000000..46f1de5932
--- /dev/null
+++ b/docs-archive/apache-airflow-providers-sftp/4.0.0/_static/_gen/css/main-custom.min.css
@@ -0,0 +1 @@
+@charset "UTF-8";@import "https://fonts.googleapis.com/css?family=Rubik:500&display=swap";@import "https://fonts.googleapis.com/css?family=Roboto:400,400i,500,700&display=swap";@import "https://fonts.googleapis.com/css?family=Roboto+Mono:400,700&display=swap";.header__large--cerulean-blue{font-family:rubik,sans-serif;font-weight:500;font-size:72px;line-height:1.17;color:#017cee}.header__large--shamrock{font-family:rubik,sans-serif;font-weight:500;font-size:72px;line-height:1.17;color:#00 [...]
\ No newline at end of file
diff --git a/docs-archive/apache-airflow-providers-sftp/4.0.0/_static/_gen/css/main.min.css b/docs-archive/apache-airflow-providers-sftp/4.0.0/_static/_gen/css/main.min.css
new file mode 100644
index 0000000000..603f3cb39f
--- /dev/null
+++ b/docs-archive/apache-airflow-providers-sftp/4.0.0/_static/_gen/css/main.min.css
@@ -0,0 +1,7 @@
+@import "https://fonts.googleapis.com/css?family=Open+Sans:300,300i,400,400i,700,700i";@fa-font-path:"../webfonts";/*!* Bootstrap v4.1.3 (https://getbootstrap.com/)
+* Copyright 2011-2018 The Bootstrap Authors
+* Copyright 2011-2018 Twitter, Inc.
+* Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)*/:root{--blue: #72A1E5;--indigo: #6610f2;--purple: #6f42c1;--pink: #e83e8c;--red: #dc3545;--orange: #BA5A31;--yellow: #ffc107;--green: #28a745;--teal: #20c997;--cyan: #17a2b8;--white: #fff;--gray: #888;--gray-dark: #333;--primary: #30638E;--secondary: #FFA630;--success: #3772FF;--info: #C0E0DE;--warning: #ED6A5A;--danger: #ED6A5A;--light: #D3F3EE;--dark: #403F4C;--breakpoint-xs: 0;--breakpoint-sm: 576px;--breakp [...]
+* License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License)*/.fa,.fas,.far,.fal,.fad,.fab{-moz-osx-font-smoothing:grayscale;-webkit-font-smoothing:antialiased;display:inline-block;font-style:normal;font-variant:normal;text-rendering:auto;line-height:1}.fa-lg{font-size:1.33333333em;line-height:.75em;vertical-align:-.0667em}.fa-xs{font-size:.75em}.fa-sm{font-size:.875em}.fa-1x{font-size:1em}.fa-2x{font-size:2em}.fa-3x{font-size:3em}.fa-4x{font [...]
+* License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License)*/@font-face{font-family:'font awesome 5 free';font-style:normal;font-weight:900;font-display:auto;src:url(../webfonts/fa-solid-900.eot);src:url(../webfonts/fa-solid-900.eot?#iefix) format("embedded-opentype"),url(../webfonts/fa-solid-900.woff2) format("woff2"),url(../webfonts/fa-solid-900.woff) format("woff"),url(../webfonts/fa-solid-900.ttf) format("truetype"),url(../webfonts/fa-so [...]
+* License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License)*/@font-face{font-family:'font awesome 5 brands';font-style:normal;font-weight:400;font-display:auto;src:url(../webfonts/fa-brands-400.eot);src:url(../webfonts/fa-brands-400.eot?#iefix) format("embedded-opentype"),url(../webfonts/fa-brands-400.woff2) format("woff2"),url(../webfonts/fa-brands-400.woff) format("woff"),url(../webfonts/fa-brands-400.ttf) format("truetype"),url(../webfont [...]
\ No newline at end of file
diff --git a/docs-archive/apache-airflow-providers-sftp/4.0.0/_static/_gen/js/docs.js b/docs-archive/apache-airflow-providers-sftp/4.0.0/_static/_gen/js/docs.js
new file mode 100644
index 0000000000..90898d86d5
--- /dev/null
+++ b/docs-archive/apache-airflow-providers-sftp/4.0.0/_static/_gen/js/docs.js
@@ -0,0 +1 @@
+!function(r){var n={};function o(t){if(n[t])return n[t].exports;var e=n[t]={i:t,l:!1,exports:{}};return r[t].call(e.exports,e,e.exports,o),e.l=!0,e.exports}o.m=r,o.c=n,o.d=function(t,e,r){o.o(t,e)||Object.defineProperty(t,e,{enumerable:!0,get:r})},o.r=function(t){"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(t,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(t,"__esModule",{value:!0})},o.t=function(e,t){if(1&t&&(e=o(e)),8&t)return e;if(4&t&&"object"==typ [...]
\ No newline at end of file
diff --git a/docs-archive/apache-airflow-providers-sftp/4.0.0/_static/_sphinx_javascript_frameworks_compat.js b/docs-archive/apache-airflow-providers-sftp/4.0.0/_static/_sphinx_javascript_frameworks_compat.js
new file mode 100644
index 0000000000..8549469dc2
--- /dev/null
+++ b/docs-archive/apache-airflow-providers-sftp/4.0.0/_static/_sphinx_javascript_frameworks_compat.js
@@ -0,0 +1,134 @@
+/*
+ * _sphinx_javascript_frameworks_compat.js
+ * ~~~~~~~~~~
+ *
+ * Compatability shim for jQuery and underscores.js.
+ *
+ * WILL BE REMOVED IN Sphinx 6.0
+ * xref RemovedInSphinx60Warning
+ *
+ */
+
+/**
+ * select a different prefix for underscore
+ */
+$u = _.noConflict();
+
+
+/**
+ * small helper function to urldecode strings
+ *
+ * See https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/decodeURIComponent#Decoding_query_parameters_from_a_URL
+ */
+jQuery.urldecode = function(x) {
+    if (!x) {
+        return x
+    }
+    return decodeURIComponent(x.replace(/\+/g, ' '));
+};
+
+/**
+ * small helper function to urlencode strings
+ */
+jQuery.urlencode = encodeURIComponent;
+
+/**
+ * This function returns the parsed url parameters of the
+ * current request. Multiple values per key are supported,
+ * it will always return arrays of strings for the value parts.
+ */
+jQuery.getQueryParameters = function(s) {
+    if (typeof s === 'undefined')
+        s = document.location.search;
+    var parts = s.substr(s.indexOf('?') + 1).split('&');
+    var result = {};
+    for (var i = 0; i < parts.length; i++) {
+        var tmp = parts[i].split('=', 2);
+        var key = jQuery.urldecode(tmp[0]);
+        var value = jQuery.urldecode(tmp[1]);
+        if (key in result)
+            result[key].push(value);
+        else
+            result[key] = [value];
+    }
+    return result;
+};
+
+/**
+ * highlight a given string on a jquery object by wrapping it in
+ * span elements with the given class name.
+ */
+jQuery.fn.highlightText = function(text, className) {
+    function highlight(node, addItems) {
+        if (node.nodeType === 3) {
+            var val = node.nodeValue;
+            var pos = val.toLowerCase().indexOf(text);
+            if (pos >= 0 &&
+                !jQuery(node.parentNode).hasClass(className) &&
+                !jQuery(node.parentNode).hasClass("nohighlight")) {
+                var span;
+                var isInSVG = jQuery(node).closest("body, svg, foreignObject").is("svg");
+                if (isInSVG) {
+                    span = document.createElementNS("http://www.w3.org/2000/svg", "tspan");
+                } else {
+                    span = document.createElement("span");
+                    span.className = className;
+                }
+                span.appendChild(document.createTextNode(val.substr(pos, text.length)));
+                node.parentNode.insertBefore(span, node.parentNode.insertBefore(
+                    document.createTextNode(val.substr(pos + text.length)),
+                    node.nextSibling));
+                node.nodeValue = val.substr(0, pos);
+                if (isInSVG) {
+                    var rect = document.createElementNS("http://www.w3.org/2000/svg", "rect");
+                    var bbox = node.parentElement.getBBox();
+                    rect.x.baseVal.value = bbox.x;
+                    rect.y.baseVal.value = bbox.y;
+                    rect.width.baseVal.value = bbox.width;
+                    rect.height.baseVal.value = bbox.height;
+                    rect.setAttribute('class', className);
+                    addItems.push({
+                        "parent": node.parentNode,
+                        "target": rect});
+                }
+            }
+        }
+        else if (!jQuery(node).is("button, select, textarea")) {
+            jQuery.each(node.childNodes, function() {
+                highlight(this, addItems);
+            });
+        }
+    }
+    var addItems = [];
+    var result = this.each(function() {
+        highlight(this, addItems);
+    });
+    for (var i = 0; i < addItems.length; ++i) {
+        jQuery(addItems[i].parent).before(addItems[i].target);
+    }
+    return result;
+};
+
+/*
+ * backward compatibility for jQuery.browser
+ * This will be supported until firefox bug is fixed.
+ */
+if (!jQuery.browser) {
+    jQuery.uaMatch = function(ua) {
+        ua = ua.toLowerCase();
+
+        var match = /(chrome)[ \/]([\w.]+)/.exec(ua) ||
+            /(webkit)[ \/]([\w.]+)/.exec(ua) ||
+            /(opera)(?:.*version|)[ \/]([\w.]+)/.exec(ua) ||
+            /(msie) ([\w.]+)/.exec(ua) ||
+            ua.indexOf("compatible") < 0 && /(mozilla)(?:.*? rv:([\w.]+)|)/.exec(ua) ||
+            [];
+
+        return {
+            browser: match[ 1 ] || "",
+            version: match[ 2 ] || "0"
+        };
+    };
+    jQuery.browser = {};
+    jQuery.browser[jQuery.uaMatch(navigator.userAgent).browser] = true;
+}
diff --git a/docs-archive/apache-airflow-providers-sftp/4.0.0/_static/basic.css b/docs-archive/apache-airflow-providers-sftp/4.0.0/_static/basic.css
new file mode 100644
index 0000000000..7d5974c322
--- /dev/null
+++ b/docs-archive/apache-airflow-providers-sftp/4.0.0/_static/basic.css
@@ -0,0 +1,928 @@
+/*
+ * basic.css
+ * ~~~~~~~~~
+ *
+ * Sphinx stylesheet -- basic theme.
+ *
+ * :copyright: Copyright 2007-2022 by the Sphinx team, see AUTHORS.
+ * :license: BSD, see LICENSE for details.
+ *
+ */
+
+/* -- main layout ----------------------------------------------------------- */
+
+div.clearer {
+    clear: both;
+}
+
+div.section::after {
+    display: block;
+    content: '';
+    clear: left;
+}
+
+/* -- relbar ---------------------------------------------------------------- */
+
+div.related {
+    width: 100%;
+    font-size: 90%;
+}
+
+div.related h3 {
+    display: none;
+}
+
+div.related ul {
+    margin: 0;
+    padding: 0 0 0 10px;
+    list-style: none;
+}
+
+div.related li {
+    display: inline;
+}
+
+div.related li.right {
+    float: right;
+    margin-right: 5px;
+}
+
+/* -- sidebar --------------------------------------------------------------- */
+
+div.sphinxsidebarwrapper {
+    padding: 10px 5px 0 10px;
+}
+
+div.sphinxsidebar {
+    float: left;
+    width: 230px;
+    margin-left: -100%;
+    font-size: 90%;
+    word-wrap: break-word;
+    overflow-wrap : break-word;
+}
+
+div.sphinxsidebar ul {
+    list-style: none;
+}
+
+div.sphinxsidebar ul ul,
+div.sphinxsidebar ul.want-points {
+    margin-left: 20px;
+    list-style: square;
+}
+
+div.sphinxsidebar ul ul {
+    margin-top: 0;
+    margin-bottom: 0;
+}
+
+div.sphinxsidebar form {
+    margin-top: 10px;
+}
+
+div.sphinxsidebar input {
+    border: 1px solid #98dbcc;
+    font-family: sans-serif;
+    font-size: 1em;
+}
+
+div.sphinxsidebar #searchbox form.search {
+    overflow: hidden;
+}
+
+div.sphinxsidebar #searchbox input[type="text"] {
+    float: left;
+    width: 80%;
+    padding: 0.25em;
+    box-sizing: border-box;
+}
+
+div.sphinxsidebar #searchbox input[type="submit"] {
+    float: left;
+    width: 20%;
+    border-left: none;
+    padding: 0.25em;
+    box-sizing: border-box;
+}
+
+
+img {
+    border: 0;
+    max-width: 100%;
+}
+
+/* -- search page ----------------------------------------------------------- */
+
+ul.search {
+    margin: 10px 0 0 20px;
+    padding: 0;
+}
+
+ul.search li {
+    padding: 5px 0 5px 20px;
+    background-image: url(file.png);
+    background-repeat: no-repeat;
+    background-position: 0 7px;
+}
+
+ul.search li a {
+    font-weight: bold;
+}
+
+ul.search li p.context {
+    color: #888;
+    margin: 2px 0 0 30px;
+    text-align: left;
+}
+
+ul.keywordmatches li.goodmatch a {
+    font-weight: bold;
+}
+
+/* -- index page ------------------------------------------------------------ */
+
+table.contentstable {
+    width: 90%;
+    margin-left: auto;
+    margin-right: auto;
+}
+
+table.contentstable p.biglink {
+    line-height: 150%;
+}
+
+a.biglink {
+    font-size: 1.3em;
+}
+
+span.linkdescr {
+    font-style: italic;
+    padding-top: 5px;
+    font-size: 90%;
+}
+
+/* -- general index --------------------------------------------------------- */
+
+table.indextable {
+    width: 100%;
+}
+
+table.indextable td {
+    text-align: left;
+    vertical-align: top;
+}
+
+table.indextable ul {
+    margin-top: 0;
+    margin-bottom: 0;
+    list-style-type: none;
+}
+
+table.indextable > tbody > tr > td > ul {
+    padding-left: 0em;
+}
+
+table.indextable tr.pcap {
+    height: 10px;
+}
+
+table.indextable tr.cap {
+    margin-top: 10px;
+    background-color: #f2f2f2;
+}
+
+img.toggler {
+    margin-right: 3px;
+    margin-top: 3px;
+    cursor: pointer;
+}
+
+div.modindex-jumpbox {
+    border-top: 1px solid #ddd;
+    border-bottom: 1px solid #ddd;
+    margin: 1em 0 1em 0;
+    padding: 0.4em;
+}
+
+div.genindex-jumpbox {
+    border-top: 1px solid #ddd;
+    border-bottom: 1px solid #ddd;
+    margin: 1em 0 1em 0;
+    padding: 0.4em;
+}
+
+/* -- domain module index --------------------------------------------------- */
+
+table.modindextable td {
+    padding: 2px;
+    border-collapse: collapse;
+}
+
+/* -- general body styles --------------------------------------------------- */
+
+div.body {
+    min-width: 360px;
+    max-width: 800px;
+}
+
+div.body p, div.body dd, div.body li, div.body blockquote {
+    -moz-hyphens: auto;
+    -ms-hyphens: auto;
+    -webkit-hyphens: auto;
+    hyphens: auto;
+}
+
+a.headerlink {
+    visibility: hidden;
+}
+a.brackets:before,
+span.brackets > a:before{
+    content: "[";
+}
+
+a.brackets:after,
+span.brackets > a:after {
+    content: "]";
+}
+
+
+h1:hover > a.headerlink,
+h2:hover > a.headerlink,
+h3:hover > a.headerlink,
+h4:hover > a.headerlink,
+h5:hover > a.headerlink,
+h6:hover > a.headerlink,
+dt:hover > a.headerlink,
+caption:hover > a.headerlink,
+p.caption:hover > a.headerlink,
+div.code-block-caption:hover > a.headerlink {
+    visibility: visible;
+}
+
+div.body p.caption {
+    text-align: inherit;
+}
+
+div.body td {
+    text-align: left;
+}
+
+.first {
+    margin-top: 0 !important;
+}
+
+p.rubric {
+    margin-top: 30px;
+    font-weight: bold;
+}
+
+img.align-left, figure.align-left, .figure.align-left, object.align-left {
+    clear: left;
+    float: left;
+    margin-right: 1em;
+}
+
+img.align-right, figure.align-right, .figure.align-right, object.align-right {
+    clear: right;
+    float: right;
+    margin-left: 1em;
+}
+
+img.align-center, figure.align-center, .figure.align-center, object.align-center {
+  display: block;
+  margin-left: auto;
+  margin-right: auto;
+}
+
+img.align-default, figure.align-default, .figure.align-default {
+  display: block;
+  margin-left: auto;
+  margin-right: auto;
+}
+
+.align-left {
+    text-align: left;
+}
+
+.align-center {
+    text-align: center;
+}
+
+.align-default {
+    text-align: center;
+}
+
+.align-right {
+    text-align: right;
+}
+
+/* -- sidebars -------------------------------------------------------------- */
+
+div.sidebar,
+aside.sidebar {
+    margin: 0 0 0.5em 1em;
+    border: 1px solid #ddb;
+    padding: 7px;
+    background-color: #ffe;
+    width: 40%;
+    float: right;
+    clear: right;
+    overflow-x: auto;
+}
+
+p.sidebar-title {
+    font-weight: bold;
+}
+div.admonition, div.topic, blockquote {
+    clear: left;
+}
+
+/* -- topics ---------------------------------------------------------------- */
+div.topic {
+    border: 1px solid #ccc;
+    padding: 7px;
+    margin: 10px 0 10px 0;
+}
+
+p.topic-title {
+    font-size: 1.1em;
+    font-weight: bold;
+    margin-top: 10px;
+}
+
+/* -- admonitions ----------------------------------------------------------- */
+
+div.admonition {
+    margin-top: 10px;
+    margin-bottom: 10px;
+    padding: 7px;
+}
+
+div.admonition dt {
+    font-weight: bold;
+}
+
+p.admonition-title {
+    margin: 0px 10px 5px 0px;
+    font-weight: bold;
+}
+
+div.body p.centered {
+    text-align: center;
+    margin-top: 25px;
+}
+
+/* -- content of sidebars/topics/admonitions -------------------------------- */
+
+div.sidebar > :last-child,
+aside.sidebar > :last-child,
+div.topic > :last-child,
+div.admonition > :last-child {
+    margin-bottom: 0;
+}
+
+div.sidebar::after,
+aside.sidebar::after,
+div.topic::after,
+div.admonition::after,
+blockquote::after {
+    display: block;
+    content: '';
+    clear: both;
+}
+
+/* -- tables ---------------------------------------------------------------- */
+
+table.docutils {
+    margin-top: 10px;
+    margin-bottom: 10px;
+    border: 0;
+    border-collapse: collapse;
+}
+
+table.align-center {
+    margin-left: auto;
+    margin-right: auto;
+}
+
+table.align-default {
+    margin-left: auto;
+    margin-right: auto;
+}
+
+table caption span.caption-number {
+    font-style: italic;
+}
+
+table caption span.caption-text {
+}
+
+table.docutils td, table.docutils th {
+    padding: 1px 8px 1px 5px;
+    border-top: 0;
+    border-left: 0;
+    border-right: 0;
+    border-bottom: 1px solid #aaa;
+}
+
+th {
+    text-align: left;
+    padding-right: 5px;
+}
+
+table.citation {
+    border-left: solid 1px gray;
+    margin-left: 1px;
+}
+
+table.citation td {
+    border-bottom: none;
+}
+
+th > :first-child,
+td > :first-child {
+    margin-top: 0px;
+}
+
+th > :last-child,
+td > :last-child {
+    margin-bottom: 0px;
+}
+
+/* -- figures --------------------------------------------------------------- */
+
+div.figure, figure {
+    margin: 0.5em;
+    padding: 0.5em;
+}
+
+div.figure p.caption, figcaption {
+    padding: 0.3em;
+}
+
+div.figure p.caption span.caption-number,
+figcaption span.caption-number {
+    font-style: italic;
+}
+
+div.figure p.caption span.caption-text,
+figcaption span.caption-text {
+}
+
+/* -- field list styles ----------------------------------------------------- */
+
+table.field-list td, table.field-list th {
+    border: 0 !important;
+}
+
+.field-list ul {
+    margin: 0;
+    padding-left: 1em;
+}
+
+.field-list p {
+    margin: 0;
+}
+
+.field-name {
+    -moz-hyphens: manual;
+    -ms-hyphens: manual;
+    -webkit-hyphens: manual;
+    hyphens: manual;
+}
+
+/* -- hlist styles ---------------------------------------------------------- */
+
+table.hlist {
+    margin: 1em 0;
+}
+
+table.hlist td {
+    vertical-align: top;
+}
+
+/* -- object description styles --------------------------------------------- */
+
+.sig {
+	font-family: 'Consolas', 'Menlo', 'DejaVu Sans Mono', 'Bitstream Vera Sans Mono', monospace;
+}
+
+.sig-name, code.descname {
+    background-color: transparent;
+    font-weight: bold;
+}
+
+.sig-name {
+	font-size: 1.1em;
+}
+
+code.descname {
+    font-size: 1.2em;
+}
+
+.sig-prename, code.descclassname {
+    background-color: transparent;
+}
+
+.optional {
+    font-size: 1.3em;
+}
+
+.sig-paren {
+    font-size: larger;
+}
+
+.sig-param.n {
+	font-style: italic;
+}
+
+/* C++ specific styling */
+
+.sig-inline.c-texpr,
+.sig-inline.cpp-texpr {
+	font-family: unset;
+}
+
+.sig.c   .k, .sig.c   .kt,
+.sig.cpp .k, .sig.cpp .kt {
+	color: #0033B3;
+}
+
+.sig.c   .m,
+.sig.cpp .m {
+	color: #1750EB;
+}
+
+.sig.c   .s, .sig.c   .sc,
+.sig.cpp .s, .sig.cpp .sc {
+	color: #067D17;
+}
+
+
+/* -- other body styles ----------------------------------------------------- */
+
+ol.arabic {
+    list-style: decimal;
+}
+
+ol.loweralpha {
+    list-style: lower-alpha;
+}
+
+ol.upperalpha {
+    list-style: upper-alpha;
+}
+
+ol.lowerroman {
+    list-style: lower-roman;
+}
+
+ol.upperroman {
+    list-style: upper-roman;
+}
+
+:not(li) > ol > li:first-child > :first-child,
+:not(li) > ul > li:first-child > :first-child {
+    margin-top: 0px;
+}
+
+:not(li) > ol > li:last-child > :last-child,
+:not(li) > ul > li:last-child > :last-child {
+    margin-bottom: 0px;
+}
+
+ol.simple ol p,
+ol.simple ul p,
+ul.simple ol p,
+ul.simple ul p {
+    margin-top: 0;
+}
+
+ol.simple > li:not(:first-child) > p,
+ul.simple > li:not(:first-child) > p {
+    margin-top: 0;
+}
+
+ol.simple p,
+ul.simple p {
+    margin-bottom: 0;
+}
+
+/* Docutils 0.17 and older (footnotes & citations) */
+dl.footnote > dt,
+dl.citation > dt {
+    float: left;
+    margin-right: 0.5em;
+}
+
+dl.footnote > dd,
+dl.citation > dd {
+    margin-bottom: 0em;
+}
+
+dl.footnote > dd:after,
+dl.citation > dd:after {
+    content: "";
+    clear: both;
+}
+
+/* Docutils 0.18+ (footnotes & citations) */
+aside.footnote > span,
+div.citation > span {
+    float: left;
+}
+aside.footnote > span:last-of-type,
+div.citation > span:last-of-type {
+  padding-right: 0.5em;
+}
+aside.footnote > p {
+  margin-left: 2em;
+}
+div.citation > p {
+  margin-left: 4em;
+}
+aside.footnote > p:last-of-type,
+div.citation > p:last-of-type {
+    margin-bottom: 0em;
+}
+aside.footnote > p:last-of-type:after,
+div.citation > p:last-of-type:after {
+    content: "";
+    clear: both;
+}
+
+/* Footnotes & citations ends */
+
+dl.field-list {
+    display: grid;
+    grid-template-columns: fit-content(30%) auto;
+}
+
+dl.field-list > dt {
+    font-weight: bold;
+    word-break: break-word;
+    padding-left: 0.5em;
+    padding-right: 5px;
+}
+
+dl.field-list > dt:after {
+    content: ":";
+}
+
+dl.field-list > dd {
+    padding-left: 0.5em;
+    margin-top: 0em;
+    margin-left: 0em;
+    margin-bottom: 0em;
+}
+
+dl {
+    margin-bottom: 15px;
+}
+
+dd > :first-child {
+    margin-top: 0px;
+}
+
+dd ul, dd table {
+    margin-bottom: 10px;
+}
+
+dd {
+    margin-top: 3px;
+    margin-bottom: 10px;
+    margin-left: 30px;
+}
+
+dl > dd:last-child,
+dl > dd:last-child > :last-child {
+    margin-bottom: 0;
+}
+
+dt:target, span.highlighted {
+    background-color: #fbe54e;
+}
+
+rect.highlighted {
+    fill: #fbe54e;
+}
+
+dl.glossary dt {
+    font-weight: bold;
+    font-size: 1.1em;
+}
+
+.versionmodified {
+    font-style: italic;
+}
+
+.system-message {
+    background-color: #fda;
+    padding: 5px;
+    border: 3px solid red;
+}
+
+.footnote:target  {
+    background-color: #ffa;
+}
+
+.line-block {
+    display: block;
+    margin-top: 1em;
+    margin-bottom: 1em;
+}
+
+.line-block .line-block {
+    margin-top: 0;
+    margin-bottom: 0;
+    margin-left: 1.5em;
+}
+
+.guilabel, .menuselection {
+    font-family: sans-serif;
+}
+
+.accelerator {
+    text-decoration: underline;
+}
+
+.classifier {
+    font-style: oblique;
+}
+
+.classifier:before {
+    font-style: normal;
+    margin: 0 0.5em;
+    content: ":";
+    display: inline-block;
+}
+
+abbr, acronym {
+    border-bottom: dotted 1px;
+    cursor: help;
+}
+
+/* -- code displays --------------------------------------------------------- */
+
+pre {
+    overflow: auto;
+    overflow-y: hidden;  /* fixes display issues on Chrome browsers */
+}
+
+pre, div[class*="highlight-"] {
+    clear: both;
+}
+
+span.pre {
+    -moz-hyphens: none;
+    -ms-hyphens: none;
+    -webkit-hyphens: none;
+    hyphens: none;
+    white-space: nowrap;
+}
+
+div[class*="highlight-"] {
+    margin: 1em 0;
+}
+
+td.linenos pre {
+    border: 0;
+    background-color: transparent;
+    color: #aaa;
+}
+
+table.highlighttable {
+    display: block;
+}
+
+table.highlighttable tbody {
+    display: block;
+}
+
+table.highlighttable tr {
+    display: flex;
+}
+
+table.highlighttable td {
+    margin: 0;
+    padding: 0;
+}
+
+table.highlighttable td.linenos {
+    padding-right: 0.5em;
+}
+
+table.highlighttable td.code {
+    flex: 1;
+    overflow: hidden;
+}
+
+.highlight .hll {
+    display: block;
+}
+
+div.highlight pre,
+table.highlighttable pre {
+    margin: 0;
+}
+
+div.code-block-caption + div {
+    margin-top: 0;
+}
+
+div.code-block-caption {
+    margin-top: 1em;
+    padding: 2px 5px;
+    font-size: small;
+}
+
+div.code-block-caption code {
+    background-color: transparent;
+}
+
+table.highlighttable td.linenos,
+span.linenos,
+div.highlight span.gp {  /* gp: Generic.Prompt */
+  user-select: none;
+  -webkit-user-select: text; /* Safari fallback only */
+  -webkit-user-select: none; /* Chrome/Safari */
+  -moz-user-select: none; /* Firefox */
+  -ms-user-select: none; /* IE10+ */
+}
+
+div.code-block-caption span.caption-number {
+    padding: 0.1em 0.3em;
+    font-style: italic;
+}
+
+div.code-block-caption span.caption-text {
+}
+
+div.literal-block-wrapper {
+    margin: 1em 0;
+}
+
+code.xref, a code {
+    background-color: transparent;
+    font-weight: bold;
+}
+
+h1 code, h2 code, h3 code, h4 code, h5 code, h6 code {
+    background-color: transparent;
+}
+
+.viewcode-link {
+    float: right;
+}
+
+.viewcode-back {
+    float: right;
+    font-family: sans-serif;
+}
+
+div.viewcode-block:target {
+    margin: -1px -10px;
+    padding: 0 10px;
+}
+
+/* -- math display ---------------------------------------------------------- */
+
+img.math {
+    vertical-align: middle;
+}
+
+div.body div.math p {
+    text-align: center;
+}
+
+span.eqno {
+    float: right;
+}
+
+span.eqno a.headerlink {
+    position: absolute;
+    z-index: 1;
+}
+
+div.math:hover a.headerlink {
+    visibility: visible;
+}
+
+/* -- printout stylesheet --------------------------------------------------- */
+
+@media print {
+    div.document,
+    div.documentwrapper,
+    div.bodywrapper {
+        margin: 0 !important;
+        width: 100%;
+    }
+
+    div.sphinxsidebar,
+    div.related,
+    div.footer,
+    #top-link {
+        display: none;
+    }
+}
\ No newline at end of file
diff --git a/docs-archive/apache-airflow-providers-sftp/4.0.0/_static/check-solid.svg b/docs-archive/apache-airflow-providers-sftp/4.0.0/_static/check-solid.svg
new file mode 100644
index 0000000000..92fad4b5c0
--- /dev/null
+++ b/docs-archive/apache-airflow-providers-sftp/4.0.0/_static/check-solid.svg
@@ -0,0 +1,4 @@
+<svg xmlns="http://www.w3.org/2000/svg" class="icon icon-tabler icon-tabler-check" width="44" height="44" viewBox="0 0 24 24" stroke-width="2" stroke="#22863a" fill="none" stroke-linecap="round" stroke-linejoin="round">
+  <path stroke="none" d="M0 0h24v24H0z" fill="none"/>
+  <path d="M5 12l5 5l10 -10" />
+</svg>
diff --git a/docs-archive/apache-airflow-providers-sftp/4.0.0/_static/clipboard.min.js b/docs-archive/apache-airflow-providers-sftp/4.0.0/_static/clipboard.min.js
new file mode 100644
index 0000000000..54b3c46381
--- /dev/null
+++ b/docs-archive/apache-airflow-providers-sftp/4.0.0/_static/clipboard.min.js
@@ -0,0 +1,7 @@
+/*!
+ * clipboard.js v2.0.8
+ * https://clipboardjs.com/
+ *
+ * Licensed MIT © Zeno Rocha
+ */
+!function(t,e){"object"==typeof exports&&"object"==typeof module?module.exports=e():"function"==typeof define&&define.amd?define([],e):"object"==typeof exports?exports.ClipboardJS=e():t.ClipboardJS=e()}(this,function(){return n={686:function(t,e,n){"use strict";n.d(e,{default:function(){return o}});var e=n(279),i=n.n(e),e=n(370),u=n.n(e),e=n(817),c=n.n(e);function a(t){try{return document.execCommand(t)}catch(t){return}}var f=function(t){t=c()(t);return a("cut"),t};var l=function(t){var  [...]
\ No newline at end of file
diff --git a/docs-archive/apache-airflow-providers-sftp/4.0.0/_static/copy-button.svg b/docs-archive/apache-airflow-providers-sftp/4.0.0/_static/copy-button.svg
new file mode 100644
index 0000000000..9c074dae52
--- /dev/null
+++ b/docs-archive/apache-airflow-providers-sftp/4.0.0/_static/copy-button.svg
@@ -0,0 +1,5 @@
+<svg xmlns="http://www.w3.org/2000/svg" class="icon icon-tabler icon-tabler-copy" width="44" height="44" viewBox="0 0 24 24" stroke-width="1.5" stroke="#000000" fill="none" stroke-linecap="round" stroke-linejoin="round">
+  <path stroke="none" d="M0 0h24v24H0z" fill="none"/>
+  <rect x="8" y="8" width="12" height="12" rx="2" />
+  <path d="M16 8v-2a2 2 0 0 0 -2 -2h-8a2 2 0 0 0 -2 2v8a2 2 0 0 0 2 2h2" />
+</svg>
diff --git a/docs-archive/apache-airflow-providers-sftp/4.0.0/_static/copybutton.css b/docs-archive/apache-airflow-providers-sftp/4.0.0/_static/copybutton.css
new file mode 100644
index 0000000000..40eafe5fc2
--- /dev/null
+++ b/docs-archive/apache-airflow-providers-sftp/4.0.0/_static/copybutton.css
@@ -0,0 +1,93 @@
+/* Copy buttons */
+button.copybtn {
+    position: absolute;
+    display: flex;
+    top: .3em;
+    right: .3em;
+    width: 1.7em;
+    height: 1.7em;
+	opacity: 0;
+    transition: opacity 0.3s, border .3s, background-color .3s;
+    user-select: none;
+    padding: 0;
+    border: none;
+    outline: none;
+    border-radius: 0.4em;
+    /* The colors that GitHub uses */
+    border: #1b1f2426 1px solid;
+    background-color: #f6f8fa;
+    color: #57606a;
+}
+
+button.copybtn.success {
+    border-color: #22863a;
+    color: #22863a;
+}
+
+button.copybtn svg {
+    stroke: currentColor;
+    width: 1.5em;
+    height: 1.5em;
+    padding: 0.1em;
+}
+
+div.highlight  {
+    position: relative;
+}
+
+.highlight:hover button.copybtn {
+	opacity: 1;
+}
+
+.highlight button.copybtn:hover {
+    background-color: rgb(235, 235, 235);
+}
+
+.highlight button.copybtn:active {
+    background-color: rgb(187, 187, 187);
+}
+
+/**
+ * A minimal CSS-only tooltip copied from:
+ *   https://codepen.io/mildrenben/pen/rVBrpK
+ *
+ * To use, write HTML like the following:
+ *
+ * <p class="o-tooltip--left" data-tooltip="Hey">Short</p>
+ */
+ .o-tooltip--left {
+  position: relative;
+ }
+
+ .o-tooltip--left:after {
+    opacity: 0;
+    visibility: hidden;
+    position: absolute;
+    content: attr(data-tooltip);
+    padding: .2em;
+    font-size: .8em;
+    left: -.2em;
+    background: grey;
+    color: white;
+    white-space: nowrap;
+    z-index: 2;
+    border-radius: 2px;
+    transform: translateX(-102%) translateY(0);
+    transition: opacity 0.2s cubic-bezier(0.64, 0.09, 0.08, 1), transform 0.2s cubic-bezier(0.64, 0.09, 0.08, 1);
+}
+
+.o-tooltip--left:hover:after {
+    display: block;
+    opacity: 1;
+    visibility: visible;
+    transform: translateX(-100%) translateY(0);
+    transition: opacity 0.2s cubic-bezier(0.64, 0.09, 0.08, 1), transform 0.2s cubic-bezier(0.64, 0.09, 0.08, 1);
+    transition-delay: .5s;
+}
+
+/* By default the copy button shouldn't show up when printing a page */
+@media print {
+    button.copybtn {
+        display: none;
+    }
+}
diff --git a/docs-archive/apache-airflow-providers-sftp/4.0.0/_static/copybutton.js b/docs-archive/apache-airflow-providers-sftp/4.0.0/_static/copybutton.js
new file mode 100644
index 0000000000..40ac331086
--- /dev/null
+++ b/docs-archive/apache-airflow-providers-sftp/4.0.0/_static/copybutton.js
@@ -0,0 +1,220 @@
+// Localization support
+const messages = {
+  'en': {
+    'copy': 'Copy',
+    'copy_to_clipboard': 'Copy to clipboard',
+    'copy_success': 'Copied!',
+    'copy_failure': 'Failed to copy',
+  },
+  'es' : {
+    'copy': 'Copiar',
+    'copy_to_clipboard': 'Copiar al portapapeles',
+    'copy_success': '¡Copiado!',
+    'copy_failure': 'Error al copiar',
+  },
+  'de' : {
+    'copy': 'Kopieren',
+    'copy_to_clipboard': 'In die Zwischenablage kopieren',
+    'copy_success': 'Kopiert!',
+    'copy_failure': 'Fehler beim Kopieren',
+  },
+  'fr' : {
+    'copy': 'Copier',
+    'copy_to_clipboard': 'Copié dans le presse-papier',
+    'copy_success': 'Copié !',
+    'copy_failure': 'Échec de la copie',
+  },
+  'ru': {
+    'copy': 'Скопировать',
+    'copy_to_clipboard': 'Скопировать в буфер',
+    'copy_success': 'Скопировано!',
+    'copy_failure': 'Не удалось скопировать',
+  },
+  'zh-CN': {
+    'copy': '复制',
+    'copy_to_clipboard': '复制到剪贴板',
+    'copy_success': '复制成功!',
+    'copy_failure': '复制失败',
+  },
+  'it' : {
+    'copy': 'Copiare',
+    'copy_to_clipboard': 'Copiato negli appunti',
+    'copy_success': 'Copiato!',
+    'copy_failure': 'Errore durante la copia',
+  }
+}
+
+let locale = 'en'
+if( document.documentElement.lang !== undefined
+    && messages[document.documentElement.lang] !== undefined ) {
+  locale = document.documentElement.lang
+}
+
+let doc_url_root = DOCUMENTATION_OPTIONS.URL_ROOT;
+if (doc_url_root == '#') {
+    doc_url_root = '';
+}
+
+/**
+ * SVG files for our copy buttons
+ */
+let iconCheck = `<svg xmlns="http://www.w3.org/2000/svg" class="icon icon-tabler icon-tabler-check" width="44" height="44" viewBox="0 0 24 24" stroke-width="2" stroke="#22863a" fill="none" stroke-linecap="round" stroke-linejoin="round">
+  <title>${messages[locale]['copy_success']}</title>
+  <path stroke="none" d="M0 0h24v24H0z" fill="none"/>
+  <path d="M5 12l5 5l10 -10" />
+</svg>`
+
+// If the user specified their own SVG use that, otherwise use the default
+let iconCopy = ``;
+if (!iconCopy) {
+  iconCopy = `<svg xmlns="http://www.w3.org/2000/svg" class="icon icon-tabler icon-tabler-copy" width="44" height="44" viewBox="0 0 24 24" stroke-width="1.5" stroke="#000000" fill="none" stroke-linecap="round" stroke-linejoin="round">
+  <title>${messages[locale]['copy_to_clipboard']}</title>
+  <path stroke="none" d="M0 0h24v24H0z" fill="none"/>
+  <rect x="8" y="8" width="12" height="12" rx="2" />
+  <path d="M16 8v-2a2 2 0 0 0 -2 -2h-8a2 2 0 0 0 -2 2v8a2 2 0 0 0 2 2h2" />
+</svg>`
+}
+
+/**
+ * Set up copy/paste for code blocks
+ */
+
+const runWhenDOMLoaded = cb => {
+  if (document.readyState != 'loading') {
+    cb()
+  } else if (document.addEventListener) {
+    document.addEventListener('DOMContentLoaded', cb)
+  } else {
+    document.attachEvent('onreadystatechange', function() {
+      if (document.readyState == 'complete') cb()
+    })
+  }
+}
+
+const codeCellId = index => `codecell${index}`
+
+// Clears selected text since ClipboardJS will select the text when copying
+const clearSelection = () => {
+  if (window.getSelection) {
+    window.getSelection().removeAllRanges()
+  } else if (document.selection) {
+    document.selection.empty()
+  }
+}
+
+// Changes tooltip text for two seconds, then changes it back
+const temporarilyChangeTooltip = (el, oldText, newText) => {
+  el.setAttribute('data-tooltip', newText)
+  el.classList.add('success')
+  setTimeout(() => el.setAttribute('data-tooltip', oldText), 2000)
+  setTimeout(() => el.classList.remove('success'), 2000)
+}
+
+// Changes the copy button icon for two seconds, then changes it back
+const temporarilyChangeIcon = (el) => {
+  el.innerHTML = iconCheck;
+  setTimeout(() => {el.innerHTML = iconCopy}, 2000)
+}
+
+const addCopyButtonToCodeCells = () => {
+  // If ClipboardJS hasn't loaded, wait a bit and try again. This
+  // happens because we load ClipboardJS asynchronously.
+  if (window.ClipboardJS === undefined) {
+    setTimeout(addCopyButtonToCodeCells, 250)
+    return
+  }
+
+  // Add copybuttons to all of our code cells
+  const codeCells = document.querySelectorAll('div.highlight pre')
+  codeCells.forEach((codeCell, index) => {
+    const id = codeCellId(index)
+    codeCell.setAttribute('id', id)
+
+    const clipboardButton = id =>
+    `<button class="copybtn o-tooltip--left" data-tooltip="${messages[locale]['copy']}" data-clipboard-target="#${id}">
+      ${iconCopy}
+    </button>`
+    codeCell.insertAdjacentHTML('afterend', clipboardButton(id))
+  })
+
+function escapeRegExp(string) {
+    return string.replace(/[.*+?^${}()|[\]\\]/g, '\\$&'); // $& means the whole matched string
+}
+
+// Callback when a copy button is clicked. Will be passed the node that was clicked
+// should then grab the text and replace pieces of text that shouldn't be used in output
+function formatCopyText(textContent, copybuttonPromptText, isRegexp = false, onlyCopyPromptLines = true, removePrompts = true, copyEmptyLines = true, lineContinuationChar = "", hereDocDelim = "") {
+
+    var regexp;
+    var match;
+
+    // Do we check for line continuation characters and "HERE-documents"?
+    var useLineCont = !!lineContinuationChar
+    var useHereDoc = !!hereDocDelim
+
+    // create regexp to capture prompt and remaining line
+    if (isRegexp) {
+        regexp = new RegExp('^(' + copybuttonPromptText + ')(.*)')
+    } else {
+        regexp = new RegExp('^(' + escapeRegExp(copybuttonPromptText) + ')(.*)')
+    }
+
+    const outputLines = [];
+    var promptFound = false;
+    var gotLineCont = false;
+    var gotHereDoc = false;
+    const lineGotPrompt = [];
+    for (const line of textContent.split('\n')) {
+        match = line.match(regexp)
+        if (match || gotLineCont || gotHereDoc) {
+            promptFound = regexp.test(line)
+            lineGotPrompt.push(promptFound)
+            if (removePrompts && promptFound) {
+                outputLines.push(match[2])
+            } else {
+                outputLines.push(line)
+            }
+            gotLineCont = line.endsWith(lineContinuationChar) & useLineCont
+            if (line.includes(hereDocDelim) & useHereDoc)
+                gotHereDoc = !gotHereDoc
+        } else if (!onlyCopyPromptLines) {
+            outputLines.push(line)
+        } else if (copyEmptyLines && line.trim() === '') {
+            outputLines.push(line)
+        }
+    }
+
+    // If no lines with the prompt were found then just use original lines
+    if (lineGotPrompt.some(v => v === true)) {
+        textContent = outputLines.join('\n');
+    }
+
+    // Remove a trailing newline to avoid auto-running when pasting
+    if (textContent.endsWith("\n")) {
+        textContent = textContent.slice(0, -1)
+    }
+    return textContent
+}
+
+
+var copyTargetText = (trigger) => {
+  var target = document.querySelector(trigger.attributes['data-clipboard-target'].value);
+  return formatCopyText(target.innerText, '', false, true, true, true, '', '')
+}
+
+  // Initialize with a callback so we can modify the text before copy
+  const clipboard = new ClipboardJS('.copybtn', {text: copyTargetText})
+
+  // Update UI with error/success messages
+  clipboard.on('success', event => {
+    clearSelection()
+    temporarilyChangeTooltip(event.trigger, messages[locale]['copy'], messages[locale]['copy_success'])
+    temporarilyChangeIcon(event.trigger)
+  })
+
+  clipboard.on('error', event => {
+    temporarilyChangeTooltip(event.trigger, messages[locale]['copy'], messages[locale]['copy_failure'])
+  })
+}
+
+runWhenDOMLoaded(addCopyButtonToCodeCells)
\ No newline at end of file
diff --git a/docs-archive/apache-airflow-providers-sftp/4.0.0/_static/copybutton_funcs.js b/docs-archive/apache-airflow-providers-sftp/4.0.0/_static/copybutton_funcs.js
new file mode 100644
index 0000000000..b9168c5565
--- /dev/null
+++ b/docs-archive/apache-airflow-providers-sftp/4.0.0/_static/copybutton_funcs.js
@@ -0,0 +1,58 @@
+function escapeRegExp(string) {
+    return string.replace(/[.*+?^${}()|[\]\\]/g, '\\$&'); // $& means the whole matched string
+}
+
+// Callback when a copy button is clicked. Will be passed the node that was clicked
+// should then grab the text and replace pieces of text that shouldn't be used in output
+export function formatCopyText(textContent, copybuttonPromptText, isRegexp = false, onlyCopyPromptLines = true, removePrompts = true, copyEmptyLines = true, lineContinuationChar = "", hereDocDelim = "") {
+
+    var regexp;
+    var match;
+
+    // Do we check for line continuation characters and "HERE-documents"?
+    var useLineCont = !!lineContinuationChar
+    var useHereDoc = !!hereDocDelim
+
+    // create regexp to capture prompt and remaining line
+    if (isRegexp) {
+        regexp = new RegExp('^(' + copybuttonPromptText + ')(.*)')
+    } else {
+        regexp = new RegExp('^(' + escapeRegExp(copybuttonPromptText) + ')(.*)')
+    }
+
+    const outputLines = [];
+    var promptFound = false;
+    var gotLineCont = false;
+    var gotHereDoc = false;
+    const lineGotPrompt = [];
+    for (const line of textContent.split('\n')) {
+        match = line.match(regexp)
+        if (match || gotLineCont || gotHereDoc) {
+            promptFound = regexp.test(line)
+            lineGotPrompt.push(promptFound)
+            if (removePrompts && promptFound) {
+                outputLines.push(match[2])
+            } else {
+                outputLines.push(line)
+            }
+            gotLineCont = line.endsWith(lineContinuationChar) & useLineCont
+            if (line.includes(hereDocDelim) & useHereDoc)
+                gotHereDoc = !gotHereDoc
+        } else if (!onlyCopyPromptLines) {
+            outputLines.push(line)
+        } else if (copyEmptyLines && line.trim() === '') {
+            outputLines.push(line)
+        }
+    }
+
+    // If no lines with the prompt were found then just use original lines
+    if (lineGotPrompt.some(v => v === true)) {
+        textContent = outputLines.join('\n');
+    }
+
+    // Remove a trailing newline to avoid auto-running when pasting
+    if (textContent.endsWith("\n")) {
+        textContent = textContent.slice(0, -1)
+    }
+    return textContent
+}
diff --git a/docs-archive/apache-airflow-providers-sftp/4.0.0/_static/doctools.js b/docs-archive/apache-airflow-providers-sftp/4.0.0/_static/doctools.js
new file mode 100644
index 0000000000..c3db08d1c3
--- /dev/null
+++ b/docs-archive/apache-airflow-providers-sftp/4.0.0/_static/doctools.js
@@ -0,0 +1,264 @@
+/*
+ * doctools.js
+ * ~~~~~~~~~~~
+ *
+ * Base JavaScript utilities for all Sphinx HTML documentation.
+ *
+ * :copyright: Copyright 2007-2022 by the Sphinx team, see AUTHORS.
+ * :license: BSD, see LICENSE for details.
+ *
+ */
+"use strict";
+
+const _ready = (callback) => {
+  if (document.readyState !== "loading") {
+    callback();
+  } else {
+    document.addEventListener("DOMContentLoaded", callback);
+  }
+};
+
+/**
+ * highlight a given string on a node by wrapping it in
+ * span elements with the given class name.
+ */
+const _highlight = (node, addItems, text, className) => {
+  if (node.nodeType === Node.TEXT_NODE) {
+    const val = node.nodeValue;
+    const parent = node.parentNode;
+    const pos = val.toLowerCase().indexOf(text);
+    if (
+      pos >= 0 &&
+      !parent.classList.contains(className) &&
+      !parent.classList.contains("nohighlight")
+    ) {
+      let span;
+
+      const closestNode = parent.closest("body, svg, foreignObject");
+      const isInSVG = closestNode && closestNode.matches("svg");
+      if (isInSVG) {
+        span = document.createElementNS("http://www.w3.org/2000/svg", "tspan");
+      } else {
+        span = document.createElement("span");
+        span.classList.add(className);
+      }
+
+      span.appendChild(document.createTextNode(val.substr(pos, text.length)));
+      parent.insertBefore(
+        span,
+        parent.insertBefore(
+          document.createTextNode(val.substr(pos + text.length)),
+          node.nextSibling
+        )
+      );
+      node.nodeValue = val.substr(0, pos);
+
+      if (isInSVG) {
+        const rect = document.createElementNS(
+          "http://www.w3.org/2000/svg",
+          "rect"
+        );
+        const bbox = parent.getBBox();
+        rect.x.baseVal.value = bbox.x;
+        rect.y.baseVal.value = bbox.y;
+        rect.width.baseVal.value = bbox.width;
+        rect.height.baseVal.value = bbox.height;
+        rect.setAttribute("class", className);
+        addItems.push({ parent: parent, target: rect });
+      }
+    }
+  } else if (node.matches && !node.matches("button, select, textarea")) {
+    node.childNodes.forEach((el) => _highlight(el, addItems, text, className));
+  }
+};
+const _highlightText = (thisNode, text, className) => {
+  let addItems = [];
+  _highlight(thisNode, addItems, text, className);
+  addItems.forEach((obj) =>
+    obj.parent.insertAdjacentElement("beforebegin", obj.target)
+  );
+};
+
+/**
+ * Small JavaScript module for the documentation.
+ */
+const Documentation = {
+  init: () => {
+    Documentation.highlightSearchWords();
+    Documentation.initDomainIndexTable();
+    Documentation.initOnKeyListeners();
+  },
+
+  /**
+   * i18n support
+   */
+  TRANSLATIONS: {},
+  PLURAL_EXPR: (n) => (n === 1 ? 0 : 1),
+  LOCALE: "unknown",
+
+  // gettext and ngettext don't access this so that the functions
+  // can safely bound to a different name (_ = Documentation.gettext)
+  gettext: (string) => {
+    const translated = Documentation.TRANSLATIONS[string];
+    switch (typeof translated) {
+      case "undefined":
+        return string; // no translation
+      case "string":
+        return translated; // translation exists
+      default:
+        return translated[0]; // (singular, plural) translation tuple exists
+    }
+  },
+
+  ngettext: (singular, plural, n) => {
+    const translated = Documentation.TRANSLATIONS[singular];
+    if (typeof translated !== "undefined")
+      return translated[Documentation.PLURAL_EXPR(n)];
+    return n === 1 ? singular : plural;
+  },
+
+  addTranslations: (catalog) => {
+    Object.assign(Documentation.TRANSLATIONS, catalog.messages);
+    Documentation.PLURAL_EXPR = new Function(
+      "n",
+      `return (${catalog.plural_expr})`
+    );
+    Documentation.LOCALE = catalog.locale;
+  },
+
+  /**
+   * highlight the search words provided in the url in the text
+   */
+  highlightSearchWords: () => {
+    const highlight =
+      new URLSearchParams(window.location.search).get("highlight") || "";
+    const terms = highlight.toLowerCase().split(/\s+/).filter(x => x);
+    if (terms.length === 0) return; // nothing to do
+
+    // There should never be more than one element matching "div.body"
+    const divBody = document.querySelectorAll("div.body");
+    const body = divBody.length ? divBody[0] : document.querySelector("body");
+    window.setTimeout(() => {
+      terms.forEach((term) => _highlightText(body, term, "highlighted"));
+    }, 10);
+
+    const searchBox = document.getElementById("searchbox");
+    if (searchBox === null) return;
+    searchBox.appendChild(
+      document
+        .createRange()
+        .createContextualFragment(
+          '<p class="highlight-link">' +
+            '<a href="javascript:Documentation.hideSearchWords()">' +
+            Documentation.gettext("Hide Search Matches") +
+            "</a></p>"
+        )
+    );
+  },
+
+  /**
+   * helper function to hide the search marks again
+   */
+  hideSearchWords: () => {
+    document
+      .querySelectorAll("#searchbox .highlight-link")
+      .forEach((el) => el.remove());
+    document
+      .querySelectorAll("span.highlighted")
+      .forEach((el) => el.classList.remove("highlighted"));
+    const url = new URL(window.location);
+    url.searchParams.delete("highlight");
+    window.history.replaceState({}, "", url);
+  },
+
+  /**
+   * helper function to focus on search bar
+   */
+  focusSearchBar: () => {
+    document.querySelectorAll("input[name=q]")[0]?.focus();
+  },
+
+  /**
+   * Initialise the domain index toggle buttons
+   */
+  initDomainIndexTable: () => {
+    const toggler = (el) => {
+      const idNumber = el.id.substr(7);
+      const toggledRows = document.querySelectorAll(`tr.cg-${idNumber}`);
+      if (el.src.substr(-9) === "minus.png") {
+        el.src = `${el.src.substr(0, el.src.length - 9)}plus.png`;
+        toggledRows.forEach((el) => (el.style.display = "none"));
+      } else {
+        el.src = `${el.src.substr(0, el.src.length - 8)}minus.png`;
+        toggledRows.forEach((el) => (el.style.display = ""));
+      }
+    };
+
+    const togglerElements = document.querySelectorAll("img.toggler");
+    togglerElements.forEach((el) =>
+      el.addEventListener("click", (event) => toggler(event.currentTarget))
+    );
+    togglerElements.forEach((el) => (el.style.display = ""));
+    if (DOCUMENTATION_OPTIONS.COLLAPSE_INDEX) togglerElements.forEach(toggler);
+  },
+
+  initOnKeyListeners: () => {
+    // only install a listener if it is really needed
+    if (
+      !DOCUMENTATION_OPTIONS.NAVIGATION_WITH_KEYS &&
+      !DOCUMENTATION_OPTIONS.ENABLE_SEARCH_SHORTCUTS
+    )
+      return;
+
+    const blacklistedElements = new Set([
+      "TEXTAREA",
+      "INPUT",
+      "SELECT",
+      "BUTTON",
+    ]);
+    document.addEventListener("keydown", (event) => {
+      if (blacklistedElements.has(document.activeElement.tagName)) return; // bail for input elements
+      if (event.altKey || event.ctrlKey || event.metaKey) return; // bail with special keys
+
+      if (!event.shiftKey) {
+        switch (event.key) {
+          case "ArrowLeft":
+            if (!DOCUMENTATION_OPTIONS.NAVIGATION_WITH_KEYS) break;
+
+            const prevLink = document.querySelector('link[rel="prev"]');
+            if (prevLink && prevLink.href) {
+              window.location.href = prevLink.href;
+              event.preventDefault();
+            }
+            break;
+          case "ArrowRight":
+            if (!DOCUMENTATION_OPTIONS.NAVIGATION_WITH_KEYS) break;
+
+            const nextLink = document.querySelector('link[rel="next"]');
+            if (nextLink && nextLink.href) {
+              window.location.href = nextLink.href;
+              event.preventDefault();
+            }
+            break;
+          case "Escape":
+            if (!DOCUMENTATION_OPTIONS.ENABLE_SEARCH_SHORTCUTS) break;
+            Documentation.hideSearchWords();
+            event.preventDefault();
+        }
+      }
+
+      // some keyboard layouts may need Shift to get /
+      switch (event.key) {
+        case "/":
+          if (!DOCUMENTATION_OPTIONS.ENABLE_SEARCH_SHORTCUTS) break;
+          Documentation.focusSearchBar();
+          event.preventDefault();
+      }
+    });
+  },
+};
+
+// quick alias for translations
+const _ = Documentation.gettext;
+
+_ready(Documentation.init);
diff --git a/docs-archive/apache-airflow-providers-sftp/4.0.0/_static/documentation_options.js b/docs-archive/apache-airflow-providers-sftp/4.0.0/_static/documentation_options.js
new file mode 100644
index 0000000000..52c7f1f5a7
--- /dev/null
+++ b/docs-archive/apache-airflow-providers-sftp/4.0.0/_static/documentation_options.js
@@ -0,0 +1,14 @@
+var DOCUMENTATION_OPTIONS = {
+    URL_ROOT: document.getElementById("documentation_options").getAttribute('data-url_root'),
+    VERSION: '4.0.0',
+    LANGUAGE: 'en',
+    COLLAPSE_INDEX: false,
+    BUILDER: 'html',
+    FILE_SUFFIX: '.html',
+    LINK_SUFFIX: '.html',
+    HAS_SOURCE: true,
+    SOURCELINK_SUFFIX: '.txt',
+    NAVIGATION_WITH_KEYS: false,
+    SHOW_SEARCH_SUMMARY: true,
+    ENABLE_SEARCH_SHORTCUTS: false,
+};
\ No newline at end of file
diff --git a/docs-archive/apache-airflow-providers-sftp/4.0.0/_static/file.png b/docs-archive/apache-airflow-providers-sftp/4.0.0/_static/file.png
new file mode 100644
index 0000000000..a858a410e4
Binary files /dev/null and b/docs-archive/apache-airflow-providers-sftp/4.0.0/_static/file.png differ
diff --git a/docs-archive/apache-airflow-providers-sftp/4.0.0/_static/graphviz.css b/docs-archive/apache-airflow-providers-sftp/4.0.0/_static/graphviz.css
new file mode 100644
index 0000000000..19e7afd385
--- /dev/null
+++ b/docs-archive/apache-airflow-providers-sftp/4.0.0/_static/graphviz.css
@@ -0,0 +1,19 @@
+/*
+ * graphviz.css
+ * ~~~~~~~~~~~~
+ *
+ * Sphinx stylesheet -- graphviz extension.
+ *
+ * :copyright: Copyright 2007-2022 by the Sphinx team, see AUTHORS.
+ * :license: BSD, see LICENSE for details.
+ *
+ */
+
+img.graphviz {
+    border: 0;
+    max-width: 100%;
+}
+
+object.graphviz {
+    max-width: 100%;
+}
diff --git a/docs-archive/apache-airflow-providers-sftp/4.0.0/_static/jquery-3.6.0.js b/docs-archive/apache-airflow-providers-sftp/4.0.0/_static/jquery-3.6.0.js
new file mode 100644
index 0000000000..fc6c299b73
--- /dev/null
+++ b/docs-archive/apache-airflow-providers-sftp/4.0.0/_static/jquery-3.6.0.js
@@ -0,0 +1,10881 @@
+/*!
+ * jQuery JavaScript Library v3.6.0
+ * https://jquery.com/
+ *
+ * Includes Sizzle.js
+ * https://sizzlejs.com/
+ *
+ * Copyright OpenJS Foundation and other contributors
+ * Released under the MIT license
+ * https://jquery.org/license
+ *
+ * Date: 2021-03-02T17:08Z
+ */
+( function( global, factory ) {
+
+	"use strict";
+
+	if ( typeof module === "object" && typeof module.exports === "object" ) {
+
+		// For CommonJS and CommonJS-like environments where a proper `window`
+		// is present, execute the factory and get jQuery.
+		// For environments that do not have a `window` with a `document`
+		// (such as Node.js), expose a factory as module.exports.
+		// This accentuates the need for the creation of a real `window`.
+		// e.g. var jQuery = require("jquery")(window);
+		// See ticket #14549 for more info.
+		module.exports = global.document ?
+			factory( global, true ) :
+			function( w ) {
+				if ( !w.document ) {
+					throw new Error( "jQuery requires a window with a document" );
+				}
+				return factory( w );
+			};
+	} else {
+		factory( global );
+	}
+
+// Pass this if window is not defined yet
+} )( typeof window !== "undefined" ? window : this, function( window, noGlobal ) {
+
+// Edge <= 12 - 13+, Firefox <=18 - 45+, IE 10 - 11, Safari 5.1 - 9+, iOS 6 - 9.1
+// throw exceptions when non-strict code (e.g., ASP.NET 4.5) accesses strict mode
+// arguments.callee.caller (trac-13335). But as of jQuery 3.0 (2016), strict mode should be common
+// enough that all such attempts are guarded in a try block.
+"use strict";
+
+var arr = [];
+
+var getProto = Object.getPrototypeOf;
+
+var slice = arr.slice;
+
+var flat = arr.flat ? function( array ) {
+	return arr.flat.call( array );
+} : function( array ) {
+	return arr.concat.apply( [], array );
+};
+
+
+var push = arr.push;
+
+var indexOf = arr.indexOf;
+
+var class2type = {};
+
+var toString = class2type.toString;
+
+var hasOwn = class2type.hasOwnProperty;
+
+var fnToString = hasOwn.toString;
+
+var ObjectFunctionString = fnToString.call( Object );
+
+var support = {};
+
+var isFunction = function isFunction( obj ) {
+
+		// Support: Chrome <=57, Firefox <=52
+		// In some browsers, typeof returns "function" for HTML <object> elements
+		// (i.e., `typeof document.createElement( "object" ) === "function"`).
+		// We don't want to classify *any* DOM node as a function.
+		// Support: QtWeb <=3.8.5, WebKit <=534.34, wkhtmltopdf tool <=0.12.5
+		// Plus for old WebKit, typeof returns "function" for HTML collections
+		// (e.g., `typeof document.getElementsByTagName("div") === "function"`). (gh-4756)
+		return typeof obj === "function" && typeof obj.nodeType !== "number" &&
+			typeof obj.item !== "function";
+	};
+
+
+var isWindow = function isWindow( obj ) {
+		return obj != null && obj === obj.window;
+	};
+
+
+var document = window.document;
+
+
+
+	var preservedScriptAttributes = {
+		type: true,
+		src: true,
+		nonce: true,
+		noModule: true
+	};
+
+	function DOMEval( code, node, doc ) {
+		doc = doc || document;
+
+		var i, val,
+			script = doc.createElement( "script" );
+
+		script.text = code;
+		if ( node ) {
+			for ( i in preservedScriptAttributes ) {
+
+				// Support: Firefox 64+, Edge 18+
+				// Some browsers don't support the "nonce" property on scripts.
+				// On the other hand, just using `getAttribute` is not enough as
+				// the `nonce` attribute is reset to an empty string whenever it
+				// becomes browsing-context connected.
+				// See https://github.com/whatwg/html/issues/2369
+				// See https://html.spec.whatwg.org/#nonce-attributes
+				// The `node.getAttribute` check was added for the sake of
+				// `jQuery.globalEval` so that it can fake a nonce-containing node
+				// via an object.
+				val = node[ i ] || node.getAttribute && node.getAttribute( i );
+				if ( val ) {
+					script.setAttribute( i, val );
+				}
+			}
+		}
+		doc.head.appendChild( script ).parentNode.removeChild( script );
+	}
+
+
+function toType( obj ) {
+	if ( obj == null ) {
+		return obj + "";
+	}
+
+	// Support: Android <=2.3 only (functionish RegExp)
+	return typeof obj === "object" || typeof obj === "function" ?
+		class2type[ toString.call( obj ) ] || "object" :
+		typeof obj;
+}
+/* global Symbol */
+// Defining this global in .eslintrc.json would create a danger of using the global
+// unguarded in another place, it seems safer to define global only for this module
+
+
+
+var
+	version = "3.6.0",
+
+	// Define a local copy of jQuery
+	jQuery = function( selector, context ) {
+
+		// The jQuery object is actually just the init constructor 'enhanced'
+		// Need init if jQuery is called (just allow error to be thrown if not included)
+		return new jQuery.fn.init( selector, context );
+	};
+
+jQuery.fn = jQuery.prototype = {
+
+	// The current version of jQuery being used
+	jquery: version,
+
+	constructor: jQuery,
+
+	// The default length of a jQuery object is 0
+	length: 0,
+
+	toArray: function() {
+		return slice.call( this );
+	},
+
+	// Get the Nth element in the matched element set OR
+	// Get the whole matched element set as a clean array
+	get: function( num ) {
+
+		// Return all the elements in a clean array
+		if ( num == null ) {
+			return slice.call( this );
+		}
+
+		// Return just the one element from the set
+		return num < 0 ? this[ num + this.length ] : this[ num ];
+	},
+
+	// Take an array of elements and push it onto the stack
+	// (returning the new matched element set)
+	pushStack: function( elems ) {
+
+		// Build a new jQuery matched element set
+		var ret = jQuery.merge( this.constructor(), elems );
+
+		// Add the old object onto the stack (as a reference)
+		ret.prevObject = this;
+
+		// Return the newly-formed element set
+		return ret;
+	},
+
+	// Execute a callback for every element in the matched set.
+	each: function( callback ) {
+		return jQuery.each( this, callback );
+	},
+
+	map: function( callback ) {
+		return this.pushStack( jQuery.map( this, function( elem, i ) {
+			return callback.call( elem, i, elem );
+		} ) );
+	},
+
+	slice: function() {
+		return this.pushStack( slice.apply( this, arguments ) );
+	},
+
+	first: function() {
+		return this.eq( 0 );
+	},
+
+	last: function() {
+		return this.eq( -1 );
+	},
+
+	even: function() {
+		return this.pushStack( jQuery.grep( this, function( _elem, i ) {
+			return ( i + 1 ) % 2;
+		} ) );
+	},
+
+	odd: function() {
+		return this.pushStack( jQuery.grep( this, function( _elem, i ) {
+			return i % 2;
+		} ) );
+	},
+
+	eq: function( i ) {
+		var len = this.length,
+			j = +i + ( i < 0 ? len : 0 );
+		return this.pushStack( j >= 0 && j < len ? [ this[ j ] ] : [] );
+	},
+
+	end: function() {
+		return this.prevObject || this.constructor();
+	},
+
+	// For internal use only.
+	// Behaves like an Array's method, not like a jQuery method.
+	push: push,
+	sort: arr.sort,
+	splice: arr.splice
+};
+
+jQuery.extend = jQuery.fn.extend = function() {
+	var options, name, src, copy, copyIsArray, clone,
+		target = arguments[ 0 ] || {},
+		i = 1,
+		length = arguments.length,
+		deep = false;
+
+	// Handle a deep copy situation
+	if ( typeof target === "boolean" ) {
+		deep = target;
+
+		// Skip the boolean and the target
+		target = arguments[ i ] || {};
+		i++;
+	}
+
+	// Handle case when target is a string or something (possible in deep copy)
+	if ( typeof target !== "object" && !isFunction( target ) ) {
+		target = {};
+	}
+
+	// Extend jQuery itself if only one argument is passed
+	if ( i === length ) {
+		target = this;
+		i--;
+	}
+
+	for ( ; i < length; i++ ) {
+
+		// Only deal with non-null/undefined values
+		if ( ( options = arguments[ i ] ) != null ) {
+
+			// Extend the base object
+			for ( name in options ) {
+				copy = options[ name ];
+
+				// Prevent Object.prototype pollution
+				// Prevent never-ending loop
+				if ( name === "__proto__" || target === copy ) {
+					continue;
+				}
+
+				// Recurse if we're merging plain objects or arrays
+				if ( deep && copy && ( jQuery.isPlainObject( copy ) ||
+					( copyIsArray = Array.isArray( copy ) ) ) ) {
+					src = target[ name ];
+
+					// Ensure proper type for the source value
+					if ( copyIsArray && !Array.isArray( src ) ) {
+						clone = [];
+					} else if ( !copyIsArray && !jQuery.isPlainObject( src ) ) {
+						clone = {};
+					} else {
+						clone = src;
+					}
+					copyIsArray = false;
+
+					// Never move original objects, clone them
+					target[ name ] = jQuery.extend( deep, clone, copy );
+
+				// Don't bring in undefined values
+				} else if ( copy !== undefined ) {
+					target[ name ] = copy;
+				}
+			}
+		}
+	}
+
+	// Return the modified object
+	return target;
+};
+
+jQuery.extend( {
+
+	// Unique for each copy of jQuery on the page
+	expando: "jQuery" + ( version + Math.random() ).replace( /\D/g, "" ),
+
+	// Assume jQuery is ready without the ready module
+	isReady: true,
+
+	error: function( msg ) {
+		throw new Error( msg );
+	},
+
+	noop: function() {},
+
+	isPlainObject: function( obj ) {
+		var proto, Ctor;
+
+		// Detect obvious negatives
+		// Use toString instead of jQuery.type to catch host objects
+		if ( !obj || toString.call( obj ) !== "[object Object]" ) {
+			return false;
+		}
+
+		proto = getProto( obj );
+
+		// Objects with no prototype (e.g., `Object.create( null )`) are plain
+		if ( !proto ) {
+			return true;
+		}
+
+		// Objects with prototype are plain iff they were constructed by a global Object function
+		Ctor = hasOwn.call( proto, "constructor" ) && proto.constructor;
+		return typeof Ctor === "function" && fnToString.call( Ctor ) === ObjectFunctionString;
+	},
+
+	isEmptyObject: function( obj ) {
+		var name;
+
+		for ( name in obj ) {
+			return false;
+		}
+		return true;
+	},
+
+	// Evaluates a script in a provided context; falls back to the global one
+	// if not specified.
+	globalEval: function( code, options, doc ) {
+		DOMEval( code, { nonce: options && options.nonce }, doc );
+	},
+
+	each: function( obj, callback ) {
+		var length, i = 0;
+
+		if ( isArrayLike( obj ) ) {
+			length = obj.length;
+			for ( ; i < length; i++ ) {
+				if ( callback.call( obj[ i ], i, obj[ i ] ) === false ) {
+					break;
+				}
+			}
+		} else {
+			for ( i in obj ) {
+				if ( callback.call( obj[ i ], i, obj[ i ] ) === false ) {
+					break;
+				}
+			}
+		}
+
+		return obj;
+	},
+
+	// results is for internal usage only
+	makeArray: function( arr, results ) {
+		var ret = results || [];
+
+		if ( arr != null ) {
+			if ( isArrayLike( Object( arr ) ) ) {
+				jQuery.merge( ret,
+					typeof arr === "string" ?
+						[ arr ] : arr
+				);
+			} else {
+				push.call( ret, arr );
+			}
+		}
+
+		return ret;
+	},
+
+	inArray: function( elem, arr, i ) {
+		return arr == null ? -1 : indexOf.call( arr, elem, i );
+	},
+
+	// Support: Android <=4.0 only, PhantomJS 1 only
+	// push.apply(_, arraylike) throws on ancient WebKit
+	merge: function( first, second ) {
+		var len = +second.length,
+			j = 0,
+			i = first.length;
+
+		for ( ; j < len; j++ ) {
+			first[ i++ ] = second[ j ];
+		}
+
+		first.length = i;
+
+		return first;
+	},
+
+	grep: function( elems, callback, invert ) {
+		var callbackInverse,
+			matches = [],
+			i = 0,
+			length = elems.length,
+			callbackExpect = !invert;
+
+		// Go through the array, only saving the items
+		// that pass the validator function
+		for ( ; i < length; i++ ) {
+			callbackInverse = !callback( elems[ i ], i );
+			if ( callbackInverse !== callbackExpect ) {
+				matches.push( elems[ i ] );
+			}
+		}
+
+		return matches;
+	},
+
+	// arg is for internal usage only
+	map: function( elems, callback, arg ) {
+		var length, value,
+			i = 0,
+			ret = [];
+
+		// Go through the array, translating each of the items to their new values
+		if ( isArrayLike( elems ) ) {
+			length = elems.length;
+			for ( ; i < length; i++ ) {
+				value = callback( elems[ i ], i, arg );
+
+				if ( value != null ) {
+					ret.push( value );
+				}
+			}
+
+		// Go through every key on the object,
+		} else {
+			for ( i in elems ) {
+				value = callback( elems[ i ], i, arg );
+
+				if ( value != null ) {
+					ret.push( value );
+				}
+			}
+		}
+
+		// Flatten any nested arrays
+		return flat( ret );
+	},
+
+	// A global GUID counter for objects
+	guid: 1,
+
+	// jQuery.support is not used in Core but other projects attach their
+	// properties to it so it needs to exist.
+	support: support
+} );
+
+if ( typeof Symbol === "function" ) {
+	jQuery.fn[ Symbol.iterator ] = arr[ Symbol.iterator ];
+}
+
+// Populate the class2type map
+jQuery.each( "Boolean Number String Function Array Date RegExp Object Error Symbol".split( " " ),
+	function( _i, name ) {
+		class2type[ "[object " + name + "]" ] = name.toLowerCase();
+	} );
+
+function isArrayLike( obj ) {
+
+	// Support: real iOS 8.2 only (not reproducible in simulator)
+	// `in` check used to prevent JIT error (gh-2145)
+	// hasOwn isn't used here due to false negatives
+	// regarding Nodelist length in IE
+	var length = !!obj && "length" in obj && obj.length,
+		type = toType( obj );
+
+	if ( isFunction( obj ) || isWindow( obj ) ) {
+		return false;
+	}
+
+	return type === "array" || length === 0 ||
+		typeof length === "number" && length > 0 && ( length - 1 ) in obj;
+}
+var Sizzle =
+/*!
+ * Sizzle CSS Selector Engine v2.3.6
+ * https://sizzlejs.com/
+ *
+ * Copyright JS Foundation and other contributors
+ * Released under the MIT license
+ * https://js.foundation/
+ *
+ * Date: 2021-02-16
+ */
+( function( window ) {
+var i,
+	support,
+	Expr,
+	getText,
+	isXML,
+	tokenize,
+	compile,
+	select,
+	outermostContext,
+	sortInput,
+	hasDuplicate,
+
+	// Local document vars
+	setDocument,
+	document,
+	docElem,
+	documentIsHTML,
+	rbuggyQSA,
+	rbuggyMatches,
+	matches,
+	contains,
+
+	// Instance-specific data
+	expando = "sizzle" + 1 * new Date(),
+	preferredDoc = window.document,
+	dirruns = 0,
+	done = 0,
+	classCache = createCache(),
+	tokenCache = createCache(),
+	compilerCache = createCache(),
+	nonnativeSelectorCache = createCache(),
+	sortOrder = function( a, b ) {
+		if ( a === b ) {
+			hasDuplicate = true;
+		}
+		return 0;
+	},
+
+	// Instance methods
+	hasOwn = ( {} ).hasOwnProperty,
+	arr = [],
+	pop = arr.pop,
+	pushNative = arr.push,
+	push = arr.push,
+	slice = arr.slice,
+
+	// Use a stripped-down indexOf as it's faster than native
+	// https://jsperf.com/thor-indexof-vs-for/5
+	indexOf = function( list, elem ) {
+		var i = 0,
+			len = list.length;
+		for ( ; i < len; i++ ) {
+			if ( list[ i ] === elem ) {
+				return i;
+			}
+		}
+		return -1;
+	},
+
+	booleans = "checked|selected|async|autofocus|autoplay|controls|defer|disabled|hidden|" +
+		"ismap|loop|multiple|open|readonly|required|scoped",
+
+	// Regular expressions
+
+	// http://www.w3.org/TR/css3-selectors/#whitespace
+	whitespace = "[\\x20\\t\\r\\n\\f]",
+
+	// https://www.w3.org/TR/css-syntax-3/#ident-token-diagram
+	identifier = "(?:\\\\[\\da-fA-F]{1,6}" + whitespace +
+		"?|\\\\[^\\r\\n\\f]|[\\w-]|[^\0-\\x7f])+",
+
+	// Attribute selectors: http://www.w3.org/TR/selectors/#attribute-selectors
+	attributes = "\\[" + whitespace + "*(" + identifier + ")(?:" + whitespace +
+
+		// Operator (capture 2)
+		"*([*^$|!~]?=)" + whitespace +
+
+		// "Attribute values must be CSS identifiers [capture 5]
+		// or strings [capture 3 or capture 4]"
+		"*(?:'((?:\\\\.|[^\\\\'])*)'|\"((?:\\\\.|[^\\\\\"])*)\"|(" + identifier + "))|)" +
+		whitespace + "*\\]",
+
+	pseudos = ":(" + identifier + ")(?:\\((" +
+
+		// To reduce the number of selectors needing tokenize in the preFilter, prefer arguments:
+		// 1. quoted (capture 3; capture 4 or capture 5)
+		"('((?:\\\\.|[^\\\\'])*)'|\"((?:\\\\.|[^\\\\\"])*)\")|" +
+
+		// 2. simple (capture 6)
+		"((?:\\\\.|[^\\\\()[\\]]|" + attributes + ")*)|" +
+
+		// 3. anything else (capture 2)
+		".*" +
+		")\\)|)",
+
+	// Leading and non-escaped trailing whitespace, capturing some non-whitespace characters preceding the latter
+	rwhitespace = new RegExp( whitespace + "+", "g" ),
+	rtrim = new RegExp( "^" + whitespace + "+|((?:^|[^\\\\])(?:\\\\.)*)" +
+		whitespace + "+$", "g" ),
+
+	rcomma = new RegExp( "^" + whitespace + "*," + whitespace + "*" ),
+	rcombinators = new RegExp( "^" + whitespace + "*([>+~]|" + whitespace + ")" + whitespace +
+		"*" ),
+	rdescend = new RegExp( whitespace + "|>" ),
+
+	rpseudo = new RegExp( pseudos ),
+	ridentifier = new RegExp( "^" + identifier + "$" ),
+
+	matchExpr = {
+		"ID": new RegExp( "^#(" + identifier + ")" ),
+		"CLASS": new RegExp( "^\\.(" + identifier + ")" ),
+		"TAG": new RegExp( "^(" + identifier + "|[*])" ),
+		"ATTR": new RegExp( "^" + attributes ),
+		"PSEUDO": new RegExp( "^" + pseudos ),
+		"CHILD": new RegExp( "^:(only|first|last|nth|nth-last)-(child|of-type)(?:\\(" +
+			whitespace + "*(even|odd|(([+-]|)(\\d*)n|)" + whitespace + "*(?:([+-]|)" +
+			whitespace + "*(\\d+)|))" + whitespace + "*\\)|)", "i" ),
+		"bool": new RegExp( "^(?:" + booleans + ")$", "i" ),
+
+		// For use in libraries implementing .is()
+		// We use this for POS matching in `select`
+		"needsContext": new RegExp( "^" + whitespace +
+			"*[>+~]|:(even|odd|eq|gt|lt|nth|first|last)(?:\\(" + whitespace +
+			"*((?:-\\d)?\\d*)" + whitespace + "*\\)|)(?=[^-]|$)", "i" )
+	},
+
+	rhtml = /HTML$/i,
+	rinputs = /^(?:input|select|textarea|button)$/i,
+	rheader = /^h\d$/i,
+
+	rnative = /^[^{]+\{\s*\[native \w/,
+
+	// Easily-parseable/retrievable ID or TAG or CLASS selectors
+	rquickExpr = /^(?:#([\w-]+)|(\w+)|\.([\w-]+))$/,
+
+	rsibling = /[+~]/,
+
+	// CSS escapes
+	// http://www.w3.org/TR/CSS21/syndata.html#escaped-characters
+	runescape = new RegExp( "\\\\[\\da-fA-F]{1,6}" + whitespace + "?|\\\\([^\\r\\n\\f])", "g" ),
+	funescape = function( escape, nonHex ) {
+		var high = "0x" + escape.slice( 1 ) - 0x10000;
+
+		return nonHex ?
+
+			// Strip the backslash prefix from a non-hex escape sequence
+			nonHex :
+
+			// Replace a hexadecimal escape sequence with the encoded Unicode code point
+			// Support: IE <=11+
+			// For values outside the Basic Multilingual Plane (BMP), manually construct a
+			// surrogate pair
+			high < 0 ?
+				String.fromCharCode( high + 0x10000 ) :
+				String.fromCharCode( high >> 10 | 0xD800, high & 0x3FF | 0xDC00 );
+	},
+
+	// CSS string/identifier serialization
+	// https://drafts.csswg.org/cssom/#common-serializing-idioms
+	rcssescape = /([\0-\x1f\x7f]|^-?\d)|^-$|[^\0-\x1f\x7f-\uFFFF\w-]/g,
+	fcssescape = function( ch, asCodePoint ) {
+		if ( asCodePoint ) {
+
+			// U+0000 NULL becomes U+FFFD REPLACEMENT CHARACTER
+			if ( ch === "\0" ) {
+				return "\uFFFD";
+			}
+
+			// Control characters and (dependent upon position) numbers get escaped as code points
+			return ch.slice( 0, -1 ) + "\\" +
+				ch.charCodeAt( ch.length - 1 ).toString( 16 ) + " ";
+		}
+
+		// Other potentially-special ASCII characters get backslash-escaped
+		return "\\" + ch;
+	},
+
+	// Used for iframes
+	// See setDocument()
+	// Removing the function wrapper causes a "Permission Denied"
+	// error in IE
+	unloadHandler = function() {
+		setDocument();
+	},
+
+	inDisabledFieldset = addCombinator(
+		function( elem ) {
+			return elem.disabled === true && elem.nodeName.toLowerCase() === "fieldset";
+		},
+		{ dir: "parentNode", next: "legend" }
+	);
+
+// Optimize for push.apply( _, NodeList )
+try {
+	push.apply(
+		( arr = slice.call( preferredDoc.childNodes ) ),
+		preferredDoc.childNodes
+	);
+
+	// Support: Android<4.0
+	// Detect silently failing push.apply
+	// eslint-disable-next-line no-unused-expressions
+	arr[ preferredDoc.childNodes.length ].nodeType;
+} catch ( e ) {
+	push = { apply: arr.length ?
+
+		// Leverage slice if possible
+		function( target, els ) {
+			pushNative.apply( target, slice.call( els ) );
+		} :
+
+		// Support: IE<9
+		// Otherwise append directly
+		function( target, els ) {
+			var j = target.length,
+				i = 0;
+
+			// Can't trust NodeList.length
+			while ( ( target[ j++ ] = els[ i++ ] ) ) {}
+			target.length = j - 1;
+		}
+	};
+}
+
+function Sizzle( selector, context, results, seed ) {
+	var m, i, elem, nid, match, groups, newSelector,
+		newContext = context && context.ownerDocument,
+
+		// nodeType defaults to 9, since context defaults to document
+		nodeType = context ? context.nodeType : 9;
+
+	results = results || [];
+
+	// Return early from calls with invalid selector or context
+	if ( typeof selector !== "string" || !selector ||
+		nodeType !== 1 && nodeType !== 9 && nodeType !== 11 ) {
+
+		return results;
+	}
+
+	// Try to shortcut find operations (as opposed to filters) in HTML documents
+	if ( !seed ) {
+		setDocument( context );
+		context = context || document;
+
+		if ( documentIsHTML ) {
+
+			// If the selector is sufficiently simple, try using a "get*By*" DOM method
+			// (excepting DocumentFragment context, where the methods don't exist)
+			if ( nodeType !== 11 && ( match = rquickExpr.exec( selector ) ) ) {
+
+				// ID selector
+				if ( ( m = match[ 1 ] ) ) {
+
+					// Document context
+					if ( nodeType === 9 ) {
+						if ( ( elem = context.getElementById( m ) ) ) {
+
+							// Support: IE, Opera, Webkit
+							// TODO: identify versions
+							// getElementById can match elements by name instead of ID
+							if ( elem.id === m ) {
+								results.push( elem );
+								return results;
+							}
+						} else {
+							return results;
+						}
+
+					// Element context
+					} else {
+
+						// Support: IE, Opera, Webkit
+						// TODO: identify versions
+						// getElementById can match elements by name instead of ID
+						if ( newContext && ( elem = newContext.getElementById( m ) ) &&
+							contains( context, elem ) &&
+							elem.id === m ) {
+
+							results.push( elem );
+							return results;
+						}
+					}
+
+				// Type selector
+				} else if ( match[ 2 ] ) {
+					push.apply( results, context.getElementsByTagName( selector ) );
+					return results;
+
+				// Class selector
+				} else if ( ( m = match[ 3 ] ) && support.getElementsByClassName &&
+					context.getElementsByClassName ) {
+
+					push.apply( results, context.getElementsByClassName( m ) );
+					return results;
+				}
+			}
+
+			// Take advantage of querySelectorAll
+			if ( support.qsa &&
+				!nonnativeSelectorCache[ selector + " " ] &&
+				( !rbuggyQSA || !rbuggyQSA.test( selector ) ) &&
+
+				// Support: IE 8 only
+				// Exclude object elements
+				( nodeType !== 1 || context.nodeName.toLowerCase() !== "object" ) ) {
+
+				newSelector = selector;
+				newContext = context;
+
+				// qSA considers elements outside a scoping root when evaluating child or
+				// descendant combinators, which is not what we want.
+				// In such cases, we work around the behavior by prefixing every selector in the
+				// list with an ID selector referencing the scope context.
+				// The technique has to be used as well when a leading combinator is used
+				// as such selectors are not recognized by querySelectorAll.
+				// Thanks to Andrew Dupont for this technique.
+				if ( nodeType === 1 &&
+					( rdescend.test( selector ) || rcombinators.test( selector ) ) ) {
+
+					// Expand context for sibling selectors
+					newContext = rsibling.test( selector ) && testContext( context.parentNode ) ||
+						context;
+
+					// We can use :scope instead of the ID hack if the browser
+					// supports it & if we're not changing the context.
+					if ( newContext !== context || !support.scope ) {
+
+						// Capture the context ID, setting it first if necessary
+						if ( ( nid = context.getAttribute( "id" ) ) ) {
+							nid = nid.replace( rcssescape, fcssescape );
+						} else {
+							context.setAttribute( "id", ( nid = expando ) );
+						}
+					}
+
+					// Prefix every selector in the list
+					groups = tokenize( selector );
+					i = groups.length;
+					while ( i-- ) {
+						groups[ i ] = ( nid ? "#" + nid : ":scope" ) + " " +
+							toSelector( groups[ i ] );
+					}
+					newSelector = groups.join( "," );
+				}
+
+				try {
+					push.apply( results,
+						newContext.querySelectorAll( newSelector )
+					);
+					return results;
+				} catch ( qsaError ) {
+					nonnativeSelectorCache( selector, true );
+				} finally {
+					if ( nid === expando ) {
+						context.removeAttribute( "id" );
+					}
+				}
+			}
+		}
+	}
+
+	// All others
+	return select( selector.replace( rtrim, "$1" ), context, results, seed );
+}
+
+/**
+ * Create key-value caches of limited size
+ * @returns {function(string, object)} Returns the Object data after storing it on itself with
+ *	property name the (space-suffixed) string and (if the cache is larger than Expr.cacheLength)
+ *	deleting the oldest entry
+ */
+function createCache() {
+	var keys = [];
+
+	function cache( key, value ) {
+
+		// Use (key + " ") to avoid collision with native prototype properties (see Issue #157)
+		if ( keys.push( key + " " ) > Expr.cacheLength ) {
+
+			// Only keep the most recent entries
+			delete cache[ keys.shift() ];
+		}
+		return ( cache[ key + " " ] = value );
+	}
+	return cache;
+}
+
+/**
+ * Mark a function for special use by Sizzle
+ * @param {Function} fn The function to mark
+ */
+function markFunction( fn ) {
+	fn[ expando ] = true;
+	return fn;
+}
+
+/**
+ * Support testing using an element
+ * @param {Function} fn Passed the created element and returns a boolean result
+ */
+function assert( fn ) {
+	var el = document.createElement( "fieldset" );
+
+	try {
+		return !!fn( el );
+	} catch ( e ) {
+		return false;
+	} finally {
+
+		// Remove from its parent by default
+		if ( el.parentNode ) {
+			el.parentNode.removeChild( el );
+		}
+
+		// release memory in IE
+		el = null;
+	}
+}
+
+/**
+ * Adds the same handler for all of the specified attrs
+ * @param {String} attrs Pipe-separated list of attributes
+ * @param {Function} handler The method that will be applied
+ */
+function addHandle( attrs, handler ) {
+	var arr = attrs.split( "|" ),
+		i = arr.length;
+
+	while ( i-- ) {
+		Expr.attrHandle[ arr[ i ] ] = handler;
+	}
+}
+
+/**
+ * Checks document order of two siblings
+ * @param {Element} a
+ * @param {Element} b
+ * @returns {Number} Returns less than 0 if a precedes b, greater than 0 if a follows b
+ */
+function siblingCheck( a, b ) {
+	var cur = b && a,
+		diff = cur && a.nodeType === 1 && b.nodeType === 1 &&
+			a.sourceIndex - b.sourceIndex;
+
+	// Use IE sourceIndex if available on both nodes
+	if ( diff ) {
+		return diff;
+	}
+
+	// Check if b follows a
+	if ( cur ) {
+		while ( ( cur = cur.nextSibling ) ) {
+			if ( cur === b ) {
+				return -1;
+			}
+		}
+	}
+
+	return a ? 1 : -1;
+}
+
+/**
+ * Returns a function to use in pseudos for input types
+ * @param {String} type
+ */
+function createInputPseudo( type ) {
+	return function( elem ) {
+		var name = elem.nodeName.toLowerCase();
+		return name === "input" && elem.type === type;
+	};
+}
+
+/**
+ * Returns a function to use in pseudos for buttons
+ * @param {String} type
+ */
+function createButtonPseudo( type ) {
+	return function( elem ) {
+		var name = elem.nodeName.toLowerCase();
+		return ( name === "input" || name === "button" ) && elem.type === type;
+	};
+}
+
+/**
+ * Returns a function to use in pseudos for :enabled/:disabled
+ * @param {Boolean} disabled true for :disabled; false for :enabled
+ */
+function createDisabledPseudo( disabled ) {
+
+	// Known :disabled false positives: fieldset[disabled] > legend:nth-of-type(n+2) :can-disable
+	return function( elem ) {
+
+		// Only certain elements can match :enabled or :disabled
+		// https://html.spec.whatwg.org/multipage/scripting.html#selector-enabled
+		// https://html.spec.whatwg.org/multipage/scripting.html#selector-disabled
+		if ( "form" in elem ) {
+
+			// Check for inherited disabledness on relevant non-disabled elements:
+			// * listed form-associated elements in a disabled fieldset
+			//   https://html.spec.whatwg.org/multipage/forms.html#category-listed
+			//   https://html.spec.whatwg.org/multipage/forms.html#concept-fe-disabled
+			// * option elements in a disabled optgroup
+			//   https://html.spec.whatwg.org/multipage/forms.html#concept-option-disabled
+			// All such elements have a "form" property.
+			if ( elem.parentNode && elem.disabled === false ) {
+
+				// Option elements defer to a parent optgroup if present
+				if ( "label" in elem ) {
+					if ( "label" in elem.parentNode ) {
+						return elem.parentNode.disabled === disabled;
+					} else {
+						return elem.disabled === disabled;
+					}
+				}
+
+				// Support: IE 6 - 11
+				// Use the isDisabled shortcut property to check for disabled fieldset ancestors
+				return elem.isDisabled === disabled ||
+
+					// Where there is no isDisabled, check manually
+					/* jshint -W018 */
+					elem.isDisabled !== !disabled &&
+					inDisabledFieldset( elem ) === disabled;
+			}
+
+			return elem.disabled === disabled;
+
+		// Try to winnow out elements that can't be disabled before trusting the disabled property.
+		// Some victims get caught in our net (label, legend, menu, track), but it shouldn't
+		// even exist on them, let alone have a boolean value.
+		} else if ( "label" in elem ) {
+			return elem.disabled === disabled;
+		}
+
+		// Remaining elements are neither :enabled nor :disabled
+		return false;
+	};
+}
+
+/**
+ * Returns a function to use in pseudos for positionals
+ * @param {Function} fn
+ */
+function createPositionalPseudo( fn ) {
+	return markFunction( function( argument ) {
+		argument = +argument;
+		return markFunction( function( seed, matches ) {
+			var j,
+				matchIndexes = fn( [], seed.length, argument ),
+				i = matchIndexes.length;
+
+			// Match elements found at the specified indexes
+			while ( i-- ) {
+				if ( seed[ ( j = matchIndexes[ i ] ) ] ) {
+					seed[ j ] = !( matches[ j ] = seed[ j ] );
+				}
+			}
+		} );
+	} );
+}
+
+/**
+ * Checks a node for validity as a Sizzle context
+ * @param {Element|Object=} context
+ * @returns {Element|Object|Boolean} The input node if acceptable, otherwise a falsy value
+ */
+function testContext( context ) {
+	return context && typeof context.getElementsByTagName !== "undefined" && context;
+}
+
+// Expose support vars for convenience
+support = Sizzle.support = {};
+
+/**
+ * Detects XML nodes
+ * @param {Element|Object} elem An element or a document
+ * @returns {Boolean} True iff elem is a non-HTML XML node
+ */
+isXML = Sizzle.isXML = function( elem ) {
+	var namespace = elem && elem.namespaceURI,
+		docElem = elem && ( elem.ownerDocument || elem ).documentElement;
+
+	// Support: IE <=8
+	// Assume HTML when documentElement doesn't yet exist, such as inside loading iframes
+	// https://bugs.jquery.com/ticket/4833
+	return !rhtml.test( namespace || docElem && docElem.nodeName || "HTML" );
+};
+
+/**
+ * Sets document-related variables once based on the current document
+ * @param {Element|Object} [doc] An element or document object to use to set the document
+ * @returns {Object} Returns the current document
+ */
+setDocument = Sizzle.setDocument = function( node ) {
+	var hasCompare, subWindow,
+		doc = node ? node.ownerDocument || node : preferredDoc;
+
+	// Return early if doc is invalid or already selected
+	// Support: IE 11+, Edge 17 - 18+
+	// IE/Edge sometimes throw a "Permission denied" error when strict-comparing
+	// two documents; shallow comparisons work.
+	// eslint-disable-next-line eqeqeq
+	if ( doc == document || doc.nodeType !== 9 || !doc.documentElement ) {
+		return document;
+	}
+
+	// Update global variables
+	document = doc;
+	docElem = document.documentElement;
+	documentIsHTML = !isXML( document );
+
+	// Support: IE 9 - 11+, Edge 12 - 18+
+	// Accessing iframe documents after unload throws "permission denied" errors (jQuery #13936)
+	// Support: IE 11+, Edge 17 - 18+
+	// IE/Edge sometimes throw a "Permission denied" error when strict-comparing
+	// two documents; shallow comparisons work.
+	// eslint-disable-next-line eqeqeq
+	if ( preferredDoc != document &&
+		( subWindow = document.defaultView ) && subWindow.top !== subWindow ) {
+
+		// Support: IE 11, Edge
+		if ( subWindow.addEventListener ) {
+			subWindow.addEventListener( "unload", unloadHandler, false );
+
+		// Support: IE 9 - 10 only
+		} else if ( subWindow.attachEvent ) {
+			subWindow.attachEvent( "onunload", unloadHandler );
+		}
+	}
+
+	// Support: IE 8 - 11+, Edge 12 - 18+, Chrome <=16 - 25 only, Firefox <=3.6 - 31 only,
+	// Safari 4 - 5 only, Opera <=11.6 - 12.x only
+	// IE/Edge & older browsers don't support the :scope pseudo-class.
+	// Support: Safari 6.0 only
+	// Safari 6.0 supports :scope but it's an alias of :root there.
+	support.scope = assert( function( el ) {
+		docElem.appendChild( el ).appendChild( document.createElement( "div" ) );
+		return typeof el.querySelectorAll !== "undefined" &&
+			!el.querySelectorAll( ":scope fieldset div" ).length;
+	} );
+
+	/* Attributes
+	---------------------------------------------------------------------- */
+
+	// Support: IE<8
+	// Verify that getAttribute really returns attributes and not properties
+	// (excepting IE8 booleans)
+	support.attributes = assert( function( el ) {
+		el.className = "i";
+		return !el.getAttribute( "className" );
+	} );
+
+	/* getElement(s)By*
+	---------------------------------------------------------------------- */
+
+	// Check if getElementsByTagName("*") returns only elements
+	support.getElementsByTagName = assert( function( el ) {
+		el.appendChild( document.createComment( "" ) );
+		return !el.getElementsByTagName( "*" ).length;
+	} );
+
+	// Support: IE<9
+	support.getElementsByClassName = rnative.test( document.getElementsByClassName );
+
+	// Support: IE<10
+	// Check if getElementById returns elements by name
+	// The broken getElementById methods don't pick up programmatically-set names,
+	// so use a roundabout getElementsByName test
+	support.getById = assert( function( el ) {
+		docElem.appendChild( el ).id = expando;
+		return !document.getElementsByName || !document.getElementsByName( expando ).length;
+	} );
+
+	// ID filter and find
+	if ( support.getById ) {
+		Expr.filter[ "ID" ] = function( id ) {
+			var attrId = id.replace( runescape, funescape );
+			return function( elem ) {
+				return elem.getAttribute( "id" ) === attrId;
+			};
+		};
+		Expr.find[ "ID" ] = function( id, context ) {
+			if ( typeof context.getElementById !== "undefined" && documentIsHTML ) {
+				var elem = context.getElementById( id );
+				return elem ? [ elem ] : [];
+			}
+		};
+	} else {
+		Expr.filter[ "ID" ] =  function( id ) {
+			var attrId = id.replace( runescape, funescape );
+			return function( elem ) {
+				var node = typeof elem.getAttributeNode !== "undefined" &&
+					elem.getAttributeNode( "id" );
+				return node && node.value === attrId;
+			};
+		};
+
+		// Support: IE 6 - 7 only
+		// getElementById is not reliable as a find shortcut
+		Expr.find[ "ID" ] = function( id, context ) {
+			if ( typeof context.getElementById !== "undefined" && documentIsHTML ) {
+				var node, i, elems,
+					elem = context.getElementById( id );
+
+				if ( elem ) {
+
+					// Verify the id attribute
+					node = elem.getAttributeNode( "id" );
+					if ( node && node.value === id ) {
+						return [ elem ];
+					}
+
+					// Fall back on getElementsByName
+					elems = context.getElementsByName( id );
+					i = 0;
+					while ( ( elem = elems[ i++ ] ) ) {
+						node = elem.getAttributeNode( "id" );
+						if ( node && node.value === id ) {
+							return [ elem ];
+						}
+					}
+				}
+
+				return [];
+			}
+		};
+	}
+
+	// Tag
+	Expr.find[ "TAG" ] = support.getElementsByTagName ?
+		function( tag, context ) {
+			if ( typeof context.getElementsByTagName !== "undefined" ) {
+				return context.getElementsByTagName( tag );
+
+			// DocumentFragment nodes don't have gEBTN
+			} else if ( support.qsa ) {
+				return context.querySelectorAll( tag );
+			}
+		} :
+
+		function( tag, context ) {
+			var elem,
+				tmp = [],
+				i = 0,
+
+				// By happy coincidence, a (broken) gEBTN appears on DocumentFragment nodes too
+				results = context.getElementsByTagName( tag );
+
+			// Filter out possible comments
+			if ( tag === "*" ) {
+				while ( ( elem = results[ i++ ] ) ) {
+					if ( elem.nodeType === 1 ) {
+						tmp.push( elem );
+					}
+				}
+
+				return tmp;
+			}
+			return results;
+		};
+
+	// Class
+	Expr.find[ "CLASS" ] = support.getElementsByClassName && function( className, context ) {
+		if ( typeof context.getElementsByClassName !== "undefined" && documentIsHTML ) {
+			return context.getElementsByClassName( className );
+		}
+	};
+
+	/* QSA/matchesSelector
+	---------------------------------------------------------------------- */
+
+	// QSA and matchesSelector support
+
+	// matchesSelector(:active) reports false when true (IE9/Opera 11.5)
+	rbuggyMatches = [];
+
+	// qSa(:focus) reports false when true (Chrome 21)
+	// We allow this because of a bug in IE8/9 that throws an error
+	// whenever `document.activeElement` is accessed on an iframe
+	// So, we allow :focus to pass through QSA all the time to avoid the IE error
+	// See https://bugs.jquery.com/ticket/13378
+	rbuggyQSA = [];
+
+	if ( ( support.qsa = rnative.test( document.querySelectorAll ) ) ) {
+
+		// Build QSA regex
+		// Regex strategy adopted from Diego Perini
+		assert( function( el ) {
+
+			var input;
+
+			// Select is set to empty string on purpose
+			// This is to test IE's treatment of not explicitly
+			// setting a boolean content attribute,
+			// since its presence should be enough
+			// https://bugs.jquery.com/ticket/12359
+			docElem.appendChild( el ).innerHTML = "<a id='" + expando + "'></a>" +
+				"<select id='" + expando + "-\r\\' msallowcapture=''>" +
+				"<option selected=''></option></select>";
+
+			// Support: IE8, Opera 11-12.16
+			// Nothing should be selected when empty strings follow ^= or $= or *=
+			// The test attribute must be unknown in Opera but "safe" for WinRT
+			// https://msdn.microsoft.com/en-us/library/ie/hh465388.aspx#attribute_section
+			if ( el.querySelectorAll( "[msallowcapture^='']" ).length ) {
+				rbuggyQSA.push( "[*^$]=" + whitespace + "*(?:''|\"\")" );
+			}
+
+			// Support: IE8
+			// Boolean attributes and "value" are not treated correctly
+			if ( !el.querySelectorAll( "[selected]" ).length ) {
+				rbuggyQSA.push( "\\[" + whitespace + "*(?:value|" + booleans + ")" );
+			}
+
+			// Support: Chrome<29, Android<4.4, Safari<7.0+, iOS<7.0+, PhantomJS<1.9.8+
+			if ( !el.querySelectorAll( "[id~=" + expando + "-]" ).length ) {
+				rbuggyQSA.push( "~=" );
+			}
+
+			// Support: IE 11+, Edge 15 - 18+
+			// IE 11/Edge don't find elements on a `[name='']` query in some cases.
+			// Adding a temporary attribute to the document before the selection works
+			// around the issue.
+			// Interestingly, IE 10 & older don't seem to have the issue.
+			input = document.createElement( "input" );
+			input.setAttribute( "name", "" );
+			el.appendChild( input );
+			if ( !el.querySelectorAll( "[name='']" ).length ) {
+				rbuggyQSA.push( "\\[" + whitespace + "*name" + whitespace + "*=" +
+					whitespace + "*(?:''|\"\")" );
+			}
+
+			// Webkit/Opera - :checked should return selected option elements
+			// http://www.w3.org/TR/2011/REC-css3-selectors-20110929/#checked
+			// IE8 throws error here and will not see later tests
+			if ( !el.querySelectorAll( ":checked" ).length ) {
+				rbuggyQSA.push( ":checked" );
+			}
+
+			// Support: Safari 8+, iOS 8+
+			// https://bugs.webkit.org/show_bug.cgi?id=136851
+			// In-page `selector#id sibling-combinator selector` fails
+			if ( !el.querySelectorAll( "a#" + expando + "+*" ).length ) {
+				rbuggyQSA.push( ".#.+[+~]" );
+			}
+
+			// Support: Firefox <=3.6 - 5 only
+			// Old Firefox doesn't throw on a badly-escaped identifier.
+			el.querySelectorAll( "\\\f" );
+			rbuggyQSA.push( "[\\r\\n\\f]" );
+		} );
+
+		assert( function( el ) {
+			el.innerHTML = "<a href='' disabled='disabled'></a>" +
+				"<select disabled='disabled'><option/></select>";
+
+			// Support: Windows 8 Native Apps
+			// The type and name attributes are restricted during .innerHTML assignment
+			var input = document.createElement( "input" );
+			input.setAttribute( "type", "hidden" );
+			el.appendChild( input ).setAttribute( "name", "D" );
+
+			// Support: IE8
+			// Enforce case-sensitivity of name attribute
+			if ( el.querySelectorAll( "[name=d]" ).length ) {
+				rbuggyQSA.push( "name" + whitespace + "*[*^$|!~]?=" );
+			}
+
+			// FF 3.5 - :enabled/:disabled and hidden elements (hidden elements are still enabled)
+			// IE8 throws error here and will not see later tests
+			if ( el.querySelectorAll( ":enabled" ).length !== 2 ) {
+				rbuggyQSA.push( ":enabled", ":disabled" );
+			}
+
+			// Support: IE9-11+
+			// IE's :disabled selector does not pick up the children of disabled fieldsets
+			docElem.appendChild( el ).disabled = true;
+			if ( el.querySelectorAll( ":disabled" ).length !== 2 ) {
+				rbuggyQSA.push( ":enabled", ":disabled" );
+			}
+
+			// Support: Opera 10 - 11 only
+			// Opera 10-11 does not throw on post-comma invalid pseudos
+			el.querySelectorAll( "*,:x" );
+			rbuggyQSA.push( ",.*:" );
+		} );
+	}
+
+	if ( ( support.matchesSelector = rnative.test( ( matches = docElem.matches ||
+		docElem.webkitMatchesSelector ||
+		docElem.mozMatchesSelector ||
+		docElem.oMatchesSelector ||
+		docElem.msMatchesSelector ) ) ) ) {
+
+		assert( function( el ) {
+
+			// Check to see if it's possible to do matchesSelector
+			// on a disconnected node (IE 9)
+			support.disconnectedMatch = matches.call( el, "*" );
+
+			// This should fail with an exception
+			// Gecko does not error, returns false instead
+			matches.call( el, "[s!='']:x" );
+			rbuggyMatches.push( "!=", pseudos );
+		} );
+	}
+
+	rbuggyQSA = rbuggyQSA.length && new RegExp( rbuggyQSA.join( "|" ) );
+	rbuggyMatches = rbuggyMatches.length && new RegExp( rbuggyMatches.join( "|" ) );
+
+	/* Contains
+	---------------------------------------------------------------------- */
+	hasCompare = rnative.test( docElem.compareDocumentPosition );
+
+	// Element contains another
+	// Purposefully self-exclusive
+	// As in, an element does not contain itself
+	contains = hasCompare || rnative.test( docElem.contains ) ?
+		function( a, b ) {
+			var adown = a.nodeType === 9 ? a.documentElement : a,
+				bup = b && b.parentNode;
+			return a === bup || !!( bup && bup.nodeType === 1 && (
+				adown.contains ?
+					adown.contains( bup ) :
+					a.compareDocumentPosition && a.compareDocumentPosition( bup ) & 16
+			) );
+		} :
+		function( a, b ) {
+			if ( b ) {
+				while ( ( b = b.parentNode ) ) {
+					if ( b === a ) {
+						return true;
+					}
+				}
+			}
+			return false;
+		};
+
+	/* Sorting
+	---------------------------------------------------------------------- */
+
+	// Document order sorting
+	sortOrder = hasCompare ?
+	function( a, b ) {
+
+		// Flag for duplicate removal
+		if ( a === b ) {
+			hasDuplicate = true;
+			return 0;
+		}
+
+		// Sort on method existence if only one input has compareDocumentPosition
+		var compare = !a.compareDocumentPosition - !b.compareDocumentPosition;
+		if ( compare ) {
+			return compare;
+		}
+
+		// Calculate position if both inputs belong to the same document
+		// Support: IE 11+, Edge 17 - 18+
+		// IE/Edge sometimes throw a "Permission denied" error when strict-comparing
+		// two documents; shallow comparisons work.
+		// eslint-disable-next-line eqeqeq
+		compare = ( a.ownerDocument || a ) == ( b.ownerDocument || b ) ?
+			a.compareDocumentPosition( b ) :
+
+			// Otherwise we know they are disconnected
+			1;
+
+		// Disconnected nodes
+		if ( compare & 1 ||
+			( !support.sortDetached && b.compareDocumentPosition( a ) === compare ) ) {
+
+			// Choose the first element that is related to our preferred document
+			// Support: IE 11+, Edge 17 - 18+
+			// IE/Edge sometimes throw a "Permission denied" error when strict-comparing
+			// two documents; shallow comparisons work.
+			// eslint-disable-next-line eqeqeq
+			if ( a == document || a.ownerDocument == preferredDoc &&
+				contains( preferredDoc, a ) ) {
+				return -1;
+			}
+
+			// Support: IE 11+, Edge 17 - 18+
+			// IE/Edge sometimes throw a "Permission denied" error when strict-comparing
+			// two documents; shallow comparisons work.
+			// eslint-disable-next-line eqeqeq
+			if ( b == document || b.ownerDocument == preferredDoc &&
+				contains( preferredDoc, b ) ) {
+				return 1;
+			}
+
+			// Maintain original order
+			return sortInput ?
+				( indexOf( sortInput, a ) - indexOf( sortInput, b ) ) :
+				0;
+		}
+
+		return compare & 4 ? -1 : 1;
+	} :
+	function( a, b ) {
+
+		// Exit early if the nodes are identical
+		if ( a === b ) {
+			hasDuplicate = true;
+			return 0;
+		}
+
+		var cur,
+			i = 0,
+			aup = a.parentNode,
+			bup = b.parentNode,
+			ap = [ a ],
+			bp = [ b ];
+
+		// Parentless nodes are either documents or disconnected
+		if ( !aup || !bup ) {
+
+			// Support: IE 11+, Edge 17 - 18+
+			// IE/Edge sometimes throw a "Permission denied" error when strict-comparing
+			// two documents; shallow comparisons work.
+			/* eslint-disable eqeqeq */
+			return a == document ? -1 :
+				b == document ? 1 :
+				/* eslint-enable eqeqeq */
+				aup ? -1 :
+				bup ? 1 :
+				sortInput ?
+				( indexOf( sortInput, a ) - indexOf( sortInput, b ) ) :
+				0;
+
+		// If the nodes are siblings, we can do a quick check
+		} else if ( aup === bup ) {
+			return siblingCheck( a, b );
+		}
+
+		// Otherwise we need full lists of their ancestors for comparison
+		cur = a;
+		while ( ( cur = cur.parentNode ) ) {
+			ap.unshift( cur );
+		}
+		cur = b;
+		while ( ( cur = cur.parentNode ) ) {
+			bp.unshift( cur );
+		}
+
+		// Walk down the tree looking for a discrepancy
+		while ( ap[ i ] === bp[ i ] ) {
+			i++;
+		}
+
+		return i ?
+
+			// Do a sibling check if the nodes have a common ancestor
+			siblingCheck( ap[ i ], bp[ i ] ) :
+
+			// Otherwise nodes in our document sort first
+			// Support: IE 11+, Edge 17 - 18+
+			// IE/Edge sometimes throw a "Permission denied" error when strict-comparing
+			// two documents; shallow comparisons work.
+			/* eslint-disable eqeqeq */
+			ap[ i ] == preferredDoc ? -1 :
+			bp[ i ] == preferredDoc ? 1 :
+			/* eslint-enable eqeqeq */
+			0;
+	};
+
+	return document;
+};
+
+Sizzle.matches = function( expr, elements ) {
+	return Sizzle( expr, null, null, elements );
+};
+
+Sizzle.matchesSelector = function( elem, expr ) {
+	setDocument( elem );
+
+	if ( support.matchesSelector && documentIsHTML &&
+		!nonnativeSelectorCache[ expr + " " ] &&
+		( !rbuggyMatches || !rbuggyMatches.test( expr ) ) &&
+		( !rbuggyQSA     || !rbuggyQSA.test( expr ) ) ) {
+
+		try {
+			var ret = matches.call( elem, expr );
+
+			// IE 9's matchesSelector returns false on disconnected nodes
+			if ( ret || support.disconnectedMatch ||
+
+				// As well, disconnected nodes are said to be in a document
+				// fragment in IE 9
+				elem.document && elem.document.nodeType !== 11 ) {
+				return ret;
+			}
+		} catch ( e ) {
+			nonnativeSelectorCache( expr, true );
+		}
+	}
+
+	return Sizzle( expr, document, null, [ elem ] ).length > 0;
+};
+
+Sizzle.contains = function( context, elem ) {
+
+	// Set document vars if needed
+	// Support: IE 11+, Edge 17 - 18+
+	// IE/Edge sometimes throw a "Permission denied" error when strict-comparing
+	// two documents; shallow comparisons work.
+	// eslint-disable-next-line eqeqeq
+	if ( ( context.ownerDocument || context ) != document ) {
+		setDocument( context );
+	}
+	return contains( context, elem );
+};
+
+Sizzle.attr = function( elem, name ) {
+
+	// Set document vars if needed
+	// Support: IE 11+, Edge 17 - 18+
+	// IE/Edge sometimes throw a "Permission denied" error when strict-comparing
+	// two documents; shallow comparisons work.
+	// eslint-disable-next-line eqeqeq
+	if ( ( elem.ownerDocument || elem ) != document ) {
+		setDocument( elem );
+	}
+
+	var fn = Expr.attrHandle[ name.toLowerCase() ],
+
+		// Don't get fooled by Object.prototype properties (jQuery #13807)
+		val = fn && hasOwn.call( Expr.attrHandle, name.toLowerCase() ) ?
+			fn( elem, name, !documentIsHTML ) :
+			undefined;
+
+	return val !== undefined ?
+		val :
+		support.attributes || !documentIsHTML ?
+			elem.getAttribute( name ) :
+			( val = elem.getAttributeNode( name ) ) && val.specified ?
+				val.value :
+				null;
+};
+
+Sizzle.escape = function( sel ) {
+	return ( sel + "" ).replace( rcssescape, fcssescape );
+};
+
+Sizzle.error = function( msg ) {
+	throw new Error( "Syntax error, unrecognized expression: " + msg );
+};
+
+/**
+ * Document sorting and removing duplicates
+ * @param {ArrayLike} results
+ */
+Sizzle.uniqueSort = function( results ) {
+	var elem,
+		duplicates = [],
+		j = 0,
+		i = 0;
+
+	// Unless we *know* we can detect duplicates, assume their presence
+	hasDuplicate = !support.detectDuplicates;
+	sortInput = !support.sortStable && results.slice( 0 );
+	results.sort( sortOrder );
+
+	if ( hasDuplicate ) {
+		while ( ( elem = results[ i++ ] ) ) {
+			if ( elem === results[ i ] ) {
+				j = duplicates.push( i );
+			}
+		}
+		while ( j-- ) {
+			results.splice( duplicates[ j ], 1 );
+		}
+	}
+
+	// Clear input after sorting to release objects
+	// See https://github.com/jquery/sizzle/pull/225
+	sortInput = null;
+
+	return results;
+};
+
+/**
+ * Utility function for retrieving the text value of an array of DOM nodes
+ * @param {Array|Element} elem
+ */
+getText = Sizzle.getText = function( elem ) {
+	var node,
+		ret = "",
+		i = 0,
+		nodeType = elem.nodeType;
+
+	if ( !nodeType ) {
+
+		// If no nodeType, this is expected to be an array
+		while ( ( node = elem[ i++ ] ) ) {
+
+			// Do not traverse comment nodes
+			ret += getText( node );
+		}
+	} else if ( nodeType === 1 || nodeType === 9 || nodeType === 11 ) {
+
+		// Use textContent for elements
+		// innerText usage removed for consistency of new lines (jQuery #11153)
+		if ( typeof elem.textContent === "string" ) {
+			return elem.textContent;
+		} else {
+
+			// Traverse its children
+			for ( elem = elem.firstChild; elem; elem = elem.nextSibling ) {
+				ret += getText( elem );
+			}
+		}
+	} else if ( nodeType === 3 || nodeType === 4 ) {
+		return elem.nodeValue;
+	}
+
+	// Do not include comment or processing instruction nodes
+
+	return ret;
+};
+
+Expr = Sizzle.selectors = {
+
+	// Can be adjusted by the user
+	cacheLength: 50,
+
+	createPseudo: markFunction,
+
+	match: matchExpr,
+
+	attrHandle: {},
+
+	find: {},
+
+	relative: {
+		">": { dir: "parentNode", first: true },
+		" ": { dir: "parentNode" },
+		"+": { dir: "previousSibling", first: true },
+		"~": { dir: "previousSibling" }
+	},
+
+	preFilter: {
+		"ATTR": function( match ) {
+			match[ 1 ] = match[ 1 ].replace( runescape, funescape );
+
+			// Move the given value to match[3] whether quoted or unquoted
+			match[ 3 ] = ( match[ 3 ] || match[ 4 ] ||
+				match[ 5 ] || "" ).replace( runescape, funescape );
+
+			if ( match[ 2 ] === "~=" ) {
+				match[ 3 ] = " " + match[ 3 ] + " ";
+			}
+
+			return match.slice( 0, 4 );
+		},
+
+		"CHILD": function( match ) {
+
+			/* matches from matchExpr["CHILD"]
+				1 type (only|nth|...)
+				2 what (child|of-type)
+				3 argument (even|odd|\d*|\d*n([+-]\d+)?|...)
+				4 xn-component of xn+y argument ([+-]?\d*n|)
+				5 sign of xn-component
+				6 x of xn-component
+				7 sign of y-component
+				8 y of y-component
+			*/
+			match[ 1 ] = match[ 1 ].toLowerCase();
+
+			if ( match[ 1 ].slice( 0, 3 ) === "nth" ) {
+
+				// nth-* requires argument
+				if ( !match[ 3 ] ) {
+					Sizzle.error( match[ 0 ] );
+				}
+
+				// numeric x and y parameters for Expr.filter.CHILD
+				// remember that false/true cast respectively to 0/1
+				match[ 4 ] = +( match[ 4 ] ?
+					match[ 5 ] + ( match[ 6 ] || 1 ) :
+					2 * ( match[ 3 ] === "even" || match[ 3 ] === "odd" ) );
+				match[ 5 ] = +( ( match[ 7 ] + match[ 8 ] ) || match[ 3 ] === "odd" );
+
+				// other types prohibit arguments
+			} else if ( match[ 3 ] ) {
+				Sizzle.error( match[ 0 ] );
+			}
+
+			return match;
+		},
+
+		"PSEUDO": function( match ) {
+			var excess,
+				unquoted = !match[ 6 ] && match[ 2 ];
+
+			if ( matchExpr[ "CHILD" ].test( match[ 0 ] ) ) {
+				return null;
+			}
+
+			// Accept quoted arguments as-is
+			if ( match[ 3 ] ) {
+				match[ 2 ] = match[ 4 ] || match[ 5 ] || "";
+
+			// Strip excess characters from unquoted arguments
+			} else if ( unquoted && rpseudo.test( unquoted ) &&
+
+				// Get excess from tokenize (recursively)
+				( excess = tokenize( unquoted, true ) ) &&
+
+				// advance to the next closing parenthesis
+				( excess = unquoted.indexOf( ")", unquoted.length - excess ) - unquoted.length ) ) {
+
+				// excess is a negative index
+				match[ 0 ] = match[ 0 ].slice( 0, excess );
+				match[ 2 ] = unquoted.slice( 0, excess );
+			}
+
+			// Return only captures needed by the pseudo filter method (type and argument)
+			return match.slice( 0, 3 );
+		}
+	},
+
+	filter: {
+
+		"TAG": function( nodeNameSelector ) {
+			var nodeName = nodeNameSelector.replace( runescape, funescape ).toLowerCase();
+			return nodeNameSelector === "*" ?
+				function() {
+					return true;
+				} :
+				function( elem ) {
+					return elem.nodeName && elem.nodeName.toLowerCase() === nodeName;
+				};
+		},
+
+		"CLASS": function( className ) {
+			var pattern = classCache[ className + " " ];
+
+			return pattern ||
+				( pattern = new RegExp( "(^|" + whitespace +
+					")" + className + "(" + whitespace + "|$)" ) ) && classCache(
+						className, function( elem ) {
+							return pattern.test(
+								typeof elem.className === "string" && elem.className ||
+								typeof elem.getAttribute !== "undefined" &&
+									elem.getAttribute( "class" ) ||
+								""
+							);
+				} );
+		},
+
+		"ATTR": function( name, operator, check ) {
+			return function( elem ) {
+				var result = Sizzle.attr( elem, name );
+
+				if ( result == null ) {
+					return operator === "!=";
+				}
+				if ( !operator ) {
+					return true;
+				}
+
+				result += "";
+
+				/* eslint-disable max-len */
+
+				return operator === "=" ? result === check :
+					operator === "!=" ? result !== check :
+					operator === "^=" ? check && result.indexOf( check ) === 0 :
+					operator === "*=" ? check && result.indexOf( check ) > -1 :
+					operator === "$=" ? check && result.slice( -check.length ) === check :
+					operator === "~=" ? ( " " + result.replace( rwhitespace, " " ) + " " ).indexOf( check ) > -1 :
+					operator === "|=" ? result === check || result.slice( 0, check.length + 1 ) === check + "-" :
+					false;
+				/* eslint-enable max-len */
+
+			};
+		},
+
+		"CHILD": function( type, what, _argument, first, last ) {
+			var simple = type.slice( 0, 3 ) !== "nth",
+				forward = type.slice( -4 ) !== "last",
+				ofType = what === "of-type";
+
+			return first === 1 && last === 0 ?
+
+				// Shortcut for :nth-*(n)
+				function( elem ) {
+					return !!elem.parentNode;
+				} :
+
+				function( elem, _context, xml ) {
+					var cache, uniqueCache, outerCache, node, nodeIndex, start,
+						dir = simple !== forward ? "nextSibling" : "previousSibling",
+						parent = elem.parentNode,
+						name = ofType && elem.nodeName.toLowerCase(),
+						useCache = !xml && !ofType,
+						diff = false;
+
+					if ( parent ) {
+
+						// :(first|last|only)-(child|of-type)
+						if ( simple ) {
+							while ( dir ) {
+								node = elem;
+								while ( ( node = node[ dir ] ) ) {
+									if ( ofType ?
+										node.nodeName.toLowerCase() === name :
+										node.nodeType === 1 ) {
+
+										return false;
+									}
+								}
+
+								// Reverse direction for :only-* (if we haven't yet done so)
+								start = dir = type === "only" && !start && "nextSibling";
+							}
+							return true;
+						}
+
+						start = [ forward ? parent.firstChild : parent.lastChild ];
+
+						// non-xml :nth-child(...) stores cache data on `parent`
+						if ( forward && useCache ) {
+
+							// Seek `elem` from a previously-cached index
+
+							// ...in a gzip-friendly way
+							node = parent;
+							outerCache = node[ expando ] || ( node[ expando ] = {} );
+
+							// Support: IE <9 only
+							// Defend against cloned attroperties (jQuery gh-1709)
+							uniqueCache = outerCache[ node.uniqueID ] ||
+								( outerCache[ node.uniqueID ] = {} );
+
+							cache = uniqueCache[ type ] || [];
+							nodeIndex = cache[ 0 ] === dirruns && cache[ 1 ];
+							diff = nodeIndex && cache[ 2 ];
+							node = nodeIndex && parent.childNodes[ nodeIndex ];
+
+							while ( ( node = ++nodeIndex && node && node[ dir ] ||
+
+								// Fallback to seeking `elem` from the start
+								( diff = nodeIndex = 0 ) || start.pop() ) ) {
+
+								// When found, cache indexes on `parent` and break
+								if ( node.nodeType === 1 && ++diff && node === elem ) {
+									uniqueCache[ type ] = [ dirruns, nodeIndex, diff ];
+									break;
+								}
+							}
+
... 38552 lines suppressed ...