def delete(request):
    id = request.matchdict["id"]
    json_str = bucket.get(id)[2]
    brewery_dict = json.loads(json_str)
    brewery = Brewery()    
    for key in brewery_dict:
        brewery.__dict__[key] = brewery_dict[key]
    brewery.id = id
    return { "model" : brewery }
def create_post(request):
    if request.method != "POST":
        raise exc.HTTPFound(request.route_url("breweries_create"))
    
    brewery = Brewery()        
    for key in request.params:
        brewery.__dict__[key] = request.params[key]
    
    bucket.set(brewery.name.replace(" ", "_"), 0, 0, json.dumps(brewery.__dict__))
    raise exc.HTTPFound(request.route_url("breweries_index"))
def edit_post(request):
    if request.method != "POST":
        raise exc.HTTPFound(request.route_url("breweries_edit"))
    
    brewery = Brewery() #would be safer to get the item first
    for key in request.params:
        brewery.__dict__[key] = request.params[key]
    
    bucket.set(request.params["id"], 0, 0, json.dumps(brewery.__dict__))
    raise exc.HTTPFound(request.route_url("breweries_details", id=request.params["id"]))
 def iter():
     for r in rows:
         try:
             brewery = Brewery()
             brewery_json = bucket.get(r["id"])[2]
             brewery_dict = json.loads(brewery_json)
             for key in brewery_dict:
                 brewery.__dict__[key] = brewery_dict[key]
             brewery.id = r["id"]
             yield brewery
         except Exception, e:
             yield { "name" : e }
Example #5
0
    def test_update_2(self) :
        app.config['SQLALCHEMY_DATABASE_URI'] = 'sqlite:///:memory:'
        db.drop_all()
        db.create_all()

        b = Brewery(name="Austin's Brew House")

        db.session.add(b)
        db.session.commit()
        b.website = "http://www.austinbrew.com/"
        db.session.commit()

        result = db.session.query(Brewery).filter_by(name="Austin's Brew House").first()
        self.assertEqual(result.website, "http://www.austinbrew.com/")
Example #6
0
    def test_relationship_1(self) :
        app.config['SQLALCHEMY_DATABASE_URI'] = 'sqlite:///:memory:'
        db.drop_all()
        db.create_all()

        coors_light = Beer(name='Coors Light', description="Taste's like urine.",
            is_organic="N", abv=11.1, ibu=30)
        austin_brew = Brewery(name="Austin's Brew House")
        db.session.add(coors_light)
        db.session.add(austin_brew)

        self.assertEqual(austin_brew.beers, [])
        austin_brew.beers = [coors_light]
        db.session.commit()

        self.assertEqual(austin_brew.beers[0].name, "Coors Light")
Example #7
0
    def testBreweryStyle(self):
        brw = Brewery(
            name="Brewery1",
            city="Austin",
            state="Texas",
            country="USA",
            established=1982,
            description="Brew1 description",
            images=
            "http://www.drinkbritain.com/sites/default/files/Brewery_wood_vessels_small.jpg"
        )
        db.session.add(brw)
        db.session.commit()

        self.assertEqual(brw.established, 1982)
        self.assertEqual(brw.name, "Brewery1")
        self.assertEqual(brw.id, 1)

        st = Style(name="Style1",
                   description="Style1 description",
                   ibu_min=10,
                   ibu_max=11,
                   abv_min=20,
                   abv_max=21,
                   srm=21)
        db.session.add(st)
        brw.styles.append(st)
        db.session.commit()

        self.assertEqual(st.name, "Style1")
        self.assertEqual(st.sru, "21")
        self.assertEqual(st in brw.styles)
Example #8
0
    def createReviewFK(self):
        b = Beer(name="Miller",
                 organic="Y",
                 abv=9.2,
                 ibu=10.0,
                 brewery_id=None,
                 style_id=None,
                 images="http://www.placeholder.com/image.jpg")
        brw = Brewery(
            name="BrewMe",
            city="Dallas",
            state="Texas",
            country="USA",
            established=2009,
            description="BrewMe is a IPA brewer.",
            images="https://www.drinkbritain.com/sites/default/files/image.png"
        )
        db.session.add(b)
        db.session.add(brw)
        db.session.commit()

        rev = Review(date="2009-08-09",
                     rating=3.2,
                     comment="Miller was meh.",
                     beer_name=b.id,
                     brewery_name=brw.id)
        db.session.add(rev)
        db.session.commit()

        self.assertEqual(rev.beer_name, b.id)
        self.assertEqual(rev.brewery_name, brw.id)
