Example #1
0
def get_incomplete_laps(track_name, session_name):
    '''
    Gets incomplete laps for a track session.

    :param track_name: Name of track.
    :type track_name: str
    :param session_name: Name of session. Must exist for track.
    :type session_name: str

    :authorization: Administrators, riders and spectators.
    :returns: Details of incomplete laps.
    :rtype: Instance of :class:`laptimer.models.ApiResult`.
    '''
    method = 'get_incomplete_laps'
    try:
        check = api_utils.check_if_not_found(Track, method, track_name)
        if check != True:
            return check
        check = api_utils.check_if_not_found(Session, method, session_name)
        if check != True:
            return check
        session = Session.objects.get(name=session_name,
            track__name=track_name)
        laps = Lap.objects.filter(session=session, finish__isnull=True)
        logger.info('%s: %s' % (method, data))
        return ApiResult(method, ok=True, data=laps)
    except Exception as e:
        logger.error('Exception caught in %s: %s' % (method, e))
        error = type(e).__name__
        return ApiResult(method, ok=False, data=error)
Example #2
0
def get_incomplete_laps(track_name, session_name):
    '''
    Gets incomplete laps for a track session.

    :param track_name: Name of track.
    :type track_name: str
    :param session_name: Name of session. Must exist for track.
    :type session_name: str

    :authorization: Administrators, riders and spectators.
    :returns: Details of incomplete laps.
    :rtype: Instance of :class:`laptimer.models.ApiResult`.
    '''
    method = 'get_incomplete_laps'
    try:
        check = api_utils.check_if_not_found(Track, method, track_name)
        if check != True:
            return check
        check = api_utils.check_if_not_found(Session, method, session_name)
        if check != True:
            return check
        session = Session.objects.get(name=session_name,
                                      track__name=track_name)
        laps = Lap.objects.filter(session=session, finish__isnull=True)
        logger.info('%s: %s' % (method, data))
        return ApiResult(method, ok=True, data=laps)
    except Exception as e:
        logger.error('Exception caught in %s: %s' % (method, e))
        error = type(e).__name__
        return ApiResult(method, ok=False, data=error)
Example #3
0
def change_rider_for_lap(track_name, session_name, rider_name, start_time,
    new_rider_name):
    '''
    Changes the rider associated with a lap and its sensor events.

    :param track_name: Name of track.
    :type track_name: str
    :param session_name: Name of session. Must exist for track.
    :type session_name: str
    :param rider_name: Name of current rider for lap.
    :type rider_name: str
    :param start_time: Start time of lap.
    :type time: datetime
    :param new_rider_name: Name of new rider for lap.
    :type new_rider_name: str

    :authorization: Administrators.
    :broadcast: Administrators, riders and spectators.
    :returns: Details of changed lap.
    :rtype: Instance of :class:`laptimer.models.ApiResult`.
    '''
    method = 'change_rider_for_lap'
    try:
        check = api_utils.check_if_not_found(Track, method, track_name)
        if check != True:
            return check
        check = api_utils.check_if_not_found(Session, method, session_name)
        if check != True:
            return check
        check = api_utils.check_if_not_found(Rider, method, rider_name)
        if check != True:
            return check
        check = api_utils.check_if_not_found(Rider, method, new_rider_name)
        if check != True:
            return check
        session = Session.objects.get(name=session_name,
            track__name=track_name)
        rider = Rider.objects.get(name=rider_name)
        new_rider = Rider.objects.get(name=new_rider_name)
        lap = Lap.objects.get(session=session, rider=rider, \
            start__time=start_time)
        lap.rider = new_rider
        lap.save()
        logger.info(
            'Changed rider for lap starting: %s from: %s to: %s in session: %s' \
            % (start_time, rider_name, new_rider_name, session_name))
        return ApiResult(method, ok=True, data=lap)
    except Exception as e:
        logger.error('Exception caught in %s: %s' % (method, e))
        error = type(e).__name__
        return ApiResult(method, ok=False, data=error)
