def import_park_and_ride(): """Imports data from park and rides, it is recommended to run it quite often """ app = create_app() with app.blueprint_context(BLUEPRINT_NAME): service = TransportService.from_context() service.import_park_and_ride()
def handle_request(self): transport_service = TransportService.from_context() try: return transport_service.get_park_and_ride() except ProviderException: logger.critical("Unable to reach P-R provider", exc_info=True) raise ServiceUnavailable(message="Unable to reach provider")
def handle_request(self, ident, rtitype): transport_service = TransportService.from_context() try: rti_data = transport_service.get_rti(ident, rtitype) except NoSuitableProviderFound: msg = "NoSuitableProviderFound for: %s (%s)" % (ident, rtitype) logger.warn(msg, exc_info=True) raise BadRequest(msg) except MultipleProvidersFound: msg = "MultipleProvidersFound for: %s (%s)" % (ident, rtitype) logger.critical(msg, exc_info=True) raise BadRequest(msg) except NotFound: raise NotFound("POI {ident} not found".format(ident=ident)) else: services, messages, rtitype, title = rti_data response = { 'services': services, 'messages': messages, 'type': rtitype, 'title': title, } return response
def as_dict(self): base = super(HALPOIRepresentation, self).as_dict() representation = HALRepresentation(base) representation.add_link("self", url_for(self.endpoint, ident=self.poi.id)) if self.poi.files: reps = [FileRepresentation(r).as_dict() for r in self.poi.files] representation.add_embed("files", reps) try: poi_service = POIService.from_context() except NoConfiguredService: poi_service = None if poi_service and self.add_parent_children_links: # Merging all IDs (parent and children) into one set to # do only one query to the service pois_ids = set(self.poi.children) pois_ids.update(self.poi.parent) if self.poi.primary_place: pois_ids.add(self.poi.primary_place) if pois_ids: pois_objects = poi_service.get_places_by_identifiers(pois_ids) # ease lookup by having a dict with ID as key if pois_objects: pois = dict((poi.id, poi) for poi in pois_objects) else: pois = {} def add_link(relation, method, identifier): """Add a link w/ or w/o title depending if we found a POI :param relation: link rel (parent or child) :param method: method to apply (add_link or update if it should be an array) :param identifier: ID of the POI for lookup """ poi = pois.get(identifier, None) if poi and poi.name: method( relation, url_for(self.endpoint, ident=identifier), title=poi.name, type=poi.type, type_name=poi.type_name, ) else: method(relation, url_for(self.endpoint, ident=identifier)) if self.poi.parent: for parent in self.poi.parent: add_link("parent", representation.update_link, parent) if self.poi.primary_place: add_link("primary_place", representation.add_link, self.poi.primary_place) if self.poi.children: for child in self.poi.children: add_link("child", representation.update_link, child) try: transport_service = TransportService.from_context() except NoConfiguredService: # Transport service not configured so no RTI information logger.warning("No configured Transport service", exc_info=True) else: try: provider = transport_service.get_provider(self.poi) except ProviderException: logger.debug("No single provider found for: %s" % self.poi.id) else: representation.add_curie("rti", RTI_CURIE) for rtitype, title in provider.provides.items(): representation.add_link( "rti:%s" % rtitype, url_for("places.rti", ident=self.poi.id, rtitype=rtitype), title=title ) return representation.as_dict()