summer_course_2024/imports/usage_factory.py

54 lines
1.9 KiB
Python

"""
UsageFactory retrieve the specific usage module for the given region
This factory can only be called after calling the construction factory so the thermal zones are created.
SPDX - License - Identifier: LGPL - 3.0 - or -later
Copyright © 2020 Project Author Guille Gutierrez guillermo.gutierrezmorote@concordia.ca
Contributors Pilar Monsalvete Alvarez de Uribarri pilar.monsalvete@concordia.ca
"""
from pathlib import Path
from imports.usage.hft_usage_parameters import HftUsageParameters
from imports.usage.ca_usage_parameters import CaUsageParameters
from imports.usage.ashrae_usage_parameters import AshraeUsageParameters
# todo: handle missing lambda and rise error.
class UsageFactory:
"""
UsageFactory class
"""
def __init__(self, handler, city, base_path=None):
if base_path is None:
base_path = Path(Path(__file__).parent.parent / 'data/usage')
self._handler = '_' + handler.lower().replace(' ', '_')
self._city = city
self._base_path = base_path
for building in city.buildings:
if len(building.thermal_zones) == 0:
raise Exception('It seems that the usage factory is being called before the construction factory. '
'Please ensure that the construction factory is called first.')
def _hft(self):
"""
Enrich the city with HFT usage library
"""
return HftUsageParameters(self._city, self._base_path).enrich_buildings()
def _ca(self):
"""
Enrich the city with Canada usage library
"""
return CaUsageParameters(self._city, self._base_path).enrich_buildings()
def _ashrae(self):
"""
Enrich the city by using ASHRAE information
"""
AshraeUsageParameters(self._city, self._base_path).enrich_buildings()
def enrich(self):
"""
Enrich the city given to the class using the usage factory given handler
:return: None
"""
getattr(self, self._handler, lambda: None)()