Exemplo n.º 1
0
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
Exemplo n.º 2
0
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))
Exemplo n.º 3
0
 def setUp(self):
     """
     Setup is used for creating a new instance of nationalrail.
     """
     self.rail = nr()
Exemplo n.º 4
0
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