Example #1
0
def beer(message_data, bot):
    rb = RateBeer()
    results = rb.search(message_data["parsed"])
    highest_ratings = -1  #get at least 1
    if results['beers']:
        for beer in results['beers']:
            if beer['num_ratings'] > highest_ratings:  #pull highest rated beer from result set
                topbeer = beer
                topdetails = rb.beer(beer['url'])
                highest_ratings = beer['num_ratings']
        if 'overall_rating' in topbeer:  #overall_rating doesn't always exist http://www.ratebeer.com/ratingsqa.asp
            reply = topbeer['name'].encode('utf-8') + ': Rating ' + str(
                topbeer['overall_rating']
            ) + ', http://www.ratebeer.com' + topbeer['url'].encode(
                'utf-8') + ' '
        else:
            reply = topbeer['name'].encode(
                'utf-8') + ': http://www.ratebeer.com' + topbeer['url'].encode(
                    'utf-8') + ' (' + str(
                        topbeer['num_ratings']) + ' ratings) '

        reply += topdetails['style'].encode('utf-8') + ', ' + str(
            topdetails['abv']) + "% ABV, " + str(
                topdetails['calories']
            ) + ' calories from alcohol, brewed by ' + topdetails[
                'brewery'].encode('utf-8')
    else:
        reply = 'Not Found'
    return reply.encode('utf-8')
Example #2
0
def scrap_beer(name):
    from serveza.db import Beer

    try:
        page = wikipedia.page(name, auto_suggest=True)
        rb = RateBeer()
        rb_beer = rb.search(page.title)['beers'][0]
    except Exception as e:
        return None

    rb_beer._populate()

    def find_proper_image(urls):
        import re

        EXCLUDES = [
            'Emoji',
            'Disambig',
            'Hainaut',
            'Liste',
        ]
        PATTERNS = [
            r'\.svg$',
        ]

        for url in urls:
            good = True

            for word in EXCLUDES:
                if word in url:
                    good = False
                    break

            for pattern in PATTERNS:
                if re.search(pattern, url):
                    good = False
                    break

            if good:
                return url

        return None

    beer = Beer(name=page.title)
    beer.image = find_proper_image(page.images)
    beer.description = rb_beer.description
    beer.brewery = rb_beer.brewery
    beer.degree = rb_beer.abv

    return beer
Example #3
0
 def test_whitespace_in_url(self):
     ''' The rare situation where a URL might have whitespace '''
     results = RateBeer().search("13 Virtues Cleanliness Helles")
     beer = results['beers'][0]
     self.assertTrue(beer._has_fetched == False)
     self.assertTrue(beer.url == u'/beer/13-virtues-cleanliness-helles/231944/')
     self.assertTrue(beer.name == u'13 Virtues Cleanliness Helles')
Example #4
0
 def test_fetch_by_letter(self):
     ''' Make sure the results for a brewery list by index contain the expected data '''
     results = RateBeer().brewers_by_alpha("A")
     self.assertIsNotNone(results, [])
     beer = results[0]
     self.assertTrue(beer.url == u'/brewers/a-duus-and-co/1668/')
     self.assertTrue(beer.name == u'A. Duus & Co.')
Example #5
0
 def test_beer_styles(self):
     ''' Make sure the results for a brewery list contain the expected data '''
     results = RateBeer().beer_style_list()
     self.assertIsNotNone(results, [])
     gen = RateBeer().beer_style(results['Abt/Quadrupel'],
                                 sort_type='score',
                                 sort_order='descending')
     beers = [b for b in gen]
     self.assertIsNotNone(beers)
     self.assertTrue(beers[0].name == u'Westvleteren 12 (XII)')
     gen = RateBeer().beer_style(results['Low Alcohol'],
                                 sort_type='score',
                                 sort_order='ascending')
     beers = [b for b in gen]
     self.assertIsNotNone(beers)
     self.assertTrue(beers[0].name == u'Busch NA')
