generated from mwc/lab_server
	
		
			
				
	
	
		
			42 lines
		
	
	
		
			1.3 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
			
		
		
	
	
			42 lines
		
	
	
		
			1.3 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
from banjo.urls import route_get, route_post
 | 
						|
from banjo.http import BadRequest, NotFound
 | 
						|
from app.models import Riddle
 | 
						|
 | 
						|
@route_get('all', args={})
 | 
						|
def list_riddles(params):
 | 
						|
    riddles = sorted(Riddle.objects.all(), key=lambda riddle: riddle.difficulty())
 | 
						|
    return {'riddles': [riddle.to_dict(with_answer=False) for riddle in riddles]}
 | 
						|
 | 
						|
@route_post('new', args={'question': str, 'answer': str})
 | 
						|
def create_riddle(params):
 | 
						|
    riddle = Riddle.from_dict(params)
 | 
						|
    errors = riddle.validate()
 | 
						|
    if len(errors) == 0:
 | 
						|
        riddle.save()
 | 
						|
        return riddle.to_dict(with_answer=False)
 | 
						|
    else:
 | 
						|
        raise BadRequest("Riddle not found")
 | 
						|
        
 | 
						|
@route_get('show', args={'id': int})
 | 
						|
def show_riddle(params):
 | 
						|
    try:
 | 
						|
        riddle = Riddle.objects.get(id=params['id'])
 | 
						|
        return riddle.to_dict(with_answer=False)
 | 
						|
    except Riddle.DoesNotExist:
 | 
						|
        raise NotFound("Riddle not found")
 | 
						|
 | 
						|
@route_post('guess', args={'id': int, "answer": str})
 | 
						|
def guess_answer(params):
 | 
						|
    try:
 | 
						|
        riddle = Riddle.objects.get(id=params['id'])
 | 
						|
        correct = riddle.check_guess(params['answer'])
 | 
						|
        return {
 | 
						|
            "guess": params['answer'], 
 | 
						|
            "correct": correct,
 | 
						|
            "riddle": riddle.to_dict(with_answer=correct)
 | 
						|
        }
 | 
						|
    except Riddle.DoesNotExist:
 | 
						|
        raise NotFound("Riddle not found")
 | 
						|
    
 | 
						|
 |