Example #4
0
def change_rider_for_lap(track_name, session_name, rider_name, start_time,
                         new_rider_name):
    '''
    Changes the rider associated with a lap and its sensor events.

    :param track_name: Name of track.
    :type track_name: str
    :param session_name: Name of session. Must exist for track.
    :type session_name: str
    :param rider_name: Name of current rider for lap.
    :type rider_name: str
    :param start_time: Start time of lap.
    :type time: datetime
    :param new_rider_name: Name of new rider for lap.
    :type new_rider_name: str

    :authorization: Administrators.
    :broadcast: Administrators, riders and spectators.
    :returns: Details of changed lap.
    :rtype: Instance of :class:`laptimer.models.ApiResult`.
    '''
    method = 'change_rider_for_lap'
    try:
        check = api_utils.check_if_not_found(Track, method, track_name)
        if check != True:
            return check
        check = api_utils.check_if_not_found(Session, method, session_name)
        if check != True:
            return check
        check = api_utils.check_if_not_found(Rider, method, rider_name)
        if check != True:
            return check
        check = api_utils.check_if_not_found(Rider, method, new_rider_name)
        if check != True:
            return check
        session = Session.objects.get(name=session_name,
                                      track__name=track_name)
        rider = Rider.objects.get(name=rider_name)
        new_rider = Rider.objects.get(name=new_rider_name)
        lap = Lap.objects.get(session=session, rider=rider, \
            start__time=start_time)
        lap.rider = new_rider
        lap.save()
        logger.info(
            'Changed rider for lap starting: %s from: %s to: %s in session: %s' \
            % (start_time, rider_name, new_rider_name, session_name))
        return ApiResult(method, ok=True, data=lap)
    except Exception as e:
        logger.error('Exception caught in %s: %s' % (method, e))
        error = type(e).__name__
        return ApiResult(method, ok=False, data=error)
Example #5
0
def change_session(track_name, session_name, new_session_name=None, 
    new_track_name=None):
    '''
    Changes the session or track name.

    :param track_name: Name of track.
    :type track_name: str
    :param session_name: Current session name. Must exist for track.
    :type session_name: str
    :param session_name: New unique session name.
    :type session_name: str

    :authorization: Administrators.
    :broadcast: Administrators, riders and spectators.
    :returns: Details of changed session.
    :rtype: Instance of :class:`laptimer.models.ApiResult`.
    '''    
    method = 'change_session'
    try:
        check = api_utils.check_if_not_found(Track, method, track_name)
        if check != True:
            return check
        if not Session.objects.filter(track__name=track_name, 
            name=session_name).exists():
            error = 'Session not found'
            return ApiResult(method, ok=False, data=error)
        if new_session_name == None and new_track_name == None:
            error = 'New session or track name is required' # TODO: i18n
            return ApiResult(method, ok=False, data=error)
        if new_track_name != None:
            check = api_utils.check_if_not_found(Track, method, new_track_name)
            if check != True:
                return check
        session = Session.objects.get(name=session_name)
        if new_session_name != None:
            if Session.objects.filter(track=session.track, 
                name=new_session_name).exists():
                error = 'Session already exists'
                return ApiResult(method, ok=False, data=error)
            session.name = new_session_name
        if new_track_name != None:
            session.track = Track.objects.get(name=new_track_name)
        session.save()
        logger.info('%s: %s' % (method, session.name))
        result = ApiResult(method, ok=True, data=session)
        # TODO: Broadcast
        return result
    except Exception as e:
        logger.error('Exception caught in %s: %s' % (method, e))
        error = type(e).__name__
        return ApiResult(method, ok=False, data=error)
Example #6
0
def change_rider(rider_name, new_rider_name):
    '''
    Changes the riders name.

    :param rider_name: Current name of rider.
    :type rider_name: str
    :param new_rider_name: New unique name of rider.
    :type new_rider_name: str

    :authorization: Administrators.
    :broadcast: Administrators, riders and spectators.
    :returns: Details of changed rider.
    :rtype: Instance of :class:`laptimer.models.ApiResult`.
    '''
    method = 'change_rider'
    try:
        check = api_utils.check_if_found(Rider, method, new_rider_name)
        if check != True:
            return check
        check = api_utils.check_if_not_found(Rider, method, rider_name)
        if check != True:
            return check
        rider = Rider.objects.get(name=rider_name)
        rider.name = new_rider_name
        rider.save()
        logger.info('%s: %s' % (method, rider.name))
        result = ApiResult(method, ok=True, data=rider)
        # TODO: Broadcast result
        return result
    except Exception as e:
        logger.error('Exception caught in %s: %s' % (method, e))
        error = type(e).__name__
        return ApiResult(method, ok=False, data=error)
