Google Earth Engine Authors cada8136b9 v0.1.368
PiperOrigin-RevId: 562013832
2023-09-07 15:22:33 +00:00

82 lines
2.2 KiB
Python

#!/usr/bin/env python3
"""A wrapper for lists."""
# List clashes with the class List, so call it ListType
from typing import Any, List as ListType, Optional, Tuple, Union
from ee import apifunction
from ee import computedobject
from ee import ee_exception
class List(computedobject.ComputedObject):
"""An object to represent lists."""
_list: Optional[
Union[ListType[Any], Tuple[Any, Any], computedobject.ComputedObject]
]
_initialized = False
# Tell pytype to not complain about dynamic attributes.
_HAS_DYNAMIC_ATTRIBUTES = True
def __init__(
self,
arg: Optional[
Union[ListType[Any], Tuple[Any, Any], computedobject.ComputedObject]
],
):
"""Construct a list wrapper.
This constructor accepts the following args:
1) A bare list.
2) A ComputedObject returning a list.
Args:
arg: The list to wrap.
Raises:
ee_exception.EEException: On bad input.
"""
self.initialize()
if isinstance(arg, (list, tuple)):
super().__init__(None, None)
self._list = arg
elif isinstance(arg, computedobject.ComputedObject):
super().__init__(arg.func, arg.args, arg.varName)
self._list = None
else:
raise ee_exception.EEException(
'Invalid argument specified for ee.List(): %s' % arg)
@classmethod
def initialize(cls) -> None:
"""Imports API functions to this class."""
if not cls._initialized:
apifunction.ApiFunction.importApi(cls, 'List', 'List')
cls._initialized = True
@classmethod
def reset(cls) -> None:
"""Removes imported API functions from this class."""
apifunction.ApiFunction.clearApi(cls)
cls._initialized = False
@staticmethod
def name() -> str:
return 'List'
def encode(self, opt_encoder: Optional[Any] = None) -> Any:
if isinstance(self._list, (list, tuple)):
assert self._list is not None
return [opt_encoder(elem) for elem in self._list]
else:
return super().encode(opt_encoder)
def encode_cloud_value(self, opt_encoder: Optional[Any] = None) -> Any:
if isinstance(self._list, (list, tuple)):
return {'valueReference': opt_encoder(self._list)}
else:
return super().encode_cloud_value(opt_encoder)