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
27 changes: 27 additions & 0 deletions src/india_api/internal/inputs/indiadb/client.py
Original file line number Diff line number Diff line change
@@ -1,10 +1,12 @@
"""India DB client that conforms to the DatabaseInterface."""
import os
import datetime as dt
import pandas as pd
import logging
from typing import Optional
from fastapi import HTTPException
from uuid import UUID
import sentry_sdk

from pvsite_datamodel import DatabaseConnection
from pvsite_datamodel.read import (
Expand Down Expand Up @@ -370,6 +372,31 @@ def post_site_generation(
)

generation_values_df = pd.DataFrame(generations)
capacity_factor = float(os.getenv("ERROR_GENERATION_CAPACITY_FACTOR", 1.1))
site = get_site_by_uuid(session=session, site_uuid=site_uuid)
site_capacity_kw = site.capacity_kw
exceeded_capacity = generation_values_df[
generation_values_df["power_kw"] > site_capacity_kw * capacity_factor
]
if len(exceeded_capacity) > 0:
# alert Sentry and return 422 validation error
sentry_sdk.capture_message(
f"Error processing generation values. "
f"One (or more) values are larger than {capacity_factor} "
f"times the site capacity of {site_capacity_kw} kWp. "
# f"User: {auth['https://openclimatefix.org/email']}"
f"Site: {site_uuid}"
)
raise HTTPException(
status_code=422,
detail=(
f"Error processing generation values. "
f"One (or more) values are larger than {capacity_factor} "
f"times the site capacity of {site_capacity_kw} kWp. "
"Please adjust this generation value, the site capacity, "
"or contact quartz.support@openclimatefix.org."
),
)

insert_generation_values(session, generation_values_df)
session.commit()
Expand Down
12 changes: 12 additions & 0 deletions src/india_api/internal/inputs/indiadb/test_indiadb.py
Original file line number Diff line number Diff line change
@@ -1,4 +1,5 @@
import logging
from fastapi import HTTPException
import pytest

from india_api.internal import PredictedPower, ActualPower
Expand Down Expand Up @@ -105,3 +106,14 @@ def test_post_site_generation(self, client, sites) -> None:
generation=[ActualPower(Time=1, PowerKW=1)],
email="test@test.com",
)

def test_post_site_generation_exceding_max_capacity(self, client, sites):
try:
client.post_site_generation(
site_uuid=sites[0].site_uuid,
generation=[ActualPower(Time=1, PowerKW=1000)],
email="test@test.com",
)
except HTTPException as e:
assert e.status_code == 422
assert "generation values" in str(e.detail)
Loading