1818# along with this program. If not, see <http://www.gnu.org/licenses/>.
1919
2020
21- from yaml import safe_load
2221from keyword import iskeyword
22+
23+ from yaml import safe_load
24+
25+ from pybeeryaml .fermentable import Fermentable
2326from pybeeryaml .hop import Hop
24- from pybeeryaml .yeast import Yeast
27+ from pybeeryaml .mash import MashProfile , MashStep
2528from pybeeryaml .meta import BeerComponent
2629from pybeeryaml .misc import Misc
27- from pybeeryaml .water import Water
2830from pybeeryaml .style import Style
29- from pybeeryaml .fermentable import Fermentable
30- from pybeeryaml .mash import MashProfile , MashStep
31+ from pybeeryaml .water import Water
32+ from pybeeryaml .yeast import Yeast
3133
3234
3335class Recipe (BeerComponent ):
34- """Recipe model
35-
36- :param data: dict recipe data
37- """
38-
39- def __init__ (self , name , type , style , brewer , batch_size , boil_size ,
40- boil_time , ** data : dict ):
36+ """Recipe model"""
37+
38+ def __init__ (
39+ self ,
40+ name ,
41+ type ,
42+ style ,
43+ brewer ,
44+ batch_size ,
45+ boil_size ,
46+ boil_time ,
47+ ** data : dict
48+ ):
4149 super ().__init__ ()
4250 self .name = name
4351 self .type = type
@@ -52,41 +60,40 @@ def __init__(self, name, type, style, brewer, batch_size, boil_size,
5260 if isinstance (self .style , dict ):
5361 self .style = Style (** data ["style" ])
5462
55- hops = self .flatten (data .get ("hops" , {}))
63+ hops = Recipe .flatten (data .get ("hops" , {}))
5664 self .hops = [Hop (** hdata ) for hdata in hops ]
5765
58- yeasts = self .flatten (data .get ("yeasts" , {}))
66+ yeasts = Recipe .flatten (data .get ("yeasts" , {}))
5967 self .yeasts = [Yeast (** ydata ) for ydata in yeasts ]
6068
61- ferments = self .flatten (data .get ("fermentables" , {}))
69+ ferments = Recipe .flatten (data .get ("fermentables" , {}))
6270 self .fermentables = [Fermentable (** fdata ) for fdata in ferments ]
6371
64- miscs = self .flatten (data .get ("miscs" , {}))
72+ miscs = Recipe .flatten (data .get ("miscs" , {}))
6573 self .miscs = [Misc (** mdata ) for mdata in miscs ]
6674
6775 profile = data .get ("mash" , {"name" : "mash" , "grain_temp" : 25 })
6876 self .mash = MashProfile (** profile )
6977
7078 steps = []
7179 if hasattr (self .mash , "mash_steps" ):
72- msdata = self .flatten (self .mash .mash_steps )
80+ msdata = Recipe .flatten (self .mash .mash_steps )
7381 for mash_step in msdata :
7482 steps .append (MashStep (** mash_step ))
7583
7684 self .mash .mash_steps = steps
7785
78- waters = self .flatten (data .get ("waters" , {}))
86+ waters = Recipe .flatten (data .get ("waters" , {}))
7987 self .waters = [Water (wdata ) for wdata in waters ]
8088
81- def flatten (self , data : dict ) -> list :
82- """Flatten yaml dict
83-
84- :param data: YAML dict
85- """
89+ @classmethod
90+ def flatten (cls , data : dict ) -> list :
91+ """Flatten yaml dict"""
8692 output = []
8793 for key , value in data .items ():
8894 if isinstance (value , dict ):
89- value ["name" ] = key
95+ if "name" not in value :
96+ value ["name" ] = key
9097
9198 for vkey , vvalue in value .items ():
9299 if iskeyword (vkey ):
@@ -124,10 +131,7 @@ def to_yaml(self) -> dict:
124131
125132 @classmethod
126133 def from_file (cls , filepath : str ):
127- """Create recipe from YAML file
128-
129- :param filepath: YAML file containing recipe data
130- """
134+ """Create recipe from YAML file"""
131135 with open (filepath , "r" ) as fi :
132136 data = safe_load (fi .read ())
133137 return cls (** data )
0 commit comments