Skip to content
Closed
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
17 changes: 12 additions & 5 deletions src/zepben/ewb/database/sqlite/network/network_cim_reader.py
Original file line number Diff line number Diff line change
Expand Up @@ -31,6 +31,7 @@
from zepben.ewb.model.cim.extensions.iec61970.base.wires.battery_control import BatteryControl
from zepben.ewb.model.cim.extensions.iec61970.base.wires.battery_control_mode import BatteryControlMode
from zepben.ewb.model.cim.iec61968.assets.asset_function import AssetFunction
from zepben.ewb.model.cim.iec61968.metering.controlled_appliance import ControlledAppliance
from zepben.ewb.model.cim.iec61968.metering.end_device_function_kind import EndDeviceFunctionKind
from zepben.ewb.model.cim.iec61970.base.core.curve import Curve
from zepben.ewb.model.cim.iec61970.base.wires.earth_fault_compensator import EarthFaultCompensator
Expand Down Expand Up @@ -401,10 +402,16 @@ def load_pan_demand_response_function(self, table: TablePanDemandResponseFunctio
:return: True if the :class:`PanDemandResponseFunction` was successfully read from the database and added to the service.
:raises SqlException: For any errors encountered reading from the database.
"""
pan_demand_response_function = PanDemandResponseFunction(mrid=set_identifier(result_set.get_string(table.mrid.query_index)))
pan_demand_response_function = PanDemandResponseFunction(
mrid=set_identifier(result_set.get_string(table.mrid.query_index)),
appliances=(
ControlledAppliance(appliances=appliance_bitmask)
if (appliance_bitmask := result_set.get_int(table.appliance.query_index, on_none=None)) is not None
else None
),
kind=EndDeviceFunctionKind[result_set.get_string(table.kind.query_index)]
)

pan_demand_response_function.kind = EndDeviceFunctionKind[result_set.get_string(table.kind.query_index)]
pan_demand_response_function._appliance_bitmask = result_set.get_int(table.appliance.query_index, on_none=None)

return self._load_end_device_functions(pan_demand_response_function, table, result_set) and self._add_or_throw(pan_demand_response_function)

Expand Down Expand Up @@ -2590,8 +2597,8 @@ def _load_switch(self, switch: Switch, table: TableSwitches, result_set: ResultS
SwitchInfo
)
switch.rated_current = result_set.get_float(table.rated_current.query_index, on_none=None)
switch._normally_open = result_set.get_int(table.normal_open.query_index)
switch._open = result_set.get_int(table.open.query_index)
switch.set_normally_open(bool(result_set.get_int(table.normal_open.query_index)))
switch.set_open(bool(result_set.get_int(table.open.query_index)))

return self._load_conducting_equipment(switch, table, result_set)

Expand Down
8 changes: 3 additions & 5 deletions src/zepben/ewb/database/sqlite/network/network_cim_writer.py
Original file line number Diff line number Diff line change
Expand Up @@ -354,7 +354,7 @@ def save_pan_demand_response_function(self, pan_demand_response_function: PanDem
insert = self._database_tables.get_insert(TablePanDemandResponseFunctions)

insert.add_value(table.kind.query_index, pan_demand_response_function.kind.short_name)
insert.add_value(table.appliance.query_index, pan_demand_response_function._appliance_bitmask)
insert.add_value(table.appliance.query_index, appliance.bitmask if (appliance := pan_demand_response_function.appliance) else None)

return self._save_end_device_function(table, insert, pan_demand_response_function, "pan demand response function")

Expand Down Expand Up @@ -2259,10 +2259,8 @@ def save_static_var_compensator(self, static_var_compensator: StaticVarCompensat
return self._save_regulating_cond_eq(table, insert, static_var_compensator, "static var compensator")

def _save_switch(self, table: TableSwitches, insert: PreparedStatement, switch: Switch, description: str) -> bool:
# noinspection PyProtectedMember
insert.add_value(table.normal_open.query_index, switch._normally_open)
# noinspection PyProtectedMember
insert.add_value(table.open.query_index, switch._open)
insert.add_value(table.normal_open.query_index, int(switch.is_normally_open()))
insert.add_value(table.open.query_index, int(switch.is_open()))
insert.add_value(table.rated_current.query_index, switch.rated_current)
insert.add_value(table.switch_info_mrid.query_index, self._mrid_or_none(switch.switch_info))

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -89,7 +89,8 @@ def add_circuit(self, circuit: Circuit) -> Loop:
"""
if self._validate_reference(circuit, self.get_circuit, "An Circuit"):
return self
self._circuits = list() if self._circuits is None else self._circuits
if self._circuits is None:
self._circuits = []
self._circuits.append(circuit)
return self

Expand Down Expand Up @@ -136,7 +137,8 @@ def add_substation(self, substation: Substation) -> Loop:
"""
if self._validate_reference(substation, self.get_substation, "An Substation"):
return self
self._substations = list() if self._substations is None else self._substations
if self._substations is None:
self._substations = []
self._substations.append(substation)
return self

Expand Down Expand Up @@ -183,7 +185,8 @@ def add_energizing_substation(self, substation: Substation) -> Loop:
"""
if self._validate_reference(substation, self.get_energizing_substation, "An Substation"):
return self
self._energizing_substations = list() if self._energizing_substations is None else self._energizing_substations
if self._energizing_substations is None:
self._energizing_substations = []
self._energizing_substations.append(substation)
return self

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -167,7 +167,7 @@ def _compare_pan_demand_response_function(self, source: PanDemandResponseFunctio
diff = ObjectDifference(source, target)

# noinspection PyProtectedMember
self._compare_values(diff, PanDemandResponseFunction.kind, PanDemandResponseFunction._appliance_bitmask)
self._compare_values(diff, PanDemandResponseFunction.kind, PanDemandResponseFunction.appliance)

return self._compare_end_device_function(diff)

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -400,11 +400,9 @@ def start_nominal_phase_path(phases: PhaseCode) -> Set[NominalPhasePath]:
return {NominalPhasePath(it, it) for it in phases.single_phases} if phases and phases.single_phases else set()

def has_visited(self, terminal: Terminal, phases: FrozenSet[SinglePhaseKind]) -> bool:
parent = self.parent
while parent is not None:
if parent._tracker.has_visited(terminal, phases):
if parent := self.parent:
if parent.has_visited(terminal, phases):
return True
parent = parent.parent
return self._tracker.has_visited(terminal, phases)

def visit(self, terminal: Terminal, phases: FrozenSet[SinglePhaseKind]) -> bool:
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -354,7 +354,7 @@ def _(self, action: StepActionFunc) -> D:

@if_not_stopping.register
def _(self, action: StepAction) -> D:
action.apply = lambda it, context: action._func(it, context) if not context.is_stopping else None
action.apply = lambda it, context: StepAction.apply(action, it, context) if not context.is_stopping else None
return self.add_step_action(action)

@singledispatchmethod
Expand All @@ -373,7 +373,7 @@ def _(self, action: StepActionFunc) -> D:

@if_stopping.register
def _(self, action: StepAction) -> D:
action.apply = lambda it, context: action._func(it, context) if context.is_stopping else None
action.apply = lambda it, context: StepAction.apply(action, it, context) if context.is_stopping else None
return self.add_step_action(action)

def copy_step_actions(self, other: Traversal[T, D]) -> D:
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -352,7 +352,7 @@ def pan_demand_response_function_to_pb(cim: PanDemandResponseFunction) -> PBPanD
edf=end_device_function_to_pb(cim),
kind=_map_end_device_function_kind.to_pb(cim.kind),
**set_or_null(
appliance=cim._appliance_bitmask
appliance=appliance.bitmask if (appliance := cim.appliance) is not None else None
)
)

Expand Down
2 changes: 1 addition & 1 deletion test/services/network/test_network_service_comparator.py
Original file line number Diff line number Diff line change
Expand Up @@ -97,7 +97,7 @@ def test_compare_pan_demand_response_function(self):
lambda _: EndDeviceFunctionKind.demandResponse,
lambda _: EndDeviceFunctionKind.onRequestRead
)
self.validator.validate_property(PanDemandResponseFunction._appliance_bitmask, PanDemandResponseFunction, lambda _: 1, lambda _: 2)
self.validator.validate_property(PanDemandResponseFunction.appliance, PanDemandResponseFunction, lambda _: 1, lambda _: 2)

#################################
# Extensions IEC61970 Base Core #
Expand Down