Example #7
0
def change_track(track_name,
                 new_track_name=None,
                 new_track_distance=None,
                 new_lap_timeout=None,
                 new_unit_of_measurement=None):
    '''
    Changes track details.

    :param track_name: Current name of track.
    :type track_name: str
    :param new_track_name: New unique name of track.
    :type new_track_name: str
    :param new_track_distance: Total track distance.
    :type new_track_distance: float
    :param new_lap_timeout: Maximum number of seconds before a lap times out..
    :type new_lap_timeout: integer
    :param new_unit_of_measurement: Unit of measurement, either Metric or
    Imperial.
    :type new_unit_of_measurement: str

    :authorization: Administrators.
    :broadcast: Administrators, riders and spectators.
    :returns: Details of changed track.
    :rtype: Instance of :class:`laptimer.models.ApiResult`.
    '''
    method = 'change_track'
    try:
        check = api_utils.check_if_not_found(Track, method, track_name)
        if check != True:
            return check
        if new_track_name == None and new_track_distance == None \
        and new_lap_timeout == None and new_unit_of_measurement == None:
            error = 'At least one new track detail is required'  # TODO: i18n
            return ApiResult(method, ok=False, data=error)
        if new_unit_of_measurement != None \
        and new_unit_of_measurement not in dict(settings.UNIT_OF_MEASUREMENT):
            error = 'Invalid unit of measurement'  # TODO: i18n
            return ApiResult(method, ok=False, data=error)
        if new_track_name != None:
            check = api_utils.check_if_found(Track, method, new_track_name)
            if check != True:
                return check
        track = Track.objects.get(name=track_name)
        if new_track_name != None:
            track.name = new_track_name
        if new_track_distance != None:
            track.distance = new_track_distance
        if new_lap_timeout != None:
            track.timeout = new_lap_timeout
        if new_unit_of_measurement != None:
            track.unit_of_measurement = new_unit_of_measurement
        track.save()
        logger.info('%s: %s' % (method, track.name))
        result = ApiResult(method, ok=True, data=track)
        # TODO: Broadcast result
        return result
    except Exception as e:
        logger.error('Exception caught in %s: %s' % (method, e))
        error = type(e).__name__
        return ApiResult(method, ok=False, data=error)
Example #8
0
def remove_rider(rider_name):
    '''
    Removes a rider, including all track, session and lap data.

    :param rider_name: Name of rider to be removed.
    :type rider_name: str

    :authorization: Administrators.
    :broadcast: Administrators, riders and spectators.
    :returns: Details of removed rider.
    :rtype: Instance of :class:`laptimer.models.ApiResult`.
    '''
    method = 'remove_rider'
    try:
        check = api_utils.check_if_not_found(Rider, method, rider_name)
        if check != True:
            return check
        rider = Rider.objects.get(name=rider_name)
        rider.delete()
        logger.info('%s: %s' % (method, rider_name))
        result = ApiResult(method, ok=True, data=rider_name)
        # TODO: Broadcast result
        return result
    except Exception as e:
        logger.error('Exception caught in %s: %s' % (method, e))
        error = type(e).__name__
        return ApiResult(method, ok=False, data=error)
