From 8478a84955d6d676547cd65757ecc68f65c40bec Mon Sep 17 00:00:00 2001 From: "pre-commit-ci[bot]" <66853113+pre-commit-ci[bot]@users.noreply.github.com> Date: Mon, 21 Mar 2022 11:56:25 +0000 Subject: [PATCH 01/20] [pre-commit.ci] auto fixes from pre-commit.com hooks for more information, see https://pre-commit.ci --- tests/test_read.py | 11 +++++------ tests/test_read_pv.py | 38 ++++++++++++++++++-------------------- 2 files changed, 23 insertions(+), 26 deletions(-) diff --git a/tests/test_read.py b/tests/test_read.py index a82c5d10..3fed2844 100644 --- a/tests/test_read.py +++ b/tests/test_read.py @@ -13,8 +13,8 @@ MLModel, MLModelSQL, PVSystem, -PVSystemSQL, -PVYield + PVSystemSQL, + PVYield, ) from nowcasting_datamodel.read import ( get_all_gsp_ids_latest_forecast, @@ -148,7 +148,9 @@ def test_get_latest_pv_yield(db_session_pv): db_session_pv.commit() - pv_yields = get_latest_pv_yield(session=db_session_pv, pv_systems=[pv_system_sql_1, pv_system_sql_2]) + pv_yields = get_latest_pv_yield( + session=db_session_pv, pv_systems=[pv_system_sql_1, pv_system_sql_2] + ) # read database assert len(pv_yields) == 2 @@ -158,6 +160,3 @@ def test_get_latest_pv_yield(db_session_pv): pv_systems = db_session_pv.query(PVSystemSQL).order_by(PVSystemSQL.created_utc).all() pv_yields[0].pv_system.id = pv_systems[0].id - - - diff --git a/tests/test_read_pv.py b/tests/test_read_pv.py index 1eff9ba1..fc92fa25 100644 --- a/tests/test_read_pv.py +++ b/tests/test_read_pv.py @@ -13,13 +13,10 @@ MLModel, MLModelSQL, PVSystem, -PVSystemSQL, -PVYield + PVSystemSQL, + PVYield, ) -from nowcasting_datamodel.read_pv import ( - get_latest_pv_yield, get_pv_systems -) -from nowcasting_datamodel.read_pv import get_latest_pv_yield +from nowcasting_datamodel.read_pv import get_latest_pv_yield, get_pv_systems from nowcasting_datamodel.save import save_pv_system logger = logging.getLogger(__name__) @@ -35,14 +32,10 @@ def test_get_pv_system(db_session_pv): save_pv_system(session=db_session_pv, pv_system=pv_system_sql_1) save_pv_system(session=db_session_pv, pv_system=pv_system_sql_2) - pv_systems_get = get_pv_systems( - session=db_session_pv - ) + pv_systems_get = get_pv_systems(session=db_session_pv) assert len(pv_systems_get) == 2 - pv_systems_get = get_pv_systems( - session=db_session_pv, pv_systems_ids=[pv_systems_get[0].id] - ) + pv_systems_get = get_pv_systems(session=db_session_pv, pv_systems_ids=[pv_systems_get[0].id]) assert len(pv_systems_get) == 1 @@ -78,7 +71,9 @@ def test_get_latest_pv_yield(db_session_pv): db_session_pv.commit() - pv_yields = get_latest_pv_yield(session=db_session_pv, pv_systems=[pv_system_sql_1, pv_system_sql_2]) + pv_yields = get_latest_pv_yield( + session=db_session_pv, pv_systems=[pv_system_sql_1, pv_system_sql_2] + ) # read database assert len(pv_yields) == 2 @@ -105,7 +100,11 @@ def test_get_latest_pv_yield_append_no_yields(db_session_pv): db_session_pv.commit() - pv_systems = get_latest_pv_yield(session=db_session_pv, pv_systems=[pv_system_sql_1, pv_system_sql_2],append_to_pv_systems=True) + pv_systems = get_latest_pv_yield( + session=db_session_pv, + pv_systems=[pv_system_sql_1, pv_system_sql_2], + append_to_pv_systems=True, + ) assert len(pv_systems) == 2 @@ -139,10 +138,9 @@ def test_get_latest_pv_yield_append(db_session_pv): db_session_pv.commit() - - pv_systems = get_latest_pv_yield(session=db_session_pv, pv_systems=[pv_system_sql_1, pv_system_sql_2],append_to_pv_systems=True) + pv_systems = get_latest_pv_yield( + session=db_session_pv, + pv_systems=[pv_system_sql_1, pv_system_sql_2], + append_to_pv_systems=True, + ) assert len(pv_systems) == 2 - - - - From 896625fdc9936959bdd7a5f846beba7350517806 Mon Sep 17 00:00:00 2001 From: "pre-commit-ci[bot]" <66853113+pre-commit-ci[bot]@users.noreply.github.com> Date: Mon, 21 Mar 2022 14:50:34 +0000 Subject: [PATCH 02/20] [pre-commit.ci] auto fixes from pre-commit.com hooks for more information, see https://pre-commit.ci --- tests/test_read.py | 1 - tests/test_read_pv.py | 3 +++ 2 files changed, 3 insertions(+), 1 deletion(-) diff --git a/tests/test_read.py b/tests/test_read.py index 5552711d..062808a3 100644 --- a/tests/test_read.py +++ b/tests/test_read.py @@ -115,4 +115,3 @@ def test_get_pv_system(db_session_pv): session=db_session_pv, provider=pv_system.provider, pv_system_id=pv_system.pv_system_id ) assert PVSystem.from_orm(pv_system) == PVSystem.from_orm(pv_system_get) - diff --git a/tests/test_read_pv.py b/tests/test_read_pv.py index e3292930..ab157ffa 100644 --- a/tests/test_read_pv.py +++ b/tests/test_read_pv.py @@ -1,4 +1,5 @@ import logging + <<<<<<< HEAD from datetime import datetime, timezone @@ -17,10 +18,12 @@ PVSystemSQL, PVYield, ) + ======= from datetime import datetime from nowcasting_datamodel.models import PVSystem, PVSystemSQL, PVYield + >>>>>>> main from nowcasting_datamodel.read_pv import get_latest_pv_yield, get_pv_systems from nowcasting_datamodel.save import save_pv_system From 4463794b9f103ce0914c9c846f7d8500d8133d18 Mon Sep 17 00:00:00 2001 From: peterdudfield Date: Mon, 21 Mar 2022 14:51:07 +0000 Subject: [PATCH 03/20] fix --- tests/test_read_pv.py | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/tests/test_read_pv.py b/tests/test_read_pv.py index e3292930..88f9a8b1 100644 --- a/tests/test_read_pv.py +++ b/tests/test_read_pv.py @@ -1,5 +1,4 @@ import logging -<<<<<<< HEAD from datetime import datetime, timezone from nowcasting_datamodel.fake import ( @@ -17,11 +16,11 @@ PVSystemSQL, PVYield, ) -======= + from datetime import datetime from nowcasting_datamodel.models import PVSystem, PVSystemSQL, PVYield ->>>>>>> main + from nowcasting_datamodel.read_pv import get_latest_pv_yield, get_pv_systems from nowcasting_datamodel.save import save_pv_system From e78eff384dada9ec5520b477c61d2bdd13f36a77 Mon Sep 17 00:00:00 2001 From: "pre-commit-ci[bot]" <66853113+pre-commit-ci[bot]@users.noreply.github.com> Date: Mon, 21 Mar 2022 14:51:56 +0000 Subject: [PATCH 04/20] [pre-commit.ci] auto fixes from pre-commit.com hooks for more information, see https://pre-commit.ci --- tests/test_read_pv.py | 8 -------- 1 file changed, 8 deletions(-) diff --git a/tests/test_read_pv.py b/tests/test_read_pv.py index 50226f51..2eb7b9d4 100644 --- a/tests/test_read_pv.py +++ b/tests/test_read_pv.py @@ -1,5 +1,4 @@ import logging - from datetime import datetime, timezone from nowcasting_datamodel.fake import ( @@ -17,13 +16,6 @@ PVSystemSQL, PVYield, ) - - -from datetime import datetime - -from nowcasting_datamodel.models import PVSystem, PVSystemSQL, PVYield - - from nowcasting_datamodel.read_pv import get_latest_pv_yield, get_pv_systems from nowcasting_datamodel.save import save_pv_system From e0b383f7dad0468484b7fa23cec707fcee55e56b Mon Sep 17 00:00:00 2001 From: peterdudfield Date: Mon, 21 Mar 2022 15:02:05 +0000 Subject: [PATCH 05/20] add gsp yield model --- diagram.png | Bin 95082 -> 94839 bytes nowcasting_datamodel/fake.py | 2 +- nowcasting_datamodel/models/__init__.py | 1 + nowcasting_datamodel/models/gsp.py | 102 ++++++++++++++++++++++++ nowcasting_datamodel/models/models.py | 36 +-------- scripts/model_diagram.py | 4 +- 6 files changed, 107 insertions(+), 38 deletions(-) create mode 100644 nowcasting_datamodel/models/gsp.py diff --git a/diagram.png b/diagram.png index a025c81a0f8e7595d4715484f122fa6191556d4c..6b6d20d9152369755a1499c5a5ba26252062e935 100644 GIT binary patch literal 94839 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

