Source code for pyowm.stationsapi30.parsers.station_parser

"""
Module containing a concrete implementation for JSONParser abstract class,
returning a Station instance
"""

import json
from pyowm.abstractions import jsonparser
from pyowm.exceptions import parse_response_error
from pyowm.stationsapi30.station import Station


[docs]class StationParser(jsonparser.JSONParser): """ Concrete *JSONParser* implementation building a *pyowm.stationsapi30.station.Station* instance out of raw JSON data """ def __init__(self): pass
[docs] def parse_dict(self, data_dict): """ Parses a dictionary representing the attributes of a *pyowm.stationsapi30.station.Station* entity :param data_dict: dict :return: *pyowm.stationsapi30.station.Station* """ assert isinstance(data_dict, dict) string_repr = json.dumps(data_dict) return self.parse_JSON(string_repr)
[docs] def parse_JSON(self, JSON_string): """ Parses a *pyowm.stationsapi30.station.Station* instance out of raw JSON data. :param JSON_string: a raw JSON string :type JSON_string: str :return: a *pyowm.stationsapi30.station.Station* instance or ``None`` if no data is available :raises: *ParseResponseError* if it is impossible to find or parse the data needed to build the result """ if JSON_string is None: raise parse_response_error.ParseResponseError('JSON data is None') d = json.loads(JSON_string) try: id = d.get('ID', None) or d.get('id', None) external_id = d.get('external_id', None) lon = d.get('longitude', None) lat = d.get('latitude', None) alt = d.get('altitude', None) except KeyError as e: raise parse_response_error.ParseResponseError('Impossible to parse JSON: %s' % e) name = d.get('name', None) rank = d.get('rank', None) created_at = d.get('created_at', None) updated_at = d.get('updated_at', None) return Station(id, created_at, updated_at, external_id, name, lon, lat, alt, rank)