def _getCRS(station): """ Method to get the CRS code for the given station name. """ if not station or len(station.strip()) == 0: return None crs = None rail = nr() # Assume CRS if the length is less than 3 if len(station) == 3: crslist = rail.retrieveCRS(crs=station) else: station = _expandCommon(station) crslist = rail.retrieveCRS(station_name=station) return crslist
def service(request): """ Method which handles service details request. """ if request.GET: p = request.GET sid = p.get('id', None) crs = p.get('crs', None) nid = p.get('nid', None) if not sid: error_msg = "Invalid train details. Start again" return _redirect_home_with_msg(request, error_msg) rail = nr() resp = rail.serviceDetails(sid) if not resp: return render_to_response('ser.html', {'error' : true}, context_instance=RequestContext(request)) sdetails = resp.GetServiceDetailsResult dt = sdetails.generatedAt.split('T') dtime = dt[1].split('.')[0] asof = dt[0] + " " + dtime plat = sdetails.get('platform', None) isCancelled = sdetails.get('isCancelled', None) disruptionReason = sdetails.get('disruptionReason', None) eta = sdetails.get('eta', None) etd = sdetails.get('etd', None) return render_to_response('ser.html', {'sdetails' : sdetails, 'asof' : asof, 'plat' : plat, 'isCancelled' : isCancelled, 'disruptionReason' : disruptionReason, 'eta' : eta, 'etd' : etd, 'id' : sid, 'crs' : crs, 'nid' : nid, }, context_instance=RequestContext(request))
def setUp(self): """ Setup is used for creating a new instance of nationalrail. """ self.rail = nr()
def _handleDepartures(request, fromS=None, viaS=None, favId=None): """ Re-usable method which handles departure requests. This can be invoked from other places like favorites. """ if not fromS or fromS.strip() == "": error_msg = "Station name or CRS please" return _redirect_home_with_msg(request, error_msg) if viaS and viaS.lower() == 'optional': viaS = None crslist = _getCRS(fromS) if not crslist: error_msg = "cannot recognise station name" return _redirect_home_with_msg(request, error_msg) if crslist and len(crslist) == 1: fromS, crs = crslist[0] crslist = [] filterCrslist = _getCRS(viaS) if filterCrslist and len(filterCrslist) == 1: viaS, filterCrs = filterCrslist[0] filterCrslist = [] # If multiple CRS are returned, then redirect to the # modified search page that shows list if len(crslist) > 1 or (filterCrslist and len(filterCrslist) > 1): args = {'crslist' : crslist, 'filterCrslist' : filterCrslist, 'fromS' : fromS, 'viaS' : viaS, } args.update(_defaults(request)) return render_to_response('multi.html', args, context_instance=RequestContext(request)) rail = nr() deps = rail.departures(crs=crs, filterCrs=filterCrs) services = None # Are there any services running? if deps.GetDepartureBoardResult.get('trainServices'): services = deps.GetDepartureBoardResult.trainServices.get('service', None) platformAvailable = deps.GetDepartureBoardResult.get('platformAvailable', None) # Force a list if the result has just one service if services and not isinstance(services, list): services = [services] dt = deps.GetDepartureBoardResult.generatedAt.split('T') dtime = dt[1].split('.')[0] asof = dt[0] + " " + dtime location = deps.GetDepartureBoardResult.locationName # Build next service dict nextService = {} prevService = None if services: for service in services: if prevService: nextService[prevService] = service.serviceID prevService = service.serviceID response = render_to_response('dep.html', {'services' : services, 'nextService' : nextService, 'location' : location, 'crs' : crs, 'filterCrs' : filterCrs, 'platformAvailable' : platformAvailable, 'favId' : favId, 'asof' : asof}, context_instance=RequestContext(request)) response.set_cookie(LAST_SEARCH_COOKIE, fromS + "|" + viaS) return response