Source code for test_miso_api

import pandas as pd
import pytest

from gridstatus.base import Markets
from gridstatus.miso_api import MISOAPI
from gridstatus.tests.base_test_iso import TestHelperMixin
from gridstatus.tests.vcr_utils import RECORD_MODE, setup_vcr

[docs]api_vcr = setup_vcr( source="miso_api", record_mode=RECORD_MODE, )
[docs]LMP_COLUMNS = [ "Interval Start", "Interval End", "Market", "Location", "Location Type", "LMP", "Energy", "Congestion", "Loss", ]
[docs]class TestMISOAPI(TestHelperMixin): @classmethod
[docs] def setup_class(cls): # https://docs.pytest.org/en/stable/how-to/xunit_setup.html # Runs before all tests in this class cls.iso = MISOAPI()
def _check_lmp(self, df, market_value): assert df.columns.tolist() == LMP_COLUMNS assert list(df["Market"].unique()) == [market_value] """get_lmp_day_ahead_hourly_ex_ante""" @pytest.mark.integration @api_vcr.use_cassette("test_get_lmp_day_ahead_hourly_ex_ante")
[docs] def test_get_lmp_day_ahead_hourly_ex_ante_date_range(self): start = self.local_now() - pd.DateOffset(days=2) end = start + pd.Timedelta(hours=3) df = self.iso.get_lmp_day_ahead_hourly_ex_ante(start, end) self._check_lmp(df, market_value=Markets.DAY_AHEAD_HOURLY_EX_ANTE.value) assert df["Interval Start"].min() == start.floor("h") assert df["Interval End"].max() == end.floor("h")
"""get_lmp_day_ahead_hourly_ex_post""" @pytest.mark.integration @api_vcr.use_cassette("test_get_lmp_day_ahead_hourly_ex_post")
[docs] def test_get_lmp_day_ahead_hourly_ex_post_date_range(self): start = self.local_now() - pd.DateOffset(days=2) end = start + pd.Timedelta(hours=3) df = self.iso.get_lmp_day_ahead_hourly_ex_post(start, end) self._check_lmp(df, market_value=Markets.DAY_AHEAD_HOURLY_EX_POST.value) assert df["Interval Start"].min() == start.floor("h") assert df["Interval End"].max() == end.floor("h")
"""get_lmp_real_time_hourly_ex_post_prelim""" @pytest.mark.integration @api_vcr.use_cassette("test_get_lmp_real_time_hourly_ex_post_prelim")
[docs] def test_get_lmp_real_time_hourly_ex_post_prelim_date_range(self): start = self.local_now() - pd.DateOffset(days=2) end = start + pd.Timedelta(hours=3) df = self.iso.get_lmp_real_time_hourly_ex_post_prelim(start, end) self._check_lmp(df, market_value=Markets.REAL_TIME_HOURLY_EX_POST_PRELIM.value) assert df["Interval Start"].min() == start.floor("h") assert df["Interval End"].max() == end.floor("h")
"""get_lmp_real_time_hourly_ex_post_final""" @pytest.mark.integration @api_vcr.use_cassette("test_get_lmp_real_time_hourly_ex_post_final")
[docs] def test_get_lmp_real_time_hourly_ex_post_final_date_range(self): start = self.local_now() - pd.DateOffset(days=6) end = start + pd.Timedelta(hours=3) df = self.iso.get_lmp_real_time_hourly_ex_post_final(start, end) self._check_lmp(df, market_value=Markets.REAL_TIME_HOURLY_EX_POST_FINAL.value) assert df["Interval Start"].min() == start.floor("h") assert df["Interval End"].max() == end.floor("h")
"""get_lmp_real_time_5_min_ex_ante""" @pytest.mark.integration @api_vcr.use_cassette("test_get_lmp_real_time_5_min_ex_ante")
[docs] def test_get_lmp_real_time_5_min_ex_ante_date_range(self): start = (self.local_now() - pd.DateOffset(days=2)).floor("5min") end = start + pd.Timedelta(hours=1) df = self.iso.get_lmp_real_time_5_min_ex_ante(start, end) self._check_lmp(df, market_value=Markets.REAL_TIME_5_MIN_EX_ANTE.value) assert df["Interval Start"].min() == start.floor("5min") # Function is exclusive of the end time for interval start, but interval # end will be the same as the end time assert df["Interval End"].max() == end.floor("5min")
"""get_lmp_real_time_5_min_ex_post_prelim""" @pytest.mark.integration @api_vcr.use_cassette("test_get_lmp_real_time_5_min_ex_post_prelim")
[docs] def test_get_lmp_real_time_5_min_ex_post_prelim_date_range(self): start = (self.local_now() - pd.DateOffset(days=2)).floor("5min") end = start + pd.Timedelta(hours=1) df = self.iso.get_lmp_real_time_5_min_ex_post_prelim(start, end) self._check_lmp(df, market_value=Markets.REAL_TIME_5_MIN_EX_POST_PRELIM.value) assert df["Interval Start"].min() == start.floor("5min") assert df["Interval End"].max() == end.floor("5min")
"""get_lmp_real_time_5_min_ex_post_final""" @pytest.mark.integration @api_vcr.use_cassette("test_get_lmp_real_time_5_min_ex_post_final")
[docs] def test_get_lmp_real_time_5_min_ex_post_final_date_range(self): start = (self.local_now() - pd.DateOffset(days=5)).floor("5min") end = start + pd.Timedelta(hours=1) df = self.iso.get_lmp_real_time_5_min_ex_post_final(start, end) self._check_lmp(df, market_value=Markets.REAL_TIME_5_MIN_EX_POST_FINAL.value) assert df["Interval Start"].min() == start assert df["Interval End"].max() == end