&3GsCcRtBm2!UE{P3Bbw{|xXE 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%0A<^@EMjq4P7pW86T~sGq+~e@Kb$$U;E8e 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 UYt`^LxdPg+y4yM14*m9j0Oy;y;{X5v diff --git a/nowcasting_datamodel/fake.py b/nowcasting_datamodel/fake.py index 48688cb0..26ae2cf7 100644 --- a/nowcasting_datamodel/fake.py +++ b/nowcasting_datamodel/fake.py @@ -9,11 +9,11 @@ ForecastSQL, ForecastValueSQL, InputDataLastUpdatedSQL, - LocationSQL, MLModelSQL, PVSystemSQL, national_gb_label, ) +from nowcasting_datamodel.models.gsp import LocationSQL from nowcasting_datamodel.read import get_location, get_model diff --git a/nowcasting_datamodel/models/__init__.py b/nowcasting_datamodel/models/__init__.py index b103775a..4ae6c609 100644 --- a/nowcasting_datamodel/models/__init__.py +++ b/nowcasting_datamodel/models/__init__.py @@ -20,5 +20,6 @@ The primary keys could be 'gsp_id' and 'target_datetime_utc'. """ +from .gsp import * # noqa F403 from .models import * # noqa F403 from .pv import * # noqa F403 diff --git a/nowcasting_datamodel/models/gsp.py b/nowcasting_datamodel/models/gsp.py new file mode 100644 index 00000000..095c1205 --- /dev/null +++ b/nowcasting_datamodel/models/gsp.py @@ -0,0 +1,102 @@ +import logging +from datetime import datetime +from typing import Optional + +from pydantic import Field, validator +from sqlalchemy import Column, Integer, String, ForeignKey, DateTime, Index +from sqlalchemy.orm import relationship + +from nowcasting_datamodel.models.base import Base_Forecast +from nowcasting_datamodel.models.utils import CreatedMixin, EnhancedBaseModel +from nowcasting_datamodel.utils import datetime_must_have_timezone + +logger = logging.getLogger(__name__) + +######## +# 2. Location +######## + + +class LocationSQL(Base_Forecast): + """Location that the forecast is for""" + + __tablename__ = "location" + + id = Column(Integer, primary_key=True) + label = Column(String) + gsp_id = Column(Integer) + gsp_name = Column(String, nullable=True) + gsp_group = Column(String, nullable=True) + region_name = Column(String, nullable=True) + + forecast = relationship("ForecastSQL", back_populates="location") + gsp = relationship("GSPYieldSQL", back_populates="gsp") + + +class Location(EnhancedBaseModel): + """Location that the forecast is for""" + + label: str = Field(..., description="") + gsp_id: Optional[int] = Field(None, description="The Grid Supply Point (GSP) id", index=True) + gsp_name: Optional[str] = Field(None, description="The GSP name") + gsp_group: Optional[str] = Field(None, description="The GSP group name") + region_name: Optional[str] = Field(None, description="The GSP region name") + + rm_mode = True + + def to_orm(self) -> LocationSQL: + """Change model to LocationSQL""" + return LocationSQL( + label=self.label, + gsp_id=self.gsp_id, + gsp_name=self.gsp_name, + gsp_group=self.gsp_group, + region_name=self.region_name, + ) + + +class GSPYieldSQL(Base_Forecast, CreatedMixin): + """GSP Yield data""" + + __tablename__ = "gsp_yield" + + id = Column(Integer, primary_key=True) + datetime_utc = Column(DateTime, index=True) + solar_generation_kw = Column(String) + + # many (forecasts) to one (location) + gsp = relationship("GSPSystemSQL", back_populates="gsp_yield") + gsp_id = Column(Integer, ForeignKey("gsp.id"), index=True) + + Index("ix_gsp_yield_datetime_utc", datetime_utc.desc()) + + +class GSPYield(EnhancedBaseModel): + """GSP Yield data""" + + datetime_utc: datetime = Field(..., description="The timestamp of the gsp yield") + solar_generation_kw: float = Field(..., description="The amount of solar generation") + + _normalize_target_time = validator("datetime_utc", allow_reuse=True)( + datetime_must_have_timezone + ) + + gsp: Optional[Location] = Field( + None, + description="The GSP associated with this model", + ) + + @validator("solar_generation_kw") + def validate_solar_generation_kw(cls, v): + """Validate the solar_generation_kw field""" + if v < 0: + logger.debug(f"Changing solar_generation_kw ({v}) to 0") + v = 0 + return v + + def to_orm(self) -> GSPYieldSQL: + """Change model to GSPYieldSQL""" + return GSPYieldSQL( + datetime_utc=self.datetime_utc, + solar_generation_kw=self.solar_generation_kw, + ) diff --git a/nowcasting_datamodel/models/models.py b/nowcasting_datamodel/models/models.py index 5a2711a5..2846f436 100644 --- a/nowcasting_datamodel/models/models.py +++ b/nowcasting_datamodel/models/models.py @@ -18,6 +18,7 @@ from sqlalchemy.orm import relationship from nowcasting_datamodel.models.base import Base_Forecast +from nowcasting_datamodel.models.gsp import Location from nowcasting_datamodel.models.utils import CreatedMixin, EnhancedBaseModel from nowcasting_datamodel.utils import datetime_must_have_timezone @@ -28,41 +29,6 @@ ######## # 2. Location ######## -class LocationSQL(Base_Forecast): - """Location that the forecast is for""" - - __tablename__ = "location" - - id = Column(Integer, primary_key=True) - label = Column(String) - gsp_id = Column(Integer) - gsp_name = Column(String, nullable=True) - gsp_group = Column(String, nullable=True) - region_name = Column(String, nullable=True) - - forecast = relationship("ForecastSQL", back_populates="location") - - -class Location(EnhancedBaseModel): - """Location that the forecast is for""" - - label: str = Field(..., description="") - gsp_id: Optional[int] = Field(None, description="The Grid Supply Point (GSP) id", index=True) - gsp_name: Optional[str] = Field(None, description="The GSP name") - gsp_group: Optional[str] = Field(None, description="The GSP group name") - region_name: Optional[str] = Field(None, description="The GSP region name") - - rm_mode = True - - def to_orm(self) -> LocationSQL: - """Change model to LocationSQL""" - return LocationSQL( - label=self.label, - gsp_id=self.gsp_id, - gsp_name=self.gsp_name, - gsp_group=self.gsp_group, - region_name=self.region_name, - ) ######## diff --git a/scripts/model_diagram.py b/scripts/model_diagram.py index 75f49b39..2a02f074 100644 --- a/scripts/model_diagram.py +++ b/scripts/model_diagram.py @@ -10,9 +10,9 @@ import erdantic as erd -from nowcasting_datamodel.models import ManyForecasts +from nowcasting_datamodel.models import ManyForecasts, GSPYield -diagram = erd.create(ManyForecasts) +diagram = erd.create(ManyForecasts, GSPYield) diagram.draw("diagram.png") from nowcasting_datamodel.models import PVYield From 0ff15cce40c0abe0919a77e0e8d9b509cca70dcf Mon Sep 17 00:00:00 2001 From: "pre-commit-ci[bot]" <66853113+pre-commit-ci[bot]@users.noreply.github.com> Date: Mon, 21 Mar 2022 15:02:34 +0000 Subject: [PATCH 06/20] [pre-commit.ci] auto fixes from pre-commit.com hooks for more information, see https://pre-commit.ci --- nowcasting_datamodel/models/gsp.py | 2 +- scripts/model_diagram.py | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/nowcasting_datamodel/models/gsp.py b/nowcasting_datamodel/models/gsp.py index 095c1205..666d2993 100644 --- a/nowcasting_datamodel/models/gsp.py +++ b/nowcasting_datamodel/models/gsp.py @@ -3,7 +3,7 @@ from typing import Optional from pydantic import Field, validator -from sqlalchemy import Column, Integer, String, ForeignKey, DateTime, Index +from sqlalchemy import Column, DateTime, ForeignKey, Index, Integer, String from sqlalchemy.orm import relationship from nowcasting_datamodel.models.base import Base_Forecast diff --git a/scripts/model_diagram.py b/scripts/model_diagram.py index 2a02f074..aa7acffb 100644 --- a/scripts/model_diagram.py +++ b/scripts/model_diagram.py @@ -10,7 +10,7 @@ import erdantic as erd -from nowcasting_datamodel.models import ManyForecasts, GSPYield +from nowcasting_datamodel.models import GSPYield, ManyForecasts diagram = erd.create(ManyForecasts, GSPYield) diagram.draw("diagram.png") From 776a046f6ea1fe0047550a90aa7133fc46f6018c Mon Sep 17 00:00:00 2001 From: peterdudfield Date: Mon, 21 Mar 2022 15:03:17 +0000 Subject: [PATCH 07/20] fix import error --- tests/test_read_pv.py | 12 +----------- 1 file changed, 1 insertion(+), 11 deletions(-) diff --git a/tests/test_read_pv.py b/tests/test_read_pv.py index 2eb7b9d4..48128372 100644 --- a/tests/test_read_pv.py +++ b/tests/test_read_pv.py @@ -1,17 +1,7 @@ import logging -from datetime import datetime, timezone +from datetime import datetime -from nowcasting_datamodel.fake import ( - make_fake_forecasts, - make_fake_national_forecast, - make_fake_pv_system, -) from nowcasting_datamodel.models import ( - GSPSQL, - Forecast, - ForecastValue, - MLModel, - MLModelSQL, PVSystem, PVSystemSQL, PVYield, From 2a7762cb4c96aebcd9b7c2848fa836bb95d3277f Mon Sep 17 00:00:00 2001 From: "pre-commit-ci[bot]" <66853113+pre-commit-ci[bot]@users.noreply.github.com> Date: Mon, 21 Mar 2022 15:03:42 +0000 Subject: [PATCH 08/20] [pre-commit.ci] auto fixes from pre-commit.com hooks for more information, see https://pre-commit.ci --- tests/test_read_pv.py | 6 +----- 1 file changed, 1 insertion(+), 5 deletions(-) diff --git a/tests/test_read_pv.py b/tests/test_read_pv.py index 48128372..7387e048 100644 --- a/tests/test_read_pv.py +++ b/tests/test_read_pv.py @@ -1,11 +1,7 @@ import logging from datetime import datetime -from nowcasting_datamodel.models import ( - PVSystem, - PVSystemSQL, - PVYield, -) +from nowcasting_datamodel.models import PVSystem, PVSystemSQL, PVYield from nowcasting_datamodel.read_pv import get_latest_pv_yield, get_pv_systems from nowcasting_datamodel.save import save_pv_system From f0d5079bc3ec393b956abbcc3d189e90bc74e3ff Mon Sep 17 00:00:00 2001 From: peterdudfield Date: Mon, 21 Mar 2022 15:05:22 +0000 Subject: [PATCH 09/20] add description --- nowcasting_datamodel/models/gsp.py | 6 ++++++ nowcasting_datamodel/models/models.py | 1 - 2 files changed, 6 insertions(+), 1 deletion(-) diff --git a/nowcasting_datamodel/models/gsp.py b/nowcasting_datamodel/models/gsp.py index 666d2993..e8bc58c4 100644 --- a/nowcasting_datamodel/models/gsp.py +++ b/nowcasting_datamodel/models/gsp.py @@ -1,3 +1,9 @@ +""" Pydantic and Sqlalchemy models for the database + +2. Location objects, where the forecast is for +8. GSP yield for storing GSP yield data + +""" import logging from datetime import datetime from typing import Optional diff --git a/nowcasting_datamodel/models/models.py b/nowcasting_datamodel/models/models.py index 2846f436..a31352a8 100644 --- a/nowcasting_datamodel/models/models.py +++ b/nowcasting_datamodel/models/models.py @@ -2,7 +2,6 @@ The following class are made 1. Reusable classes -2. Location objects, where the forecast is for 3. Model object, what forecast model is used 4. ForecastValue objects, specific values of a forecast and time 5. Input data status, shows when the data was collected From 0a0544f6d357b3b0da44327800e5253288150962 Mon Sep 17 00:00:00 2001 From: peterdudfield Date: Mon, 21 Mar 2022 15:08:45 +0000 Subject: [PATCH 10/20] fix --- nowcasting_datamodel/models/gsp.py | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/nowcasting_datamodel/models/gsp.py b/nowcasting_datamodel/models/gsp.py index e8bc58c4..cd2f873e 100644 --- a/nowcasting_datamodel/models/gsp.py +++ b/nowcasting_datamodel/models/gsp.py @@ -36,7 +36,7 @@ class LocationSQL(Base_Forecast): region_name = Column(String, nullable=True) forecast = relationship("ForecastSQL", back_populates="location") - gsp = relationship("GSPYieldSQL", back_populates="gsp") + gsp_yield = relationship("GSPYieldSQL", back_populates="gsp") class Location(EnhancedBaseModel): @@ -71,10 +71,10 @@ class GSPYieldSQL(Base_Forecast, CreatedMixin): solar_generation_kw = Column(String) # many (forecasts) to one (location) - gsp = relationship("GSPSystemSQL", back_populates="gsp_yield") - gsp_id = Column(Integer, ForeignKey("gsp.id"), index=True) + gsp = relationship("LocationSQL", back_populates="gsp_yield") + gsp_id = Column(Integer, ForeignKey("location.id"), index=True) - Index("ix_gsp_yield_datetime_utc", datetime_utc.desc()) + Index("ix_gsp_yield_datetime_utc_desc", datetime_utc.desc()) class GSPYield(EnhancedBaseModel): From 4b14d36b9340d07ddfcb75f1543a2f48ab319281 Mon Sep 17 00:00:00 2001 From: peterdudfield Date: Mon, 21 Mar 2022 15:30:34 +0000 Subject: [PATCH 11/20] add gsp read functions --- nowcasting_datamodel/fake.py | 2 +- nowcasting_datamodel/models/gsp.py | 6 +- nowcasting_datamodel/{ => read}/read.py | 0 nowcasting_datamodel/read/read_gsp.py | 69 ++++++++++++ nowcasting_datamodel/{ => read}/read_pv.py | 0 tests/test_read.py | 5 +- tests/test_read_gsp.py | 118 +++++++++++++++++++++ tests/test_read_pv.py | 2 +- 8 files changed, 193 insertions(+), 9 deletions(-) rename nowcasting_datamodel/{ => read}/read.py (100%) create mode 100644 nowcasting_datamodel/read/read_gsp.py rename nowcasting_datamodel/{ => read}/read_pv.py (100%) create mode 100644 tests/test_read_gsp.py diff --git a/nowcasting_datamodel/fake.py b/nowcasting_datamodel/fake.py index 26ae2cf7..653302e3 100644 --- a/nowcasting_datamodel/fake.py +++ b/nowcasting_datamodel/fake.py @@ -14,7 +14,7 @@ national_gb_label, ) from nowcasting_datamodel.models.gsp import LocationSQL -from nowcasting_datamodel.read import get_location, get_model +from nowcasting_datamodel.read.read import get_location, get_model def make_fake_location(gsp_id: int) -> LocationSQL: diff --git a/nowcasting_datamodel/models/gsp.py b/nowcasting_datamodel/models/gsp.py index cd2f873e..b81eb61a 100644 --- a/nowcasting_datamodel/models/gsp.py +++ b/nowcasting_datamodel/models/gsp.py @@ -36,7 +36,7 @@ class LocationSQL(Base_Forecast): region_name = Column(String, nullable=True) forecast = relationship("ForecastSQL", back_populates="location") - gsp_yield = relationship("GSPYieldSQL", back_populates="gsp") + gsp_yield = relationship("GSPYieldSQL", back_populates="location") class Location(EnhancedBaseModel): @@ -71,8 +71,8 @@ class GSPYieldSQL(Base_Forecast, CreatedMixin): solar_generation_kw = Column(String) # many (forecasts) to one (location) - gsp = relationship("LocationSQL", back_populates="gsp_yield") - gsp_id = Column(Integer, ForeignKey("location.id"), index=True) + location = relationship("LocationSQL", back_populates="gsp_yield") + location_id = Column(Integer, ForeignKey("location.id"), index=True) Index("ix_gsp_yield_datetime_utc_desc", datetime_utc.desc()) diff --git a/nowcasting_datamodel/read.py b/nowcasting_datamodel/read/read.py similarity index 100% rename from nowcasting_datamodel/read.py rename to nowcasting_datamodel/read/read.py diff --git a/nowcasting_datamodel/read/read_gsp.py b/nowcasting_datamodel/read/read_gsp.py new file mode 100644 index 00000000..242bc43b --- /dev/null +++ b/nowcasting_datamodel/read/read_gsp.py @@ -0,0 +1,69 @@ +""" Read pv functions """ +from typing import List, Optional, Union + +from sqlalchemy import desc +from sqlalchemy.orm import Session + +from nowcasting_datamodel.models import LocationSQL, GSPYieldSQL + + +def get_latest_gsp_yield( + session: Session, gsps: List[LocationSQL], append_to_gsps: bool = False +) -> Union[List[GSPYieldSQL], List[LocationSQL]]: + """ + Get the last gsp yield data + + :param session: database sessions + :param gsps: list of gsps + :param append_to_gsps: append gsp yield to pv systems, or return pv systems. + If appended the yield is access by 'pv_system.last_gsp_yield' + :return: either list of gsp yields, or pv systems + """ + + gsp_ids = [gsp.id for gsp in gsps] + + # start main query + query = session.query(GSPYieldSQL) + query = query.join(LocationSQL) + query = query.where( + LocationSQL.id == GSPYieldSQL.location_id, + ) + + # only select on results per pv system + query = query.distinct(LocationSQL.id) + + # select only th epv systems we want + query = query.where(LocationSQL.id.in_(gsp_ids)) + + # order by 'created_utc' desc, so we get the latest one + query = query.order_by( + LocationSQL.id, desc(GSPYieldSQL.datetime_utc), desc(GSPYieldSQL.created_utc) + ) + + # get all results + gsp_yields: List[GSPYieldSQL] = query.all() + + if not append_to_gsps: + return gsp_yields + else: + # get list of pvsystems with last pv yields + gsp_systems_with_gsp_yields = [] + for gsp_yield in gsp_yields: + gsp = gsp_yield.location + gsp.last_gsp_yield = gsp_yield + + gsp_systems_with_gsp_yields.append(gsp) + + # add pv systems that dont have any pv yields + gsp_systems_with_gsp_yields_ids = [pv_system.id for pv_system in gsp_systems_with_gsp_yields] + + gsp_systems_with_no_gsp_yields = [] + for gsp in gsps: + if gsp.id not in gsp_systems_with_gsp_yields_ids: + gsp.last_gsp_yield = None + + gsp_systems_with_no_gsp_yields.append(gsp) + + all_gsp_systems = gsp_systems_with_gsp_yields_ids + gsp_systems_with_no_gsp_yields + + return all_gsp_systems diff --git a/nowcasting_datamodel/read_pv.py b/nowcasting_datamodel/read/read_pv.py similarity index 100% rename from nowcasting_datamodel/read_pv.py rename to nowcasting_datamodel/read/read_pv.py diff --git a/tests/test_read.py b/tests/test_read.py index 062808a3..6ecc9f47 100644 --- a/tests/test_read.py +++ b/tests/test_read.py @@ -1,5 +1,4 @@ import logging -from datetime import datetime, timezone from nowcasting_datamodel.fake import ( make_fake_forecasts, @@ -12,10 +11,8 @@ LocationSQL, MLModel, PVSystem, - PVSystemSQL, - PVYield, ) -from nowcasting_datamodel.read import ( +from nowcasting_datamodel.read.read import ( get_all_gsp_ids_latest_forecast, get_forecast_values, get_latest_forecast, diff --git a/tests/test_read_gsp.py b/tests/test_read_gsp.py new file mode 100644 index 00000000..656ff30d --- /dev/null +++ b/tests/test_read_gsp.py @@ -0,0 +1,118 @@ +import logging +from datetime import datetime + +from nowcasting_datamodel.models import LocationSQL, Location, GSPYield +from nowcasting_datamodel.read.read_gsp import get_latest_gsp_yield +from nowcasting_datamodel.save import save_pv_system + +logger = logging.getLogger(__name__) + + +def test_get_latest_pv_yield(db_session): + + gsp_yield_1 = GSPYield(datetime_utc=datetime(2022, 1, 2), solar_generation_kw=1) + gsp_yield_1_sql = gsp_yield_1.to_orm() + + gsp_yield_2 = GSPYield(datetime_utc=datetime(2022, 1, 1), solar_generation_kw=2) + gsp_yield_2_sql = gsp_yield_2.to_orm() + + gsp_yield_3 = GSPYield(datetime_utc=datetime(2022, 1, 1), solar_generation_kw=2) + gsp_yield_3_sql = gsp_yield_3.to_orm() + + gsp_sql_1: LocationSQL = Location( + gsp_id=1, label="GSP_1", status_interval_minutes=5 + ).to_orm() + gsp_sql_2: LocationSQL = Location( + gsp_id=2, label="GSP_2", status_interval_minutes=5 + ).to_orm() + + # add pv system to yield object + gsp_yield_1_sql.location = gsp_sql_1 + gsp_yield_2_sql.location = gsp_sql_1 + gsp_yield_3_sql.location = gsp_sql_2 + + # add to database + db_session.add(gsp_yield_1_sql) + db_session.add(gsp_yield_2_sql) + db_session.add(gsp_yield_3_sql) + db_session.add(gsp_sql_1) + db_session.add(gsp_sql_2) + + db_session.commit() + + gsp_yields = get_latest_gsp_yield( + session=db_session, gsps=[gsp_sql_1, gsp_sql_2] + ) + + # read database + assert len(gsp_yields) == 3 + + assert gsp_yields[0].datetime_utc == datetime(2022, 1, 2) + assert gsp_yields[1].datetime_utc == datetime(2022, 1, 1) + + gsps = db_session.query(LocationSQL).order_by(LocationSQL.gsp_id).all() + gsp_yields[0].location.id = gsps[0].id + +# +def test_get_latest_gsp_yield_append_no_yields(db_session): + + gsp_sql_1: LocationSQL = Location( + gsp_id=1, label="GSP_1", status_interval_minutes=5 + ).to_orm() + gsp_sql_2: LocationSQL = Location( + gsp_id=2, label="GSP_2", status_interval_minutes=5 + ).to_orm() + + # add to database + db_session.add(gsp_sql_1) + db_session.add(gsp_sql_2) + + db_session.commit() + + pv_systems = get_latest_gsp_yield( + session=db_session, + gsps=[gsp_sql_1, gsp_sql_2], + append_to_gsps=True, + ) + + assert pv_systems[0].last_gsp_yield is None + assert len(pv_systems) == 2 + + +def test_get_latest_pv_yield_append(db_session): + gsp_yield_1 = GSPYield(datetime_utc=datetime(2022, 1, 2), solar_generation_kw=1) + gsp_yield_1_sql = gsp_yield_1.to_orm() + + gsp_yield_2 = GSPYield(datetime_utc=datetime(2022, 1, 1), solar_generation_kw=2) + gsp_yield_2_sql = gsp_yield_2.to_orm() + + gsp_yield_3 = GSPYield(datetime_utc=datetime(2022, 1, 1), solar_generation_kw=2) + gsp_yield_3_sql = gsp_yield_3.to_orm() + + gsp_sql_1: LocationSQL = Location( + gsp_id=1, label="GSP_1", status_interval_minutes=5 + ).to_orm() + gsp_sql_2: LocationSQL = Location( + gsp_id=2, label="GSP_2", status_interval_minutes=5 + ).to_orm() + + # add pv system to yield object + gsp_yield_1_sql.location = gsp_sql_1 + gsp_yield_2_sql.location = gsp_sql_1 + gsp_yield_3_sql.location = gsp_sql_2 + + # add to database + db_session.add(gsp_yield_1_sql) + db_session.add(gsp_yield_2_sql) + db_session.add(gsp_yield_3_sql) + db_session.add(gsp_sql_1) + db_session.add(gsp_sql_2) + + db_session.commit() + + gsps = get_latest_gsp_yield( + session=db_session, + gsps=[gsp_sql_1, gsp_sql_2], + append_to_gsps=True, + ) + assert len(gsps) == 2 diff --git a/tests/test_read_pv.py b/tests/test_read_pv.py index 7387e048..087c09d6 100644 --- a/tests/test_read_pv.py +++ b/tests/test_read_pv.py @@ -2,7 +2,7 @@ from datetime import datetime from nowcasting_datamodel.models import PVSystem, PVSystemSQL, PVYield -from nowcasting_datamodel.read_pv import get_latest_pv_yield, get_pv_systems +from nowcasting_datamodel.read.read_pv import get_latest_pv_yield, get_pv_systems from nowcasting_datamodel.save import save_pv_system logger = logging.getLogger(__name__) From 0b9a2fcd2febd97d15272fe3553ad073bbb4df2a Mon Sep 17 00:00:00 2001 From: "pre-commit-ci[bot]" <66853113+pre-commit-ci[bot]@users.noreply.github.com> Date: Mon, 21 Mar 2022 15:30:47 +0000 Subject: [PATCH 12/20] [pre-commit.ci] auto fixes from pre-commit.com hooks for more information, see https://pre-commit.ci --- nowcasting_datamodel/read/read_gsp.py | 6 ++++-- tests/test_read.py | 8 +------ tests/test_read_gsp.py | 31 ++++++++------------------- 3 files changed, 14 insertions(+), 31 deletions(-) diff --git a/nowcasting_datamodel/read/read_gsp.py b/nowcasting_datamodel/read/read_gsp.py index 242bc43b..adf19d0e 100644 --- a/nowcasting_datamodel/read/read_gsp.py +++ b/nowcasting_datamodel/read/read_gsp.py @@ -4,7 +4,7 @@ from sqlalchemy import desc from sqlalchemy.orm import Session -from nowcasting_datamodel.models import LocationSQL, GSPYieldSQL +from nowcasting_datamodel.models import GSPYieldSQL, LocationSQL def get_latest_gsp_yield( @@ -55,7 +55,9 @@ def get_latest_gsp_yield( gsp_systems_with_gsp_yields.append(gsp) # add pv systems that dont have any pv yields - gsp_systems_with_gsp_yields_ids = [pv_system.id for pv_system in gsp_systems_with_gsp_yields] + gsp_systems_with_gsp_yields_ids = [ + pv_system.id for pv_system in gsp_systems_with_gsp_yields + ] gsp_systems_with_no_gsp_yields = [] for gsp in gsps: diff --git a/tests/test_read.py b/tests/test_read.py index 6ecc9f47..d8364fd1 100644 --- a/tests/test_read.py +++ b/tests/test_read.py @@ -5,13 +5,7 @@ make_fake_national_forecast, make_fake_pv_system, ) -from nowcasting_datamodel.models import ( - Forecast, - ForecastValue, - LocationSQL, - MLModel, - PVSystem, -) +from nowcasting_datamodel.models import Forecast, ForecastValue, LocationSQL, MLModel, PVSystem from nowcasting_datamodel.read.read import ( get_all_gsp_ids_latest_forecast, get_forecast_values, diff --git a/tests/test_read_gsp.py b/tests/test_read_gsp.py index 656ff30d..65abf0dc 100644 --- a/tests/test_read_gsp.py +++ b/tests/test_read_gsp.py @@ -1,7 +1,7 @@ import logging from datetime import datetime -from nowcasting_datamodel.models import LocationSQL, Location, GSPYield +from nowcasting_datamodel.models import GSPYield, Location, LocationSQL from nowcasting_datamodel.read.read_gsp import get_latest_gsp_yield from nowcasting_datamodel.save import save_pv_system @@ -19,12 +19,8 @@ def test_get_latest_pv_yield(db_session): gsp_yield_3 = GSPYield(datetime_utc=datetime(2022, 1, 1), solar_generation_kw=2) gsp_yield_3_sql = gsp_yield_3.to_orm() - gsp_sql_1: LocationSQL = Location( - gsp_id=1, label="GSP_1", status_interval_minutes=5 - ).to_orm() - gsp_sql_2: LocationSQL = Location( - gsp_id=2, label="GSP_2", status_interval_minutes=5 - ).to_orm() + gsp_sql_1: LocationSQL = Location(gsp_id=1, label="GSP_1", status_interval_minutes=5).to_orm() + gsp_sql_2: LocationSQL = Location(gsp_id=2, label="GSP_2", status_interval_minutes=5).to_orm() # add pv system to yield object gsp_yield_1_sql.location = gsp_sql_1 @@ -40,9 +36,7 @@ def test_get_latest_pv_yield(db_session): db_session.commit() - gsp_yields = get_latest_gsp_yield( - session=db_session, gsps=[gsp_sql_1, gsp_sql_2] - ) + gsp_yields = get_latest_gsp_yield(session=db_session, gsps=[gsp_sql_1, gsp_sql_2]) # read database assert len(gsp_yields) == 3 @@ -53,15 +47,12 @@ def test_get_latest_pv_yield(db_session): gsps = db_session.query(LocationSQL).order_by(LocationSQL.gsp_id).all() gsp_yields[0].location.id = gsps[0].id + # def test_get_latest_gsp_yield_append_no_yields(db_session): - gsp_sql_1: LocationSQL = Location( - gsp_id=1, label="GSP_1", status_interval_minutes=5 - ).to_orm() - gsp_sql_2: LocationSQL = Location( - gsp_id=2, label="GSP_2", status_interval_minutes=5 - ).to_orm() + gsp_sql_1: LocationSQL = Location(gsp_id=1, label="GSP_1", status_interval_minutes=5).to_orm() + gsp_sql_2: LocationSQL = Location(gsp_id=2, label="GSP_2", status_interval_minutes=5).to_orm() # add to database db_session.add(gsp_sql_1) @@ -89,12 +80,8 @@ def test_get_latest_pv_yield_append(db_session): gsp_yield_3 = GSPYield(datetime_utc=datetime(2022, 1, 1), solar_generation_kw=2) gsp_yield_3_sql = gsp_yield_3.to_orm() - gsp_sql_1: LocationSQL = Location( - gsp_id=1, label="GSP_1", status_interval_minutes=5 - ).to_orm() - gsp_sql_2: LocationSQL = Location( - gsp_id=2, label="GSP_2", status_interval_minutes=5 - ).to_orm() + gsp_sql_1: LocationSQL = Location(gsp_id=1, label="GSP_1", status_interval_minutes=5).to_orm() + gsp_sql_2: LocationSQL = Location(gsp_id=2, label="GSP_2", status_interval_minutes=5).to_orm() # add pv system to yield object gsp_yield_1_sql.location = gsp_sql_1 From a33aac4444e3e864a1030c01c5c24a3bf510a107 Mon Sep 17 00:00:00 2001 From: peterdudfield Date: Mon, 21 Mar 2022 15:32:28 +0000 Subject: [PATCH 13/20] flkae8 --- nowcasting_datamodel/read/__init__.py | 1 + nowcasting_datamodel/read/read_gsp.py | 6 ++++-- tests/test_read_gsp.py | 1 - 3 files changed, 5 insertions(+), 3 deletions(-) create mode 100644 nowcasting_datamodel/read/__init__.py diff --git a/nowcasting_datamodel/read/__init__.py b/nowcasting_datamodel/read/__init__.py new file mode 100644 index 00000000..0be762fb --- /dev/null +++ b/nowcasting_datamodel/read/__init__.py @@ -0,0 +1 @@ +""" init for read functions """ diff --git a/nowcasting_datamodel/read/read_gsp.py b/nowcasting_datamodel/read/read_gsp.py index 242bc43b..0e036acc 100644 --- a/nowcasting_datamodel/read/read_gsp.py +++ b/nowcasting_datamodel/read/read_gsp.py @@ -1,5 +1,5 @@ """ Read pv functions """ -from typing import List, Optional, Union +from typing import List, Union from sqlalchemy import desc from sqlalchemy.orm import Session @@ -55,7 +55,9 @@ def get_latest_gsp_yield( gsp_systems_with_gsp_yields.append(gsp) # add pv systems that dont have any pv yields - gsp_systems_with_gsp_yields_ids = [pv_system.id for pv_system in gsp_systems_with_gsp_yields] + gsp_systems_with_gsp_yields_ids = [ + pv_system.id for pv_system in gsp_systems_with_gsp_yields + ] gsp_systems_with_no_gsp_yields = [] for gsp in gsps: diff --git a/tests/test_read_gsp.py b/tests/test_read_gsp.py index 656ff30d..2929c772 100644 --- a/tests/test_read_gsp.py +++ b/tests/test_read_gsp.py @@ -3,7 +3,6 @@ from nowcasting_datamodel.models import LocationSQL, Location, GSPYield from nowcasting_datamodel.read.read_gsp import get_latest_gsp_yield -from nowcasting_datamodel.save import save_pv_system logger = logging.getLogger(__name__) From e302bddef13c998ab3448a51e4ea9cf3cb5e6dd1 Mon Sep 17 00:00:00 2001 From: peterdudfield Date: Mon, 21 Mar 2022 15:38:23 +0000 Subject: [PATCH 14/20] fix --- nowcasting_datamodel/read/read_gsp.py | 2 +- tests/test_read_gsp.py | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/nowcasting_datamodel/read/read_gsp.py b/nowcasting_datamodel/read/read_gsp.py index a313da22..4718a046 100644 --- a/nowcasting_datamodel/read/read_gsp.py +++ b/nowcasting_datamodel/read/read_gsp.py @@ -56,7 +56,7 @@ def get_latest_gsp_yield( # add pv systems that dont have any pv yields gsp_systems_with_gsp_yields_ids = [ - pv_system.id for pv_system in gsp_systems_with_gsp_yields + gsp.id for gsp in gsp_systems_with_gsp_yields ] gsp_systems_with_no_gsp_yields = [] diff --git a/tests/test_read_gsp.py b/tests/test_read_gsp.py index aa77d7f7..86830593 100644 --- a/tests/test_read_gsp.py +++ b/tests/test_read_gsp.py @@ -38,7 +38,7 @@ def test_get_latest_pv_yield(db_session): gsp_yields = get_latest_gsp_yield(session=db_session, gsps=[gsp_sql_1, gsp_sql_2]) # read database - assert len(gsp_yields) == 3 + assert len(gsp_yields) == 2 assert gsp_yields[0].datetime_utc == datetime(2022, 1, 2) assert gsp_yields[1].datetime_utc == datetime(2022, 1, 1) From 996f97a6c550d31bcef8eba6f84174b6aa4cf8d4 Mon Sep 17 00:00:00 2001 From: "pre-commit-ci[bot]" <66853113+pre-commit-ci[bot]@users.noreply.github.com> Date: Mon, 21 Mar 2022 15:38:50 +0000 Subject: [PATCH 15/20] [pre-commit.ci] auto fixes from pre-commit.com hooks for more information, see https://pre-commit.ci --- nowcasting_datamodel/read/read_gsp.py | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/nowcasting_datamodel/read/read_gsp.py b/nowcasting_datamodel/read/read_gsp.py index 4718a046..4c3e9dc3 100644 --- a/nowcasting_datamodel/read/read_gsp.py +++ b/nowcasting_datamodel/read/read_gsp.py @@ -55,9 +55,7 @@ def get_latest_gsp_yield( gsp_systems_with_gsp_yields.append(gsp) # add pv systems that dont have any pv yields - gsp_systems_with_gsp_yields_ids = [ - gsp.id for gsp in gsp_systems_with_gsp_yields - ] + gsp_systems_with_gsp_yields_ids = [gsp.id for gsp in gsp_systems_with_gsp_yields] gsp_systems_with_no_gsp_yields = [] for gsp in gsps: From 15186b7c0d3c5bea174bc95b5fc93cd7e633b387 Mon Sep 17 00:00:00 2001 From: peterdudfield Date: Mon, 21 Mar 2022 15:55:07 +0000 Subject: [PATCH 16/20] add regime to gsp_yield --- nowcasting_datamodel/models/gsp.py | 12 ++++++++++++ nowcasting_datamodel/read/read_gsp.py | 6 +++++- tests/test_read_gsp.py | 4 ++-- 3 files changed, 19 insertions(+), 3 deletions(-) diff --git a/nowcasting_datamodel/models/gsp.py b/nowcasting_datamodel/models/gsp.py index b81eb61a..05c85fca 100644 --- a/nowcasting_datamodel/models/gsp.py +++ b/nowcasting_datamodel/models/gsp.py @@ -69,6 +69,7 @@ class GSPYieldSQL(Base_Forecast, CreatedMixin): id = Column(Integer, primary_key=True) datetime_utc = Column(DateTime, index=True) solar_generation_kw = Column(String) + regime = Column(String, nullable=True) # many (forecasts) to one (location) location = relationship("LocationSQL", back_populates="gsp_yield") @@ -82,6 +83,7 @@ class GSPYield(EnhancedBaseModel): datetime_utc: datetime = Field(..., description="The timestamp of the gsp yield") solar_generation_kw: float = Field(..., description="The amount of solar generation") + regime: str = Field('in-day', description="When the GSP data is pulled, can be 'in-day' or 'day-after'") _normalize_target_time = validator("datetime_utc", allow_reuse=True)( datetime_must_have_timezone @@ -100,9 +102,19 @@ def validate_solar_generation_kw(cls, v): v = 0 return v + @validator("regime") + def validate_regime(cls, v): + """Validate the solar_generation_kw field""" + if v not in ['day-after', 'in-da']: + message = f"Regime ({v}) not in 'day-after', 'in-da'" + logger.debug(message) + raise Exception(message) + return v + def to_orm(self) -> GSPYieldSQL: """Change model to GSPYieldSQL""" return GSPYieldSQL( datetime_utc=self.datetime_utc, solar_generation_kw=self.solar_generation_kw, + regime=self.regime ) diff --git a/nowcasting_datamodel/read/read_gsp.py b/nowcasting_datamodel/read/read_gsp.py index 4c3e9dc3..b8aa2e2d 100644 --- a/nowcasting_datamodel/read/read_gsp.py +++ b/nowcasting_datamodel/read/read_gsp.py @@ -8,7 +8,7 @@ def get_latest_gsp_yield( - session: Session, gsps: List[LocationSQL], append_to_gsps: bool = False + session: Session, gsps: List[LocationSQL], append_to_gsps: bool = False, regime:str='in-day' ) -> Union[List[GSPYieldSQL], List[LocationSQL]]: """ Get the last gsp yield data @@ -17,6 +17,7 @@ def get_latest_gsp_yield( :param gsps: list of gsps :param append_to_gsps: append gsp yield to pv systems, or return pv systems. If appended the yield is access by 'pv_system.last_gsp_yield' + :param regime: What regime the data is in, either 'in-day' or 'day-after' :return: either list of gsp yields, or pv systems """ @@ -29,6 +30,9 @@ def get_latest_gsp_yield( LocationSQL.id == GSPYieldSQL.location_id, ) + # filter on regime + query = query.where(GSPYieldSQL.regime == regime) + # only select on results per pv system query = query.distinct(LocationSQL.id) diff --git a/tests/test_read_gsp.py b/tests/test_read_gsp.py index 86830593..57ce55f4 100644 --- a/tests/test_read_gsp.py +++ b/tests/test_read_gsp.py @@ -7,7 +7,7 @@ logger = logging.getLogger(__name__) -def test_get_latest_pv_yield(db_session): +def test_get_latest_gsp_yield(db_session): gsp_yield_1 = GSPYield(datetime_utc=datetime(2022, 1, 2), solar_generation_kw=1) gsp_yield_1_sql = gsp_yield_1.to_orm() @@ -69,7 +69,7 @@ def test_get_latest_gsp_yield_append_no_yields(db_session): assert len(pv_systems) == 2 -def test_get_latest_pv_yield_append(db_session): +def test_get_latest_gsp_yield_append(db_session): gsp_yield_1 = GSPYield(datetime_utc=datetime(2022, 1, 2), solar_generation_kw=1) gsp_yield_1_sql = gsp_yield_1.to_orm() From 8ffe33afc675d98e858990ea91e790217d837f55 Mon Sep 17 00:00:00 2001 From: "pre-commit-ci[bot]" <66853113+pre-commit-ci[bot]@users.noreply.github.com> Date: Mon, 21 Mar 2022 15:55:19 +0000 Subject: [PATCH 17/20] [pre-commit.ci] auto fixes from pre-commit.com hooks for more information, see https://pre-commit.ci --- nowcasting_datamodel/models/gsp.py | 8 +++++--- nowcasting_datamodel/read/read_gsp.py | 2 +- 2 files changed, 6 insertions(+), 4 deletions(-) diff --git a/nowcasting_datamodel/models/gsp.py b/nowcasting_datamodel/models/gsp.py index 05c85fca..9312311c 100644 --- a/nowcasting_datamodel/models/gsp.py +++ b/nowcasting_datamodel/models/gsp.py @@ -83,7 +83,9 @@ class GSPYield(EnhancedBaseModel): datetime_utc: datetime = Field(..., description="The timestamp of the gsp yield") solar_generation_kw: float = Field(..., description="The amount of solar generation") - regime: str = Field('in-day', description="When the GSP data is pulled, can be 'in-day' or 'day-after'") + regime: str = Field( + "in-day", description="When the GSP data is pulled, can be 'in-day' or 'day-after'" + ) _normalize_target_time = validator("datetime_utc", allow_reuse=True)( datetime_must_have_timezone @@ -105,7 +107,7 @@ def validate_solar_generation_kw(cls, v): @validator("regime") def validate_regime(cls, v): """Validate the solar_generation_kw field""" - if v not in ['day-after', 'in-da']: + if v not in ["day-after", "in-da"]: message = f"Regime ({v}) not in 'day-after', 'in-da'" logger.debug(message) raise Exception(message) @@ -116,5 +118,5 @@ def to_orm(self) -> GSPYieldSQL: return GSPYieldSQL( datetime_utc=self.datetime_utc, solar_generation_kw=self.solar_generation_kw, - regime=self.regime + regime=self.regime, ) diff --git a/nowcasting_datamodel/read/read_gsp.py b/nowcasting_datamodel/read/read_gsp.py index b8aa2e2d..1b1d7c78 100644 --- a/nowcasting_datamodel/read/read_gsp.py +++ b/nowcasting_datamodel/read/read_gsp.py @@ -8,7 +8,7 @@ def get_latest_gsp_yield( - session: Session, gsps: List[LocationSQL], append_to_gsps: bool = False, regime:str='in-day' + session: Session, gsps: List[LocationSQL], append_to_gsps: bool = False, regime: str = "in-day" ) -> Union[List[GSPYieldSQL], List[LocationSQL]]: """ Get the last gsp yield data From 8dfe3bce17c734ce642e5d34d759e02e311bf35e Mon Sep 17 00:00:00 2001 From: peterdudfield Date: Mon, 21 Mar 2022 15:56:32 +0000 Subject: [PATCH 18/20] add migrations --- .../forecast/versions/d2f031f24593_.py | 43 +++++++++++++++++++ 1 file changed, 43 insertions(+) create mode 100644 nowcasting_datamodel/migrations/forecast/versions/d2f031f24593_.py diff --git a/nowcasting_datamodel/migrations/forecast/versions/d2f031f24593_.py b/nowcasting_datamodel/migrations/forecast/versions/d2f031f24593_.py new file mode 100644 index 00000000..c4f64547 --- /dev/null +++ b/nowcasting_datamodel/migrations/forecast/versions/d2f031f24593_.py @@ -0,0 +1,43 @@ +"""empty message + +Revision ID: d2f031f24593 +Revises: 14e1747b9710 +Create Date: 2022-03-21 15:56:09.757720 + +""" +from alembic import op +import sqlalchemy as sa + + +# revision identifiers, used by Alembic. +revision = 'd2f031f24593' +down_revision = '14e1747b9710' +branch_labels = None +depends_on = None + + +def upgrade(): + # ### commands auto generated by Alembic - please adjust! ### + op.create_table('gsp_yield', + sa.Column('created_utc', sa.DateTime(timezone=True), nullable=True), + sa.Column('id', sa.Integer(), nullable=False), + sa.Column('datetime_utc', sa.DateTime(), nullable=True), + sa.Column('solar_generation_kw', sa.String(), nullable=True), + sa.Column('regime', sa.String(), nullable=True), + sa.Column('location_id', sa.Integer(), nullable=True), + sa.ForeignKeyConstraint(['location_id'], ['location.id'], ), + sa.PrimaryKeyConstraint('id') + ) + op.create_index(op.f('ix_gsp_yield_datetime_utc'), 'gsp_yield', ['datetime_utc'], unique=False) + op.create_index('ix_gsp_yield_datetime_utc_desc', 'gsp_yield', [sa.text('datetime_utc DESC')], unique=False) + op.create_index(op.f('ix_gsp_yield_location_id'), 'gsp_yield', ['location_id'], unique=False) + # ### end Alembic commands ### + + +def downgrade(): + # ### commands auto generated by Alembic - please adjust! ### + op.drop_index(op.f('ix_gsp_yield_location_id'), table_name='gsp_yield') + op.drop_index('ix_gsp_yield_datetime_utc_desc', table_name='gsp_yield') + op.drop_index(op.f('ix_gsp_yield_datetime_utc'), table_name='gsp_yield') + op.drop_table('gsp_yield') + # ### end Alembic commands ### From 9cf1fbb879bd553ae112a135b6d17683bcc23556 Mon Sep 17 00:00:00 2001 From: "pre-commit-ci[bot]" <66853113+pre-commit-ci[bot]@users.noreply.github.com> Date: Mon, 21 Mar 2022 15:57:03 +0000 Subject: [PATCH 19/20] [pre-commit.ci] auto fixes from pre-commit.com hooks for more information, see https://pre-commit.ci --- .../forecast/versions/d2f031f24593_.py | 45 ++++++++++--------- 1 file changed, 25 insertions(+), 20 deletions(-) diff --git a/nowcasting_datamodel/migrations/forecast/versions/d2f031f24593_.py b/nowcasting_datamodel/migrations/forecast/versions/d2f031f24593_.py index c4f64547..ce14c3c1 100644 --- a/nowcasting_datamodel/migrations/forecast/versions/d2f031f24593_.py +++ b/nowcasting_datamodel/migrations/forecast/versions/d2f031f24593_.py @@ -5,39 +5,44 @@ Create Date: 2022-03-21 15:56:09.757720 """ -from alembic import op import sqlalchemy as sa - +from alembic import op # revision identifiers, used by Alembic. -revision = 'd2f031f24593' -down_revision = '14e1747b9710' +revision = "d2f031f24593" +down_revision = "14e1747b9710" branch_labels = None depends_on = None def upgrade(): # ### commands auto generated by Alembic - please adjust! ### - op.create_table('gsp_yield', - sa.Column('created_utc', sa.DateTime(timezone=True), nullable=True), - sa.Column('id', sa.Integer(), nullable=False), - sa.Column('datetime_utc', sa.DateTime(), nullable=True), - sa.Column('solar_generation_kw', sa.String(), nullable=True), - sa.Column('regime', sa.String(), nullable=True), - sa.Column('location_id', sa.Integer(), nullable=True), - sa.ForeignKeyConstraint(['location_id'], ['location.id'], ), - sa.PrimaryKeyConstraint('id') + op.create_table( + "gsp_yield", + sa.Column("created_utc", sa.DateTime(timezone=True), nullable=True), + sa.Column("id", sa.Integer(), nullable=False), + sa.Column("datetime_utc", sa.DateTime(), nullable=True), + sa.Column("solar_generation_kw", sa.String(), nullable=True), + sa.Column("regime", sa.String(), nullable=True), + sa.Column("location_id", sa.Integer(), nullable=True), + sa.ForeignKeyConstraint( + ["location_id"], + ["location.id"], + ), + sa.PrimaryKeyConstraint("id"), + ) + op.create_index(op.f("ix_gsp_yield_datetime_utc"), "gsp_yield", ["datetime_utc"], unique=False) + op.create_index( + "ix_gsp_yield_datetime_utc_desc", "gsp_yield", [sa.text("datetime_utc DESC")], unique=False ) - op.create_index(op.f('ix_gsp_yield_datetime_utc'), 'gsp_yield', ['datetime_utc'], unique=False) - op.create_index('ix_gsp_yield_datetime_utc_desc', 'gsp_yield', [sa.text('datetime_utc DESC')], unique=False) - op.create_index(op.f('ix_gsp_yield_location_id'), 'gsp_yield', ['location_id'], unique=False) + op.create_index(op.f("ix_gsp_yield_location_id"), "gsp_yield", ["location_id"], unique=False) # ### end Alembic commands ### def downgrade(): # ### commands auto generated by Alembic - please adjust! ### - op.drop_index(op.f('ix_gsp_yield_location_id'), table_name='gsp_yield') - op.drop_index('ix_gsp_yield_datetime_utc_desc', table_name='gsp_yield') - op.drop_index(op.f('ix_gsp_yield_datetime_utc'), table_name='gsp_yield') - op.drop_table('gsp_yield') + op.drop_index(op.f("ix_gsp_yield_location_id"), table_name="gsp_yield") + op.drop_index("ix_gsp_yield_datetime_utc_desc", table_name="gsp_yield") + op.drop_index(op.f("ix_gsp_yield_datetime_utc"), table_name="gsp_yield") + op.drop_table("gsp_yield") # ### end Alembic commands ### From b6106701f7ad7c5c29543ee4da0d5e7f46f0ec9b Mon Sep 17 00:00:00 2001 From: peterdudfield Date: Mon, 21 Mar 2022 15:59:08 +0000 Subject: [PATCH 20/20] noqa on migrations --- .../migrations/forecast/versions/d2f031f24593_.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/nowcasting_datamodel/migrations/forecast/versions/d2f031f24593_.py b/nowcasting_datamodel/migrations/forecast/versions/d2f031f24593_.py index c4f64547..d97362b2 100644 --- a/nowcasting_datamodel/migrations/forecast/versions/d2f031f24593_.py +++ b/nowcasting_datamodel/migrations/forecast/versions/d2f031f24593_.py @@ -16,7 +16,7 @@ depends_on = None -def upgrade(): +def upgrade(): # noqa 103 # ### commands auto generated by Alembic - please adjust! ### op.create_table('gsp_yield', sa.Column('created_utc', sa.DateTime(timezone=True), nullable=True), @@ -34,7 +34,7 @@ def upgrade(): # ### end Alembic commands ### -def downgrade(): +def downgrade(): # noqa 103 # ### commands auto generated by Alembic - please adjust! ### op.drop_index(op.f('ix_gsp_yield_location_id'), table_name='gsp_yield') op.drop_index('ix_gsp_yield_datetime_utc_desc', table_name='gsp_yield')