Source code for test_lmp_config
import pandas as pd
import pytest
from gridstatus.base import ISOBase, Markets, NotSupported
from gridstatus.lmp_config import lmp_config
# TODO(kladar): Dive into this more to understand what's going on and whether VCR applies
[docs]def days_ago(days):
return pd.Timestamp.now(
tz=ISOTodayHistoricalDayAheadHourly.default_timezone,
) - pd.Timedelta(days=days)
[docs]class ISOZeroSupport(ISOBase):
default_timezone = "US/Central"
@lmp_config(supports={})
[docs] def get_lmp(self, date, market):
print(f"get_lmp({date}, {market})")
[docs]class ISOTodayHistoricalDayAheadHourly(ISOBase):
default_timezone = "US/Central"
@lmp_config(supports={Markets.DAY_AHEAD_HOURLY: ["today", "historical"]})
[docs] def get_lmp(self, date, market):
print(f"get_lmp({date}, {market})")
[docs]class ISOLatestRealTime15Minutes(ISOBase):
default_timezone = "US/Central"
@lmp_config(supports={Markets.REAL_TIME_15_MIN: ["latest"]})
[docs] def get_lmp(self, date, market):
print(f"get_lmp({date}, {market})")
[docs]def test_lmp_config_support_check_matches():
iso = ISOLatestRealTime15Minutes()
iso.get_lmp("latest", Markets.REAL_TIME_15_MIN)
iso.get_lmp("latest", "REAL_TIME_15_MIN")
iso = ISOTodayHistoricalDayAheadHourly()
iso.get_lmp("today", Markets.DAY_AHEAD_HOURLY)
iso.get_lmp("today", "DAY_AHEAD_HOURLY")
iso.get_lmp(days_ago(2), Markets.DAY_AHEAD_HOURLY)
iso.get_lmp(days_ago(2), "DAY_AHEAD_HOURLY")
[docs]def test_lmp_config_signature_combos_success():
iso = ISOLatestRealTime15Minutes()
date = "latest"
market = "REAL_TIME_15_MIN"
iso.get_lmp(date, market)
iso.get_lmp(date, market=market)
iso.get_lmp(date=date, market=market)
[docs]def test_lmp_config_signature_combos_failure_propagates_type_errors():
iso = ISOLatestRealTime15Minutes()
date = "latest"
market = "REAL_TIME_15_MIN"
with pytest.raises(TypeError):
iso.get_lmp(date)
with pytest.raises(TypeError):
iso.get_lmp(market)
with pytest.raises(TypeError):
iso.get_lmp(date=date)
with pytest.raises(TypeError):
iso.get_lmp(market=market)
[docs]def test_lmp_config_support_check_does_not_match():
with pytest.raises(NotSupported):
ISOTodayHistoricalDayAheadHourly().get_lmp("latest", Markets.DAY_AHEAD_HOURLY)
with pytest.raises(NotSupported):
ISOZeroSupport().get_lmp("today", Markets.DAY_AHEAD_HOURLY)