Example #6
0
 def test_beer_closed_contract_brewery(self):
     ''' Handling beers from closed contract brewers '''
     results = RateBeer().beer('/beer/crew-republic-x-11-wet-hop/298026/')
     self.assertTrue(
         results['brewery'].url == u'/brewers/crew-republic-brewery/13816/')
     self.assertTrue(results['brewed_at'].url ==
                     u'/brewers/hohenthanner-schlossbrauerei/5557/')
Example #7
0
 def test_fetch_by_letter(self):
     ''' Make sure the results for a brewery list by index contain the expected data '''
     results = RateBeer().brewers_by_alpha("A")
     self.assertIsNotNone(results, [])
     beer = results[0]
     self.assertTrue(beer.url == u'/brewers/a-frame-brewing/29590/')
     self.assertTrue(beer.name == u'A-Frame Brewing')
Example #8
0
 def test_beer_unicode(self):
     results = RateBeer().beer('/beer/stedji-oktoberbjor/292390/')
     self.assertIsNotNone(results)
     self.assertTrue(results['name'] == u'Steðji Októberbjór')
     self.assertTrue(results['brewery'].name == u'Brugghús Steðja')
     self.assertTrue(
         results['brewery'].url == u'/brewers/brugghus-steoja/15310/')
Example #9
0
 def test_beer_closed_brewery(self):
     ''' Handling beers from closed brewers '''
     results = RateBeer().beer('/beer/hantens-hildener-landbrau/140207/')
     superset = results
     subset = {'brewery': '1. Hildener Landbierbrauerei',
               'brewery_url': '/brewers/1-hildener-landbierbrauerei/12618/'}
     self.assertTrue(all(item in superset.items() for item in subset.items()))
Example #10
0
 def test_brewery(self):
     ''' Make sure the results for a brewery contain the expected data '''
     results = RateBeer().brewery("/brewers/deschutes-brewery/233/")
     self.assertIsNotNone(results)
     self.assertTrue(results['name'] == u'Deschutes Brewery')
     self.assertTrue(results['type'] == u'Microbrewery')
     self.assertTrue(results['city'] == u'Bend')
Example #11
0
 def test_beer_contract_brewed(self):
     ''' Handling contract brewed beers '''
     results = RateBeer().beer('/beer/benediktiner-weissbier/157144/')
     self.assertTrue(
         results['brewery'].url == u'/brewers/klosterbrauerei-ettal/1943/')
     self.assertTrue(results['brewed_at'].url ==
                     u'/brewers/licher-privatbrauerei-bitburger/1677/')
Example #12
0
 def test_brewery_unicode(self):
     ''' Check unicode brewery URLs '''
     results = RateBeer().brewery("/brewers/brauhaus-18•80/12750/")
     self.assertIsNotNone(results)
     self.assertTrue(results['name'] == u'Brauhaus 18•80')
     self.assertTrue(results['type'] == u'Brew Pub')
     self.assertTrue(results['country'] == u'Germany')
Example #13
0
 def test_unicode_ascii_search(self):
     ''' Test out the search function with an ASCII only unicode search '''
     results = RateBeer().search(u"deschutes inversion")
     self.assertListEqual(results['breweries'], [])
     self.assertIsNotNone(results['beers'])
     beer = results['beers'][0]
     self.assertTrue(beer.url == u'/beer/deschutes-inversion-ipa/55610/')
     self.assertTrue(beer.name == u'Deschutes Inversion IPA')
Example #14
0
 def test_unicode_nonascii_search(self):
     ''' Test out the search function with a unicode string with more than ASCII characters '''
     results = RateBeer().search(u"to øl jule mælk")
     self.assertListEqual(results['breweries'], [])
     self.assertIsNotNone(results['beers'])
     beer = results['beers'][0]
     self.assertTrue(beer.url == u'/beer/to-øl-jule-mælk/235066/')
     self.assertTrue(beer.name == u'To Øl Jule Mælk')
