HEX
Server: Apache/2.4.65 (Ubuntu)
System: Linux ielts-store-v2 6.8.0-1036-gcp #38~22.04.1-Ubuntu SMP Thu Aug 14 01:19:18 UTC 2025 x86_64
User: root (0)
PHP: 7.2.34-54+ubuntu20.04.1+deb.sury.org+1
Disabled: pcntl_alarm,pcntl_fork,pcntl_waitpid,pcntl_wait,pcntl_wifexited,pcntl_wifstopped,pcntl_wifsignaled,pcntl_wifcontinued,pcntl_wexitstatus,pcntl_wtermsig,pcntl_wstopsig,pcntl_signal,pcntl_signal_get_handler,pcntl_signal_dispatch,pcntl_get_last_error,pcntl_strerror,pcntl_sigprocmask,pcntl_sigwaitinfo,pcntl_sigtimedwait,pcntl_exec,pcntl_getpriority,pcntl_setpriority,pcntl_async_signals,
Upload Files
File: //snap/google-cloud-cli/394/lib/googlecloudsdk/api_lib/essential_contacts/contacts.py
# -*- coding: utf-8 -*- #
# Copyright 2020 Google LLC. All Rights Reserved.
#
# Licensed 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.
"""Essential Contacts API."""

from __future__ import absolute_import
from __future__ import division
from __future__ import unicode_literals

from apitools.base.py import list_pager
from googlecloudsdk.api_lib.util import apis

API_NAME = 'essentialcontacts'
ALPHA_API_VERSION = 'v1alpha1'
BETA_API_VERSION = 'v1beta1'
GA_API_VERSION = 'v1'
DEFAULT_API_VERSION = GA_API_VERSION

_CONTACT_TYPES_BY_VERSION = {
    ALPHA_API_VERSION: {
        'param_name': 'googleCloudEssentialcontactsV1alpha1Contact',
        'message_name': 'GoogleCloudEssentialcontactsV1alpha1Contact'
    },
    BETA_API_VERSION: {
        'param_name': 'googleCloudEssentialcontactsV1beta1Contact',
        'message_name': 'GoogleCloudEssentialcontactsV1beta1Contact'
    },
    GA_API_VERSION: {
        'param_name': 'googleCloudEssentialcontactsV1Contact',
        'message_name': 'GoogleCloudEssentialcontactsV1Contact'
    }
}


def GetClientInstance(version=DEFAULT_API_VERSION):
  return apis.GetClientInstance(
      api_name=API_NAME, api_version=version, no_http=False)


def GetMessages(version=DEFAULT_API_VERSION):
  return apis.GetMessagesModule(api_name=API_NAME, api_version=version)


def GetContactMessage(version=DEFAULT_API_VERSION):
  """Gets the contact message for the specified version of the API."""
  versioned_message_type = _CONTACT_TYPES_BY_VERSION[version]['message_name']
  return getattr(GetMessages(version), versioned_message_type)


def GetContactParamName(version=DEFAULT_API_VERSION):
  return _CONTACT_TYPES_BY_VERSION[version]['param_name']


def GetContactNotificationCategoryEnum(version=DEFAULT_API_VERSION):
  return GetContactMessage(
      version).NotificationCategorySubscriptionsValueListEntryValuesEnum


