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_random_line_about(params): try: return {'line': Line.objects.filter(clean_text__contains=params['topic']).random().text} except: raise BadRequest(f"Error 400: Sorry, there are no lines containing {params['topic']}.") @route_get('lines/rhyme',args={'rhyme': str}) def get_random_line_that_rhymes_with(params): try: return {'line': Rhyme.get_rhyme_for_word(params['rhyme']).lines.exclude(clean_text__endswith=params['rhyme']).random().text} except: raise BadRequest(f"Error 400: Sorry, there are no lines that rhyme with {params['topic']}.") @route_get('couplets/random',args={}) def get_random_couplet(params): first_line=Line.objects.random() second_line=first_line.rhyming_lines().random() return {'lines': [first_line.text,second_line.text]} @route_get('couplets/about',args={'topic': str}) def get_random_couplet_about(params): try: first_line=Line.objects.filter(clean_text__contains=params['topic']).random() second_line=first_line.rhyming_lines().random() return {'lines': [first_line.text,second_line.text]} except: raise BadRequest(f"Error 400: Sorry, there are not lines that contain the word {params['topic']}.") @route_get('couplets/rhyme',args={'rhyme': str}) def get_random_couplet_that_rhymes_with(params): try: first_line = Rhyme.get_rhyme_for_word(params['rhyme']).lines.exclude(clean_text__endswith=params['rhyme']).random() second_line = first_line.rhyming_lines().random() return {'lines': [first_line.text,second_line.text]} except: raise BadRequest(f"Error 400: Sorry, there are not at least two lines that rhyme with {params['topic']}.") @route_get('word/rhyme',args={'rhyme': str}) def get_random_word_that_rhymes_with(params): try: return {'word': Rhyme.get_rhyme_for_word(params['rhyme']).lines.exclude(clean_text__endswith=params['rhyme']).random().last_word()} except: raise BadRequest(f"Error 400: Sorry, there are no words that rhyme with {params['rhyme']}.")