generated from mwc/lab_server
Still having issues handling exceptions to get the 400 error when a topic or rhyme is not found. Was able to finish the rhyming couplet though, so that's progress.
60 lines
2.3 KiB
Python
60 lines
2.3 KiB
Python
from banjo.urls import route_get, route_post
|
|
from banjo.http import BadRequest, NotFound
|
|
from app.models import Line, Poem, Rhyme
|
|
from random import choice, sample
|
|
|
|
@route_get('lines/random', args={})
|
|
def get_random_line(params):
|
|
return {'line': Line.objects.random().text}
|
|
|
|
@route_get('lines/about', args={'topic': str})
|
|
def get_about_line(params):
|
|
try:
|
|
line = Line.objects.filter(clean_text__contains=params['topic']).random()
|
|
return {'line': line.text, 'topic': params['topic']}
|
|
except Line.DoesNotExist:
|
|
raise BadRequest("Line not found with that topic")
|
|
|
|
@route_get('lines/rhyme', args={'word': str})
|
|
def get_rhyme_line(params):
|
|
try:
|
|
rhyme = Rhyme.get_rhyme_for_word(params['word']).lines.exclude(clean_text__endswith=" "+params['word']).first()
|
|
return {'line': rhyme.text, 'word': params['word']}
|
|
return rhyme.to_dict()
|
|
except Rhyme.DoesNotExist:
|
|
raise BadRequest("Rhyme not found")
|
|
|
|
@route_get('couplets/random', args={})
|
|
def get_random_couplet(params):
|
|
try:
|
|
line = Line.objects.random()
|
|
for rl in line.rhyming_lines().sample(1):
|
|
rhyme = rl
|
|
#print(rhyme.text)
|
|
return {'lines': [line.text, rhyme.text]}
|
|
except Line.DoesNotExist:
|
|
raise BadRequest("Rhyme not found")
|
|
|
|
@route_get('couplets/about', args={'topic': str})
|
|
def get_about_couplet(params):
|
|
try:
|
|
line = Line.objects.filter(clean_text__contains=params['topic']).random()
|
|
for rl in line.rhyming_lines().sample(1):
|
|
rhyme = rl
|
|
return {'lines': [line.text, rhyme.text], 'topic': params['topic']}
|
|
except Line.DoesNotExist:
|
|
raise BadRequest("Couplet not found with given topic")
|
|
|
|
@route_get('couplets/rhyme', args={'word': str})
|
|
def get_rhyme_couplet(params):
|
|
try:
|
|
toRhyme = Rhyme.get_rhyme_for_word(params['word']).lines.exclude(clean_text__endswith=" " + params['word']).first()
|
|
#line = Line.
|
|
for rl in toRhyme.rhyming_lines().sample(1):
|
|
rhyme = rl
|
|
return {'lines': [rhyme.text, toRhyme.text], 'word': params['word']}
|
|
except Rhyme.DoesNotExist:
|
|
raise BadRequest("Did not find a couplet that rhymes with given word")
|
|
except Exception as e:
|
|
if isinstance(e, BadRequest):
|
|
raise BadRequest(f"Couldn't figure out how to pronounce {params['word']}") |