:py:mod:`airflow.providers.google.marketing_platform.hooks.display_video`
=========================================================================

.. py:module:: airflow.providers.google.marketing_platform.hooks.display_video

.. autoapi-nested-parse::

   This module contains Google DisplayVideo hook.



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

Classes
~~~~~~~

.. autoapisummary::

   airflow.providers.google.marketing_platform.hooks.display_video.GoogleDisplayVideo360Hook




.. py:class:: GoogleDisplayVideo360Hook(api_version = 'v1', gcp_conn_id = 'google_cloud_default', delegate_to = None, impersonation_chain = None)

   Bases: :py:obj:`airflow.providers.google.common.hooks.base_google.GoogleBaseHook`

   Hook for Google Display & Video 360.

   .. py:method:: get_conn(self)

      Retrieves connection to DisplayVideo.


   .. py:method:: get_conn_to_display_video(self)

      Retrieves connection to DisplayVideo.


   .. py:method:: erf_uri(partner_id, entity_type)
      :staticmethod:

      Return URI for all Entity Read Files in bucket.

      For example, if you were generating a file name to retrieve the entity read file
      for partner 123 accessing the line_item table from April 2, 2013, your filename
      would look something like this:
      gdbm-123/entity/20130402.0.LineItem.json

      More information:
      https://developers.google.com/bid-manager/guides/entity-read/overview

      :param partner_id The numeric ID of your Partner.
      :param entity_type: The type of file Partner, Advertiser, InsertionOrder,
      LineItem, Creative, Pixel, InventorySource, UserList, UniversalChannel, and summary.


   .. py:method:: create_query(self, query)

      Creates a query.

      :param query: Query object to be passed to request body.


   .. py:method:: delete_query(self, query_id)

      Deletes a stored query as well as the associated stored reports.

      :param query_id: Query ID to delete.


   .. py:method:: get_query(self, query_id)

      Retrieves a stored query.

      :param query_id: Query ID to retrieve.


   .. py:method:: list_queries(self)

      Retrieves stored queries.


   .. py:method:: run_query(self, query_id, params)

      Runs a stored query to generate a report.

      :param query_id: Query ID to run.
      :param params: Parameters for the report.


   .. py:method:: upload_line_items(self, line_items)

      Uploads line items in CSV format.

      :param line_items: downloaded data from GCS and passed to the body request
      :return: response body.
      :rtype: List[Dict[str, Any]]


   .. py:method:: download_line_items(self, request_body)

      Retrieves line items in CSV format.

      :param request_body: dictionary with parameters that should be passed into.
          More information about it can be found here:
          https://developers.google.com/bid-manager/v1.1/lineitems/downloadlineitems


   .. py:method:: create_sdf_download_operation(self, body_request)

      Creates an SDF Download Task and Returns an Operation.

      :param body_request: Body request.

      More information about body request n be found here:
      https://developers.google.com/display-video/api/reference/rest/v1/sdfdownloadtasks/create


   .. py:method:: get_sdf_download_operation(self, operation_name)

      Gets the latest state of an asynchronous SDF download task operation.

      :param operation_name: The name of the operation resource.


   .. py:method:: download_media(self, resource_name)

      Downloads media.

      :param resource_name: of the media that is being downloaded.



