def get_object_from_xml(xml): root_xml = xmlLib.fromstring(xml) route_xml = root_xml[0] route = RouteXmlParser.get_object_from_dict(route_xml.attrib) route.stops = StopXmlParser.get_object_from_xml(route_xml) route.directions = DirectionXmlParser.get_object_from_xml(route_xml, route.stops) route.paths = PathXmlParser.get_object_from_xml(route_xml) return route
def test_get_object_from_xml(self): stops = [ { 'tag': '5184', 'name': 'Jones St & Beach St', 'name_transformed': 'Jones St & Beach St', 'latitude': '30.5', 'longitude': '40.5', 'stop_id':'15184'}, { 'tag': '3092', 'name': 'Beach St & Mason St', 'name_transformed': 'Beach St & Mason St', 'latitude': '50.5', 'longitude': '60.5', 'stop_id':'3092'} ] xml = """<?xml version="1.0" encoding="utf-8" ?> <body copyright="All data copyright San Francisco Muni 2011."> <route tag="F" title="F-Market & Wharves" color="555555" oppositeColor="ffffff" latMin="30.5" latMax="30.5" lonMin="30.5" lonMax="30.5"> <stop tag="%s" title="%s" lat="%s" lon="%s" stopId="%s"/> <stop tag="%s" title="%s" lat="%s" lon="%s" stopId="%s"/> <direction tag="F__OBCTRO" title="Outbound to Castro Station via Downtown" name="Outbound" useForUI="true"> <stop tag="5184" /> <stop tag="3092" /> </direction> <direction tag="F__IBCTRO" title="Inbound to Fisherman's Wharf via Downtown" name="Inbound" useForUI="true"> <stop tag="5184" /> <stop tag="3092" /> </direction> <path> <point lat="37.7678299" lon="-122.42863"/> <point lat="37.76619" lon="-122.43071"/> <point lat="37.76449" lon="-122.43281"/> </path> <path> <point lat="37.76726" lon="-122.42915"/> <point lat="37.76888" lon="-122.4271"/> <point lat="37.77057" lon="-122.42497"/> </path> </route> </body>""" % ( stops[0]['tag'], stops[0]['name'], stops[0]['latitude'], stops[0]['longitude'], stops[0]['stop_id'], stops[1]['tag'], stops[1]['name'], stops[1]['latitude'], stops[1]['longitude'], stops[1]['stop_id']) root_xml = xmlLib.fromstring(xml) route_xml = root_xml[0] parsed_stops = StopXmlParser.get_object_from_xml(route_xml) for i, parsed_stop in enumerate(parsed_stops): self.assertEqual(parsed_stop.tag, stops[i]['tag']) self.assertEqual(parsed_stop.name, stops[i]['name_transformed']) self.assertEqual(parsed_stop.location.latitude, float(stops[i]['latitude'])) self.assertEqual(parsed_stop.location.longitude, float(stops[i]['longitude'])) self.assertEqual(parsed_stop.id, int(stops[i]['stop_id']))