Example #9
0
def remove_rider(rider_name):
    """
    Removes a rider, including all track, session and lap data.

    :param rider_name: Name of rider to be removed.
    :type rider_name: str

    :authorization: Administrators.
    :broadcast: Administrators, riders and spectators.
    :returns: Details of removed rider.
    :rtype: Instance of :class:`laptimer.models.ApiResult`.
    """
    method = "remove_rider"
    try:
        check = api_utils.check_if_not_found(Rider, method, rider_name)
        if check != True:
            return check
        rider = Rider.objects.get(name=rider_name)
        rider.delete()
        logger.info("%s: %s" % (method, rider_name))
        result = ApiResult(method, ok=True, data=rider_name)
        # TODO: Broadcast result
        return result
    except Exception as e:
        logger.error("Exception caught in %s: %s" % (method, e))
        error = type(e).__name__
        return ApiResult(method, ok=False, data=error)
Example #10
0
def remove_track(track_name):
    '''
    Removes a track, including all session and lap data.

    :param track_name: Name of track.
    :type track_name: str

    :authorization: Administrators.
    :broadcast: Administrators, riders and spectators.
    :returns: Details of removed track.
    :rtype: Instance of :class:`laptimer.models.ApiResult`.
    '''
    method = 'remove_track'
    try:
        check = api_utils.check_if_not_found(Track, method, track_name)
        if check != True:
            return check
        track = Track.objects.get(name=track_name)
        track.delete()
        logger.info('%s: %s' % (method, track_name))
        result = ApiResult(method, ok=True, data=track_name)
        # TODO: Broadcast result
        return result
    except Exception as e:
        logger.error('Exception caught in %s: %s' % (method, e))
        error = type(e).__name__
        return ApiResult(method, ok=False, data=error)
Example #11
0
def change_rider(rider_name, new_rider_name):
    """
    Changes the riders name.

    :param rider_name: Current name of rider.
    :type rider_name: str
    :param new_rider_name: New unique name of rider.
    :type new_rider_name: str

    :authorization: Administrators.
    :broadcast: Administrators, riders and spectators.
    :returns: Details of changed rider.
    :rtype: Instance of :class:`laptimer.models.ApiResult`.
    """
    method = "change_rider"
    try:
        check = api_utils.check_if_found(Rider, method, new_rider_name)
        if check != True:
            return check
        check = api_utils.check_if_not_found(Rider, method, rider_name)
        if check != True:
            return check
        rider = Rider.objects.get(name=rider_name)
        rider.name = new_rider_name
        rider.save()
        logger.info("%s: %s" % (method, rider.name))
        result = ApiResult(method, ok=True, data=rider)
        # TODO: Broadcast result
        return result
    except Exception as e:
        logger.error("Exception caught in %s: %s" % (method, e))
        error = type(e).__name__
        return ApiResult(method, ok=False, data=error)
Example #12
0
def add_session(track_name, session_name):
    '''
    Adds a new session. Session name must be unique for track.

    :param track_name: Name of track.
    :type track_name: str
    :param session_name: Name of session. Must exist for track.
    :type session_name: str

    :authorization: Administrators.
    :broadcast: Administrators, riders and spectators.
    :returns: Details of new session.
    :rtype: Instance of :class:`laptimer.models.ApiResult`.
    '''
    method = 'add_session'
    try:
        check = api_utils.check_if_not_found(Track, method, track_name)
        if check != True:
            return check
        track = Track.objects.get(name=track_name)
        if Session.objects.filter(track=track, name=session_name).exists():
            error = 'Session already exists'
            return ApiResult(method, ok=False, data=error)
        session = Session.objects.create(track_id=track.id, name=session_name)
        logger.info('%s: %s' % (method, session.name))
        result = ApiResult(method, ok=True, data=session)
        # TODO: Broadcast
        return result
    except Exception as e:
        logger.error('Exception caught in %s: %s' % (method, e))
        error = type(e).__name__
        return ApiResult(method, ok=False, data=error)