Example #15
0
 def test_brewery_unicode(self):
     ''' Check unicode brewery URLs '''
     results = RateBeer().brewery("/brewers/brauhaus-18•80/12750/")
     self.assertIsNotNone(results)
     superset = results
     subset = {'name': u'Brauhaus 18\x9580',
               'type': u'Brew Pub',
               'country': u'Germany'}
     self.assertTrue(all(item in superset.items() for item in subset.items()))
Example #16
0
 def test_whitespace_in_url(self):
     ''' The rare situation where a URL might have whitespace '''
     results = RateBeer().search("13 Virtues Cleanliness Helles")
     beer = results['beers'][0]
     superset = beer.__dict__
     subset = {'_has_fetched': False,
               'url': u'/beer/13-virtues-cleanliness-helles/231944/',
               'name': u'13 Virtues Cleanliness Helles'}
     self.assertTrue(all(item in superset.items() for item in subset.items()))
Example #17
0
 def test_brewery(self):
     ''' Make sure the results for a brewery contain the expected data '''
     results = RateBeer().brewery("/brewers/deschutes-brewery/233/")
     self.assertIsNotNone(results)
     superset = results
     subset = {'name': u'Deschutes Brewery',
               'type': u'Microbrewery',
               'city': u'Bend'}
     self.assertTrue(all(item in superset.items() for item in subset.items()))
Example #18
0
 def test_beer_unicode(self):
     results = RateBeer().beer("/beer/steoji-oktoberbjor/292390/")
     self.assertIsNotNone(results)
     superset = results
     subset = {'name': u'Steðji Októberbjór',
               'brewery': u'Brugghús Steðja',
               'brewery_url': u'/brewers/brugghus-steoja/15310/',
               'style': u'Spice/Herb/Vegetable'}
     self.assertTrue(all(item in superset.items() for item in subset.items()))
Example #19
0
 def test_beer_contract_brewed(self):
     ''' Handling contract brewed beers '''
     results = RateBeer().beer('/beer/benediktiner-weissbier/157144/')
     superset = results
     subset = {'brewed_at': 'Licher Privatbrauerei (Bitburger)',
               'brewed_at_url': '/brewers/licher-privatbrauerei-bitburger/1677/',
               'brewery': 'Klosterbrauerei Ettal',
               'brewery_url': '/brewers/klosterbrauerei-ettal/1943/'}
     self.assertTrue(all(item in superset.items() for item in subset.items()))
Example #20
0
 def test_unicode_nonascii_search(self):
     ''' Test out the search function with a unicode string with more than ASCII characters '''
     results = RateBeer().search(u"to øl jule mælk")
     self.assertListEqual(results['breweries'], [])
     self.assertIsNotNone(results['beers'])
     superset = results['beers'][0].__dict__
     subset = {'url': '/beer/to-ol-jule-maelk/235066/',
               'name': u'To Øl Jule Mælk'}
     self.assertTrue(all(item in superset.items() for item in subset.items()))
Example #21
0
 def test_unicode_ascii_search(self):
     ''' Test out the search function with an ASCII only unicode search '''
     results = RateBeer().search(u"deschutes inversion")
     self.assertListEqual(results['breweries'], [])
     self.assertIsNotNone(results['beers'])
     superset = results['beers'][0].__dict__
     subset = {'url': '/beer/deschutes-inversion-ipa/55610/',
               'name': u'Deschutes Inversion IPA'}
     self.assertTrue(all(item in superset.items() for item in subset.items()))
Example #22
0
 def test_brewery(self):
     results = RateBeer().brewery("/brewers/deschutes-brewery/233/")
     self.assertIsNotNone(results)
     self.assertDictContainsSubset(
         {
             'name': u'Deschutes Brewery',
             'type': u'Microbrewery',
             'city': u'Bend',
         }, results)
Example #23
0
 def test_search(self):
     results = RateBeer().search("deschutes inversion")
     self.assertListEqual(results['breweries'], [])
     self.assertIsNotNone(results['beers'])
     self.assertDictContainsSubset(
         {
             'url': '/beer/deschutes-inversion-ipa/55610/',
             'name': u'Deschutes Inversion IPA',
             'id': '55610'
         }, results['beers'][0])
