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

.. py:module:: airflow.contrib.operators.gcp_function_operator


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

.. function:: _validate_available_memory_in_mb(value)

.. function:: _validate_max_instances(value)

.. data:: CLOUD_FUNCTION_VALIDATION
   

   

.. py:class:: GcfFunctionDeployOperator(location, body, project_id=None, gcp_conn_id='google_cloud_default', api_version='v1', zip_path=None, validate_body=True, *args, **kwargs)

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

   Creates a function in Google Cloud Functions.
   If a function with this name already exists, it will be updated.

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

   :param location: Google Cloud Platform region where the function should be created.
   :type location: str
   :param body: Body of the Cloud Functions definition. The body must be a
       Cloud Functions dictionary as described in:
       https://cloud.google.com/functions/docs/reference/rest/v1/projects.locations.functions
       . Different API versions require different variants of the Cloud Functions
       dictionary.
   :type body: dict or google.cloud.functions.v1.CloudFunction
   :param project_id: (Optional) Google Cloud Platform project ID where the function
       should be created.
   :type project_id: str
   :param gcp_conn_id: (Optional) The connection ID used to connect to Google Cloud
        Platform - default 'google_cloud_default'.
   :type gcp_conn_id: str
   :param api_version: (Optional) API version used (for example v1 - default -  or
       v1beta1).
   :type api_version: str
   :param zip_path: Path to zip file containing source code of the function. If the path
       is set, the sourceUploadUrl should not be specified in the body or it should
       be empty. Then the zip file will be uploaded using the upload URL generated
       via generateUploadUrl from the Cloud Functions API.
   :type zip_path: str
   :param validate_body: If set to False, body validation is not performed.
   :type validate_body: bool

   .. attribute:: template_fields
      :annotation: = ['project_id', 'location', 'gcp_conn_id', 'api_version']

      

   
   .. method:: _validate_inputs(self)



   
   .. method:: _validate_all_body_fields(self)



   
   .. method:: _create_new_function(self)



   
   .. method:: _update_function(self)



   
   .. method:: _check_if_function_exists(self)



   
   .. method:: _upload_source_code(self)



   
   .. method:: _set_airflow_version_label(self)



   
   .. method:: execute(self, context)




.. data:: GCF_SOURCE_ARCHIVE_URL
   :annotation: = sourceArchiveUrl

   

.. data:: GCF_SOURCE_UPLOAD_URL
   :annotation: = sourceUploadUrl

   

.. data:: SOURCE_REPOSITORY
   :annotation: = sourceRepository

   

.. data:: GCF_ZIP_PATH
   :annotation: = zip_path

   

.. py:class:: ZipPathPreprocessor(body, zip_path)

   Pre-processes zip path parameter.

   Responsible for checking if the zip path parameter is correctly specified in
   relation with source_code body fields. Non empty zip path parameter is special because
   it is mutually exclusive with sourceArchiveUrl and sourceRepository body fields.
   It is also mutually exclusive with non-empty sourceUploadUrl.
   The pre-process modifies sourceUploadUrl body field in special way when zip_path
   is not empty. An extra step is run when execute method is called and sourceUploadUrl
   field value is set in the body with the value returned by generateUploadUrl Cloud
   Function API method.

   :param body: Body passed to the create/update method calls.
   :type body: dict
   :param zip_path: path to the zip file containing source code.
   :type body: dict

   .. attribute:: upload_function
      

      

   
   .. staticmethod:: _is_present_and_empty(dictionary, field)



   
   .. method:: _verify_upload_url_and_no_zip_path(self)



   
   .. method:: _verify_upload_url_and_zip_path(self)



   
   .. method:: _verify_archive_url_and_zip_path(self)



   
   .. method:: should_upload_function(self)



   
   .. method:: preprocess_body(self)




.. data:: FUNCTION_NAME_PATTERN
   :annotation: = ^projects/[^/]+/locations/[^/]+/functions/[^/]+$

   

.. data:: FUNCTION_NAME_COMPILED_PATTERN
   

   

.. py:class:: GcfFunctionDeleteOperator(name, gcp_conn_id='google_cloud_default', api_version='v1', *args, **kwargs)

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

   Deletes the specified function from Google Cloud Functions.

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

   :param name: A fully-qualified function name, matching
       the pattern: `^projects/[^/]+/locations/[^/]+/functions/[^/]+$`
   :type name: str
   :param gcp_conn_id: The connection ID to use to connect to Google Cloud Platform.
   :type gcp_conn_id: str
   :param api_version: API version used (for example v1 or v1beta1).
   :type api_version: str

   .. attribute:: template_fields
      :annotation: = ['name', 'gcp_conn_id', 'api_version']

      

   
   .. method:: _validate_inputs(self)



   
   .. method:: execute(self, context)