Example #9
0
    def testTriple(self):
        brw = Brewery(name="Coor",
                      city="Austin",
                      state="Texas",
                      country="USA",
                      established=1996,
                      description="Coor is an easy to drink beer.",
                      images="https://www.coor.com/image.jpg")
        db.session.add(brw)
        db.session.commit()

        st = Style(name="Amber Ale",
                   description="Amber Ale is red!",
                   ibu_min=5.4,
                   ibu_max=10.2,
                   abv_min=7.6,
                   abv_max=15,
                   srm=21)
        db.session.add(st)
        db.session.commit()

        b = Beer(name="Lite Beer",
                 organic="N",
                 abv=9.6,
                 ibu=14.2,
                 brewery_id=brw.id,
                 style_id=st.id,
                 images="https://www.litebeer.com/litebeer.jpg")

        self.assertEqual(b.brewery_id, brw.id)
        self.assertEqual(b.style_id, st.id)
        self.assertEqual(b.id, 1)
def details(request):
    id = request.matchdict["id"]    
    rows = bucket.view("_design/breweries/_view/all_with_beers", stale=False, startkey=json.dumps([id, 0]), endkey=json.dumps([id, u"\uefff", 1]))
    
    json_str = bucket.get(id)[2]
    brewery_dict = json.loads(json_str)
    brewery = Brewery()
    for key in brewery_dict:
        brewery.__dict__[key] = brewery_dict[key]
        
    for row in rows[1:len(rows)]:
        try:
            json_str = bucket.get(row["id"])[2]
            beer_dict = json.loads(json_str)
            beer = Beer()    
            for key in beer_dict:
                beer.__dict__[key] = beer_dict[key]
            beer.id = id
            brewery.beers.append(beer)
        except Exception, e:
            pass
Example #11
0
def map_sources():
    db_session, db_metadata, db_engine = get_database()
    vp_breweries = db_session.query(VpBrewery)\
                             .filter(VpBrewery.brewery_id == None).all()
    for vp_brewery in vp_breweries:
        brewery = Brewery(vp_brewery.name)
        db_session.add(brewery)
        db_session.commit()
        vp_brewery.brewery_id = brewery.id
    db_session.commit()

    breweries = db_session.query(Brewery).all()
    rb_breweries = db_session.query(RbBrewery)\
                             .filter(RbBrewery.brewery_id == None)
    for rb_brewery in rb_breweries:
        brewery = find_brewery(rb_brewery.name, breweries)
        if brewery:
            print 'Mapped: ', brewery.name
            rb_brewery.brewery_id = brewery.id
    db_session.commit()
Example #12
0
def add_brewery():
    '''
    Add and save a brewery to the database
    '''
    form = BreweryForm()

    if form.validate_on_submit():

        brewery = Brewery(name=form.name.data,
                          city=form.city.data,
                          state=form.state.data)

        # save brewery to database
        db_session.add(brewery)
        db_session.commit()
        flash('You have successfully added a brewery!')

        #redirect to view_all_beers
        return redirect(url_for('view_all_beers'))

    return render_template('add_brewery.html', form=form)
Example #13
0
    def Update(self):
        b = Beer(name="Beer1",
                 organic="Y",
                 abv=10,
                 ibu=15,
                 brewery_id=None,
                 style_id=None,
                 images="thisisalink.html")
        rev = Review(date="1982-08-09",
                     rating=5,
                     comment="Review1 was great!",
                     beer_name=None,
                     brewery_name=None)
        brw = Brewery(name="Trell",
                      city="Miami",
                      state="Florida",
                      country="USA",
                      established=1984,
                      description="Trell is a hip local brewery.",
                      images="https://www.placeholder.com/image.jpg")

        db.session.add(brw)
        db.session.add(b)
        db.session.add(rev)
        db.session.commit()

        db.session.query(Beer).update({Beer.brewery_id: 1, Beer.style_id: 1})
        db.session.query(Review).update({
            Review.beer_name: 1,
            Review.brewery_name: 1
        })
        db.session.commit()

        self.assertEqual(b.style_id, 1)
        self.assertEqual(b.brewery_id, 1)
        self.assertEqual(rev.beer_name, 1)
