Source code for pyowm.agroapi10.soil

#!/usr/bin/env python
# -*- coding: utf-8 -*-

from pyowm.utils import formatting, measurables


[docs] class Soil: """ Soil data over a specific Polygon :param reference_time: UTC UNIX time of soil data measurement :type reference_time: int :param surface_temp: soil surface temperature in Kelvin degrees :type surface_temp: float :param ten_cm_temp: soil temperature at 10 cm depth in Kelvin degrees :type ten_cm_temp: float :param moisture: soil moisture in m^3/m^3 :type moisture: float :param polygon_id: ID of the polygon this soil data was measured upon :type polygon_id: str :returns: a `Soil` instance :raises: `AssertionError` when any of the mandatory fields is `None` or has wrong type """ def __init__(self, reference_time, surface_temp, ten_cm_temp, moisture, polygon_id=None): assert reference_time is not None assert isinstance(reference_time, int), 'reference time must be a UNIX int timestamp' if reference_time < 0: raise ValueError("reference_time must be greater than 0") self._reference_time = reference_time assert surface_temp is not None assert isinstance(surface_temp, (float, int)), 'surface_temp must be a number' self._surface_temp = surface_temp assert ten_cm_temp is not None assert isinstance(ten_cm_temp, (float, int)), 'ten_cm_temp must be a number' self._ten_cm_temp = ten_cm_temp assert moisture is not None assert isinstance(moisture, (float, int)), 'moisture must be a number' if moisture < 0.: raise ValueError("moisture must be greater than 0") self.moisture = moisture self.polygon_id = polygon_id
[docs] def reference_time(self, timeformat='unix'): """Returns the UTC time telling when the soil data was measured :param timeformat: the format for the time value. May be: '*unix*' (default) for UNIX time '*iso*' for ISO8601-formatted string in the format ``YYYY-MM-DD HH:MM:SS+00`` '*date* for ``datetime.datetime`` object instance :type timeformat: str :returns: an int or a str """ return formatting.timeformat(self._reference_time, timeformat)
[docs] def surface_temp(self, unit='kelvin'): """Returns the soil surface temperature :param unit: the unit of measure for the temperature value. May be: '*kelvin*' (default), '*celsius*' or '*fahrenheit*' :type unit: str :returns: a float :raises: ValueError when unknown temperature units are provided """ if unit == 'kelvin': return self._surface_temp if unit == 'celsius': return measurables.kelvin_to_celsius(self._surface_temp) if unit == 'fahrenheit': return measurables.kelvin_to_fahrenheit(self._surface_temp) else: raise ValueError('Wrong temperature unit')
[docs] def ten_cm_temp(self, unit='kelvin'): """Returns the soil temperature measured 10 cm below surface :param unit: the unit of measure for the temperature value. May be: '*kelvin*' (default), '*celsius*' or '*fahrenheit*' :type unit: str :returns: a float :raises: ValueError when unknown temperature units are provided """ if unit == 'kelvin': return self._ten_cm_temp if unit == 'celsius': return measurables.kelvin_to_celsius(self._ten_cm_temp) if unit == 'fahrenheit': return measurables.kelvin_to_fahrenheit(self._ten_cm_temp) else: raise ValueError('Wrong temperature unit')
[docs] @classmethod def from_dict(cls, the_dict): assert isinstance(the_dict, dict) reference_time = the_dict['reference_time'] surface_temp = the_dict['surface_temp'] ten_cm_temp = the_dict['ten_cm_temp'] moisture = the_dict['moisture'] polygon_id = the_dict.get('polygon_id', None) return Soil(reference_time, surface_temp, ten_cm_temp, moisture, polygon_id)
[docs] def to_dict(self): return {'reference_time': self._reference_time, 'surface_temp': self._surface_temp, 'ten_cm_temp': self._ten_cm_temp, 'moisture': self.moisture, 'polygon_id': self.polygon_id}
def __repr__(self): return "<%s.%s - polygon_id=%s,reference time=%s,>" % (__name__, self.__class__.__name__, self.polygon_id, self.reference_time('iso'))