#!/usr/bin/env python """A wrapper for numbers.""" import numbers from . import _cloud_api_utils from . import apifunction from . import computedobject from . import ee_exception # Using lowercase function naming to match the JavaScript names. # pylint: disable=g-bad-name class Number(computedobject.ComputedObject): """An object to represent numbers.""" _initialized = False def __init__(self, number): """Construct a number wrapper. This constructor accepts the following args: 1) A bare number. 2) A ComputedObject returning a number. Args: number: The number to wrap. """ self.initialize() if isinstance(number, numbers.Number): super(Number, self).__init__(None, None) self._number = number elif isinstance(number, computedobject.ComputedObject): super(Number, self).__init__(number.func, number.args, number.varName) self._number = None else: raise ee_exception.EEException( 'Invalid argument specified for ee.Number(): %s' % number) @classmethod def initialize(cls): """Imports API functions to this class.""" if not cls._initialized: apifunction.ApiFunction.importApi(cls, 'Number', 'Number') cls._initialized = True @classmethod def reset(cls): """Removes imported API functions from this class.""" apifunction.ApiFunction.clearApi(cls) cls._initialized = False @staticmethod def name(): return 'Number' def encode(self, opt_encoder=None): if isinstance(self._number, numbers.Number): return self._number else: return super(Number, self).encode(opt_encoder) def encode_cloud_value(self, opt_encoder=None): if isinstance(self._number, numbers.Number): return _cloud_api_utils.encode_number_as_cloud_value(self._number) else: return super(Number, self).encode_cloud_value(opt_encoder)