Source code for greenlang.calculations.sfdr.pai_non_renewable_energy
""" fossil_fuel_exposure """
import logging
from fingreen_web.models import CollectionItem
logger = logging.getLogger(__name__)
[docs]
class NonRenewableEnergy(): #pylint: disable=[invalid-name, too-few-public-methods]
""" non_renewable_energy """
[docs]
def impact(self, collections, assets, invest_value_tot, period): # pylint: disable=[unused-argument, too-many-locals, too-many-branches]
""" Compute fossil_fuel_exposure
Formula ???
Args:
- assets
Returns:
- share_t
"""
value_t = 0
kwh_tot = 0
for asset in assets:
# Fetch related collection. TODO could be multiple
collection = collections.filter(company=asset.company, collection_type='metrics')[0]
# Fetch metrics value for this collection. TODO could be multiple
# Legacy energy_consumption_kwh + energy_nonrenewable_pct mode
mode = None
try:
collection_item_energy_nonrenewable_pct = CollectionItem.objects.get(
collection=collection, template__name='energy_nonrenewable_pct')
collection_item_energy_consumption_kwh = CollectionItem.objects.get(
collection=collection, template__name='energy_consumption_kwh')
mode = 'pct'
except: # pylint: disable=[bare-except]
pass
# New templates
try:
ci_ec_renewable_kwh = CollectionItem.objects.get(
collection=collection, template__name='energy_consumption_renewable_kwh')
ci_ec_non_renewable_kwh = CollectionItem.objects.get(
collection=collection, template__name='energy_consumption_non_renewable_kwh')
mode = 'new'
except: # pylint: disable=[bare-except]
pass
if mode == 'pct':
if collection_item_energy_nonrenewable_pct.value_float is None:
collection_item_energy_nonrenewable_pct.value_float = 0
if collection_item_energy_consumption_kwh.value_pint is None:
collection_item_energy_consumption_kwh.value_pint = 0
kw_tot_i = collection_item_energy_consumption_kwh.value_pint
nonrenewable_pct = collection_item_energy_nonrenewable_pct.value_float
elif mode == 'new':
if ci_ec_renewable_kwh.value_pint is None:
ci_ec_renewable_kwh.value_pint = 0
if ci_ec_non_renewable_kwh.value_pint is None:
ci_ec_non_renewable_kwh.value_pint = 0
kw_tot_i = ci_ec_renewable_kwh.value_pint + ci_ec_non_renewable_kwh.value_pint
nonrenewable_pct = None
if kw_tot_i > 0:
nonrenewable_pct = ci_ec_non_renewable_kwh.value_pint / kw_tot_i * 100
kwh_tot = kwh_tot + kw_tot_i
valuation = CollectionItem.objects.get(collection__company=asset.company,
item_type='corp_valuation',
collection__period_year=period['period_year']).value_pint
#logger.debug(f'valuation 1:{valuation}')
weight_i = (asset.shares_pct / 100) * valuation / invest_value_tot
if nonrenewable_pct is not None:
value_i = weight_i * nonrenewable_pct
else:
value_i = 0
value_t = value_t + value_i
value_t = round(value_t, 2)
#logger.debug(f'value_t 1:{value_t}')
if kwh_tot == 0:
return None
return f'{value_t:g}'