Exemple #1
0
def boat_arrival(event, context):
    try:  # get boat
        boat = BoatModel.get(hash_key=event['pathParameters']['id'])
    except DoesNotExist:  # if not found then 'not found'
        return {
            'statusCode': 404,
            'body': json.dumps({'error_message': 'BOAT was not found'})
        }

    # sc = EntityType.count(hash_key='entity_type', filter_condition=SlipModel.current_boat.does_not_exist() & (SlipModel.entity_type == 'slip'))
    # sc = SlipModel.e_type.count(hash_key='entity_type', filter_condition=SlipModel.current_boat.does_not_exist() & (SlipModel.entity_type == 'slip'))
    try:
        # scan for empty slip. Only need one so limited to one result
        # slip = SlipModel.query(filter_condition=SlipModel.current_boat.does_not_exist() & (SlipModel.entity_type == 'slip'), limit=1)

        slip = SlipModel.scan(
            filter_condition=SlipModel.current_boat.does_not_exist() &
            (SlipModel.entity_type == 'slip'),
            limit=1)
    except DoesNotExist:
        return {
            'statusCode': 403,
            'body': json.dumps({'error message': 'No slips found'})
        }

    boat.update(actions=[BoatModel.at_sea.set(False)
                         ])  # set boat at_sea to false
    for s in slip:
        if s.count > 0:
            s.update(actions=[
                SlipModel.current_boat.set('/boat/' + boat.id),
                SlipModel.arrival_date.set(str(datetime.now()))
            ])
            b = path + boat.id
            return {
                'statusCode':
                200,
                'body':
                json.dumps({
                    'success':
                    'Boat {0} arrived in slip {1}'.format(b, s.id),
                    'slip':
                    dict(s)
                })
            }
        else:
            return {
                'statusCode': 403,
                'body': json.dumps({'error message': 'No empty slips'})
            }
Exemple #2
0
def get_slips(event, context):
    try:
        slips = SlipModel.scan(
            filter_condition=(SlipModel.entity_type == 'slip'))
    except DoesNotExist:
        return {
            'statusCode': 404,
            'body': json.dumps({'error_message': 'No slips in table'})
        }

    return {
        'statusCode': 200,
        'body': json.dumps({'slips': [dict(slip) for slip in slips]})
    }
Exemple #3
0
def boat_departure(event, context):
    try:
        boat = BoatModel.get(hash_key=event['pathParameters']['id'])
    except DoesNotExist:
        return {
            'statusCode': 404,
            'body': json.dumps({'error_message': 'BOAT was not found'})
        }

    try:
        # Scan for boat in slip
        slip = SlipModel.scan(
            filter_condition=(SlipModel.current_boat == '/boat/' + boat.id),
            limit=1)
    except ScanError:  # If scan fails return
        return {
            'statusCode': 404,
            'body': json.dumps({'error message': 'Slip not found'})
        }  # Don't need this

    # If not slip return
    # if slip.total_count == 0:
    #     return {'statusCode': 404, 'body': json.dumps({'error message': 'BOAT not in slip'})}

    # Set to 'at sea'
    boat.update(actions=[BoatModel.at_sea.set(True)])
    for s in slip:
        s.update(actions=[
            SlipModel.current_boat.remove(),
            SlipModel.arrival_date.remove()
        ])
        return {
            'statusCode':
            200,
            'body':
            json.dumps({
                'success':
                'Boat {0} departed slip {1}'.format(boat.id, s.id),
                'slip_id':
                '{0}'.format(s.id),
                'boat_id':
                '{0}'.format(boat.id)
            })
        }
Exemple #4
0
def delete_boat(event, context):
    boat = BoatModel(hash_key=event['pathParameters']['id'])
    bid = boat.id
    if boat.at_sea == True:
        slip = SlipModel.scan(
            filter_condition=(SlipModel.current_boat == '/boat/' + boat.id),
            limit=1)
        for s in slip:
            s.update(actions=[
                SlipModel.current_boat.remove(),
                SlipModel.arrival_date.remove()
            ])

    boat.delete()
    return {
        'statusCode':
        200,
        'body':
        json.dumps({
            'success': 'Boat {0} deleted'.format(bid),
            'boat_id': bid
        })
    }