Exemple #1
0
def fetch_site(connection: datapoint.Manager, latitude, longitude):
    """Fetch site information from Datapoint API."""
    try:
        return connection.get_nearest_forecast_site(latitude=latitude,
                                                    longitude=longitude)
    except datapoint.exceptions.APIException as err:
        _LOGGER.error("Received error from Met Office Datapoint: %s", err)
        return None
Exemple #2
0
def fetch_data(connection: datapoint.Manager, site, mode) -> MetOfficeData:
    """Fetch weather and forecast from Datapoint API."""
    try:
        forecast = connection.get_forecast_for_site(site.id, mode)
    except (ValueError, datapoint.exceptions.APIException) as err:
        _LOGGER.error("Check Met Office connection: %s", err.args)
        raise UpdateFailed from err
    else:
        time_now = utcnow()
        return MetOfficeData(
            forecast.now(),
            [
                timestep for day in forecast.days
                for timestep in day.timesteps if timestep.date > time_now
            ],
            site,
        )
Exemple #3
0
def fetch_data(connection: datapoint.Manager, site: Site,
               mode: str) -> MetOfficeData:
    """Fetch weather and forecast from Datapoint API."""
    try:
        forecast = connection.get_forecast_for_site(site.id, mode)
    except (ValueError, datapoint.exceptions.APIException) as err:
        _LOGGER.error("Check Met Office connection: %s", err.args)
        raise UpdateFailed from err
    else:
        time_now = utcnow()
        return MetOfficeData(
            now=forecast.now(),
            forecast=[
                timestep for day in forecast.days for timestep in day.timesteps
                if timestep.date > time_now and
                (mode == MODE_3HOURLY or timestep.date.hour > 6
                 )  # ensures only one result per day in MODE_DAILY
            ],
            site=site,
        )