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

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion ensysmod/api/endpoints/authentication.py
Original file line number Diff line number Diff line change
Expand Up @@ -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

Expand Down
8 changes: 8 additions & 0 deletions ensysmod/crud/__init__.py
Original file line number Diff line number Diff line change
@@ -1,4 +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
32 changes: 32 additions & 0 deletions ensysmod/crud/capacity.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,32 @@
from sqlalchemy.orm import Session

from ensysmod import crud
from ensysmod.crud.base import CRUDBase
from ensysmod.model import Capacity
from ensysmod.schemas import CapacityCreate, CapacityUpdate


# noinspection PyMethodMayBeStatic,PyArgumentList
class CRUDCapacity(CRUDBase[Capacity, CapacityCreate, CapacityUpdate]):
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=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)
37 changes: 37 additions & 0 deletions ensysmod/crud/consumption.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,37 @@
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


# noinspection PyMethodMayBeStatic,PyArgumentList
class CRUDConsumption(CRUDBase[Consumption, ConsumptionCreate, ConsumptionUpdate]):
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=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()
db.refresh(db_obj)
return db_obj


consumption = CRUDConsumption(Consumption)
11 changes: 11 additions & 0 deletions ensysmod/crud/energy_conversion.py
Original file line number Diff line number Diff line change
@@ -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)
16 changes: 16 additions & 0 deletions ensysmod/crud/energy_sink.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,16 @@
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


# 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)
16 changes: 16 additions & 0 deletions ensysmod/crud/energy_source.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,16 @@
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


# 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)
11 changes: 11 additions & 0 deletions ensysmod/crud/energy_storage.py
Original file line number Diff line number Diff line change
@@ -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)
34 changes: 34 additions & 0 deletions ensysmod/crud/generation.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,34 @@
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


# noinspection PyMethodMayBeStatic,PyArgumentList
class CRUDGeneration(CRUDBase[Generation, GenerationCreate, GenerationUpdate]):
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=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


generation = CRUDGeneration(Generation)
16 changes: 16 additions & 0 deletions ensysmod/crud/region.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,16 @@
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


# 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)
14 changes: 7 additions & 7 deletions ensysmod/crud/user.py
Original file line number Diff line number Diff line change
Expand Up @@ -13,23 +13,23 @@ 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()
db.refresh(db_obj)
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)
8 changes: 8 additions & 0 deletions ensysmod/model/__init__.py
Original file line number Diff line number Diff line change
@@ -1,4 +1,12 @@
"""
This package contains all models in database
"""
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 .generation import Generation
from .region import Region
from .user import User
12 changes: 12 additions & 0 deletions ensysmod/model/capacity.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@
from sqlalchemy import Column, Integer
from sqlalchemy.sql.schema import ForeignKey

from ensysmod.database.base_class import Base


class Capacity(Base):
id = Column(Integer, primary_key=True, index=True)
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)
13 changes: 13 additions & 0 deletions ensysmod/model/consumption.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,13 @@
from sqlalchemy import Column, Integer
from sqlalchemy.sql.schema import ForeignKey

from ensysmod.database.base_class import Base


class Consumption(Base):
id = Column(Integer, primary_key=True, index=True)
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)
9 changes: 9 additions & 0 deletions ensysmod/model/energy_conversion.py
Original file line number Diff line number Diff line change
@@ -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)
description = Column(String, nullable=True)
9 changes: 9 additions & 0 deletions ensysmod/model/energy_sink.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
from sqlalchemy import Column, Integer, String

from ensysmod.database.base_class import 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)
9 changes: 9 additions & 0 deletions ensysmod/model/energy_source.py
Original file line number Diff line number Diff line change
@@ -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)
9 changes: 9 additions & 0 deletions ensysmod/model/energy_storage.py
Original file line number Diff line number Diff line change
@@ -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)
12 changes: 12 additions & 0 deletions ensysmod/model/generation.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@
from sqlalchemy import Column, Integer
from sqlalchemy.sql.schema import ForeignKey

from ensysmod.database.base_class import Base


class Generation(Base):
id = Column(Integer, primary_key=True, index=True)
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)
9 changes: 9 additions & 0 deletions ensysmod/model/region.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
from sqlalchemy import Column, Integer, String

from ensysmod.database.base_class import Base


class Region(Base):
id = Column(Integer, primary_key=True, index=True)
name = Column(String, unique=True, index=True, nullable=False)
parent_region = Column(String, nullable=True)
8 changes: 8 additions & 0 deletions ensysmod/schemas/__init__.py
Original file line number Diff line number Diff line change
@@ -1,5 +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
43 changes: 43 additions & 0 deletions ensysmod/schemas/capacity.py
Original file line number Diff line number Diff line change
@@ -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[int] = None
source: Optional[int] = None
Loading