Example #13
0
def remove_session(track_name, session_name):
    '''
    Removes a session, including all lap data.

    :param track_name: Name of track.
    :type track_name: str
    :param session_name: Name of session. Must exist for track.
    :type session_name: str

    :authorization: Administrators.
    :broadcast: Administrators, riders and spectators.
    :returns: Details of removed session.
    :rtype: Instance of :class:`laptimer.models.ApiResult`.
    '''
    method = 'remove_session'
    try:
        check = api_utils.check_if_not_found(Track, method, track_name)
        if check != True:
            return check
        if not Session.objects.filter(name=session_name, 
            track__name=track_name).exists():
            error = 'Session not found'
            return ApiResult(method, ok=False, data=error)
        session = Session.objects.get(name=session_name, 
            track__name=track_name)
        session.delete()
        logger.info('%s: %s' % (method, session_name))
        result = ApiResult(method, ok=True, data=session_name)
        # TODO: Broadcast
        return result
    except Exception as e:
        logger.error('Exception caught in %s: %s' % (method, e))
        error = type(e).__name__
        return ApiResult(method, ok=False, data=error)
Example #14
0
def change_track(track_name, new_track_name=None, new_track_distance=None,
    new_lap_timeout=None, new_unit_of_measurement=None):
    '''
    Changes track details.

    :param track_name: Current name of track.
    :type track_name: str
    :param new_track_name: New unique name of track.
    :type new_track_name: str
    :param new_track_distance: Total track distance.
    :type new_track_distance: float
    :param new_lap_timeout: Maximum number of seconds before a lap times out..
    :type new_lap_timeout: integer
    :param new_unit_of_measurement: Unit of measurement, either Metric or
    Imperial.
    :type new_unit_of_measurement: str

    :authorization: Administrators.
    :broadcast: Administrators, riders and spectators.
    :returns: Details of changed track.
    :rtype: Instance of :class:`laptimer.models.ApiResult`.
    '''
    method = 'change_track'
    try:
        check = api_utils.check_if_not_found(Track, method, track_name)
        if check != True:
            return check
        if new_track_name == None and new_track_distance == None \
        and new_lap_timeout == None and new_unit_of_measurement == None:
            error = 'At least one new track detail is required' # TODO: i18n
            return ApiResult(method, ok=False, data=error)
        if new_unit_of_measurement != None \
        and new_unit_of_measurement not in dict(settings.UNIT_OF_MEASUREMENT):
            error = 'Invalid unit of measurement' # TODO: i18n
            return ApiResult(method, ok=False, data=error)
        if new_track_name != None:
            check = api_utils.check_if_found(Track, method, new_track_name)
            if check != True:
                return check
        track = Track.objects.get(name=track_name)
        if new_track_name != None:
            track.name = new_track_name
        if new_track_distance != None:
            track.distance = new_track_distance
        if new_lap_timeout != None:
            track.timeout = new_lap_timeout
        if new_unit_of_measurement != None:
            track.unit_of_measurement = new_unit_of_measurement
        track.save()
        logger.info('%s: %s' % (method, track.name))
        result = ApiResult(method, ok=True, data=track)
        # TODO: Broadcast result
        return result
    except Exception as e:
        logger.error('Exception caught in %s: %s' % (method, e))
        error = type(e).__name__
        return ApiResult(method, ok=False, data=error)
Example #15
0
def remove_lap(track_name, session_name, rider_name, start_time):
    '''
    Removes a lap and associated sensor events.

    :param track_name: Name of track.
    :type track_name: str
    :param session_name: Name of session. Must exist for track.
    :type session_name: str
    :param rider_name: Name of rider.
    :type rider_name: str
    :param start_time: Start time of lap.
    :type time: datetime

    :authorization: Administrators.
    :broadcast: Administrators, riders and spectators.
    :returns: Details of removed lap.
    :rtype: Instance of :class:`laptimer.models.ApiResult`.
    '''
    method = 'remove_lap'
    try:
        check = api_utils.check_if_not_found(Track, method, track_name)
        if check != True:
            return check
        check = api_utils.check_if_not_found(Session, method, session_name)
        if check != True:
            return check
        check = api_utils.check_if_not_found(Rider, method, rider_name)
        if check != True:
            return check
        session = Session.objects.get(name=session_name,
            track__name=track_name)
        rider = Rider.objects.get(name=rider_name)
        lap = Lap.objects.get(session=session, rider=rider, \
            start__time=start_time)
        lap.delete()
        events = SensorEvent.objects.filter(lap=lap)
        events.delete()
        logger.info('Removed lap starting: %s for rider: %s in session: %s' \
            % (start_time, rider_name, session_name))
        return ApiResult(method, ok=True, data=lap)
    except Exception as e:
        logger.error('Exception caught in %s: %s' % (method, e))
        error = type(e).__name__
        return ApiResult(method, ok=False, data=error)
