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/schemas/__init__.py
Original file line number Diff line number Diff line change
Expand Up @@ -12,9 +12,9 @@
from .energy_source import EnergySource, EnergySourceCreate, EnergySourceUpdate
from .energy_storage import EnergyStorage, EnergyStorageCreate, EnergyStorageUpdate
from .energy_transmission import EnergyTransmission, EnergyTransmissionCreate, EnergyTransmissionUpdate
from .file_upload import FileStatus, FileUploadResult, ZipArchiveUploadResult
from .energy_transmission_distance import EnergyTransmissionDistance, EnergyTransmissionDistanceCreate, \
EnergyTransmissionDistanceUpdate
from .file_upload import FileStatus, FileUploadResult, ZipArchiveUploadResult
from .region import Region, RegionCreate, RegionUpdate
from .token import Token, TokenPayload
from .ts_capacity_fix import CapacityFix, CapacityFixCreate, CapacityFixUpdate
Expand Down
8 changes: 7 additions & 1 deletion ensysmod/schemas/dataset.py
Original file line number Diff line number Diff line change
@@ -1,6 +1,8 @@
from typing import Optional

from pydantic import BaseModel
from pydantic import BaseModel, validator

from ensysmod.util import validators


class DatasetBase(BaseModel):
Expand All @@ -14,6 +16,10 @@ class DatasetBase(BaseModel):
cost_unit: Optional[str] = None
length_unit: Optional[str] = None

# validators
_valid_name = validator("name", allow_reuse=True)(validators.validate_name)
_valid_description = validator("description", allow_reuse=True)(validators.validate_description)


class DatasetCreate(DatasetBase):
"""
Expand Down
11 changes: 10 additions & 1 deletion ensysmod/schemas/energy_commodity.py
Original file line number Diff line number Diff line change
@@ -1,8 +1,9 @@
from typing import Optional

from pydantic import BaseModel
from pydantic import BaseModel, validator

from ensysmod.schemas import Dataset
from ensysmod.util import validators


class EnergyCommodityBase(BaseModel):
Expand All @@ -13,13 +14,21 @@ class EnergyCommodityBase(BaseModel):
unit: str
description: Optional[str] = None

# validators
_valid_name = validator("name", allow_reuse=True)(validators.validate_name)
_valid_unit = validator("unit", allow_reuse=True)(validators.validate_unit)
_valid_description = validator("description", allow_reuse=True)(validators.validate_description)


class EnergyCommodityCreate(EnergyCommodityBase):
"""
Properties to receive via API on creation of an energy commodity.
"""
ref_dataset: int

# validators
_valid_ref_dataset = validator("ref_dataset", allow_reuse=True)(validators.validate_ref_dataset_required)


class EnergyCommodityUpdate(EnergyCommodityBase):
"""
Expand Down
25 changes: 22 additions & 3 deletions ensysmod/schemas/energy_component.py
Original file line number Diff line number Diff line change
@@ -1,16 +1,16 @@
from typing import Optional

from pydantic import BaseModel
from pydantic import BaseModel, validator

from ensysmod.model import EnergyComponentType, CapacityVariableDomain
from ensysmod.util import validators


class EnergyComponentBase(BaseModel):
"""
Shared properties for an energy component. Used as a base class for all schemas.
"""
name: str
type: EnergyComponentType
description: Optional[str] = None

capacity_variable: Optional[bool] = None
Expand All @@ -24,26 +24,45 @@ class EnergyComponentBase(BaseModel):

shared_potential_id: Optional[str] = None

