Functional Weave
Code in Python

energy.price-cap@1.0.1

impl/python.py

2,260 bytes · the Python implementation · view raw

Imports name this capability’s declared dependencies, which fune builds next to it in your project; each one links to its page.

import re

from .energy_price_cap_data import PRICE_CAP, PRICE_CAP_HISTORY  ← this capability’s own data, compiled from data/price-cap.json into the same file by fune build
from .energy_price_cap_types import EnergyFuel, PaymentMethod, PriceCap

ISO_DATE = re.compile(r"[0-9]{4}-[0-9]{2}-[0-9]{2}")
FUELS = ("electricity", "gas")
METHODS = ("direct-debit", "standard-credit", "prepayment")


def price_cap(fuel: EnergyFuel, payment_method: PaymentMethod, on_date: str) -> PriceCap:
    """The Ofgem price cap unit rate and standing charge in force on ``on_date``."""
    if not isinstance(on_date, str) or not ISO_DATE.fullmatch(on_date):
        raise ValueError('onDate must be an ISO date (YYYY-MM-DD), received "%s"' % (on_date,))
    if fuel not in FUELS:
        raise ValueError('unknown fuel "%s": expected electricity or gas' % (fuel,))
    if payment_method not in METHODS:
        raise ValueError(
            'unknown payment method "%s": expected direct-debit, standard-credit or prepayment' % (payment_method,)
        )
    rows = [r for r in PRICE_CAP if r.fuel == fuel and r.payment_method == payment_method]
    if not rows:
        raise ValueError(
            "no price cap figures for %s paid by %s: this version carries GB-average Direct Debit figures only"
            % (fuel, payment_method)
        )
    row = next((r for r in rows if r.valid_from <= on_date <= r.valid_to), None)
    if row is None:
        # A pruned build must not answer an old date with a newer cap.
        if PRICE_CAP_HISTORY != "full":
            earliest = min(r.valid_from for r in rows)
            if on_date < earliest:
                raise ValueError(
                    "no price cap for %s/%s on %s: this build was installed with history=%s, "
                    "so it only carries periods from %s. Reinstall with history=full for older dates."
                    % (fuel, payment_method, on_date, PRICE_CAP_HISTORY, earliest)
                )
        raise ValueError("no price cap for %s/%s on %s" % (fuel, payment_method, on_date))
    return PriceCap(
        fuel=fuel,
        payment_method=payment_method,
        region=row.region,
        unit_rate=row.unit_rate,
        standing_charge=row.standing_charge,
        vat_basis_points=row.vat_basis_points,
        valid_from=row.valid_from,
        valid_to=row.valid_to,
    )