Source code for geetools.Initialize

"""Tools for the ``ee.Initialize`` function."""
from __future__ import annotations

import json
from pathlib import Path
from typing import Callable

import ee
from google.oauth2.credentials import Credentials

from geetools.accessors import register_function_accessor


@register_function_accessor(ee.Initialize, "geetools")
[docs] class InitializeAccessor: """Toolbox for the ``ee.Initialize`` function.""" def __init__(self, obj: Callable): """Initialize the class.""" self._obj = obj @staticmethod
[docs] def from_user(name: str = "", credential_pathname: str = "") -> None: """Initialize Earthengine API using a specific user. Equivalent to the ``ee.initialize`` function but with a specific credential file stored in the machine by the ``ee.Authenticate.to_user`` function. Args: name: The name of the user as saved when created. use default if not set credential_pathname: The path to the folder where the credentials are stored. If not set, it uses the default path Example: .. code-block:: python import ee import geetools ee.Initialize.from_user("test") # check that GEE is connected ee.Number(1).getInfo() """ name = f"credentials{name}" credential_pathname = credential_pathname or ee.oauth.get_credentials_path() credential_path = Path(credential_pathname).parent try: tokens = json.loads((credential_path / name).read_text()) refresh_token = tokens["refresh_token"] client_id = tokens["client_id"] client_secret = tokens["client_secret"] credentials = Credentials( None, refresh_token=refresh_token, token_uri=ee.oauth.TOKEN_URI, client_id=client_id, client_secret=client_secret, scopes=ee.oauth.SCOPES, ) except Exception: msg = "Please register this user first by using geetools.User.create first" raise ee.EEException(msg) ee.Initialize(credentials)