Example #14
0
def parse_this(payload):


	# Parsing through data. Each item we pull must have every attribute present for us to grab it.
	for key,values in payload.items():
		if "data" in key:

			data = json.dumps(values)
			data = json.loads(data)


			# Going through the json of the data that we will scrape (each is a beer/brewery/style combo)
			for x in data:

				b_description = ""
				established = ""
				country = ""
				state = ""
				city = ""
				website = ""
				images = ""
				abv = ""
				ibu = ""
				nameDisplay = ""
				organic = ""
				pic = ""
				shortName = ""
				description = ""
				ibuMin = ""
				ibuMax = ""
				abvMin = ""
				abvMax = ""
				srm = ""

				# Checking if brewery exists for a beer and other attributes for a brewery that we have for the model.
				if "breweries" in x:
					brewery = x['breweries'][0]["name"]
					try:
						if 'description' in x['breweries'][0]:
							b_description = x['breweries'][0]['description']
						if len(b_description) > 200:
							b_description = ""
					except KeyError:
						# b_description = "Description Unavailable"
						continue

					try:
						if 'established' in x['breweries'][0]:
							established = x['breweries'][0]['established']
							# print(established)
					except KeyError:
						# established = "Unavailable"
						continue
					if established == "":
						continue
					try:
						if x['breweries'][0]['locations'][0]['country']['displayName'] != None:
							country = x['breweries'][0]['locations'][0]['country']['displayName']
					except KeyError:
						# country = "Country Name Unavailable"
						continue

					try:
						if x['breweries'][0]['locations'][0]['region'] != None:
							state = x['breweries'][0]['locations'][0]['region']
					except KeyError:
						state = "State Name Unavailable"
						# continue

					try:
						if x['breweries'][0]['locations'][0]['region']:
							city = x['breweries'][0]['locations'][0]['locality']
					except KeyError:
						# city = "City Name Unavailable"
						continue
					
					try:
						if x['breweries'][0]['locations'][0]['website']:
							website = x['breweries'][0]['locations'][0]['website']
					except KeyError:
						# website = "www.empty.com"
						continue

					try:
						if 'images' in x['breweries'][0]:
							images = x['breweries'][0]['images']['squareLarge']
					except KeyError:
						# images = "https://i2.wp.com/www.worldbeersguide.com/wp-content/uploads/2017/01/slide6.jpg"
						continue

					# print(brewery, b_description, established, country, state, city, website, images)

				try:
					if x['abv']:
						abv = x['abv']
				except KeyError:
					# abv = "ABV Unavailable"
					continue

				try:
					if x['ibu']:
						ibu = x['ibu']
				except KeyError:
					# ibu = "IBU Unavailable"
					continue

				try:
					if x['nameDisplay']:
						nameDisplay = x['nameDisplay']
						if nameDisplay in beer_names:
							continue
						# beer_names.append(u''.join(nameDisplay).encode('utf-8'))
						# print(nameDisplay)
				except KeyError:
					# nameDisplay = "Name Unavailable"
					continue		
				
				try:
					if x['isOrganic']:
						organic = x['isOrganic']
				except KeyError:
					# organic = "Organic-ness Unavailable!"
					continue

				try:
					if x['labels']['large']:
						pic = x['labels']['large']
				except:
					# pic = "www.empty.com"
					continue

				# Checking if style exists for a beer. We also grab other attributes that we need for our style model.
				if 'style' in x:

					try:
						if x['style']['shortName']:
							shortName = x['style']['shortName']
					except KeyError:
						# shortName = "Style Name Unavailable"
						continue

					try:
						if x['style']['description']:
							description = x['style']['description']
					except KeyError:
						# description = "Description Unavailable"
						continue

					try:
						if x['style']['srmMin'] and x['style']['srmMax']:
							srm = (float(x['style']['srmMin']) + float(x['style']['srmMax'])) / 2
					except KeyError:
						# ibuMin = "IBU Minimum Unavailable"
						# assert(False)
						continue

					try:
						if x['style']['ibuMin']:
							ibuMin = x['style']['ibuMin']
					except KeyError:
						# ibuMin = "IBU Minimum Unavailable"
						continue

					try:
						if x['style']['ibuMax']:
							ibuMax = x['style']['ibuMax']
					except KeyError:
						# ibuMax = "IBU Maximum Unavailable"
						continue

					try:
						if x['style']['abvMin']:
							abvMin = x['style']['abvMin']
					except KeyError:
						# abvMin = "ABV Minimum Unavailable"
						continue

					try:
						if x['style']['abvMax']:
							abvMax = x['style']['abvMax']
					except KeyError:
						# abvMax = "ABV Maximum Unavailable"
						continue
				"""
				This is checking if we have not already encountered this style, and if so, make the style 
				and make the style's pk the beer's fk style to the value recorded. If not, we set 
				the fk of beer to the value recorded of the style we have already seen.
				"""
				st_id = -1
				if not styles_dic.get(shortName):
					st = Style(name=shortName, description=description, ibu_min=float(ibuMin), ibu_max=float(ibuMax), abv_min=float(abvMin), abv_max=float(abvMax), srm=srm)
					db.session.add(st)
					db.session.commit()
					styles_dic[shortName] = st.id
					style_obj[shortName] = st
					st_id = st.id
				else:
					st_id = styles_dic[shortName]
					st = style_obj[shortName]

				"""
				Same as the block of code above, only that this deals with breweries.
				"""
				brw_id = -1
				if not brew_dic.get(brewery):
					brw = Brewery(name=brewery, city=city, state=state, country=country, established=int(established), description=b_description, images=images, website=website)
					db.session.add(brw)
					db.session.commit()
					brew_dic[brewery] = brw.id
					brew_obj[brewery] = brw
					brw_id = brw.id
				else:
					brw_id = brew_dic[brewery]
					brw = brew_obj[brewery]


				"""
				Creating a beer to be put into our database.
				"""
				b = Beer(name=nameDisplay, organic=organic, abv=float(abv), ibu=float(ibu), brewery_id=brw_id, style_id=st_id, images=pic)
				db.session.add(b)
				db.session.commit()
				brw.styles.append(st)

				# This is to append brewery name to the beer name to search in ratebeer.
				brew_ind = brewery.lower().find("brew")
				if brew_ind == -1:
					brew_ind == ""
					beer_names.append(u''.join(nameDisplay).encode('utf-8'))
				else:
					brew_ind = u''.join(brewery[0:(brew_ind)-1]).encode('utf-8')
					temp = brew_ind + " " + u''.join(nameDisplay).encode('utf-8')
					beer_names.append(temp)

	return beer_names