Example #24
0
def beer(message_data, bot):
	rb = RateBeer()
	results = rb.search(message_data["parsed"])
	highest_ratings = -1 #get at least 1
	if results['beers']:
		for beer in results['beers']:
			if beer['num_ratings'] > highest_ratings: #pull highest rated beer from result set
				topbeer = beer
				topdetails = rb.beer(beer['url'])
				highest_ratings = beer['num_ratings']
		if 'overall_rating' in topbeer: #overall_rating doesn't always exist http://www.ratebeer.com/ratingsqa.asp
			reply =  topbeer['name'].encode('utf-8') + ': Rating ' + str(topbeer['overall_rating']) + ', http://www.ratebeer.com'+ topbeer['url'].encode('utf-8') + ' '
		else:
			reply = topbeer['name'].encode('utf-8') + ': http://www.ratebeer.com'+ topbeer['url'].encode('utf-8') + ' (' + str(topbeer['num_ratings']) +' ratings) '
		
		reply += topdetails['style'].encode('utf-8') + ', ' + str(topdetails['abv']) + "% ABV, " + str(topdetails['calories']) + ' calories from alcohol, brewed by ' + topdetails['brewery'].encode('utf-8')
	else:
		reply = 'Not Found'
	return reply.encode('utf-8')
Example #25
0
 def test_beer(self):
     ''' Make sure the results for a beer contain the expected data '''
     results = RateBeer().beer("/beer/new-belgium-tour-de-fall/279122/")
     self.assertIsNotNone(results)
     superset = results
     subset = {'name': u'New Belgium Tour de Fall',
               'brewery': u'New Belgium Brewing Company',
               'brewery_url': u'/brewers/new-belgium-brewing-company/77/',
               'style': u'American Pale Ale',
               'ibu': 38}
     self.assertTrue(all(item in superset.items() for item in subset.items()))
Example #26
0
 def test_beer_no_ratings(self):
     results = RateBeer().beer('/beer/deschutes-abyssident/194792/')
     self.assertIsNotNone(results)
     self.assertTrue(results['name'] == u'Deschutes Abyssident')
     self.assertTrue(results['style'] == u'Sour/Wild Ale')
     self.assertTrue(results['abv'] == 11)
     self.assertTrue(results['overall_rating'] is None)
     self.assertTrue(results['style_rating'] is None)
     self.assertTrue(results['num_ratings'] == 0)
     self.assertTrue(results['mean_rating'] is None)
     self.assertTrue(results['weighted_avg'] is None)
     self.assertTrue(results['retired'] == False)
Example #27
0
 def test_beer_no_abv(self):
     results = RateBeer().beer('/beer/deschutes-altitude-amber/92102/')
     self.assertIsNotNone(results)
     self.assertTrue(results['name'] == u'Deschutes Altitude Amber')
     self.assertTrue(results['style'] == u'Amber Ale')
     self.assertTrue(results['abv'] is None)
     self.assertTrue(results['overall_rating'] is None)
     self.assertTrue(results['style_rating'] is None)
     self.assertTrue(results['num_ratings'] > 0)
     self.assertTrue(results['mean_rating'] > 0)
     self.assertTrue(results['weighted_avg'] is None)
     self.assertTrue(results['retired'] == False)
Example #28
0
    def test_beer(self):
        results = RateBeer().beer("/beer/new-belgium-tour-de-fall/279122/")
        self.assertIsNotNone(results)
        self.assertDictContainsSubset(
            {
                'name': u'New Belgium Tour de Fall',
                'brewery': u'New Belgium Brewing Company',
                'brewery_url': u'/brewers/new-belgium-brewing-company/77/',
                'style': u'American Pale Ale',
                'ibu': 38
            }, results)

        results = RateBeer().beer("/beer/deschutes-inversion-ipa/55610/")
        self.assertIsNotNone(results)
        self.assertDictContainsSubset(
            {
                'name': u'Deschutes Inversion IPA',
                'brewery': u'Deschutes Brewery',
                'brewery_url': u'/brewers/deschutes-brewery/233/',
                'style': u'India Pale Ale (IPA)',
                'ibu': 80
            }, results)
