Source code for pyhafas.types.hafas_response

import json

import requests

from pyhafas.profile.interfaces.mappings.error_codes import \
    ErrorCodesMappingInterface


[docs]class HafasResponse: """ The class HafasResponse handles the general parsing and error-checking of a raw HaFAS response :ivar raw_hafas_response: The raw response of HaFAS :vartype raw_hafas_response: requests.Response :ivar data: json parsed raw response of HaFAS :vartype data: dict """ def __init__(self, raw_hafas_response: requests.Response, mapping: ErrorCodesMappingInterface): """ Constructor of class HafasResponse :param raw_hafas_response: The raw response of HaFAS :param mapping: Error Mapping Enum (key is the HaFAS error code, value the error class) """ data = json.loads(raw_hafas_response.text) self.raw_hafas_response = raw_hafas_response self.data = data self.check_for_errors(mapping)
[docs] def check_for_errors(self, mapping: ErrorCodesMappingInterface): """ Checks if HaFAS response has error messages and handles them :param mapping: Error Mapping Enum (key is the HaFAS error code, value the error class) """ error_not_found = False if self.data.get('err', "OK") != "OK": try: raise mapping[self.data['err']].value( self.data.get('errTxt', '')) except KeyError: error_not_found = True if error_not_found: raise mapping['default'].value(self.data.get('errTxt', '')) if not self.data.get('svcResL', False): raise mapping['default'].value("HaFAS response cannot be parsed") if self.data['svcResL'][0].get('err', "OK") != "OK": try: raise mapping[self.data['svcResL'][0]['err']].value( self.data['svcResL'][0].get('errTxt', '')) except KeyError: error_not_found = True if error_not_found: raise mapping['default'].value( self.data['svcResL'][0].get('errTxt', ''))
@property def common(self): """ Returns the "common" data out of HaFAS data :return: dict with "common" data """ return self.data['svcResL'][0]['res']['common'] @property def res(self): """ Returns the "res" data out of HaFAS data :return: dict with "res" data """ return self.data['svcResL'][0]['res']