From cbb862a18e4785321ec2f00fb685e6985789f0a3 Mon Sep 17 00:00:00 2001 From: Melanie Ecker Date: Mon, 8 Nov 2021 15:39:37 +0100 Subject: [PATCH 1/7] erster Modellentwurf --- ensysmod/model/__init__.py | 8 ++++++++ ensysmod/model/capacities.py | 12 ++++++++++++ ensysmod/model/consumptions.py | 12 ++++++++++++ ensysmod/model/energyConversions.py | 9 +++++++++ ensysmod/model/energySinks.py | 9 +++++++++ ensysmod/model/energySources.py | 9 +++++++++ ensysmod/model/energyStorages.py | 9 +++++++++ ensysmod/model/generations.py | 11 +++++++++++ ensysmod/model/regions.py | 9 +++++++++ 9 files changed, 88 insertions(+) create mode 100644 ensysmod/model/capacities.py create mode 100644 ensysmod/model/consumptions.py create mode 100644 ensysmod/model/energyConversions.py create mode 100644 ensysmod/model/energySinks.py create mode 100644 ensysmod/model/energySources.py create mode 100644 ensysmod/model/energyStorages.py create mode 100644 ensysmod/model/generations.py create mode 100644 ensysmod/model/regions.py diff --git a/ensysmod/model/__init__.py b/ensysmod/model/__init__.py index 1fcdc69..3f5bfbf 100644 --- a/ensysmod/model/__init__.py +++ b/ensysmod/model/__init__.py @@ -2,3 +2,11 @@ This package contains all models in database """ from .user import User +from .regions import Regions +from .energySources import EnergySource +from .energyStorages import EnergyStorage +from .energySinks import EnergySinks +from .energyConversions import EnergyConversion +from .capacities import Capacities +from .generations import Generations +from .consumptions import Consumptions \ No newline at end of file diff --git a/ensysmod/model/capacities.py b/ensysmod/model/capacities.py new file mode 100644 index 0000000..68f9417 --- /dev/null +++ b/ensysmod/model/capacities.py @@ -0,0 +1,12 @@ +from sqlalchemy import Column, Integer +from sqlalchemy.sql.schema import ForeignKey + +from ensysmod.database.base_class import Base + + +class Capacities(Base): + id = Column(Integer, primary_key=True, index=True) + ref_region = Column(Integer, ForeignKey("regions.id"), index=True, nullable=False) + ref_source = Column(Integer, ForeignKey("energySources.id"), index=True, nullable=False) + year = Column(Integer, nullable=False) + quantity = Column(Integer, nullable=False) diff --git a/ensysmod/model/consumptions.py b/ensysmod/model/consumptions.py new file mode 100644 index 0000000..7e987ad --- /dev/null +++ b/ensysmod/model/consumptions.py @@ -0,0 +1,12 @@ +from sqlalchemy import Column, Integer +from sqlalchemy.sql.schema import ForeignKey +from ensysmod.database.base_class import Base + + +class Consumptions(Base): + id = Column(Integer, primary_key=True, index=True) + ref_region = Column(Integer, ForeignKey("regions.id"), index=True, nullable=False) + ref_source = Column(Integer, ForeignKey("energySources.id"), index=True, nullable=False) + ref_sink = Column(Integer, ForeignKey("energySink.id"), index=True, nullable=False) + year = Column(Integer, nullable=False) + quantity = Column(Integer, nullable=False) diff --git a/ensysmod/model/energyConversions.py b/ensysmod/model/energyConversions.py new file mode 100644 index 0000000..c862ddf --- /dev/null +++ b/ensysmod/model/energyConversions.py @@ -0,0 +1,9 @@ +from sqlalchemy import Column, Integer, String + +from ensysmod.database.base_class import Base + + +class EnergyConversion(Base): + id = Column(Integer, primary_key=True, index=True) + name = Column(String, unique=True, index=True, nullable=False) + descripition = Column(String, nullable=True) diff --git a/ensysmod/model/energySinks.py b/ensysmod/model/energySinks.py new file mode 100644 index 0000000..0d60bda --- /dev/null +++ b/ensysmod/model/energySinks.py @@ -0,0 +1,9 @@ +from sqlalchemy import Column, Integer, String + +from ensysmod.database.base_class import Base + + +class EnergySinks(Base): + id = Column(Integer, primary_key=True, index=True) + name = Column(String, unique=True, index=True, nullable=False) + description = Column(String, nullable=True) diff --git a/ensysmod/model/energySources.py b/ensysmod/model/energySources.py new file mode 100644 index 0000000..639f4f8 --- /dev/null +++ b/ensysmod/model/energySources.py @@ -0,0 +1,9 @@ +from sqlalchemy import Column, Integer, String + +from ensysmod.database.base_class import Base + + +class EnergySource(Base): + id = Column(Integer, primary_key=True, index=True) + name = Column(String, unique=True, index=True, nullable=False) + description = Column(String, nullable=True) diff --git a/ensysmod/model/energyStorages.py b/ensysmod/model/energyStorages.py new file mode 100644 index 0000000..216c87c --- /dev/null +++ b/ensysmod/model/energyStorages.py @@ -0,0 +1,9 @@ +from sqlalchemy import Column, Integer, String + +from ensysmod.database.base_class import Base + + +class EnergyStorage(Base): + id = Column(Integer, primary_key=True, index=True) + name = Column(String, unique=True, index=True, nullable=False) + description = Column(String, nullable=True) diff --git a/ensysmod/model/generations.py b/ensysmod/model/generations.py new file mode 100644 index 0000000..6a2ea60 --- /dev/null +++ b/ensysmod/model/generations.py @@ -0,0 +1,11 @@ +from sqlalchemy import Column, Integer +from sqlalchemy.sql.schema import ForeignKey + +from ensysmod.database.base_class import Base + +class Generations(Base): + id = Column(Integer, primary_key=True, index=True) + ref_region = Column(Integer, ForeignKey("regions.id"), index=True, nullable=False) + ref_source = Column(Integer, ForeignKey("energySources.id"), index=True, nullable=False) + year = Column(Integer, nullable=False) + quantity = Column(Integer, nullable=False) diff --git a/ensysmod/model/regions.py b/ensysmod/model/regions.py new file mode 100644 index 0000000..d9637ae --- /dev/null +++ b/ensysmod/model/regions.py @@ -0,0 +1,9 @@ +from sqlalchemy import Column, Integer, String + +from ensysmod.database.base_class import Base + + +class Regions(Base): + id = Column(Integer, primary_key=True, index=True) + name = Column(String, unique=True, index=True, nullable=False) + parentRegion = Column(String, nullable=True) From 246eeb934b6ba11413fe319f3e0777b276005581 Mon Sep 17 00:00:00 2001 From: Paule <44635962+V3lop5@users.noreply.github.com> Date: Thu, 18 Nov 2021 09:27:39 +0100 Subject: [PATCH 2/7] Fixed foreign key table names --- ensysmod/model/__init__.py | 16 ++++++++-------- ensysmod/model/{capacities.py => capacity.py} | 6 +++--- .../model/{consumptions.py => consumption.py} | 8 ++++---- ...energyConversions.py => energy_conversion.py} | 2 +- .../model/{energySinks.py => energy_sink.py} | 2 +- .../model/{energySources.py => energy_source.py} | 0 .../{energyStorages.py => energy_storage.py} | 0 ensysmod/model/{generations.py => generation.py} | 7 ++++--- ensysmod/model/{regions.py => region.py} | 4 ++-- 9 files changed, 23 insertions(+), 22 deletions(-) rename ensysmod/model/{capacities.py => capacity.py} (57%) rename ensysmod/model/{consumptions.py => consumption.py} (52%) rename ensysmod/model/{energyConversions.py => energy_conversion.py} (83%) rename ensysmod/model/{energySinks.py => energy_sink.py} (91%) rename ensysmod/model/{energySources.py => energy_source.py} (100%) rename ensysmod/model/{energyStorages.py => energy_storage.py} (100%) rename ensysmod/model/{generations.py => generation.py} (57%) rename ensysmod/model/{regions.py => region.py} (75%) diff --git a/ensysmod/model/__init__.py b/ensysmod/model/__init__.py index 3f5bfbf..2d0f626 100644 --- a/ensysmod/model/__init__.py +++ b/ensysmod/model/__init__.py @@ -2,11 +2,11 @@ This package contains all models in database """ from .user import User -from .regions import Regions -from .energySources import EnergySource -from .energyStorages import EnergyStorage -from .energySinks import EnergySinks -from .energyConversions import EnergyConversion -from .capacities import Capacities -from .generations import Generations -from .consumptions import Consumptions \ No newline at end of file +from .region import Region +from .energy_source import EnergySource +from .energy_storage import EnergyStorage +from .energy_sink import EnergySink +from .energy_conversion import EnergyConversion +from .capacity import Capacity +from .generation import Generation +from .consumption import Consumption diff --git a/ensysmod/model/capacities.py b/ensysmod/model/capacity.py similarity index 57% rename from ensysmod/model/capacities.py rename to ensysmod/model/capacity.py index 68f9417..5a93098 100644 --- a/ensysmod/model/capacities.py +++ b/ensysmod/model/capacity.py @@ -4,9 +4,9 @@ from ensysmod.database.base_class import Base -class Capacities(Base): +class Capacity(Base): id = Column(Integer, primary_key=True, index=True) - ref_region = Column(Integer, ForeignKey("regions.id"), index=True, nullable=False) - ref_source = Column(Integer, ForeignKey("energySources.id"), index=True, nullable=False) + ref_region = Column(Integer, ForeignKey("region.id"), index=True, nullable=False) + ref_source = Column(Integer, ForeignKey("energysource.id"), index=True, nullable=False) year = Column(Integer, nullable=False) quantity = Column(Integer, nullable=False) diff --git a/ensysmod/model/consumptions.py b/ensysmod/model/consumption.py similarity index 52% rename from ensysmod/model/consumptions.py rename to ensysmod/model/consumption.py index 7e987ad..59a40e1 100644 --- a/ensysmod/model/consumptions.py +++ b/ensysmod/model/consumption.py @@ -3,10 +3,10 @@ from ensysmod.database.base_class import Base -class Consumptions(Base): +class Consumption(Base): id = Column(Integer, primary_key=True, index=True) - ref_region = Column(Integer, ForeignKey("regions.id"), index=True, nullable=False) - ref_source = Column(Integer, ForeignKey("energySources.id"), index=True, nullable=False) - ref_sink = Column(Integer, ForeignKey("energySink.id"), index=True, nullable=False) + ref_region = Column(Integer, ForeignKey("region.id"), index=True, nullable=False) + ref_source = Column(Integer, ForeignKey("energysource.id"), index=True, nullable=False) + ref_sink = Column(Integer, ForeignKey("energysink.id"), index=True, nullable=False) year = Column(Integer, nullable=False) quantity = Column(Integer, nullable=False) diff --git a/ensysmod/model/energyConversions.py b/ensysmod/model/energy_conversion.py similarity index 83% rename from ensysmod/model/energyConversions.py rename to ensysmod/model/energy_conversion.py index c862ddf..dfc79a0 100644 --- a/ensysmod/model/energyConversions.py +++ b/ensysmod/model/energy_conversion.py @@ -6,4 +6,4 @@ class EnergyConversion(Base): id = Column(Integer, primary_key=True, index=True) name = Column(String, unique=True, index=True, nullable=False) - descripition = Column(String, nullable=True) + description = Column(String, nullable=True) diff --git a/ensysmod/model/energySinks.py b/ensysmod/model/energy_sink.py similarity index 91% rename from ensysmod/model/energySinks.py rename to ensysmod/model/energy_sink.py index 0d60bda..2f7c66c 100644 --- a/ensysmod/model/energySinks.py +++ b/ensysmod/model/energy_sink.py @@ -3,7 +3,7 @@ from ensysmod.database.base_class import Base -class EnergySinks(Base): +class EnergySink(Base): id = Column(Integer, primary_key=True, index=True) name = Column(String, unique=True, index=True, nullable=False) description = Column(String, nullable=True) diff --git a/ensysmod/model/energySources.py b/ensysmod/model/energy_source.py similarity index 100% rename from ensysmod/model/energySources.py rename to ensysmod/model/energy_source.py diff --git a/ensysmod/model/energyStorages.py b/ensysmod/model/energy_storage.py similarity index 100% rename from ensysmod/model/energyStorages.py rename to ensysmod/model/energy_storage.py diff --git a/ensysmod/model/generations.py b/ensysmod/model/generation.py similarity index 57% rename from ensysmod/model/generations.py rename to ensysmod/model/generation.py index 6a2ea60..bb1e1ae 100644 --- a/ensysmod/model/generations.py +++ b/ensysmod/model/generation.py @@ -3,9 +3,10 @@ from ensysmod.database.base_class import Base -class Generations(Base): + +class Generation(Base): id = Column(Integer, primary_key=True, index=True) - ref_region = Column(Integer, ForeignKey("regions.id"), index=True, nullable=False) - ref_source = Column(Integer, ForeignKey("energySources.id"), index=True, nullable=False) + ref_region = Column(Integer, ForeignKey("region.id"), index=True, nullable=False) + ref_source = Column(Integer, ForeignKey("energysource.id"), index=True, nullable=False) year = Column(Integer, nullable=False) quantity = Column(Integer, nullable=False) diff --git a/ensysmod/model/regions.py b/ensysmod/model/region.py similarity index 75% rename from ensysmod/model/regions.py rename to ensysmod/model/region.py index d9637ae..3759b31 100644 --- a/ensysmod/model/regions.py +++ b/ensysmod/model/region.py @@ -3,7 +3,7 @@ from ensysmod.database.base_class import Base -class Regions(Base): +class Region(Base): id = Column(Integer, primary_key=True, index=True) name = Column(String, unique=True, index=True, nullable=False) - parentRegion = Column(String, nullable=True) + parent_region = Column(String, nullable=True) From a9e24fa89efda1063b49dfd5c2318c44c7a1be0b Mon Sep 17 00:00:00 2001 From: Paule <44635962+V3lop5@users.noreply.github.com> Date: Thu, 18 Nov 2021 09:49:12 +0100 Subject: [PATCH 3/7] Added schema and crud for energy conversion --- ensysmod/crud/__init__.py | 1 + ensysmod/crud/energy_conversion.py | 11 ++++++++ ensysmod/schemas/__init__.py | 1 + ensysmod/schemas/energy_conversion.py | 37 +++++++++++++++++++++++++++ 4 files changed, 50 insertions(+) create mode 100644 ensysmod/crud/energy_conversion.py create mode 100644 ensysmod/schemas/energy_conversion.py diff --git a/ensysmod/crud/__init__.py b/ensysmod/crud/__init__.py index e590818..7d464b2 100644 --- a/ensysmod/crud/__init__.py +++ b/ensysmod/crud/__init__.py @@ -1,4 +1,5 @@ """ This package contains the CRUD operations (CREATE, READ, UPDATE, DELETE) for each repository/table in database. """ +from .energy_conversion import energy_conversion from .user import user diff --git a/ensysmod/crud/energy_conversion.py b/ensysmod/crud/energy_conversion.py new file mode 100644 index 0000000..12575e8 --- /dev/null +++ b/ensysmod/crud/energy_conversion.py @@ -0,0 +1,11 @@ +from ensysmod.crud.base import CRUDBase +from ensysmod.model import EnergyConversion +from ensysmod.schemas import EnergyConversionCreate, EnergyConversionUpdate + + +# noinspection PyMethodMayBeStatic,PyArgumentList +class CRUDEnergyConversion(CRUDBase[EnergyConversion, EnergyConversionCreate, EnergyConversionUpdate]): + pass + + +energy_conversion = CRUDEnergyConversion(EnergyConversion) diff --git a/ensysmod/schemas/__init__.py b/ensysmod/schemas/__init__.py index ac080fc..e3f2dae 100644 --- a/ensysmod/schemas/__init__.py +++ b/ensysmod/schemas/__init__.py @@ -3,3 +3,4 @@ """ from .token import Token, TokenPayload from .user import User, UserCreate, UserInDB, UserUpdate +from .energy_conversion import EnergyConversion, EnergyConversionCreate, EnergyConversionUpdate, EnergyConversionInDB diff --git a/ensysmod/schemas/energy_conversion.py b/ensysmod/schemas/energy_conversion.py new file mode 100644 index 0000000..2456bb2 --- /dev/null +++ b/ensysmod/schemas/energy_conversion.py @@ -0,0 +1,37 @@ +from typing import Optional + +from pydantic import BaseModel + + +# Shared properties +class EnergyConversionBase(BaseModel): + name: Optional[str] = None + + +# Properties to receive via API on creation +class EnergyConversionCreate(EnergyConversionBase): + name: str + description: Optional[str] = None + + +# Properties to receive via API on update +class EnergyConversionUpdate(EnergyConversionBase): + name: Optional[str] = None + description: Optional[str] = None + + +class EnergyConversionInDBBase(EnergyConversionBase): + id: Optional[int] = None + + class Config: + orm_mode = True + + +# Additional properties to return via API +class EnergyConversion(EnergyConversionInDBBase): + pass + + +# Additional properties stored in DB +class EnergyConversionInDB(EnergyConversionInDBBase): + description: Optional[str] = None From 50d3aa7c711590aa07a28ec4d98b7bfcdd29dfb0 Mon Sep 17 00:00:00 2001 From: Paule <44635962+V3lop5@users.noreply.github.com> Date: Thu, 18 Nov 2021 10:00:49 +0100 Subject: [PATCH 4/7] Fixed typo --- tests/__init__.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tests/__init__.py b/tests/__init__.py index 1304a38..3c603d5 100644 --- a/tests/__init__.py +++ b/tests/__init__.py @@ -2,4 +2,4 @@ # Override env variables os.environ['SQLALCHEMY_DATABASE_URI'] = "sqlite://" -os.environ['SERVER_NAME'] = "ensysmod Test" +os.environ['SERVER_NAME'] = "EnSysMod Test" From fd4ac9faaacafc67192a6c06781a65c207434eb1 Mon Sep 17 00:00:00 2001 From: Paule <44635962+V3lop5@users.noreply.github.com> Date: Thu, 18 Nov 2021 10:26:01 +0100 Subject: [PATCH 5/7] Added tests for database test --- tests/crud/test_energy_conversion.py | 12 +++++++++ tests/database/__init__.py | 0 tests/database/test_tables.py | 38 ++++++++++++++++++++++++++++ 3 files changed, 50 insertions(+) create mode 100644 tests/crud/test_energy_conversion.py create mode 100644 tests/database/__init__.py create mode 100644 tests/database/test_tables.py diff --git a/tests/crud/test_energy_conversion.py b/tests/crud/test_energy_conversion.py new file mode 100644 index 0000000..04b6f90 --- /dev/null +++ b/tests/crud/test_energy_conversion.py @@ -0,0 +1,12 @@ +from sqlalchemy.orm import Session + +from ensysmod import crud +from ensysmod.schemas import EnergyConversionCreate + + +def test_create_energy_conversion(db: Session): + create = EnergyConversionCreate(name="test_energy_conversion", description="test_energy_conversion desc") + energy_conversion = crud.energy_conversion.create(db, obj_in=create) + assert energy_conversion.name == "test_energy_conversion" + assert energy_conversion.description == "test_energy_conversion desc" + diff --git a/tests/database/__init__.py b/tests/database/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/tests/database/test_tables.py b/tests/database/test_tables.py new file mode 100644 index 0000000..607deaa --- /dev/null +++ b/tests/database/test_tables.py @@ -0,0 +1,38 @@ +from sqlalchemy.orm import Session + + +def check_table_exists(cursor, table_name): + cursor.execute(f"SELECT * FROM sqlite_master WHERE type='table' AND name='{table_name}'") + return len(cursor.fetchall()) == 1 + + +def test_table_user(db: Session): + assert check_table_exists(db.bind.raw_connection().cursor(), 'user') + + +def test_table_consumption(db: Session): + assert check_table_exists(db.bind.raw_connection().cursor(), 'consumption') + + +def test_table_energyconversion(db: Session): + assert check_table_exists(db.bind.raw_connection().cursor(), 'energyconversion') + + +def test_table_energysink(db: Session): + assert check_table_exists(db.bind.raw_connection().cursor(), 'energysink') + + +def test_table_energysource(db: Session): + assert check_table_exists(db.bind.raw_connection().cursor(), 'energysource') + + +def test_table_energystorage(db: Session): + assert check_table_exists(db.bind.raw_connection().cursor(), 'energystorage') + + +def test_table_generation(db: Session): + assert check_table_exists(db.bind.raw_connection().cursor(), 'generation') + + +def test_table_region(db: Session): + assert check_table_exists(db.bind.raw_connection().cursor(), 'region') From 3e093b85592d7ce779d2314b1c821f5d9ca01c87 Mon Sep 17 00:00:00 2001 From: Melanie Ecker Date: Sat, 20 Nov 2021 14:27:01 +0100 Subject: [PATCH 6/7] Added database functions and schemas --- ensysmod/crud/capacity.py | 34 ++++++++++++++++++++++ ensysmod/crud/consumption.py | 39 +++++++++++++++++++++++++ ensysmod/crud/energy_sink.py | 14 +++++++++ ensysmod/crud/energy_source.py | 14 +++++++++ ensysmod/crud/energy_storage.py | 11 +++++++ ensysmod/crud/generation.py | 35 +++++++++++++++++++++++ ensysmod/crud/region.py | 15 ++++++++++ ensysmod/schemas/capacity.py | 43 ++++++++++++++++++++++++++++ ensysmod/schemas/consumption.py | 46 ++++++++++++++++++++++++++++++ ensysmod/schemas/energy_sink.py | 37 ++++++++++++++++++++++++ ensysmod/schemas/energy_source.py | 37 ++++++++++++++++++++++++ ensysmod/schemas/energy_storage.py | 37 ++++++++++++++++++++++++ ensysmod/schemas/generation.py | 43 ++++++++++++++++++++++++++++ ensysmod/schemas/region.py | 37 ++++++++++++++++++++++++ 14 files changed, 442 insertions(+) create mode 100644 ensysmod/crud/capacity.py create mode 100644 ensysmod/crud/consumption.py create mode 100644 ensysmod/crud/energy_sink.py create mode 100644 ensysmod/crud/energy_source.py create mode 100644 ensysmod/crud/energy_storage.py create mode 100644 ensysmod/crud/generation.py create mode 100644 ensysmod/crud/region.py create mode 100644 ensysmod/schemas/capacity.py create mode 100644 ensysmod/schemas/consumption.py create mode 100644 ensysmod/schemas/energy_sink.py create mode 100644 ensysmod/schemas/energy_source.py create mode 100644 ensysmod/schemas/energy_storage.py create mode 100644 ensysmod/schemas/generation.py create mode 100644 ensysmod/schemas/region.py diff --git a/ensysmod/crud/capacity.py b/ensysmod/crud/capacity.py new file mode 100644 index 0000000..cdbc776 --- /dev/null +++ b/ensysmod/crud/capacity.py @@ -0,0 +1,34 @@ +from ensysmod.crud.base import CRUDBase +from ensysmod.model import Capacity, capacity +from ensysmod.schemas import CapacityCreate, CapacityUpdate +from ensysmod.crud.region import region +from ensysmod.crud.energy_source import energy_source +from sqlalchemy.orm import Session + + +# noinspection PyMethodMayBeStatic,PyArgumentList +class CRUDCapacity(CRUDBase[Capacity, CapacityCreate, CapacityUpdate]): + def create(self, db: Session, *, capacity: CapacityCreate) -> Capacity: + #DB-getRegion mit Namen xy + l_region = region.get_by_name(capacity.region) + #DB-getSource mit Namen xy + l_source = energy_source.get_by_name(capacity.source) + #wenn beide nicht null sind: + if (not l_region): + raise ValueError("Region not found!") + if (not l_source): + raise ValueError("Energy-Source not found!") + db_obj = Capacity( + year=capacity.year, + quantity=capacity.quantity, + region=l_region, + source=l_source + ) + db.add(db_obj) + db.commit() + db.refresh(db_obj) + return db_obj + + + +capacity = CRUDCapacity(Capacity) diff --git a/ensysmod/crud/consumption.py b/ensysmod/crud/consumption.py new file mode 100644 index 0000000..bc7e5ec --- /dev/null +++ b/ensysmod/crud/consumption.py @@ -0,0 +1,39 @@ +from ensysmod.crud.base import CRUDBase +from ensysmod.model import Consumption +from ensysmod.schemas import ConsumptionCreate, ConsumptionUpdate +from ensysmod.crud.region import region +from ensysmod.crud.energy_source import energy_source +from ensysmod.crud.energy_sink import energy_sink +from sqlalchemy.orm import Session + + +# noinspection PyMethodMayBeStatic,PyArgumentList +class CRUDConsumption(CRUDBase[Consumption, ConsumptionCreate, ConsumptionUpdate]): + def create(self, db: Session, *, consumption: ConsumptionCreate) -> Consumption: + #DB-getRegion mit Namen xy + l_region = region.get_by_name(consumption.region) + #DB-getSource mit Namen xy + l_source = energy_source.get_by_name(consumption.source) + #DB-getSink mit Namen xy + l_sink = energy_sink.get_by_name(consumption.sink) + #wenn beide nicht null sind: + if (not l_region): + raise ValueError("Region not found!") + if (not l_source): + raise ValueError("Energy-Source not found!") + if (not l_sink): + raise ValueError("Energy-Sink not found!") + db_obj = Consumption( + year=consumption.year, + quantity=consumption.quantity, + region=l_region, + source=l_source, + sink=l_sink + ) + db.add(db_obj) + db.commit() + db.refresh(db_obj) + return db_obj + + +consumption = CRUDConsumption(Consumption) diff --git a/ensysmod/crud/energy_sink.py b/ensysmod/crud/energy_sink.py new file mode 100644 index 0000000..9891fe8 --- /dev/null +++ b/ensysmod/crud/energy_sink.py @@ -0,0 +1,14 @@ +from ensysmod.crud.base import CRUDBase +from ensysmod.model import EnergySink +from ensysmod.schemas import EnergySinkCreate, EnergySinkUpdate +from sqlalchemy.orm import Session +from typing import Optional + + +# noinspection PyMethodMayBeStatic,PyArgumentList +class CRUDEnergySink(CRUDBase[EnergySink, EnergySinkCreate, EnergySinkUpdate]): + def get_by_name(self, db: Session, *, name: str) -> Optional[EnergySink]: + return db.query(EnergySink).filter(EnergySink.name == name).first() + + +energy_sink = CRUDEnergySink(EnergySink) diff --git a/ensysmod/crud/energy_source.py b/ensysmod/crud/energy_source.py new file mode 100644 index 0000000..1d809cf --- /dev/null +++ b/ensysmod/crud/energy_source.py @@ -0,0 +1,14 @@ +from ensysmod.crud.base import CRUDBase +from ensysmod.model import EnergySource +from ensysmod.schemas import EnergySourceCreate, EnergySourceUpdate +from sqlalchemy.orm import Session +from typing import Optional + + +# noinspection PyMethodMayBeStatic,PyArgumentList +class CRUDEnergySource(CRUDBase[EnergySource, EnergySourceCreate, EnergySourceUpdate]): + def get_by_name(self, db: Session, *, name: str) -> Optional[EnergySource]: + return db.query(EnergySource).filter(EnergySource.name == name).first() + + +energy_source = CRUDEnergySource(EnergySource) diff --git a/ensysmod/crud/energy_storage.py b/ensysmod/crud/energy_storage.py new file mode 100644 index 0000000..e689e7d --- /dev/null +++ b/ensysmod/crud/energy_storage.py @@ -0,0 +1,11 @@ +from ensysmod.crud.base import CRUDBase +from ensysmod.model import EnergyStorage +from ensysmod.schemas import EnergyStorageCreate, EnergyStorageUpdate + + +# noinspection PyMethodMayBeStatic,PyArgumentList +class CRUDEnergyStorage(CRUDBase[EnergyStorage, EnergyStorageCreate, EnergyStorageUpdate]): + pass + + +energy_storage = CRUDEnergyStorage(EnergyStorage) diff --git a/ensysmod/crud/generation.py b/ensysmod/crud/generation.py new file mode 100644 index 0000000..db9424e --- /dev/null +++ b/ensysmod/crud/generation.py @@ -0,0 +1,35 @@ +from ensysmod.crud.base import CRUDBase +from ensysmod.model import Generation +from ensysmod.schemas import GenerationCreate, GenerationUpdate +from ensysmod.crud.region import region +from ensysmod.crud.energy_source import energy_source +from sqlalchemy.orm import Session + + +# noinspection PyMethodMayBeStatic,PyArgumentList +class CRUDGeneration(CRUDBase[Generation, GenerationCreate, GenerationUpdate]): + def create(self, db: Session, *, generation: GenerationCreate) -> Generation: + #DB-getRegion mit Namen xy + l_region = region.get_by_name(generation.region) + #DB-getSource mit Namen xy + l_source = energy_source.get_by_name(generation.source) + #wenn beide nicht null sind: + if (not l_region): + raise ValueError("Region not found!") + if (not l_source): + raise ValueError("Energy-Source not found!") + db_obj = Generation( + year=generation.year, + quantity=generation.quantity, + region=l_region, + source=l_source + ) + db.add(db_obj) + db.commit() + db.refresh(db_obj) + return db_obj + + pass + + +generation = CRUDGeneration(Generation) diff --git a/ensysmod/crud/region.py b/ensysmod/crud/region.py new file mode 100644 index 0000000..c62f780 --- /dev/null +++ b/ensysmod/crud/region.py @@ -0,0 +1,15 @@ +from ensysmod.crud.base import CRUDBase +from ensysmod.model import Region +from ensysmod.schemas import RegionCreate, RegionUpdate +from sqlalchemy.orm import Session +from typing import Optional + + +# noinspection PyMethodMayBeStatic,PyArgumentList +class CRUDRegion(CRUDBase[Region, RegionCreate, RegionUpdate]): + def get_by_name(self, db: Session, *, name: str) -> Optional[Region]: + return db.query(Region).filter(Region.name == name).first() + + + +region = CRUDRegion(Region) diff --git a/ensysmod/schemas/capacity.py b/ensysmod/schemas/capacity.py new file mode 100644 index 0000000..4231383 --- /dev/null +++ b/ensysmod/schemas/capacity.py @@ -0,0 +1,43 @@ +from typing import Optional + +from pydantic import BaseModel + + +# Shared properties +class CapacityBase(BaseModel): + year: Optional[str] = None + quantity: Optional[str] = None + + +# Properties to receive via API on creation +class CapacityCreate(CapacityBase): + year: int + quantity: int + region: str + source: str + + +# Properties to receive via API on update +class CapacityUpdate(CapacityBase): + year: Optional[int] = None + quantity: Optional[int] = None + region: Optional[str] = None + source: Optional[str] = None + + +class CapacityInDBBase(CapacityBase): + id: Optional[int] = None + + class Config: + orm_mode = True + + +# Additional properties to return via API +class Capacity(CapacityInDBBase): + pass + + +# Additional properties stored in DB +class CapacityInDB(CapacityInDBBase): + region: Optional[str] = None + source: Optional[str] = None diff --git a/ensysmod/schemas/consumption.py b/ensysmod/schemas/consumption.py new file mode 100644 index 0000000..d2aa9e6 --- /dev/null +++ b/ensysmod/schemas/consumption.py @@ -0,0 +1,46 @@ +from typing import Optional + +from pydantic import BaseModel + + +# Shared properties +class ConsumptionBase(BaseModel): + year: Optional[int] = None + quantity: Optional[int] = None + + +# Properties to receive via API on creation +class consumptionCreate(consumptionBase): + year: int + quantity: int + region: str + source: str + sink: str + + +# Properties to receive via API on update +class consumptionUpdate(consumptionBase): + year: Optional[id] = None + quantity: Optional[id] = None + region: Optional[id] = None + source: Optional[id] = None + sink: Optional[id] = None + + +class consumptionInDBBase(consumptionBase): + id: Optional[int] = None + + class Config: + orm_mode = True + + +# Additional properties to return via API +class consumption(consumptionInDBBase): + pass + + +# Additional properties stored in DB +class consumptionInDB(consumptionInDBBase): + region: Optional[str] = None + source: Optional[str] = None + sink: Optional[str] = None diff --git a/ensysmod/schemas/energy_sink.py b/ensysmod/schemas/energy_sink.py new file mode 100644 index 0000000..ddafe5b --- /dev/null +++ b/ensysmod/schemas/energy_sink.py @@ -0,0 +1,37 @@ +from typing import Optional + +from pydantic import BaseModel + + +# Shared properties +class EnergySinkBase(BaseModel): + name: Optional[str] = None + + +# Properties to receive via API on creation +class EnergySinkCreate(EnergySinkBase): + name: str + description: Optional[str] = None + + +# Properties to receive via API on update +class EnergySinkUpdate(EnergySinkBase): + name: Optional[str] = None + description: Optional[str] = None + + +class EnergySinkInDBBase(EnergySinkBase): + id: Optional[int] = None + + class Config: + orm_mode = True + + +# Additional properties to return via API +class EnergySink(EnergySinkInDBBase): + pass + + +# Additional properties stored in DB +class EnergySinkInDB(EnergySinkInDBBase): + description: Optional[str] = None diff --git a/ensysmod/schemas/energy_source.py b/ensysmod/schemas/energy_source.py new file mode 100644 index 0000000..583c4de --- /dev/null +++ b/ensysmod/schemas/energy_source.py @@ -0,0 +1,37 @@ +from typing import Optional + +from pydantic import BaseModel + + +# Shared properties +class EnergySourceBase(BaseModel): + name: Optional[str] = None + + +# Properties to receive via API on creation +class EnergySourceCreate(EnergySourceBase): + name: str + description: Optional[str] = None + + +# Properties to receive via API on update +class EnergySourceUpdate(EnergySourceBase): + name: Optional[str] = None + description: Optional[str] = None + + +class EnergySourceInDBBase(EnergySourceBase): + id: Optional[int] = None + + class Config: + orm_mode = True + + +# Additional properties to return via API +class EnergySource(EnergySourceInDBBase): + pass + + +# Additional properties stored in DB +class EnergySourceInDB(EnergySourceInDBBase): + description: Optional[str] = None diff --git a/ensysmod/schemas/energy_storage.py b/ensysmod/schemas/energy_storage.py new file mode 100644 index 0000000..87a5115 --- /dev/null +++ b/ensysmod/schemas/energy_storage.py @@ -0,0 +1,37 @@ +from typing import Optional + +from pydantic import BaseModel + + +# Shared properties +class EnergyStorageBase(BaseModel): + name: Optional[str] = None + + +# Properties to receive via API on creation +class EnergyStorageCreate(EnergyStorageBase): + name: str + description: Optional[str] = None + + +# Properties to receive via API on update +class EnergyStorageUpdate(EnergyStorageBase): + name: Optional[str] = None + description: Optional[str] = None + + +class EnergyStorageInDBBase(EnergyStorageBase): + id: Optional[int] = None + + class Config: + orm_mode = True + + +# Additional properties to return via API +class EnergyStorage(EnergyStorageInDBBase): + pass + + +# Additional properties stored in DB +class EnergyStorageInDB(EnergyStorageInDBBase): + description: Optional[str] = None diff --git a/ensysmod/schemas/generation.py b/ensysmod/schemas/generation.py new file mode 100644 index 0000000..5e8e78d --- /dev/null +++ b/ensysmod/schemas/generation.py @@ -0,0 +1,43 @@ +from typing import Optional + +from pydantic import BaseModel + + +# Shared properties +class GenerationBase(BaseModel): + year: Optional[int] = None + quantity: Optional[int] = None + + +# Properties to receive via API on creation +class GenerationCreate(GenerationBase): + year: int + quantity: int + region: str + source: str + + +# Properties to receive via API on update +class GenerationUpdate(GenerationBase): + year: Optional[int] = None + quantity: Optional[int] = None + region: Optional[str] = None + source: Optional[str] = None + + +class GenerationInDBBase(GenerationBase): + id: Optional[int] = None + + class Config: + orm_mode = True + + +# Additional properties to return via API +class Generation(GenerationInDBBase): + pass + + +# Additional properties stored in DB +class GenerationInDB(GenerationInDBBase): + region: str + source: str diff --git a/ensysmod/schemas/region.py b/ensysmod/schemas/region.py new file mode 100644 index 0000000..82473cb --- /dev/null +++ b/ensysmod/schemas/region.py @@ -0,0 +1,37 @@ +from typing import Optional + +from pydantic import BaseModel + + +# Shared properties +class RegionBase(BaseModel): + name: Optional[str] = None + + +# Properties to receive via API on creation +class RegionCreate(RegionBase): + name: str + parent_region: Optional[str] = None + + +# Properties to receive via API on update +class RegionUpdate(RegionBase): + name: Optional[str] = None + parent_Region: Optional[str] = None + + +class RegionInDBBase(RegionBase): + id: Optional[int] = None + + class Config: + orm_mode = True + + +# Additional properties to return via API +class Region(RegionInDBBase): + pass + + +# Additional properties stored in DB +class RegionInDB(RegionInDBBase): + parent_region: Optional[str] = None From f0d31cceeeb8a702ae0f6b608afdc9baa17a27b2 Mon Sep 17 00:00:00 2001 From: Paule <44635962+V3lop5@users.noreply.github.com> Date: Sat, 20 Nov 2021 16:28:04 +0100 Subject: [PATCH 7/7] Updated database repository and schemas Fixed syntax errors Renamed schemas in consumption.py Resolved linting errors --- ensysmod/api/endpoints/authentication.py | 2 +- ensysmod/crud/__init__.py | 7 ++++ ensysmod/crud/capacity.py | 36 +++++++++---------- ensysmod/crud/consumption.py | 44 +++++++++++------------- ensysmod/crud/energy_sink.py | 6 ++-- ensysmod/crud/energy_source.py | 6 ++-- ensysmod/crud/generation.py | 35 +++++++++---------- ensysmod/crud/region.py | 7 ++-- ensysmod/crud/user.py | 14 ++++---- ensysmod/model/__init__.py | 12 +++---- ensysmod/model/consumption.py | 1 + ensysmod/schemas/__init__.py | 9 ++++- ensysmod/schemas/capacity.py | 4 +-- ensysmod/schemas/consumption.py | 24 ++++++------- tests/crud/test_energy_conversion.py | 1 - tests/crud/test_user.py | 6 ++-- 16 files changed, 113 insertions(+), 101 deletions(-) diff --git a/ensysmod/api/endpoints/authentication.py b/ensysmod/api/endpoints/authentication.py index d10be26..f3af4a0 100644 --- a/ensysmod/api/endpoints/authentication.py +++ b/ensysmod/api/endpoints/authentication.py @@ -43,7 +43,7 @@ def register( raise HTTPException(status_code=status.HTTP_400_BAD_REQUEST, detail="User with that username already exists!") - user = crud.user.create(db, user=request) + user = crud.user.create(db, obj_in=request) return user diff --git a/ensysmod/crud/__init__.py b/ensysmod/crud/__init__.py index 7d464b2..0d11080 100644 --- a/ensysmod/crud/__init__.py +++ b/ensysmod/crud/__init__.py @@ -1,5 +1,12 @@ """ This package contains the CRUD operations (CREATE, READ, UPDATE, DELETE) for each repository/table in database. """ +from .capacity import capacity +from .consumption import consumption from .energy_conversion import energy_conversion +from .energy_sink import energy_sink +from .energy_source import energy_source +from .energy_storage import energy_storage +from .generation import generation +from .region import region from .user import user diff --git a/ensysmod/crud/capacity.py b/ensysmod/crud/capacity.py index cdbc776..c436cf0 100644 --- a/ensysmod/crud/capacity.py +++ b/ensysmod/crud/capacity.py @@ -1,34 +1,32 @@ +from sqlalchemy.orm import Session + +from ensysmod import crud from ensysmod.crud.base import CRUDBase -from ensysmod.model import Capacity, capacity +from ensysmod.model import Capacity from ensysmod.schemas import CapacityCreate, CapacityUpdate -from ensysmod.crud.region import region -from ensysmod.crud.energy_source import energy_source -from sqlalchemy.orm import Session # noinspection PyMethodMayBeStatic,PyArgumentList class CRUDCapacity(CRUDBase[Capacity, CapacityCreate, CapacityUpdate]): - def create(self, db: Session, *, capacity: CapacityCreate) -> Capacity: - #DB-getRegion mit Namen xy - l_region = region.get_by_name(capacity.region) - #DB-getSource mit Namen xy - l_source = energy_source.get_by_name(capacity.source) - #wenn beide nicht null sind: - if (not l_region): - raise ValueError("Region not found!") - if (not l_source): - raise ValueError("Energy-Source not found!") + def create(self, db: Session, *, obj_in: CapacityCreate) -> Capacity: + region_obj = crud.region.get_by_name(obj_in.region) + if not region_obj: + raise ValueError(f"Region '{obj_in.region}' does not exist.") + + source_obj = crud.energy_source.get_by_name(obj_in.source) + if not source_obj: + raise ValueError(f"Energy source '{obj_in.source}' does not exist.") + db_obj = Capacity( - year=capacity.year, - quantity=capacity.quantity, - region=l_region, - source=l_source + year=obj_in.year, + quantity=obj_in.quantity, + region=region_obj.id, + source=source_obj.id, ) db.add(db_obj) db.commit() db.refresh(db_obj) return db_obj - capacity = CRUDCapacity(Capacity) diff --git a/ensysmod/crud/consumption.py b/ensysmod/crud/consumption.py index bc7e5ec..5580992 100644 --- a/ensysmod/crud/consumption.py +++ b/ensysmod/crud/consumption.py @@ -1,34 +1,32 @@ +from sqlalchemy.orm import Session + +from ensysmod import crud from ensysmod.crud.base import CRUDBase from ensysmod.model import Consumption from ensysmod.schemas import ConsumptionCreate, ConsumptionUpdate -from ensysmod.crud.region import region -from ensysmod.crud.energy_source import energy_source -from ensysmod.crud.energy_sink import energy_sink -from sqlalchemy.orm import Session # noinspection PyMethodMayBeStatic,PyArgumentList class CRUDConsumption(CRUDBase[Consumption, ConsumptionCreate, ConsumptionUpdate]): - def create(self, db: Session, *, consumption: ConsumptionCreate) -> Consumption: - #DB-getRegion mit Namen xy - l_region = region.get_by_name(consumption.region) - #DB-getSource mit Namen xy - l_source = energy_source.get_by_name(consumption.source) - #DB-getSink mit Namen xy - l_sink = energy_sink.get_by_name(consumption.sink) - #wenn beide nicht null sind: - if (not l_region): - raise ValueError("Region not found!") - if (not l_source): - raise ValueError("Energy-Source not found!") - if (not l_sink): - raise ValueError("Energy-Sink not found!") + def create(self, db: Session, *, obj_in: ConsumptionCreate) -> Consumption: + region_obj = crud.region.get_by_name(obj_in.region) + if not region_obj: + raise ValueError(f"Region '{obj_in.region}' does not exist.") + + source_obj = crud.energy_source.get_by_name(obj_in.source) + if not source_obj: + raise ValueError(f"Energy source '{obj_in.source}' does not exist.") + + sink_obj = crud.energy_sink.get_by_name(obj_in.sink) + if not sink_obj: + raise ValueError(f"Energy sink '{obj_in.sink}' does not exist.") + db_obj = Consumption( - year=consumption.year, - quantity=consumption.quantity, - region=l_region, - source=l_source, - sink=l_sink + year=obj_in.year, + quantity=obj_in.quantity, + region=region_obj.id, + source=source_obj.id, + sink=sink_obj.id, ) db.add(db_obj) db.commit() diff --git a/ensysmod/crud/energy_sink.py b/ensysmod/crud/energy_sink.py index 9891fe8..0835daf 100644 --- a/ensysmod/crud/energy_sink.py +++ b/ensysmod/crud/energy_sink.py @@ -1,8 +1,10 @@ +from typing import Optional + +from sqlalchemy.orm import Session + from ensysmod.crud.base import CRUDBase from ensysmod.model import EnergySink from ensysmod.schemas import EnergySinkCreate, EnergySinkUpdate -from sqlalchemy.orm import Session -from typing import Optional # noinspection PyMethodMayBeStatic,PyArgumentList diff --git a/ensysmod/crud/energy_source.py b/ensysmod/crud/energy_source.py index 1d809cf..eb425ae 100644 --- a/ensysmod/crud/energy_source.py +++ b/ensysmod/crud/energy_source.py @@ -1,8 +1,10 @@ +from typing import Optional + +from sqlalchemy.orm import Session + from ensysmod.crud.base import CRUDBase from ensysmod.model import EnergySource from ensysmod.schemas import EnergySourceCreate, EnergySourceUpdate -from sqlalchemy.orm import Session -from typing import Optional # noinspection PyMethodMayBeStatic,PyArgumentList diff --git a/ensysmod/crud/generation.py b/ensysmod/crud/generation.py index db9424e..751915b 100644 --- a/ensysmod/crud/generation.py +++ b/ensysmod/crud/generation.py @@ -1,34 +1,33 @@ +from sqlalchemy.orm import Session + +from ensysmod import crud from ensysmod.crud.base import CRUDBase from ensysmod.model import Generation from ensysmod.schemas import GenerationCreate, GenerationUpdate -from ensysmod.crud.region import region -from ensysmod.crud.energy_source import energy_source -from sqlalchemy.orm import Session # noinspection PyMethodMayBeStatic,PyArgumentList class CRUDGeneration(CRUDBase[Generation, GenerationCreate, GenerationUpdate]): - def create(self, db: Session, *, generation: GenerationCreate) -> Generation: - #DB-getRegion mit Namen xy - l_region = region.get_by_name(generation.region) - #DB-getSource mit Namen xy - l_source = energy_source.get_by_name(generation.source) - #wenn beide nicht null sind: - if (not l_region): - raise ValueError("Region not found!") - if (not l_source): - raise ValueError("Energy-Source not found!") + def create(self, db: Session, *, obj_in: GenerationCreate) -> Generation: + region_obj = crud.region.get_by_name(obj_in.region) + if not region_obj: + raise ValueError(f"Region '{obj_in.region}' does not exist.") + + source_obj = crud.energy_source.get_by_name(obj_in.source) + if not source_obj: + raise ValueError(f"Energy source '{obj_in.source}' does not exist.") + db_obj = Generation( - year=generation.year, - quantity=generation.quantity, - region=l_region, - source=l_source + year=obj_in.year, + quantity=obj_in.quantity, + region=region_obj.id, + source=source_obj.id, ) db.add(db_obj) db.commit() db.refresh(db_obj) return db_obj - + pass diff --git a/ensysmod/crud/region.py b/ensysmod/crud/region.py index c62f780..e118b3f 100644 --- a/ensysmod/crud/region.py +++ b/ensysmod/crud/region.py @@ -1,8 +1,10 @@ +from typing import Optional + +from sqlalchemy.orm import Session + from ensysmod.crud.base import CRUDBase from ensysmod.model import Region from ensysmod.schemas import RegionCreate, RegionUpdate -from sqlalchemy.orm import Session -from typing import Optional # noinspection PyMethodMayBeStatic,PyArgumentList @@ -11,5 +13,4 @@ def get_by_name(self, db: Session, *, name: str) -> Optional[Region]: return db.query(Region).filter(Region.name == name).first() - region = CRUDRegion(Region) diff --git a/ensysmod/crud/user.py b/ensysmod/crud/user.py index dd658f2..8e910a4 100644 --- a/ensysmod/crud/user.py +++ b/ensysmod/crud/user.py @@ -13,10 +13,10 @@ class CRUDUser(CRUDBase[User, UserCreate, UserUpdate]): def get_by_username(self, db: Session, *, username: str) -> Optional[User]: return db.query(User).filter(User.username == username).first() - def create(self, db: Session, *, user: UserCreate) -> User: + def create(self, db: Session, *, obj_in: UserCreate) -> User: db_obj = User( - username=user.username, - hashed_password=security.get_password_hash(user.password) + username=obj_in.username, + hashed_password=security.get_password_hash(obj_in.password) ) db.add(db_obj) db.commit() @@ -24,12 +24,12 @@ def create(self, db: Session, *, user: UserCreate) -> User: return db_obj def authenticate(self, db: Session, *, username: str, password: str): - user = self.get_by_username(db, username=username) - if not user: + user_obj = self.get_by_username(db, username=username) + if not user_obj: return None - if not security.verify_password(plain_password=password, hashed_password=user.hashed_password): + if not security.verify_password(plain_password=password, hashed_password=user_obj.hashed_password): return None - return user + return user_obj user = CRUDUser(User) diff --git a/ensysmod/model/__init__.py b/ensysmod/model/__init__.py index 2d0f626..f5b9461 100644 --- a/ensysmod/model/__init__.py +++ b/ensysmod/model/__init__.py @@ -1,12 +1,12 @@ """ This package contains all models in database """ -from .user import User -from .region import Region +from .capacity import Capacity +from .consumption import Consumption +from .energy_conversion import EnergyConversion +from .energy_sink import EnergySink from .energy_source import EnergySource from .energy_storage import EnergyStorage -from .energy_sink import EnergySink -from .energy_conversion import EnergyConversion -from .capacity import Capacity from .generation import Generation -from .consumption import Consumption +from .region import Region +from .user import User diff --git a/ensysmod/model/consumption.py b/ensysmod/model/consumption.py index 59a40e1..4c93f6b 100644 --- a/ensysmod/model/consumption.py +++ b/ensysmod/model/consumption.py @@ -1,5 +1,6 @@ from sqlalchemy import Column, Integer from sqlalchemy.sql.schema import ForeignKey + from ensysmod.database.base_class import Base diff --git a/ensysmod/schemas/__init__.py b/ensysmod/schemas/__init__.py index e3f2dae..474634c 100644 --- a/ensysmod/schemas/__init__.py +++ b/ensysmod/schemas/__init__.py @@ -1,6 +1,13 @@ """ This package contains every model that is returned from the Rest-API. """ +from .capacity import Capacity, CapacityCreate, CapacityUpdate, CapacityInDB +from .consumption import Consumption, ConsumptionCreate, ConsumptionUpdate, ConsumptionInDB +from .energy_conversion import EnergyConversion, EnergyConversionCreate, EnergyConversionUpdate, EnergyConversionInDB +from .energy_sink import EnergySink, EnergySinkCreate, EnergySinkUpdate, EnergySinkInDB +from .energy_source import EnergySource, EnergySourceCreate, EnergySourceUpdate, EnergySourceInDB +from .energy_storage import EnergyStorage, EnergyStorageCreate, EnergyStorageUpdate, EnergyStorageInDB +from .generation import Generation, GenerationCreate, GenerationUpdate, GenerationInDB +from .region import Region, RegionCreate, RegionUpdate, RegionInDB from .token import Token, TokenPayload from .user import User, UserCreate, UserInDB, UserUpdate -from .energy_conversion import EnergyConversion, EnergyConversionCreate, EnergyConversionUpdate, EnergyConversionInDB diff --git a/ensysmod/schemas/capacity.py b/ensysmod/schemas/capacity.py index 4231383..a10c679 100644 --- a/ensysmod/schemas/capacity.py +++ b/ensysmod/schemas/capacity.py @@ -39,5 +39,5 @@ class Capacity(CapacityInDBBase): # Additional properties stored in DB class CapacityInDB(CapacityInDBBase): - region: Optional[str] = None - source: Optional[str] = None + region: Optional[int] = None + source: Optional[int] = None diff --git a/ensysmod/schemas/consumption.py b/ensysmod/schemas/consumption.py index d2aa9e6..c57c382 100644 --- a/ensysmod/schemas/consumption.py +++ b/ensysmod/schemas/consumption.py @@ -10,7 +10,7 @@ class ConsumptionBase(BaseModel): # Properties to receive via API on creation -class consumptionCreate(consumptionBase): +class ConsumptionCreate(ConsumptionBase): year: int quantity: int region: str @@ -19,15 +19,13 @@ class consumptionCreate(consumptionBase): # Properties to receive via API on update -class consumptionUpdate(consumptionBase): - year: Optional[id] = None - quantity: Optional[id] = None - region: Optional[id] = None - source: Optional[id] = None - sink: Optional[id] = None +class ConsumptionUpdate(ConsumptionBase): + region: Optional[str] = None + source: Optional[str] = None + sink: Optional[str] = None -class consumptionInDBBase(consumptionBase): +class ConsumptionInDBBase(ConsumptionBase): id: Optional[int] = None class Config: @@ -35,12 +33,12 @@ class Config: # Additional properties to return via API -class consumption(consumptionInDBBase): +class Consumption(ConsumptionInDBBase): pass # Additional properties stored in DB -class consumptionInDB(consumptionInDBBase): - region: Optional[str] = None - source: Optional[str] = None - sink: Optional[str] = None +class ConsumptionInDB(ConsumptionInDBBase): + region: Optional[int] = None + source: Optional[int] = None + sink: Optional[int] = None diff --git a/tests/crud/test_energy_conversion.py b/tests/crud/test_energy_conversion.py index 04b6f90..ba6b30d 100644 --- a/tests/crud/test_energy_conversion.py +++ b/tests/crud/test_energy_conversion.py @@ -9,4 +9,3 @@ def test_create_energy_conversion(db: Session): energy_conversion = crud.energy_conversion.create(db, obj_in=create) assert energy_conversion.name == "test_energy_conversion" assert energy_conversion.description == "test_energy_conversion desc" - diff --git a/tests/crud/test_user.py b/tests/crud/test_user.py index 26c6ed1..ad14297 100644 --- a/tests/crud/test_user.py +++ b/tests/crud/test_user.py @@ -9,7 +9,7 @@ def test_create_user(db: Session) -> None: username = random_lower_string() user_in = UserCreate(username=username, password=random_lower_string()) - user = crud.user.create(db, user=user_in) + user = crud.user.create(db, obj_in=user_in) assert user.username == username assert hasattr(user, "hashed_password") @@ -17,12 +17,12 @@ def test_create_user(db: Session) -> None: def test_create_user_twice(db: Session) -> None: username = random_lower_string() user_in = UserCreate(username=username, password=random_lower_string()) - user_one = crud.user.create(db, user=user_in) + user_one = crud.user.create(db, obj_in=user_in) assert user_one.username == username assert hasattr(user_one, "hashed_password") try: - crud.user.create(db, user=user_in) + crud.user.create(db, obj_in=user_in) except IntegrityError as err: assert "username" in err.args[0] return