Example #15
0
def insert_brewery(brewery_list, loc_dict) :
	for brewery in brewery_list :

		# query for beers and make the relationship
		beer_inventory = db.session.query(Beer).filter(Beer.scrape_brew_id == brewery.get("id")).all()
		if len(beer_inventory) == 0:
			continue

		if brewery.get("name") is not None:
			string_name = unicodedata.normalize('NFKD', brewery.get("name")).encode('ascii', 'ignore')
		else :
			for row in beer_inventory:
				db.session.query(Beer).filter(Beer.beer_id == row.beer_id).delete()
			db.session.commit()
			continue

		if brewery.get("description") is not None :
			string_desc = unicodedata.normalize('NFKD', brewery.get("description")).encode('ascii','ignore')
		else :
			for row in beer_inventory:
				db.session.query(Beer).filter(Beer.beer_id == row.beer_id).delete()
			db.session.commit()
			continue

		if brewery.get("images") is not None :
			brew_icon = brewery.get("images").get("icon")
			brew_image = brewery.get("images").get("large")
		else :
			for row in beer_inventory:
				db.session.query(Beer).filter(Beer.beer_id == row.beer_id).delete()
			db.session.commit()
			continue

		loc_obj = loc_dict.get(brewery.get("id"))
		brew_loc = None
		if loc_obj is not None and loc_obj.get("locality") is not None and loc_obj.get("region") is not None:
			brew_loc = loc_obj.get("locality")
			brew_loc += ", "
			brew_loc +=  loc_obj.get("region")
		else :
			for row in beer_inventory:
				db.session.query(Beer).filter(Beer.beer_id == row.beer_id).delete()
			db.session.commit()
			continue

		if brew_loc is not None:
			brew_loc = unicodedata.normalize('NFKD', brew_loc).encode('ascii','ignore')
		else :
			for row in beer_inventory:
				db.session.query(Beer).filter(Beer.beer_id == row.beer_id).delete()
			db.session.commit()
			continue

		if brewery.get("website") is None or brewery.get("isOrganic") is None or brewery.get("established") is None:
			for row in beer_inventory:
				db.session.query(Beer).filter(Beer.beer_id == row.beer_id).delete()
			db.session.commit()
			continue

		# add the data and commit
		b = Brewery(name=string_name, description=string_desc, website=brewery.get("website"), is_organic=brewery.get("isOrganic"), icon=brew_icon, image=brew_image, established=brewery.get("established"), location=brew_loc)

		# for beer in db.session.query(Beer).filter(Beer.scrape_brew_id == brewery.get("id")) :
		# 	b.beers.append(beer)
		# for brew_beer_id in brewery.get("beerIds") :
		# 	b.beers.append(db.session.query(Beer).filter(Beer.beer_id == brew_beer_id))
		b.beers = beer_inventory

		db.session.add(b)
		db.session.commit()

		if brewery.get("name") is not None:
			logger.info("brewery: " + brewery.get("name") +  " populated with " + str(len(beer_inventory)) + " beers")

	# test = Brewery(name="Bob")
	# db.session.add(test)
	db.session.commit()