def importBSMXRecipe(data): logger.debug("Start parsing BSMX recipe") #BSMX format use not valid entities def correct_bsmx_entities(text): text = re.sub('(ld|rd|rs)quo;', 'quot;', text) text = text.replace('°', '°') return text try: tree = ElementTree.fromstring( correct_bsmx_entities(open(data, 'r').read())) except TypeError: tree = data except FileNotFoundError: tree = ElementTree.fromstring(correct_bsmx_entities(data)) except: raise recipe = Recipe() recipe_root = tree.find('.//Recipe') recipe.name = recipe_root.find('F_R_NAME').text recipe.brewer = recipe_root.find('F_R_BREWER').text equipment = recipe_root.find('F_R_EQUIPMENT') recipe.volume = bsmx_volume_conversion( float(equipment.find('F_E_BATCH_VOL').text)) recipe.efficiency = float(equipment.find('F_E_EFFICIENCY').text) recipe.boil = float(equipment.find('F_E_BOIL_TIME').text) bsmx_type = { '0': model.constants.RECIPE_TYPE_EXTRACT, '1': model.constants.RECIPE_TYPE_PARTIAL_MASH, '2': model.constants.RECIPE_TYPE_ALL_GRAIN } recipe.type = bsmx_type[recipe_root.find('F_R_TYPE').text] style = recipe_root.find('F_R_STYLE') recipe.style = '%s%s. %s' % (style.find('F_S_NUMBER').text, chr(64 + int(style.find('F_S_LETTER').text) % 26), style.find('F_S_NAME').text) recipe.recipeNotes = recipe_root.find('F_R_NOTES').text recipe.mash = importBSMXMash(recipe_root.find('F_R_MASH')) elements = recipe_root.find('Ingredients').find('Data') for element in elements.findall('Grain'): recipe.listeFermentables.append(importBSMXFermentable(element)) for element in elements.findall('Hops'): recipe.listeHops.append(importBSMXHop(element)) for element in elements.findall('Yeast'): recipe.listeYeasts.append(importBSMXYeast(element)) for element in elements.findall('Misc'): recipe.listeMiscs.append(importBSMXMisc(element)) logger.debug("End parsing BSMX recipe") return recipe
def importBSMXRecipe(data): logger.debug("Start parsing BSMX recipe") # BSMX format use not valid entities def correct_bsmx_entities(text): text = re.sub("(ld|rd|rs)quo;", "quot;", text) text = text.replace("°", "°") return text try: tree = ElementTree.fromstring(correct_bsmx_entities(open(data, "r").read())) except TypeError: tree = data except FileNotFoundError: tree = ElementTree.fromstring(correct_bsmx_entities(data)) except: raise recipe = Recipe() recipe_root = tree.find(".//Recipe") recipe.name = recipe_root.find("F_R_NAME").text recipe.brewer = recipe_root.find("F_R_BREWER").text equipment = recipe_root.find("F_R_EQUIPMENT") recipe.volume = bsmx_volume_conversion(float(equipment.find("F_E_BATCH_VOL").text)) recipe.efficiency = float(equipment.find("F_E_EFFICIENCY").text) recipe.boil = float(equipment.find("F_E_BOIL_TIME").text) bsmx_type = { "0": model.constants.RECIPE_TYPE_EXTRACT, "1": model.constants.RECIPE_TYPE_PARTIAL_MASH, "2": model.constants.RECIPE_TYPE_ALL_GRAIN, } recipe.type = bsmx_type[recipe_root.find("F_R_TYPE").text] style = recipe_root.find("F_R_STYLE") recipe.style = "%s%s. %s" % ( style.find("F_S_NUMBER").text, chr(64 + int(style.find("F_S_LETTER").text) % 26), style.find("F_S_NAME").text, ) recipe.recipeNotes = recipe_root.find("F_R_NOTES").text recipe.mash = importBSMXMash(recipe_root.find("F_R_MASH")) elements = recipe_root.find("Ingredients").find("Data") for element in elements.findall("Grain"): recipe.listeFermentables.append(importBSMXFermentable(element)) for element in elements.findall("Hops"): recipe.listeHops.append(importBSMXHop(element)) for element in elements.findall("Yeast"): recipe.listeYeasts.append(importBSMXYeast(element)) for element in elements.findall("Misc"): recipe.listeMiscs.append(importBSMXMisc(element)) logger.debug("End parsing BSMX recipe") return recipe
def importBSMXRecipe(data): logger.debug("Start parsing BSMX recipe") #BSMX format use not valid entities def correct_bsmx_entities(text): text = re.sub('(ld|rd|rs)quo;', 'quot;', text) text = text.replace('°', '°') return text try: tree = ElementTree.fromstring(correct_bsmx_entities(open(data, 'r').read())) except TypeError: tree = data except FileNotFoundError: tree = ElementTree.fromstring(correct_bsmx_entities(data)) except: raise recipe = Recipe() recipe_root = tree.find('.//Recipe') recipe.name = recipe_root.find('F_R_NAME').text recipe.brewer = recipe_root.find('F_R_BREWER').text equipment = recipe_root.find('F_R_EQUIPMENT') recipe.volume = bsmx_volume_conversion(float(equipment.find('F_E_BATCH_VOL').text)) recipe.efficiency = float(equipment.find('F_E_EFFICIENCY').text) recipe.boil = float(equipment.find('F_E_BOIL_TIME').text) bsmx_type = { '0': model.constants.RECIPE_TYPE_EXTRACT, '1': model.constants.RECIPE_TYPE_PARTIAL_MASH, '2': model.constants.RECIPE_TYPE_ALL_GRAIN } recipe.type = bsmx_type[recipe_root.find('F_R_TYPE').text] style = recipe_root.find('F_R_STYLE') recipe.style = '%s%s. %s' % (style.find('F_S_NUMBER').text, chr(64+int(style.find('F_S_LETTER').text) % 26), style.find('F_S_NAME').text) recipe.recipeNotes = recipe_root.find('F_R_NOTES').text recipe.mash = importBSMXMash(recipe_root.find('F_R_MASH')) elements = recipe_root.find('Ingredients').find('Data') for element in elements.findall('Grain'): recipe.listeFermentables.append(importBSMXFermentable(element)) for element in elements.findall('Hops'): recipe.listeHops.append(importBSMXHop(element)) for element in elements.findall('Yeast'): recipe.listeYeasts.append(importBSMXYeast(element)) for element in elements.findall('Misc'): recipe.listeMiscs.append(importBSMXMisc(element)) logger.debug("End parsing BSMX recipe") return recipe
def importBeerXMLRecipe(data): logger.debug("Start parsing recipe") try: tree = ElementTree.parse(data) except TypeError: tree = data except IOError: tree = ElementTree.fromstring(data) except: raise recipe = Recipe() recipe.path = data presentation = tree.find('.//RECIPE') fermentables = tree.findall('.//FERMENTABLE') hops = tree.findall('.//HOP') levures = tree.findall('.//YEAST') misc = tree.findall('.//MISC') style = tree.find('.//STYLE') mash = tree.find('.//MASH') for element in presentation: if 'NAME' == element.tag: recipe.name = element.text logger.debug(" Recipe name: %s", recipe.name) if 'BREWER' == element.tag: recipe.brewer = element.text logger.debug(" Recipe brewer: %s", recipe.brewer) if 'TYPE' == element.tag: if "All Grain" == element.text: recipe.type = model.constants.RECIPE_TYPE_ALL_GRAIN elif "Partial Mash" == element.text: recipe.type = model.constants.RECIPE_TYPE_PARTIAL_MASH elif "Extract" == element.text: recipe.type = model.constants.RECIPE_TYPE_EXTRACT logger.debug(" Recipe type: %s", recipe.type) if "BATCH_SIZE" == element.tag: recipe.volume = float(element.text) logger.debug(" Recipe volume: %s", recipe.volume) if "EFFICIENCY" == element.tag: recipe.efficiency = float(element.text) logger.debug(" Recipe efficiency: %s", recipe.efficiency) if "BOIL_TIME" == element.tag: recipe.boil = float(element.text) logger.debug(" Recipe boil time: %s", recipe.boil) if "NOTES" == element.tag: recipe.recipeNotes = element.text logger.debug(" Recipe notes: %s", recipe.recipeNotes) try: for element in style: if "NAME" == element.tag: recipe.style = element.text except TypeError: recipe.style = "" try: recipe.mash = importBeerXMLMash(mash) except: pass for element in fermentables: recipe.listeFermentables.append(importBeerXMLFermentable(element)) for element in hops: recipe.listeHops.append(importBeerXMLHop(element)) for element in levures: recipe.listeYeasts.append(importBeerXMLYeast(element)) for element in misc: recipe.listeMiscs.append(importBeerXMLMisc(element)) logger.debug("End parsing recipe") return recipe
def importBeerXMLRecipe(data): logger.debug("Start parsing recipe") try: tree = ElementTree.parse(data) except TypeError: tree = data except FileNotFoundError: tree = ElementTree.fromstring(data) except: raise recipe = Recipe() recipe.path = data presentation = tree.find('.//RECIPE') fermentables = tree.findall('.//FERMENTABLE') hops = tree.findall('.//HOP') levures = tree.findall('.//YEAST') misc = tree.findall('.//MISC') style = tree.find('.//STYLE') mash = tree.find('.//MASH') for element in presentation: if 'NAME' == element.tag: recipe.name = element.text logger.debug(" Recipe name: %s", recipe.name) if 'BREWER' == element.tag: recipe.brewer = element.text logger.debug(" Recipe brewer: %s", recipe.brewer) if 'TYPE' == element.tag: if "All Grain" == element.text: recipe.type = model.constants.RECIPE_TYPE_ALL_GRAIN elif "Partial Mash" == element.text: recipe.type = model.constants.RECIPE_TYPE_PARTIAL_MASH elif "Extract" == element.text: recipe.type = model.constants.RECIPE_TYPE_EXTRACT logger.debug(" Recipe type: %s", recipe.type) if "BATCH_SIZE" == element.tag: recipe.volume = float(element.text) logger.debug(" Recipe volume: %s", recipe.volume) if "EFFICIENCY" == element.tag: recipe.efficiency = float(element.text) logger.debug(" Recipe efficiency: %s", recipe.efficiency) if "BOIL_TIME" == element.tag: recipe.boil = float(element.text) logger.debug(" Recipe boil time: %s", recipe.boil) if "NOTES" == element.tag: recipe.recipeNotes = element.text logger.debug(" Recipe notes: %s", recipe.recipeNotes) try: for element in style: if "NAME" == element.tag: recipe.style = element.text except TypeError: recipe.style = "" try: recipe.mash = importBeerXMLMash(mash) except: pass for element in fermentables: recipe.listeFermentables.append(importBeerXMLFermentable(element)) for element in hops: recipe.listeHops.append(importBeerXMLHop(element)) for element in levures: recipe.listeYeasts.append(importBeerXMLYeast(element)) for element in misc: recipe.listeMiscs.append(importBeerXMLMisc(element)) logger.debug("End parsing recipe") return recipe
def importDictRecipe(dic): logger.debug("Start parsing dict") recipe = Recipe() recipe.path = dic['path'] recipe.name = dic['name'] recipe.brewer = dic['brewer'] recipe.style = dic['style'] if dic['type'] == "All Grain": recipe.type = RECIPE_TYPE_ALL_GRAIN elif dic['type'] == "Extract": recipe.type = RECIPE_TYPE_EXTRACT elif recipe.type == "Partial Mash": recipe.type = RECIPE_TYPE_PARTIAL_MASH recipe.volume = dic['volume'] recipe.boil = dic['boilTime'] recipe.efficiency = dic['efficiency'] for hop_dic in dic['hops']: hop = Hop() hop.name = hop_dic['name'] if hop_dic['form'] == "Pellet": hop.form = HOP_FORM_PELLET elif hop_dic['form'] == "Leaf": hop.form = HOP_FORM_LEAF elif hop_dic['form'] == "Plug": hop.form = HOP_FORM_PLUG hop.alpha = hop_dic['alpha'] hop.use = hop_dic['use'] hop.time = hop_dic['time'] hop.amount = hop_dic['amount'] recipe.listeHops.append(hop) for f_dic in dic['fermentables']: f = Fermentable() f.name = f_dic['name'] f.type = f_dic['type'] f.fyield = f_dic['fyield'] f.color = f_dic['color'] f.amount = f_dic['amount'] if f_dic['afterBoil'] == 'TRUE': f.useAfterBoil = True else: f.useAfterBoil = False f.recommendMash = f_dic['recoMash'] recipe.listeFermentables.append(f) for y_dic in dic['yeasts']: y = Yeast() y.name = y_dic['name'] y.productId = y_dic['product_id'] y.labo = y_dic['labo'] y.form = y_dic['form'] y.attenuation = y_dic['attenuation'] recipe.listeYeasts.append(y) for m_dic in dic['miscs']: m = Misc() m.name = m_dic['name'] m.amount = m_dic['amount'] m.type = m_dic['type'] m.use = m_dic['use'] m.time = m_dic['time'] recipe.listeMiscs.append(m) mash_dic = dic['mashProfile'] recipe.mash.name = mash_dic['name'] recipe.mash.ph = mash_dic['ph'] recipe.mash.spargeTemp = mash_dic['sparge'] recipe.mash.tunTemp = mash_dic['tunTemp'] for s_dic in mash_dic['steps']: s = MashStep() s.name = s_dic['name'] s.time = s_dic['time'] s.temp = s_dic['temp'] s.type = s_dic['type'] recipe.listeMashSteps.append(s) recipe.recipeNotes = dic['notes'] return recipe