Example #29
0
 def test_beer(self):
     ''' Make sure the results for a beer contain the expected data '''
     results = RateBeer().beer('/beer/new-belgium-tour-de-fall/279122/')
     self.assertIsNotNone(results)
     self.assertTrue(results['name'] == u'New Belgium Tour de Fall')
     self.assertTrue(results['style'] == u'American Pale Ale')
     self.assertTrue(results['ibu'] == 38)
     self.assertTrue(results['brewery'].url == u'/brewers/new-belgium-brewing-company/77/')
     self.assertTrue(results['overall_rating'] <= 100)
     self.assertTrue(results['style_rating'] <= 100)
     self.assertTrue(results['num_ratings'] >= 0)
     self.assertTrue(self.is_float(results['weighted_avg']))
     self.assertTrue(results['weighted_avg'] <= 5.0)
Example #30
0
 def test_beer(self):
     ''' Make sure the results for a beer contain the expected data '''
     results = RateBeer().beer('/beer/new-belgium-tour-de-fall/279122/')
     self.assertIsNotNone(results)
     self.assertTrue(results['name'] == u'New Belgium Tour de Fall')
     self.assertTrue(results['style'] == u'Pale Ale - American')
     self.assertTrue(results['ibu'] == 38)
     self.assertTrue(results['brewery'].url ==
                     u'/brewers/new-belgium-brewing-company/77/')
     self.assertTrue(results['overall_rating'] <= 100)
     self.assertTrue(results['style_rating'] <= 100)
     self.assertTrue(results['num_ratings'] > 0)
     self.assertTrue(results['mean_rating'] > 0)
     self.assertTrue(results['weighted_avg'] is None)
     self.assertTrue(results['retired'] == False)
     self.assertTrue(len(results['description']) > 0)
Example #31
0
 def test_beer(self):
     ''' Make sure the results for a beer contain the expected data '''
     results = RateBeer().beer('/beer/new-belgium-tour-de-fall/279122/')
     self.assertIsNotNone(results)
     self.assertTrue(results['name'] == u'New Belgium Tour de Fall')
     self.assertTrue(results['style'] == u'American Pale Ale')
     self.assertTrue(results['ibu'] == 38)
     self.assertTrue(results['brewery'].url ==
                     u'/brewers/new-belgium-brewing-company/77/')
     self.assertTrue(results['overall_rating'] <= 100)
     self.assertTrue(results['style_rating'] <= 100)
     self.assertTrue(results['num_ratings'] > 0)
     self.assertTrue(results['mean_rating'] is None)
     self.assertTrue(self.is_float(results['weighted_avg']))
     self.assertTrue(results['weighted_avg'] <= 5.0)
     self.assertTrue(results['retired'] == False)
     self.assertTrue(
         results['description'] ==
         u'New Belgium’s love for beer, bikes and benefits is best described by being at Tour de Fat. Our love for Cascade and Amarillo hops is best tasted in our Tour de Fall Pale Ale. We’re cruising both across the country during our favorite time of year. Hop on and find Tour de Fall Pale Ale in fall 2014.'
     )
Example #32
0
 def test_beer_get_reviews_404(self):
     ''' Check lazy get_reviews 404 exception '''
     beer = RateBeer().get_beer('/beer/asdfasdf')
     with self.assertRaises(rb_exceptions.PageNotFound):
         next(beer.get_reviews())
Example #33
0
 def test_brewery_get_beers_404(self):
     ''' Check lazy get_beer 404 exception '''
     brewery = RateBeer().get_brewery("/brewers/qwerty/1234567890")
     with self.assertRaises(rb_exceptions.PageNotFound):
         next(brewery.get_beers())
Example #34
0
 def test_beer_get_reviews_404(self):
     ''' Check lazy get_reviews 404 exception '''
     beer = RateBeer().get_beer('/beer/asdfasdf')
     with self.assertRaises(rb_exceptions.PageNotFound):
         next(beer.get_reviews())