# validators
_valid_name = validator("name", allow_reuse=True)(validators.validate_name)
_valid_description = validator("description", allow_reuse=True)(validators.validate_description)
_valid_capacity_per_plant_unit = validator("capacity_per_plant_unit", allow_reuse=True)(
validators.validate_capacity_per_plant_unit)
_valid_invest_per_capacity = validator("invest_per_capacity", allow_reuse=True)(
validators.validate_invest_per_capacity)
_valid_opex_per_capacity = validator("opex_per_capacity", allow_reuse=True)(validators.validate_opex_per_capacity)
_valid_interest_rate = validator("interest_rate", allow_reuse=True)(validators.validate_interest_rate)
_valid_economic_lifetime = validator("economic_lifetime", allow_reuse=True)(validators.validate_economic_lifetime)
_valid_shared_potential_id = validator("shared_potential_id", allow_reuse=True)(
validators.validate_shared_potential_id)


class EnergyComponentCreate(EnergyComponentBase):
"""
Properties to receive via API on creation of an energy component.
"""
ref_dataset: int
type: EnergyComponentType

# validators
_valid_ref_dataset = validator("ref_dataset", allow_reuse=True)(validators.validate_ref_dataset_required)
_valid_type = validator("type", allow_reuse=True)(validators.validate_energy_component_type)


class EnergyComponentUpdate(EnergyComponentBase):
"""
Properties to receive via API on update of an energy component.
"""
pass
name: Optional[str] = None


class EnergyComponent(EnergyComponentBase):
"""
Properties to return via API for an energy component.
"""
id: int
type: EnergyComponentType

class Config:
orm_mode = True
16 changes: 14 additions & 2 deletions ensysmod/schemas/energy_conversion.py
Original file line number Diff line number Diff line change
@@ -1,26 +1,35 @@
from typing import Optional, List

from pydantic import BaseModel
from pydantic import BaseModel, validator

from ensysmod.model import EnergyComponentType
from ensysmod.schemas.energy_commodity import EnergyCommodity
from ensysmod.schemas.energy_component import EnergyComponentCreate, EnergyComponent, EnergyComponentUpdate
from ensysmod.schemas.energy_conversion_factor import EnergyConversionFactorCreate, EnergyConversionFactor
from ensysmod.util import validators


class EnergyConversionBase(BaseModel):
"""
Shared properties for an energy conversion. Used as a base class for all schemas.
"""
commodity_unit: str
type = EnergyComponentType.CONVERSION

# validators
_valid_type = validator("type", allow_reuse=True)(validators.validate_energy_component_type)


class EnergyConversionCreate(EnergyConversionBase, EnergyComponentCreate):
"""
Properties to receive via API on creation of an energy conversion.
"""
conversion_factors: List[EnergyConversionFactorCreate]
commodity_unit: str

# validators
_valid_conversion_factors = validator("conversion_factors", allow_reuse=True)(
validators.validate_conversion_factors)
_valid_commodity_unit = validator("commodity_unit", allow_reuse=True)(validators.validate_commodity)


class EnergyConversionUpdate(EnergyConversionBase, EnergyComponentUpdate):
Expand All @@ -30,6 +39,9 @@ class EnergyConversionUpdate(EnergyConversionBase, EnergyComponentUpdate):
commodity_unit: Optional[str] = None
conversion_factors: Optional[List[EnergyConversionFactorCreate]] = None # update = delete and recreate

# validators
_valid_commodity_unit = validator("commodity_unit", allow_reuse=True)(validators.validate_unit)


class EnergyConversion(EnergyConversionBase):
"""
Expand Down
12 changes: 10 additions & 2 deletions ensysmod/schemas/energy_conversion_factor.py
Original file line number Diff line number Diff line change
@@ -1,8 +1,9 @@
from typing import Optional

from pydantic import BaseModel
from pydantic import BaseModel, validator

from ensysmod.schemas.energy_commodity import EnergyCommodity
from ensysmod.util import validators


class EnergyConversionFactorBase(BaseModel):
Expand All @@ -11,6 +12,9 @@ class EnergyConversionFactorBase(BaseModel):
"""
conversion_factor: float

# validators
_valid_conversion_factor = validator("conversion_factor", allow_reuse=True)(validators.validate_conversion_factor)