Example #16
0
def remove_lap(track_name, session_name, rider_name, start_time):
    '''
    Removes a lap and associated sensor events.

    :param track_name: Name of track.
    :type track_name: str
    :param session_name: Name of session. Must exist for track.
    :type session_name: str
    :param rider_name: Name of rider.
    :type rider_name: str
    :param start_time: Start time of lap.
    :type time: datetime

    :authorization: Administrators.
    :broadcast: Administrators, riders and spectators.
    :returns: Details of removed lap.
    :rtype: Instance of :class:`laptimer.models.ApiResult`.
    '''
    method = 'remove_lap'
    try:
        check = api_utils.check_if_not_found(Track, method, track_name)
        if check != True:
            return check
        check = api_utils.check_if_not_found(Session, method, session_name)
        if check != True:
            return check
        check = api_utils.check_if_not_found(Rider, method, rider_name)
        if check != True:
            return check
        session = Session.objects.get(name=session_name,
                                      track__name=track_name)
        rider = Rider.objects.get(name=rider_name)
        lap = Lap.objects.get(session=session, rider=rider, \
            start__time=start_time)
        lap.delete()
        events = SensorEvent.objects.filter(lap=lap)
        events.delete()
        logger.info('Removed lap starting: %s for rider: %s in session: %s' \
            % (start_time, rider_name, session_name))
        return ApiResult(method, ok=True, data=lap)
    except Exception as e:
        logger.error('Exception caught in %s: %s' % (method, e))
        error = type(e).__name__
        return ApiResult(method, ok=False, data=error)
Example #17
0
def remove_incomplete_laps(track_name, session_name, rider_name):
    '''
    Removes incomplete laps.

    :param track_name: Name of track.
    :type track_name: str
    :param session_name: Name of session. Must exist for track.
    :type session_name: str
    :param rider_name: Name of rider.
    :type rider_name: str

    :authorization: Administrators.
    :broadcast: Administrators, riders, spectators and sensors.
    :returns: Details of incomplete laps removed.
    :rtype: Instance of :class:`laptimer.models.ApiResult`.
    '''
    # TODO: Role enforcement - admin or current rider only
    method = 'remove_incomplete_laps'
    try:
        check = api_utils.check_if_not_found(Track, method, track_name)
        if check != True:
            return check
        check = api_utils.check_if_not_found(Session, method, session_name)
        if check != True:
            return check
        check = api_utils.check_if_not_found(Rider, method, rider_name)
        if check != True:
            return check
        session = Session.objects.get(name=session_name,
                                      track__name=track_name)
        rider = Rider.objects.get(name=rider_name)
        laps = Lap.objects.filter(session=session, rider=rider, \
            finish__isnull=True)
        count = laps.count()
        laps.delete()
        logger.info(
            'Cancelled %s incomplete laps for rider: %s in session: %s' \
            % (count, rider_name, session_name))
        return ApiResult(method, ok=True, data=laps)
    except Exception as e:
        logger.error('Exception caught in %s: %s' % (method, e))
        error = type(e).__name__
        return ApiResult(method, ok=False, data=error)
Example #18
0
def remove_incomplete_laps(track_name, session_name, rider_name):
    '''
    Removes incomplete laps.

    :param track_name: Name of track.
    :type track_name: str
    :param session_name: Name of session. Must exist for track.
    :type session_name: str
    :param rider_name: Name of rider.
    :type rider_name: str

    :authorization: Administrators.
    :broadcast: Administrators, riders, spectators and sensors.
    :returns: Details of incomplete laps removed.
    :rtype: Instance of :class:`laptimer.models.ApiResult`.
    '''
    # TODO: Role enforcement - admin or current rider only
    method = 'remove_incomplete_laps'
    try:
        check = api_utils.check_if_not_found(Track, method, track_name)
        if check != True:
            return check
        check = api_utils.check_if_not_found(Session, method, session_name)
        if check != True:
            return check
        check = api_utils.check_if_not_found(Rider, method, rider_name)
        if check != True:
            return check
        session = Session.objects.get(name=session_name,
            track__name=track_name)
        rider = Rider.objects.get(name=rider_name)
        laps = Lap.objects.filter(session=session, rider=rider, \
            finish__isnull=True)
        count = laps.count()
        laps.delete()
        logger.info(
            'Cancelled %s incomplete laps for rider: %s in session: %s' \
            % (count, rider_name, session_name))
        return ApiResult(method, ok=True, data=laps)
    except Exception as e:
        logger.error('Exception caught in %s: %s' % (method, e))
        error = type(e).__name__
        return ApiResult(method, ok=False, data=error)
