:py:mod:`airflow.providers.google.cloud.transfers.gcs_to_sftp`
==============================================================

.. py:module:: airflow.providers.google.cloud.transfers.gcs_to_sftp

.. autoapi-nested-parse::

   This module contains Google Cloud Storage to SFTP operator.



Module Contents
---------------

Classes
~~~~~~~

.. autoapisummary::

   airflow.providers.google.cloud.transfers.gcs_to_sftp.GCSToSFTPOperator




Attributes
~~~~~~~~~~

.. autoapisummary::

   airflow.providers.google.cloud.transfers.gcs_to_sftp.WILDCARD


.. py:data:: WILDCARD
   :annotation: = *

   

.. py:class:: GCSToSFTPOperator(*, source_bucket, source_object, destination_path, keep_directory_structure = True, move_object = False, gcp_conn_id = 'google_cloud_default', sftp_conn_id = 'ssh_default', delegate_to = None, impersonation_chain = None, **kwargs)

   Bases: :py:obj:`airflow.models.BaseOperator`

   Transfer files from a Google Cloud Storage bucket to SFTP server.

   **Example**: ::

       with models.DAG(
           "example_gcs_to_sftp",
           start_date=datetime(2020, 6, 19),
           schedule_interval=None,
       ) as dag:
           # downloads file to /tmp/sftp/folder/subfolder/file.txt
           copy_file_from_gcs_to_sftp = GCSToSFTPOperator(
               task_id="file-copy-gsc-to-sftp",
               source_bucket="test-gcs-sftp-bucket-name",
               source_object="folder/subfolder/file.txt",
               destination_path="/tmp/sftp",
           )

           # moves file to /tmp/data.txt
           move_file_from_gcs_to_sftp = GCSToSFTPOperator(
               task_id="file-move-gsc-to-sftp",
               source_bucket="test-gcs-sftp-bucket-name",
               source_object="folder/subfolder/data.txt",
               destination_path="/tmp",
               move_object=True,
               keep_directory_structure=False,
           )

   .. seealso::
       For more information on how to use this operator, take a look at the guide:
       :ref:`howto/operator:GCSToSFTPOperator`

   :param source_bucket: The source Google Cloud Storage bucket where the
        object is. (templated)
   :param source_object: The source name of the object to copy in the Google cloud
       storage bucket. (templated)
       You can use only one wildcard for objects (filenames) within your
       bucket. The wildcard can appear inside the object name or at the
       end of the object name. Appending a wildcard to the bucket name is
       unsupported.
   :param destination_path: The sftp remote path. This is the specified directory path for
       uploading to the SFTP server.
   :param keep_directory_structure: (Optional) When set to False the path of the file
        on the bucket is recreated within path passed in destination_path.
   :param move_object: When move object is True, the object is moved instead
       of copied to the new location. This is the equivalent of a mv command
       as opposed to a cp command.
   :param gcp_conn_id: (Optional) The connection ID used to connect to Google Cloud.
   :param sftp_conn_id: The sftp connection id. The name or identifier for
       establishing a connection to the SFTP server.
   :param delegate_to: The account to impersonate using domain-wide delegation of authority,
       if any. For this to work, the service account making the request must have
       domain-wide delegation enabled.
   :param impersonation_chain: Optional service account to impersonate using short-term
       credentials, or chained list of accounts required to get the access_token
       of the last account in the list, which will be impersonated in the request.
       If set as a string, the account must grant the originating account
       the Service Account Token Creator IAM role.
       If set as a sequence, the identities from the list must grant
       Service Account Token Creator IAM role to the directly preceding identity, with first
       account from the list granting this role to the originating account (templated).

   .. py:attribute:: template_fields
      :annotation: :Sequence[str] = ['source_bucket', 'source_object', 'destination_path', 'impersonation_chain']

      

   .. py:attribute:: ui_color
      :annotation: = #f0eee4

      

   .. 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.



