:mod:`airflow.contrib.operators.gcs_operator`
=============================================

.. py:module:: airflow.contrib.operators.gcs_operator


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

.. py:class:: GoogleCloudStorageCreateBucketOperator(bucket_name, resource=None, storage_class='MULTI_REGIONAL', location='US', project_id=None, labels=None, google_cloud_storage_conn_id='google_cloud_default', delegate_to=None, *args, **kwargs)

   Bases: :class:`airflow.models.BaseOperator`

   Creates a new bucket. Google Cloud Storage uses a flat namespace,
   so you can't create a bucket with a name that is already in use.

       .. seealso::
           For more information, see Bucket Naming Guidelines:
           https://cloud.google.com/storage/docs/bucketnaming.html#requirements

   :param bucket_name: The name of the bucket. (templated)
   :type bucket_name: str
   :param resource: An optional dict with parameters for creating the bucket.
           For information on available parameters, see Cloud Storage API doc:
           https://cloud.google.com/storage/docs/json_api/v1/buckets/insert
   :type resource: dict
   :param storage_class: This defines how objects in the bucket are stored
           and determines the SLA and the cost of storage (templated). Values include

           - ``MULTI_REGIONAL``
           - ``REGIONAL``
           - ``STANDARD``
           - ``NEARLINE``
           - ``COLDLINE``.

           If this value is not specified when the bucket is
           created, it will default to STANDARD.
   :type storage_class: str
   :param location: The location of the bucket. (templated)
       Object data for objects in the bucket resides in physical storage
       within this region. Defaults to US.

       .. seealso:: https://developers.google.com/storage/docs/bucket-locations

   :type location: str
   :param project_id: The ID of the GCP Project. (templated)
   :type project_id: str
   :param labels: User-provided labels, in key/value pairs.
   :type labels: dict
   :param google_cloud_storage_conn_id: The connection ID to use when
       connecting to Google cloud storage.
   :type google_cloud_storage_conn_id: str
   :param delegate_to: The account to impersonate, if any.
       For this to work, the service account making the request must
       have domain-wide delegation enabled.
   :type delegate_to: str

   The following Operator would create a new bucket ``test-bucket``
   with ``MULTI_REGIONAL`` storage class in ``EU`` region

   .. code-block:: python

       CreateBucket = GoogleCloudStorageCreateBucketOperator(
           task_id='CreateNewBucket',
           bucket_name='test-bucket',
           storage_class='MULTI_REGIONAL',
           location='EU',
           labels={'env': 'dev', 'team': 'airflow'},
           google_cloud_storage_conn_id='airflow-service-account'
       )

   .. attribute:: template_fields
      :annotation: = ['bucket_name', 'storage_class', 'location', 'project_id']

      

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

      

   
   .. method:: execute(self, context)




