Source code for pyowm.uvindexapi30.uvindex

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

from pyowm.commons import exceptions
from pyowm.utils import formatting, timestamps
from pyowm.weatherapi30 import location


[docs] def uv_intensity_to_exposure_risk(uv_intensity): # According to figures in: https://en.wikipedia.org/wiki/Ultraviolet_index if 0.0 <= uv_intensity < 2.9: return 'low' elif 2.9 <= uv_intensity < 5.9: return 'moderate' elif 5.9 <= uv_intensity < 7.9: return 'high' elif 7.9 <= uv_intensity < 10.9: return 'very high' else: return 'extreme'
[docs] class UVIndex: """ A class representing the UltraViolet Index observed in a certain location in the world. The location is represented by the encapsulated *Location* object. :param reference_time: GMT UNIXtime telling when the UV data have been measured :type reference_time: int :param location: the *Location* relative to this UV observation :type location: *Location* :param value: the observed UV intensity value :type value: float :param reception_time: GMT UNIXtime telling when the observation has been received from the OWM Weather API :type reception_time: int :returns: an *UVIndex* instance :raises: *ValueError* when negative values are provided as reception time or UV intensity value """ def __init__(self, reference_time, location, value, reception_time): if reference_time < 0: raise ValueError("'referencetime' must be greater than 0") self.ref_time = reference_time self.location = location if value < 0.0: raise ValueError("'UV intensity must be greater than 0") self.value = value if reception_time < 0: raise ValueError("'reception_time' must be greater than 0") self.rec_time = reception_time
[docs] def reference_time(self, timeformat='unix'): """ Returns the GMT time telling when the UV has been observed from the OWM Weather API :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 :raises: ValueError when negative values are provided """ return formatting.timeformat(self.ref_time, timeformat)
[docs] def reception_time(self, timeformat='unix'): """ Returns the GMT time telling when the UV has been received from the API :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 :raises: ValueError when negative values are provided """ return formatting.timeformat(self.rec_time, timeformat)
[docs] def get_exposure_risk(self): """ Returns a string stating the risk of harm from unprotected sun exposure for the average adult on this UV observation :return: str """ return uv_intensity_to_exposure_risk(self.value)
[docs] @classmethod def from_dict(cls, the_dict): """ Parses an *UVIndex* instance out of raw JSON data. Only certain properties of the data are used: if these properties are not found or cannot be parsed, an error is issued. :param the_dict: the input dict :type the_dict: dict :returns: an *UVIndex* instance or ``None`` if no data is available :raises: *ParseAPIResponseError* if it is impossible to find or parse the data needed to build the result, *APIResponseError* if the input dict embeds an HTTP status error """ if the_dict is None: raise exceptions.ParseAPIResponseError('Data is None') try: # -- reference time reference_time = the_dict['date'] # -- reception time (now) reception_time = timestamps.now('unix') # -- location lon = float(the_dict['lon']) lat = float(the_dict['lat']) place = location.Location(None, lon, lat, None) # -- UV intensity uv_intensity = float(the_dict['value']) except KeyError: raise exceptions.ParseAPIResponseError(''.join([__name__, ': impossible to parse UV Index'])) return UVIndex(reference_time, place, uv_intensity, reception_time)
[docs] def to_dict(self): """Dumps object to a dictionary :returns: a `dict` """ return {"reference_time": self.ref_time, "location": self.location.to_dict(), "value": self.value, "reception_time": self.rec_time}
def __repr__(self): return "<%s.%s - reference time=%s, reception time=%s, location=%s, " \ "value=%s>" % ( __name__, self.__class__.__name__, self.reference_time('iso'), self.reception_time('iso'), str(self.location), str(self.value))