class EnergyConversionFactorCreate(EnergyConversionFactorBase):
"""
Expand All @@ -19,7 +23,11 @@ class EnergyConversionFactorCreate(EnergyConversionFactorBase):
ref_dataset: Optional[int] = None
ref_component: Optional[int] = None
commodity: str
pass

# validators
_valid_ref_dataset = validator("ref_dataset", allow_reuse=True)(validators.validate_ref_dataset_optional)
_valid_ref_component = validator("ref_component", allow_reuse=True)(validators.validate_ref_component_optional)
_valid_commodity = validator("commodity", allow_reuse=True)(validators.validate_commodity)


class EnergyConversionFactorUpdate(EnergyConversionFactorBase):
Expand Down
10 changes: 9 additions & 1 deletion ensysmod/schemas/energy_model.py
Original file line number Diff line number Diff line change
@@ -1,10 +1,11 @@
from typing import Optional, List

from pydantic import BaseModel
from pydantic import BaseModel, validator

from ensysmod.schemas import Dataset
from ensysmod.schemas.energy_model_parameter import EnergyModelParameter, EnergyModelParameterCreate, \
EnergyModelParameterUpdate
from ensysmod.util import validators


class EnergyModelBase(BaseModel):
Expand All @@ -14,6 +15,10 @@ class EnergyModelBase(BaseModel):
name: str
description: Optional[str] = None

# validators
_valid_name = validator("name", allow_reuse=True)(validators.validate_name)
_valid_description = validator("description", allow_reuse=True)(validators.validate_description)


class EnergyModelCreate(EnergyModelBase):
"""
Expand All @@ -22,6 +27,9 @@ class EnergyModelCreate(EnergyModelBase):
ref_dataset: int
parameters: Optional[List[EnergyModelParameterCreate]] = None

# validators
_valid_ref_dataset = validator("ref_dataset", allow_reuse=True)(validators.validate_ref_dataset_required)


class EnergyModelUpdate(EnergyModelBase):
"""
Expand Down
15 changes: 12 additions & 3 deletions ensysmod/schemas/energy_sink.py
Original file line number Diff line number Diff line change
@@ -1,25 +1,31 @@
from typing import Optional

from pydantic import BaseModel
from pydantic import BaseModel, validator

from ensysmod.model import EnergyComponentType
from ensysmod.schemas import EnergyComponentCreate, EnergyComponentUpdate, EnergyComponent, EnergyCommodity
from ensysmod.util import validators


class EnergySinkBase(BaseModel):
"""
Shared properties for an energy sink. Used as a base class for all schemas.
"""
commodity: str
type = EnergyComponentType.SINK
yearly_limit: Optional[float] = None

# validators
_valid_type = validator("type", allow_reuse=True)(validators.validate_energy_component_type)


class EnergySinkCreate(EnergySinkBase, EnergyComponentCreate):
"""
Properties to receive via API on creation of an energy sink.
"""
pass
commodity: str

# validators
_valid_commodity = validator("commodity", allow_reuse=True)(validators.validate_commodity)


class EnergySinkUpdate(EnergySinkBase, EnergyComponentUpdate):
Expand All @@ -28,6 +34,9 @@ class EnergySinkUpdate(EnergySinkBase, EnergyComponentUpdate):
"""
commodity: Optional[str] = None

# validators
_valid_commodity = validator("commodity", allow_reuse=True)(validators.validate_commodity)


