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): try: return {'line': Line.objects.random().text} except Line.DoesNotExist: raise NotFound("Line not found") @route_get('lines/about', args={'topic': str}) def get_about_line(params): try: topic=params['topic'] return {'line': Line.objects.filter(clean_text__contains=topic).random().text, 'topic':topic} except Line.DoesNotExist: raise NotFound("Line not found") @route_get('lines/rhyme', args={'word': str}) def get_rhyme_line(params): try: word=params['word'] return {'rhyme': Rhyme.get_rhyme_for_word(word).lines.exclude(clean_text__endswith = " " + word).random().text, 'word':word} except Rhyme.DoesNotExist: raise NotFound("Rhyme not found") @route_get('couplets/random', args={}) def get_random_couplets(params): line = Line.objects.random().text word=line.split()[-1] try: if {'First Line': Rhyme.get_rhyme_for_word(word).lines.exclude(clean_text__endswith = " " + word).random().text} != {'Second Line': Rhyme.get_rhyme_for_word(word).lines.exclude(clean_text__endswith = " " + word).random().text}: return {'First Line': Rhyme.get_rhyme_for_word(word).lines.exclude(clean_text__endswith = " " + word).random().text, 'Second Line':line} else: return() except Rhyme.DoesNotExist: raise NotFound("Rhyme not found") @route_get('couplets/about', args={'topic': str}) def get_about_couplets(params): topic=params['topic'] line=Line.objects.filter(clean_text__contains=topic).random().text word=line.split()[-1] try: if {'First Line': Rhyme.get_rhyme_for_word(word).lines.exclude(clean_text__endswith = " " + word).random().text} != {'Second Line': Rhyme.get_rhyme_for_word(word).lines.exclude(clean_text__endswith = " " + word).random().text}: return {'First Line': line, 'Second Line': Rhyme.get_rhyme_for_word(word).lines.exclude(clean_text__endswith = " " + word).random().text} else: return() except Rhyme.DoesNotExist: raise NotFound("Rhyme not found") @route_get('couplets/rhyme', args={'word': str}) def get_rhyme_couplets(params): word=params['word'] try: if {'First Line': Rhyme.get_rhyme_for_word(word).lines.exclude(clean_text__endswith = " " + word).random().text} != {'Second Line': Rhyme.get_rhyme_for_word(word).lines.exclude(clean_text__endswith = " " + word).random().text}: return {'First Line': Rhyme.get_rhyme_for_word(word).lines.exclude(clean_text__endswith = " " + word).random().text, 'Second Line': Rhyme.get_rhyme_for_word(word).lines.exclude(clean_text__endswith = " " + word).random().text} else: return() except Rhyme.DoesNotExist: raise NotFound("Rhyme not found")