Example #19
0
def get_rider(rider_name):
    """
    Gets a rider.

    :param rider_name: Name of rider.
    :type rider_name: str

    :authorization: Administrators, riders and spectators.
    :returns: Details of rider.
    :rtype: Instance of :class:`laptimer.models.ApiResult`.
    """
    method = "get_rider"
    try:
        check = api_utils.check_if_not_found(Rider, method, rider_name)
        if check != True:
            return check
        rider = Rider.objects.get(name=rider_name)
        logger.info("%s: %s" % (method, rider_name))
        return ApiResult(method, ok=True, data=rider)
    except Exception as e:
        logger.error("Exception caught in %s: %s" % (method, e))
        error = type(e).__name__
        return ApiResult(method, ok=False, data=error)
Example #20
0
def get_sessions(track_name):
    '''
    Gets all sessions for a track.

    :param track_name: Name of track.
    :type track_name: str

    :authorization: Administrators, riders and spectators.
    :returns: Details of track sessions.
    :rtype: Instance of :class:`laptimer.models.ApiResult`.
    '''
    method = 'get_sessions'
    try:
        check = api_utils.check_if_not_found(Track, method, track_name)
        if check != True:
            return check
        sessions = Session.objects.filter(track__name=track_name)
        logger.info('%s: %s' % (method, sessions))
        return ApiResult(method, ok=True, data=sessions)
    except Exception as e:
        logger.error('Exception caught in %s: %s' % (method, e))
        error = type(e).__name__
        return ApiResult(method, ok=False, data=error)
Example #21
0
def get_rider(rider_name):
    '''
    Gets a rider.

    :param rider_name: Name of rider.
    :type rider_name: str

    :authorization: Administrators, riders and spectators.
    :returns: Details of rider.
    :rtype: Instance of :class:`laptimer.models.ApiResult`.
    '''
    method = 'get_rider'
    try:
        check = api_utils.check_if_not_found(Rider, method, rider_name)
        if check != True:
            return check
        rider = Rider.objects.get(name=rider_name)
        logger.info('%s: %s' % (method, rider_name))
        return ApiResult(method, ok=True, data=rider)
    except Exception as e:
        logger.error('Exception caught in %s: %s' % (method, e))
        error = type(e).__name__
        return ApiResult(method, ok=False, data=error)
