Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
44 changes: 44 additions & 0 deletions python/examples/print_transient_ratings.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,44 @@
import logging

from heimdall_api_client.client import HeimdallApiClient

logging.basicConfig(level=logging.WARN)

client = HeimdallApiClient(
client_id="your_client_id",
client_secret="your_client_secret",
)

assets = client.get_assets()
grid_owner = assets.data.grid_owners[0]

print(f"\nGrid Owner: {grid_owner.name}\n")

for facility in grid_owner.facilities:
print(f"Facility: {facility.name}")

if facility.line:
try:
line_response = client.get_latest_line_transient_rating(line_id=facility.line.id)
line_transient_rating = line_response.data.line_transient_rating
print(f" {line_response.data.metric}, timestamp {line_transient_rating.timestamp}:")
for rating in line_transient_rating.ratings:
print(f" {rating.duration_minutes} min: {rating.value} {line_response.data.unit}")
except Exception as e:
print(f" Failed to fetch line transient rating for line '{facility.line.name}': {e}")

try:
circuit_response = client.get_latest_circuit_transient_rating(facility_id=facility.id)
circuit_transient_rating = circuit_response.data.circuit_transient_rating
print(f" {circuit_response.data.metric}, timestamp {circuit_transient_rating.timestamp}:")
for rating in circuit_transient_rating.ratings:
# A null limiting component id means the line transient rating is the binding constraint.
limiting_component = rating.limiting_component_id or "none"
print(
f" {rating.duration_minutes} min: {rating.value} {circuit_response.data.unit}, "
f"limited by {limiting_component}"
)
except Exception as e:
print(f" Failed to fetch circuit transient rating for facility '{facility.name}': {e}")

print()
69 changes: 69 additions & 0 deletions python/heimdall_api_client/capacity_monitoring.py
Original file line number Diff line number Diff line change
Expand Up @@ -18,6 +18,9 @@
from heimdall_api_client.capacity_monitoring_api_client.api.line import (
capacity_monitoring_v1_lines_get_latest_heimdall_dlr_forecasts as get_latest_dlr_forecasts,
)
from heimdall_api_client.capacity_monitoring_api_client.api.line import (
capacity_monitoring_v1_lines_get_latest_transient_rating as get_latest_line_transient_rating_endpoint,
)
from heimdall_api_client.capacity_monitoring_api_client.models.quantity import Quantity
from heimdall_api_client.capacity_monitoring_api_client.types import UNSET
from heimdall_api_client.errors import HeimdallApiError, body_preview
Expand All @@ -32,6 +35,9 @@
from heimdall_api_client.capacity_monitoring_api_client.models.capacity_monitoring_v1_facilities_get_latest_circuit_rating_response_200 import ( # noqa: E501
CapacityMonitoringV1FacilitiesGetLatestCircuitRatingResponse200,
)
from heimdall_api_client.capacity_monitoring_api_client.models.capacity_monitoring_v1_facilities_get_latest_circuit_transient_rating_response_200 import ( # noqa: E501
CapacityMonitoringV1FacilitiesGetLatestCircuitTransientRatingResponse200,
)
from heimdall_api_client.capacity_monitoring_api_client.models.capacity_monitoring_v1_lines_get_heimdall_aars_response_200 import ( # noqa: E501
CapacityMonitoringV1LinesGetHeimdallAarsResponse200,
)
Expand All @@ -50,6 +56,9 @@
from heimdall_api_client.capacity_monitoring_api_client.models.capacity_monitoring_v1_lines_get_latest_heimdall_dlr_response_200 import ( # noqa: E501
CapacityMonitoringV1LinesGetLatestHeimdallDlrResponse200,
)
from heimdall_api_client.capacity_monitoring_api_client.models.capacity_monitoring_v1_lines_get_latest_transient_rating_response_200 import ( # noqa: E501
CapacityMonitoringV1LinesGetLatestTransientRatingResponse200,
)


def get_latest_heimdall_dlr(
Expand Down Expand Up @@ -96,6 +105,34 @@ def get_latest_heimdall_aar(
return response.parsed


def get_latest_line_transient_rating(
client: AuthenticatedClient,
line_id: UUID,
region: str,
quantity: Quantity | str | None = None,
since: datetime.datetime | None = None,
) -> CapacityMonitoringV1LinesGetLatestTransientRatingResponse200:
quantity_value = UNSET
if quantity is not None:
quantity_value = quantity if isinstance(quantity, Quantity) else Quantity(quantity)

response = get_latest_line_transient_rating_endpoint.sync_detailed(
client=client,
line_id=line_id,
x_region=region,
quantity=quantity_value,
since=UNSET if since is None else as_zulu(since),
)
if response.status_code != 200:
status = int(response.status_code)
raise HeimdallApiError(
f"Error fetching latest line transient rating: {status} {response.status_code.phrase}"
f" - {body_preview(response.content)}",
status_code=status,
)
return response.parsed


def get_latest_heimdall_dlr_forecasts(
client: AuthenticatedClient, line_id: UUID, region: str
) -> CapacityMonitoringV1LinesGetLatestHeimdallDlrForecastsResponse200:
Expand Down Expand Up @@ -150,6 +187,38 @@ def get_latest_circuit_ratring(
return response.parsed


def get_latest_circuit_transient_rating(
client: AuthenticatedClient,
facility_id: UUID,
x_region: str,
quantity: Quantity | str | None = None,
since: datetime.datetime | None = None,
) -> CapacityMonitoringV1FacilitiesGetLatestCircuitTransientRatingResponse200:
from heimdall_api_client.capacity_monitoring_api_client.api.facility import (
capacity_monitoring_v1_facilities_get_latest_circuit_transient_rating as _get_latest_circuit_transient_rating,
)

quantity_value = UNSET
if quantity is not None:
quantity_value = quantity if isinstance(quantity, Quantity) else Quantity(quantity)

response = _get_latest_circuit_transient_rating.sync_detailed(
client=client,
facility_id=facility_id,
x_region=x_region,
quantity=quantity_value,
since=UNSET if since is None else as_zulu(since),
)
if response.status_code != 200:
status = int(response.status_code)
raise HeimdallApiError(
f"Error fetching latest circuit transient rating: {status} {response.status_code.phrase}"
f" - {body_preview(response.content)}",
status_code=status,
)
return response.parsed


def get_latest_circuit_rating_forecasts(
client: AuthenticatedClient, facility_id: UUID, x_region: str
) -> CapacityMonitoringV1FacilitiesGetLatestCircuitRatingForecastsResponse200:
Expand Down
Loading
Loading