Source code for langchain_google_community.gmail.utils

"""Gmail tool utils."""

from __future__ import annotations

import logging
import warnings
from typing import TYPE_CHECKING, List, Optional

from langchain_google_community._utils import (
    get_google_credentials,
    import_googleapiclient_resource_builder,
)

if TYPE_CHECKING:
    from google.oauth2.credentials import Credentials  # type: ignore[import]
    from googleapiclient.discovery import Resource  # type: ignore[import]

logger = logging.getLogger(__name__)


DEFAULT_SCOPES = ["https://mail.google.com/"]
DEFAULT_SERVICE_SCOPES = ["https://www.googleapis.com/auth/gmail.readonly"]


[docs] def get_gmail_credentials( token_file: Optional[str] = None, client_sercret_file: Optional[str] = None, service_account_file: Optional[str] = None, scopes: Optional[List[str]] = None, use_domain_wide: bool = False, delegated_user: Optional[str] = None, ) -> Credentials: """Get Gmail credentials.""" warnings.warn( "get_gmail_credentials is deprecated and will be removed in a future version." "Use get_google_credentials instead.", DeprecationWarning, stacklevel=2, ) if use_domain_wide: scopes = scopes or DEFAULT_SERVICE_SCOPES else: scopes = scopes or DEFAULT_SCOPES return get_google_credentials( scopes=scopes, token_file=token_file, client_secrets_file=client_sercret_file, service_account_file=service_account_file, use_domain_wide=use_domain_wide, delegated_user=delegated_user, )
[docs] def build_gmail_service( credentials: Optional[Credentials] = None, service_name: str = "gmail", service_version: str = "v1", use_domain_wide: bool = False, delegated_user: Optional[str] = None, service_account_file: Optional[str] = None, scopes: Optional[List[str]] = None, ) -> Resource: """Build a Gmail service.""" if use_domain_wide: scopes = scopes or DEFAULT_SERVICE_SCOPES else: scopes = scopes or DEFAULT_SCOPES credentials = credentials or get_google_credentials( scopes=scopes, use_domain_wide=use_domain_wide, delegated_user=delegated_user, service_account_file=service_account_file, ) builder = import_googleapiclient_resource_builder() return builder(service_name, service_version, credentials=credentials)
[docs] def build_resource_service( credentials: Optional[Credentials] = None, service_name: str = "gmail", service_version: str = "v1", use_domain_wide: bool = False, delegated_user: Optional[str] = None, service_account_file: Optional[str] = None, scopes: Optional[List[str]] = None, ) -> Resource: """Build a Gmail resource service.""" warnings.warn( "build_resource_service is deprecated and will be removed in a future version." "Use build_gmail_service instead.", DeprecationWarning, stacklevel=2, ) return build_gmail_service( credentials=credentials, service_name=service_name, service_version=service_version, use_domain_wide=use_domain_wide, delegated_user=delegated_user, service_account_file=service_account_file, scopes=scopes, )
[docs] def clean_email_body(body: str) -> str: """Clean email body.""" try: from bs4 import BeautifulSoup try: soup = BeautifulSoup(str(body), "html.parser") body = soup.get_text() return str(body) except Exception as e: logger.error(e) return str(body) except ImportError: logger.warning("BeautifulSoup not installed. Skipping cleaning.") return str(body)