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



Google Cloud Life Sciences Operators
====================================
The `Google Cloud Life Sciences <https://cloud.google.com/life-sciences/>`__ is a service that executes
series of compute engine containers on the Google Cloud. It is used to process, analyze and annotate genomics
and biomedical data at scale.

Prerequisite Tasks
^^^^^^^^^^^^^^^^^^

.. include::/operators/_partials/prerequisite_tasks.rst


Pipeline Configuration
^^^^^^^^^^^^^^^^^^^^^^
In order to run the pipeline, it is necessary to configure the request body.
Here is an example of the pipeline configuration with a single action.

.. exampleinclude:: /../../airflow/providers/google/cloud/example_dags/example_life_sciences.py
    :language: python
    :dedent: 0
    :start-after: [START howto_configure_simple_action_pipeline]
    :end-before: [END howto_configure_simple_action_pipeline]

The pipeline can also be configured with multiple action.

.. exampleinclude:: /../../airflow/providers/google/cloud/example_dags/example_life_sciences.py
    :language: python
    :dedent: 0
    :start-after: [START howto_configure_multiple_action_pipeline]
    :end-before: [END howto_configure_multiple_action_pipeline]

Read about the `request body parameters <https://cloud.google.com/life-sciences/docs/reference/rest/v2beta/projects.locations.pipelines/run?authuser=1#request-body/>`__
to understand all the fields you can include in the configuration

.. _howto/operator:LifeSciencesRunPipelineOperator:

Running a pipeline
-------------------------------
Use the
:class:`~airflow.providers.google.cloud.operators.life_sciences.LifeSciencesRunPipelineOperator`
to execute pipelines.

.. exampleinclude:: /../../airflow/providers/google/cloud/example_dags/example_life_sciences.py
    :language: python
    :dedent: 0
    :start-after: [START howto_run_pipeline]
    :end-before: [END howto_run_pipeline]

Reference
^^^^^^^^^

For further information, look at:

* `Client Library Documentation <https://cloud.google.com/life-sciences/docs/reference/rest>`__
* `Product Documentation <https://cloud.google.com/life-sciences/docs/>`__