class EnergySink(EnergySinkBase):
"""
Expand Down
16 changes: 13 additions & 3 deletions ensysmod/schemas/energy_source.py
Original file line number Diff line number Diff line change
@@ -1,25 +1,32 @@
from typing import Optional

from pydantic import BaseModel
from pydantic import BaseModel, validator

from ensysmod.model import EnergyComponentType
from ensysmod.schemas import EnergyComponentCreate, EnergyComponent, EnergyComponentUpdate, EnergyCommodity
from ensysmod.util import validators


class EnergySourceBase(BaseModel):
"""
Shared properties for an energy source. Used as a base class for all schemas.
"""
commodity: str
type = EnergyComponentType.SOURCE
commodity_cost: Optional[float] = None

# validators
_valid_type = validator("type", allow_reuse=True)(validators.validate_energy_component_type)
_valid_commodity_cost = validator("commodity_cost", allow_reuse=True)(validators.validate_commodity_cost)


class EnergySourceCreate(EnergySourceBase, EnergyComponentCreate):
"""
Properties to receive via API on creation of an energy source.
"""
pass
commodity: str

# validators
_valid_commodity = validator("commodity", allow_reuse=True)(validators.validate_commodity)


class EnergySourceUpdate(EnergySourceBase, EnergyComponentUpdate):
Expand All @@ -28,6 +35,9 @@ class EnergySourceUpdate(EnergySourceBase, EnergyComponentUpdate):
"""
commodity: Optional[str] = None

# validators
_valid_commodity = validator("commodity", allow_reuse=True)(validators.validate_commodity)


class EnergySource(EnergySourceBase):
"""
Expand Down
26 changes: 24 additions & 2 deletions ensysmod/schemas/energy_storage.py
Original file line number Diff line number Diff line change
@@ -1,16 +1,17 @@
from typing import Optional

from pydantic import BaseModel
from pydantic.class_validators import validator

from ensysmod.model import EnergyComponentType
from ensysmod.schemas import EnergyComponentCreate, EnergyComponent, EnergyComponentUpdate, EnergyCommodity
from ensysmod.util import validators


class EnergyStorageBase(BaseModel):
"""
Shared properties for an energy storage. Used as a base class for all schemas.
"""
commodity: str
type = EnergyComponentType.STORAGE

charge_efficiency: Optional[float] = None
Expand All @@ -22,12 +23,30 @@ class EnergyStorageBase(BaseModel):
state_of_charge_min: Optional[float] = None
state_of_charge_max: Optional[float] = None

# validators
_valid_type = validator("type", allow_reuse=True)(validators.validate_energy_component_type)

_valid_charge_efficiency = validator("charge_efficiency", allow_reuse=True)(validators.validate_charge_efficiency)
_valid_discharge_efficiency = validator("discharge_efficiency", allow_reuse=True)(
validators.validate_discharge_efficiency)
_valid_self_discharge = validator("self_discharge", allow_reuse=True)(validators.validate_self_discharge)
_valid_cyclic_lifetime = validator("cyclic_lifetime", allow_reuse=True)(validators.validate_cyclic_lifetime)
_valid_charge_rate = validator("charge_rate", allow_reuse=True)(validators.validate_charge_rate)
_valid_discharge_rate = validator("discharge_rate", allow_reuse=True)(validators.validate_discharge_rate)
_valid_state_of_charge_min = validator("state_of_charge_min", allow_reuse=True)(
validators.validate_state_of_charge_min)
_valid_state_of_charge_max = validator("state_of_charge_max", allow_reuse=True)(
validators.validate_state_of_charge_max)


class EnergyStorageCreate(EnergyStorageBase, EnergyComponentCreate):
"""
Properties to receive via API on creation of an energy storage.
"""
pass
commodity: str

# validators
_valid_commodity = validator("commodity", allow_reuse=True)(validators.validate_commodity)


class EnergyStorageUpdate(EnergyStorageBase, EnergyComponentUpdate):
Expand All @@ -36,6 +55,9 @@ class EnergyStorageUpdate(EnergyStorageBase, EnergyComponentUpdate):
"""
commodity: Optional[str] = None

# validators
_valid_commodity = validator("commodity", allow_reuse=True)(validators.validate_commodity)


class EnergyStorage(EnergyStorageBase):
"""
Expand Down
Loading