class ContactsClient():
  """Client for Essential Contacts API."""

  def __init__(self, version=DEFAULT_API_VERSION):

    self.client = GetClientInstance(version)

    self._messages = self.client.MESSAGES_MODULE

    self._projects_service = self.client.projects_contacts

    self._folders_service = self.client.folders_contacts

    self._organizations_service = self.client.organizations_contacts

    self.contact_message = GetContactMessage(version)

    self.contact_param_name = GetContactParamName(version)

  def Create(self, parent_name, email, notification_categories, language_tag):
    """Creates an Essential Contact.

    Args:
      parent_name: the full id of the resource to create the contact for in the
        form of [projects|folders|organizations]/{resourceId}
      email: the contact's email address.
      notification_categories: the categories of notifications this contact
        should receive.
      language_tag: the contact's preferred language to receive communication
        in.

    Returns:
      The created contact.
    """
    contact = self.contact_message(
        email=email,
        notificationCategorySubscriptions=notification_categories,
        languageTag=language_tag)
    args = {'parent': parent_name, self.contact_param_name: contact}

    if parent_name.startswith('folders'):
      create_req = self._messages.EssentialcontactsFoldersContactsCreateRequest(
          **args)
      return self._folders_service.Create(create_req)
    if parent_name.startswith('organizations'):
      create_req = self._messages.EssentialcontactsOrganizationsContactsCreateRequest(
          **args)
      return self._organizations_service.Create(create_req)

    create_req = self._messages.EssentialcontactsProjectsContactsCreateRequest(
        **args)
    return self._projects_service.Create(create_req)

  def Update(self, contact_name, notification_categories, language_tag):
    """Updates an Essential Contact.

    Args:
      contact_name: the full id of the contact to update in the form of
        [projects|folders|organizations]/{resourceId}/contacts/{contactId}
      notification_categories: the categories of notifications this contact
        should receive, or None if not updating notification categories.
      language_tag: the contact's preferred language to receive communication
        in, or None if not updating language.

    Returns:
      The updated contact.
    """
    update_masks = []
    if notification_categories:
      update_masks.append('notification_category_subscriptions')
    if language_tag:
      update_masks.append('language_tag')
    update_mask = ','.join(update_masks)

    contact = self.contact_message(
        notificationCategorySubscriptions=notification_categories,
        languageTag=language_tag)
    args = {
        'name': contact_name,
        'updateMask': update_mask,
        self.contact_param_name: contact
    }

    if contact_name.startswith('folders'):
      update_req = self._messages.EssentialcontactsFoldersContactsPatchRequest(
          **args)
      return self._folders_service.Patch(update_req)
    if contact_name.startswith('organizations'):
      update_req = self._messages.EssentialcontactsOrganizationsContactsPatchRequest(
          **args)
      return self._organizations_service.Patch(update_req)

    update_req = self._messages.EssentialcontactsProjectsContactsPatchRequest(
        **args)
    return self._projects_service.Patch(update_req)

  def Delete(self, contact_name):
    """Deletes an Essential Contact.

    Args:
      contact_name: the full id of the contact to delete in the form of
        [projects|folders|organizations]/{resourceId}/contacts/{contactId}

    Returns:
      Empty response message.
    """
    if contact_name.startswith('folders'):
      delete_req = self._messages.EssentialcontactsFoldersContactsDeleteRequest(
          name=contact_name)
      return self._folders_service.Delete(delete_req)

    if contact_name.startswith('organizations'):
      delete_req = self._messages.EssentialcontactsOrganizationsContactsDeleteRequest(
          name=contact_name)
      return self._organizations_service.Delete(delete_req)

    delete_req = self._messages.EssentialcontactsProjectsContactsDeleteRequest(
        name=contact_name)
    return self._projects_service.Delete(delete_req)

  def Describe(self, contact_name):
    """Describes an Essential Contact.

    Args:
      contact_name: the full id of the contact to describe in the form of
        [projects|folders|organizations]/{resourceId}/contacts/{contactId}

    Returns:
      The requested contact.
    """
    if contact_name.startswith('folders'):
      describe_req = self._messages.EssentialcontactsFoldersContactsGetRequest(
          name=contact_name)
      return self._folders_service.Get(describe_req)

    if contact_name.startswith('organizations'):
      describe_req = self._messages.EssentialcontactsOrganizationsContactsGetRequest(
          name=contact_name)
      return self._organizations_service.Get(describe_req)

    describe_req = self._messages.EssentialcontactsProjectsContactsGetRequest(
        name=contact_name)
    return self._projects_service.Get(describe_req)

  def List(self, parent_name, page_size=50, limit=None):
    """Lists Essential Contacts set directly on a Cloud resource.

    Args:
      parent_name: the full name of the parent resource to list contacts for in
        the form of [projects|folders|organizations]/{resourceId}
      page_size: the number of contacts to return per page of the result list.
      limit: the total number of contacts to return.

    Returns:
      The contacts that have been set directly on the requested resource.
    """
    service = None
    list_req = None

    if parent_name.startswith('folders'):
      service = self._folders_service
      list_req = self._messages.EssentialcontactsFoldersContactsListRequest(
          parent=parent_name)
    elif parent_name.startswith('organizations'):
      service = self._organizations_service
      list_req = self._messages.EssentialcontactsOrganizationsContactsListRequest(
          parent=parent_name)
    else:
      service = self._projects_service
      list_req = self._messages.EssentialcontactsProjectsContactsListRequest(
          parent=parent_name)

    return list_pager.YieldFromList(
        service,
        list_req,
        batch_size=page_size,
        limit=limit,
        field='contacts',
        batch_size_attribute='pageSize')

  def Compute(self,
              parent_name,
              notification_categories,
              page_size=50,
              limit=None):
    """Computes the Essential Contacts for a Cloud resource.

    Args:
      parent_name: the full name of the parent resource to compute contacts for
        in the form of [projects|folders|organizations]/{resourceId}
      notification_categories: the notification categories (as choices) to
        retrieve subscribed contacts for.
      page_size: the number of contacts to return per page of the result list.
      limit: the total number of contacts to return.

    Returns:
      The contacts that have been computed from the resource hierarchy.
    """
    service = None
    compute_req = None

    if parent_name.startswith('folders'):
      service = self._folders_service
      compute_req = self._messages.EssentialcontactsFoldersContactsComputeRequest(
          parent=parent_name, notificationCategories=notification_categories)
    elif parent_name.startswith('organizations'):
      service = self._organizations_service
      compute_req = self._messages.EssentialcontactsOrganizationsContactsComputeRequest(
          parent=parent_name, notificationCategories=notification_categories)
    else:
      service = self._projects_service
      compute_req = self._messages.EssentialcontactsProjectsContactsComputeRequest(
          parent=parent_name, notificationCategories=notification_categories)

    return list_pager.YieldFromList(
        service,
        compute_req,
        batch_size=page_size,
        limit=limit,
        method='Compute',
        field='contacts',
        batch_size_attribute='pageSize')