Example #22
0
def add_sensor_event(track_name, session_name, rider_name, sensor_name, time):
    '''
    Adds a new sensor event.

    Depends on sensor position to determine if start, sector or finish time.

    :param track_name: Name of track.
    :type track_name: str
    :param session_name: Name of session. Must exist for track.
    :type session_name: str
    :param rider_name: Name of rider.
    :type rider_name: str
    :param sensor_name: Name of sensor. Must exist for track.
    :type sensor_name: str
    :param time: Local time of sensor event.
    :type time: datetime

    :authorization: Administrators and sensors.
    :broadcast: Administrators, riders, spectators and sensors.
    :returns: Details of sensor event.
    :rtype: Instance of :class:`laptimer.models.ApiResult`.
    '''
    method = 'add_sensor_event'
    try:
        check = api_utils.check_if_not_found(Track, method, track_name)
        if check != True:
            return check
        check = api_utils.check_if_not_found(Session, method, session_name)
        if check != True:
            return check
        check = api_utils.check_if_not_found(Rider, method, rider_name)
        if check != True:
            return check
        check = api_utils.check_if_not_found(Sensor, method, sensor_name)
        if check != True:
            return check
        if time is None or type(time) is not datetime.datetime:
            error = 'Time must be valid datetime'  # TODO: i18n
            return ApiResult(method, ok=False, data=error)
        session = Session.objects.get(name=session_name,
                                      track__name=track_name)
        rider = Rider.objects.get(name=rider_name)
        sensor = Sensor.objects.get(track__name=track_name, name=sensor_name)
        if sensor.sensor_pos == settings.SENSOR_POS_START:
            result = _add_sensor_event_start(method, session, rider, sensor,
                                             time)
        elif sensor.sensor_pos == settings.SENSOR_POS_FINISH:
            result = _add_sensor_event_finish(method, session, rider, sensor,
                                              time)
        elif sensor.sensor_pos == settings.SENSOR_POS_START_FINISH:
            result = _add_sensor_event_start_finish(method, session, rider,
                                                    sensor, time)
        elif sensor.sensor_pos == settings.SENSOR_POS_SECTOR:
            result = _add_sensor_event_sector(method, session, rider, sensor,
                                              time)
        else:
            error = 'Unknown sensor position: %s' % sensor_pos  # TODO: i18n
            result = ApiResult(method, ok=False, data=error)
        if result.ok:
            # TODO: Broadcast
            pass
        return result
    except Exception as e:
        logger.error('Exception caught in %s: %s' % (method, e))
        error = type(e).__name__
        return ApiResult(method, ok=False, data=error)
Example #23
0
def add_sensor_event(track_name, session_name, rider_name, sensor_name, time):
    '''
    Adds a new sensor event.

    Depends on sensor position to determine if start, sector or finish time.

    :param track_name: Name of track.
    :type track_name: str
    :param session_name: Name of session. Must exist for track.
    :type session_name: str
    :param rider_name: Name of rider.
    :type rider_name: str
    :param sensor_name: Name of sensor. Must exist for track.
    :type sensor_name: str
    :param time: Local time of sensor event.
    :type time: datetime

    :authorization: Administrators and sensors.
    :broadcast: Administrators, riders, spectators and sensors.
    :returns: Details of sensor event.
    :rtype: Instance of :class:`laptimer.models.ApiResult`.
    '''
    method = 'add_sensor_event'
    try:
        check = api_utils.check_if_not_found(Track, method, track_name)
        if check != True:
            return check
        check = api_utils.check_if_not_found(Session, method, session_name)
        if check != True:
            return check
        check = api_utils.check_if_not_found(Rider, method, rider_name)
        if check != True:
            return check
        check = api_utils.check_if_not_found(Sensor, method, sensor_name)
        if check != True:
            return check
        if time is None or type(time) is not datetime.datetime:
            error = 'Time must be valid datetime' # TODO: i18n
            return ApiResult(method, ok=False, data=error)
        session = Session.objects.get(name=session_name,
            track__name=track_name)
        rider = Rider.objects.get(name=rider_name)
        sensor = Sensor.objects.get(track__name=track_name, name=sensor_name)
        if sensor.sensor_pos == settings.SENSOR_POS_START:
            result = _add_sensor_event_start(method, session, rider, sensor, time)
        elif sensor.sensor_pos == settings.SENSOR_POS_FINISH:
            result = _add_sensor_event_finish(method, session, rider, sensor, time)
        elif sensor.sensor_pos == settings.SENSOR_POS_START_FINISH:
            result = _add_sensor_event_start_finish(method, session, rider, sensor,
                time)
        elif sensor.sensor_pos == settings.SENSOR_POS_SECTOR:
            result = _add_sensor_event_sector(method, session, rider, sensor, time)
        else:
            error = 'Unknown sensor position: %s' % sensor_pos # TODO: i18n
            result = ApiResult(method, ok=False, data=error)
        if result.ok:
            # TODO: Broadcast
            pass
        return result
    except Exception as e:
        logger.error('Exception caught in %s: %s' % (method, e))
        error = type(e).__name__
        return ApiResult(method, ok=False, data=error)