1
0
Fork 0
mirror of https://github.com/shouptech/synthale.git synced 2026-02-03 15:39:45 +00:00

Add fermentable table

This commit is contained in:
Emma 2018-12-27 17:26:37 -07:00
parent a8cb7a3d69
commit 89174a2838
2 changed files with 61 additions and 1 deletions

View file

@ -12,7 +12,11 @@ from synthale import markdown, convert
class MarkdownRecipe: class MarkdownRecipe:
"""A recipe in markdown form.""" """A recipe in markdown form."""
def __init__(self, recipe, vol_unit='gallons', hop_unit='ounces'): def __init__(self,
recipe,
vol_unit='gallons',
hop_unit='ounces',
fermentable_unit='pounds'):
"""Create a MarkdownRecipe object. """Create a MarkdownRecipe object.
`recipe` is a recipe object from the pybeerxml package. `recipe` is a recipe object from the pybeerxml package.
@ -23,10 +27,15 @@ class MarkdownRecipe:
`hop_unit` specifies the unit for hop amounts. Can be one of `hop_unit` specifies the unit for hop amounts. Can be one of
'ounces', 'pounds', 'grams', or 'kilograms'. If specified unit is not 'ounces', 'pounds', 'grams', or 'kilograms'. If specified unit is not
matched, default is 'ounces'. matched, default is 'ounces'.
`fermentable_unit` specifies the unit for fermentable amounts. Can be
one of 'ounces', 'pounds', 'grams', or 'kilograms'. If specified unit
is not matched, default is 'pounds'.
""" """
self.recipe = recipe self.recipe = recipe
self.vol_unit = vol_unit self.vol_unit = vol_unit
self.hop_unit = hop_unit self.hop_unit = hop_unit
self.fermentable_unit = fermentable_unit
@property @property
def filename(self): def filename(self):
@ -54,6 +63,8 @@ class MarkdownRecipe:
'', '',
self.details, self.details,
'', '',
self.fermentables,
'',
self.hops, self.hops,
'', '',
)) ))
@ -109,6 +120,33 @@ class MarkdownRecipe:
self.recipe.abv) self.recipe.abv)
)) ))
@property
def fermentables(self):
"""Return markdown to represent the recipe's fermentables."""
headers = ('Name', 'Type', 'Color', 'Amount')
rows = []
for fermentable in self.recipe.fermentables:
if self.fermentable_unit == 'ounces':
amt = convert.ounces(fermentable.amount, '.1f')
elif self.fermentable_unit == 'grams':
amt = convert.grams(fermentable.amount, '.1f')
elif self.fermentable_unit == 'kilograms':
amt = convert.kilograms(fermentable.amount, '.2f')
else:
amt = convert.pounds(fermentable.amount, '.2f')
rows.append((
fermentable.name,
fermentable.type,
'{:.1f} °L'.format(fermentable.color),
amt
))
return (
'{}\n{}'.format(
markdown.setext_heading('Fermentables', level=2),
markdown.table(headers, rows)
)
)
@property @property
def hops(self): def hops(self):
"""Return markdown to represent the recipe's hops.""" """Return markdown to represent the recipe's hops."""

View file

@ -85,6 +85,28 @@ def test_recipe_details(md_weizen):
assert '**Batch size**: 20.8 L' in md_weizen.details assert '**Batch size**: 20.8 L' in md_weizen.details
def test_recipe_fermentables(md_weizen):
"""Test valid fermentable table is generated."""
md_weizen.fermentable_unit = 'pounds'
assert md_weizen.fermentables == (
'Fermentables\n'
'------------\n'
'| Name | Type | Color | Amount |\n'
'| --------------- | --------- | ------ | ------- |\n'
'| Pilsner (DE) | Base Malt | 1.0 °L | 5.00 lb |\n'
'| Wheat Malt (DE) | Adjunct | 2.0 °L | 5.00 lb |'
)
md_weizen.fermentable_unit = 'ounces'
assert '| 80.0 oz |' in md_weizen.fermentables
md_weizen.fermentable_unit = 'grams'
assert '| 2268.0 g |' in md_weizen.fermentables
md_weizen.fermentable_unit = 'kilograms'
assert '| 2.27 kg |' in md_weizen.fermentables
def test_recipe_hops(md_weizen): def test_recipe_hops(md_weizen):
"""Test valid hop table is generated.""" """Test valid hop table is generated."""
md_weizen.hop_unit = 'ounces' md_weizen.hop_unit = 'ounces'