Source code for honeybee_energy.construction.dictutil
# coding=utf-8
"""Utilities to convert construction dictionaries to Python objects."""
from honeybee_energy.construction.opaque import OpaqueConstruction
from honeybee_energy.construction.window import WindowConstruction
from honeybee_energy.construction.windowshade import WindowConstructionShade
from honeybee_energy.construction.dynamic import WindowConstructionDynamic
from honeybee_energy.construction.shade import ShadeConstruction
from honeybee_energy.construction.air import AirBoundaryConstruction
CONSTRUCTION_TYPES = \
('OpaqueConstruction', 'WindowConstruction', 'WindowConstructionShade',
'WindowConstructionDynamic', 'ShadeConstruction', 'AirBoundaryConstruction')
[docs]
def dict_to_construction(constr_dict, raise_exception=True, materials=None, schedules=None):
"""Get a Python object of any Construction from a dictionary.
Args:
constr_dict: A dictionary of any Honeybee energy construction. Note
that this should be a non-abridged dictionary to be valid.
raise_exception: Boolean to note whether an excpetion should be raised
if the object is not identified as a construction. Default: True.
materials: Optional dictionary of material objects that might be used in the
construction with the material identifiers as the keys. When specified,
these will be prioritized over the child objects underneath their
unabridged specification.
schedules: Optional dictionary of schedule objects that might be used in the
construction with the schedule identifiers as the keys. When specified,
these will be prioritized over the child objects underneath their
unabridged specification.
Returns:
A Python object derived from the input constr_dict.
"""
try: # get the type key from the dictionary
constr_type = constr_dict['type']
except KeyError:
raise ValueError('Construction dictionary lacks required "type" key.')
if constr_type == 'OpaqueConstruction':
return OpaqueConstruction.from_dict(constr_dict, materials)
elif constr_type == 'WindowConstruction':
return WindowConstruction.from_dict(constr_dict, materials)
elif constr_type == 'WindowConstructionShade':
return WindowConstructionShade.from_dict(constr_dict, materials, schedules)
elif constr_type == 'WindowConstructionDynamic':
return WindowConstructionDynamic.from_dict(constr_dict, materials, schedules)
elif constr_type == 'ShadeConstruction':
return ShadeConstruction.from_dict(constr_dict)
elif constr_type == 'AirBoundaryConstruction':
return AirBoundaryConstruction.from_dict(constr_dict, schedules)
elif raise_exception:
raise ValueError(
'{} is not a recognized energy Construction type'.format(constr_type))
[docs]
def dict_abridged_to_construction(constr_dict, materials, schedules,
raise_exception=True):
"""Get a Python object of any Construction from an abridged dictionary.
Args:
constr_dict: An abridged dictionary of any Honeybee energy construction.
materials: Dictionary of all material objects that might be used in the
construction with the material identifiers as the keys.
schedules: Dictionary of all schedule objects that might be used in the
construction with the schedule identifiers as the keys.
raise_exception: Boolean to note whether an exception should be raised
if the object is not identified as a construction. Default: True.
Returns:
A Python object derived from the input constr_dict.
"""
try: # get the type key from the dictionary
constr_type = constr_dict['type']
except KeyError:
raise ValueError('Construction dictionary lacks required "type" key.')
if constr_type == 'OpaqueConstructionAbridged':
return OpaqueConstruction.from_dict_abridged(constr_dict, materials)
elif constr_type == 'WindowConstructionAbridged':
return WindowConstruction.from_dict_abridged(constr_dict, materials)
elif constr_type == 'WindowConstructionShadeAbridged':
return WindowConstructionShade.from_dict_abridged(
constr_dict, materials, schedules)
elif constr_type == 'WindowConstructionDynamicAbridged':
return WindowConstructionDynamic.from_dict_abridged(
constr_dict, materials, schedules)
elif constr_type == 'ShadeConstruction':
return ShadeConstruction.from_dict(constr_dict)
elif constr_type == 'AirBoundaryConstructionAbridged':
return AirBoundaryConstruction.from_dict_abridged(constr_dict, schedules)
elif constr_type == 'AirBoundaryConstruction': # special case for ConstructionSet
return AirBoundaryConstruction.from_dict(constr_dict)
elif raise_exception:
raise ValueError(
'{} is not a recognized energy Construction type'.format(constr_type))