zepben.ewb 1.0.0b6__py3-none-any.whl → 1.0.0b8__py3-none-any.whl

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -169,6 +169,7 @@ from zepben.protobuf.cim.iec61970.base.wires.TransformerStarImpedance_pb2 import
169
169
  from zepben.protobuf.cim.iec61970.infiec61970.feeder.Circuit_pb2 import Circuit as PBCircuit
170
170
 
171
171
  import zepben.ewb.services.common.resolver as resolver
172
+ from zepben.ewb import IdentifiedObject
172
173
  from zepben.ewb.model.cim.extensions.iec61968.assetinfo.relay_info import *
173
174
  from zepben.ewb.model.cim.extensions.iec61968.metering.pan_demand_reponse_function import PanDemandResponseFunction
174
175
  from zepben.ewb.model.cim.extensions.iec61970.base.core.site import *
@@ -323,7 +324,8 @@ from zepben.ewb.model.cim.iec61970.base.wires.transformer_end import Transformer
323
324
  from zepben.ewb.model.cim.iec61970.base.wires.transformer_star_impedance import *
324
325
  from zepben.ewb.model.cim.iec61970.base.wires.winding_connection import *
325
326
  from zepben.ewb.model.cim.iec61970.infiec61970.feeder.circuit import *
326
- from zepben.ewb.services.common.translator.base_proto2cim import identified_object_to_cim, organisation_role_to_cim, document_to_cim
327
+ from zepben.ewb.services.common.translator.base_proto2cim import identified_object_to_cim, organisation_role_to_cim, document_to_cim, add_to_network_or_none, \
328
+ bind_to_cim
327
329
  from zepben.ewb.services.common.translator.util import int_or_none, float_or_none, long_or_none, str_or_none, uint_or_none
328
330
  from zepben.ewb.services.network.network_service import NetworkService
329
331
  from zepben.ewb.services.network.tracing.feeder.feeder_direction import FeederDirection
@@ -333,6 +335,8 @@ from zepben.ewb.services.network.tracing.feeder.feeder_direction import FeederDi
333
335
  # Extensions IEC61968 Asset Info #
334
336
  ##################################
335
337
 
338
+ @bind_to_cim
339
+ @add_to_network_or_none
336
340
  def relay_info_to_cim(pb: PBRelayInfo, network_service: NetworkService) -> Optional[RelayInfo]:
337
341
  # noinspection PyUnresolvedReferences
338
342
  cim = RelayInfo(
@@ -343,16 +347,15 @@ def relay_info_to_cim(pb: PBRelayInfo, network_service: NetworkService) -> Optio
343
347
  )
344
348
 
345
349
  asset_info_to_cim(pb.ai, cim, network_service)
346
- return cim if network_service.add(cim) else None
347
-
348
-
349
- PBRelayInfo.to_cim = relay_info_to_cim
350
+ return cim
350
351
 
351
352
 
352
353
  ################################
353
354
  # Extensions IEC61968 Metering #
354
355
  ################################
355
356
 
357
+ @bind_to_cim
358
+ @add_to_network_or_none
356
359
  def pan_demand_response_function_to_cim(pb: PBPanDemandResponseFunction, network_service: NetworkService) -> PanDemandResponseFunction:
357
360
  """
358
361
  Convert the protobuf :class:`PBPanDemandResponseFunction` into its CIM counterpart.
@@ -366,31 +369,29 @@ def pan_demand_response_function_to_cim(pb: PBPanDemandResponseFunction, network
366
369
  cim.kind = EndDeviceFunctionKind(pb.kind)
367
370
  end_device_function_to_cim(pb.edf, cim, network_service)
368
371
 
369
- return cim if network_service.add(cim) else None
370
-
371
-
372
- PBPanDemandResponseFunction.to_cim = pan_demand_response_function_to_cim
372
+ return cim
373
373
 
374
374
 
375
375
  #################################
376
376
  # Extensions IEC61970 Base Core #
377
377
  #################################
378
378
 
379
+ @bind_to_cim
380
+ @add_to_network_or_none
379
381
  def site_to_cim(pb: PBSite, network_service: NetworkService) -> Optional[Site]:
380
382
  # noinspection PyUnresolvedReferences
381
383
  cim = Site(mrid=pb.mrid())
382
384
 
383
385
  equipment_container_to_cim(pb.ec, cim, network_service)
384
- return cim if network_service.add(cim) else None
385
-
386
-
387
- PBSite.to_cim = site_to_cim
386
+ return cim
388
387
 
389
388
 
390
389
  ###################################
391
390
  # Extensions IEC61970 Base Feeder #
392
391
  ###################################
393
392
 
393
+ @bind_to_cim
394
+ @add_to_network_or_none
394
395
  def loop_to_cim(pb: PBLoop, network_service: NetworkService) -> Optional[Loop]:
395
396
  # noinspection PyUnresolvedReferences
396
397
  cim = Loop(mrid=pb.mrid())
@@ -403,9 +404,11 @@ def loop_to_cim(pb: PBLoop, network_service: NetworkService) -> Optional[Loop]:
403
404
  network_service.resolve_or_defer_reference(resolver.loop_energizing_substations(cim), mrid)
404
405
 
405
406
  identified_object_to_cim(pb.io, cim, network_service)
406
- return cim if network_service.add(cim) else None
407
+ return cim
407
408
 
408
409
 
410
+ @bind_to_cim
411
+ @add_to_network_or_none
409
412
  def lv_feeder_to_cim(pb: PBLvFeeder, network_service: NetworkService) -> Optional[LvFeeder]:
410
413
  # noinspection PyUnresolvedReferences
411
414
  cim = LvFeeder(mrid=pb.mrid())
@@ -417,31 +420,27 @@ def lv_feeder_to_cim(pb: PBLvFeeder, network_service: NetworkService) -> Optiona
417
420
  network_service.resolve_or_defer_reference(resolver.current_energizing_feeders(cim), mrid)
418
421
 
419
422
  equipment_container_to_cim(pb.ec, cim, network_service)
420
- return cim if network_service.add(cim) else None
421
-
422
-
423
- PBLoop.to_cim = loop_to_cim
424
- PBLvFeeder.to_cim = lv_feeder_to_cim
423
+ return cim
425
424
 
426
425
 
427
426
  ##################################################
428
427
  # Extensions IEC61970 Base Generation Production #
429
428
  ##################################################
430
429
 
430
+ @bind_to_cim
431
+ @add_to_network_or_none
431
432
  def ev_charging_unit_to_cim(pb: PBEvChargingUnit, network_service: NetworkService) -> Optional[EvChargingUnit]:
432
433
  # noinspection PyUnresolvedReferences
433
434
  cim = EvChargingUnit(mrid=pb.mrid())
434
435
  power_electronics_unit_to_cim(pb.peu, cim, network_service)
435
- return cim if network_service.add(cim) else None
436
-
437
-
438
- PBEvChargingUnit.to_cim = ev_charging_unit_to_cim
439
-
436
+ return cim
440
437
 
441
438
  #######################################
442
439
  # Extensions IEC61970 Base Protection #
443
440
  #######################################
444
441
 
442
+ @bind_to_cim
443
+ @add_to_network_or_none
445
444
  def distance_relay_to_cim(pb: PBDistanceRelay, network_service: NetworkService) -> Optional[DistanceRelay]:
446
445
  # noinspection PyUnresolvedReferences
447
446
  cim = DistanceRelay(
@@ -458,7 +457,7 @@ def distance_relay_to_cim(pb: PBDistanceRelay, network_service: NetworkService)
458
457
  )
459
458
 
460
459
  protection_relay_function_to_cim(pb.prf, cim, network_service)
461
- return cim if network_service.add(cim) else None
460
+ return cim
462
461
 
463
462
 
464
463
  def protection_relay_function_to_cim(pb: PBProtectionRelayFunction, cim: ProtectionRelayFunction, network_service: NetworkService):
@@ -484,6 +483,8 @@ def protection_relay_function_to_cim(pb: PBProtectionRelayFunction, cim: Protect
484
483
  power_system_resource_to_cim(pb.psr, cim, network_service)
485
484
 
486
485
 
486
+ @bind_to_cim
487
+ @add_to_network_or_none
487
488
  def protection_relay_scheme_to_cim(pb: PBProtectionRelayScheme, network_service: NetworkService) -> Optional[ProtectionRelayScheme]:
488
489
  # noinspection PyUnresolvedReferences
489
490
  cim = ProtectionRelayScheme(
@@ -497,9 +498,11 @@ def protection_relay_scheme_to_cim(pb: PBProtectionRelayScheme, network_service:
497
498
  network_service.resolve_or_defer_reference(resolver.prscheme_function(cim), mrid)
498
499
 
499
500
  identified_object_to_cim(pb.io, cim, network_service)
500
- return cim if network_service.add(cim) else None
501
+ return cim
501
502
 
502
503
 
504
+ @bind_to_cim
505
+ @add_to_network_or_none
503
506
  def protection_relay_system_to_cim(pb: PBProtectionRelaySystem, network_service: NetworkService) -> Optional[ProtectionRelaySystem]:
504
507
  # noinspection PyUnresolvedReferences
505
508
  cim = ProtectionRelaySystem(
@@ -511,7 +514,7 @@ def protection_relay_system_to_cim(pb: PBProtectionRelaySystem, network_service:
511
514
  network_service.resolve_or_defer_reference(resolver.prsystem_scheme(cim), mrid)
512
515
 
513
516
  equipment_to_cim(pb.eq, cim, network_service)
514
- return cim if network_service.add(cim) else None
517
+ return cim
515
518
 
516
519
 
517
520
  def relay_setting_to_cim(pb: PBRelaySetting) -> Optional[RelaySetting]:
@@ -522,24 +525,22 @@ def relay_setting_to_cim(pb: PBRelaySetting) -> Optional[RelaySetting]:
522
525
  )
523
526
 
524
527
 
528
+ @bind_to_cim
529
+ @add_to_network_or_none
525
530
  def voltage_relay_to_cim(pb: PBVoltageRelay, network_service: NetworkService) -> Optional[VoltageRelay]:
526
531
  # noinspection PyUnresolvedReferences
527
532
  cim = VoltageRelay(mrid=pb.mrid())
528
533
 
529
534
  protection_relay_function_to_cim(pb.prf, cim, network_service)
530
- return cim if network_service.add(cim) else None
531
-
532
-
533
- PBDistanceRelay.to_cim = distance_relay_to_cim
534
- PBProtectionRelayScheme.to_cim = protection_relay_scheme_to_cim
535
- PBProtectionRelaySystem.to_cim = protection_relay_system_to_cim
536
- PBVoltageRelay.to_cim = voltage_relay_to_cim
535
+ return cim
537
536
 
538
537
 
539
538
  ##################################
540
539
  # Extensions IEC61970 Base Wires #
541
540
  ##################################
542
541
 
542
+ @bind_to_cim
543
+ @add_to_network_or_none
543
544
  def battery_control_to_cim(pb: PBBatteryControl, network_service: NetworkService) -> BatteryControl:
544
545
  """
545
546
  Convert the protobuf :class:`PBBatteryControl` into its CIM counterpart.
@@ -558,10 +559,7 @@ def battery_control_to_cim(pb: PBBatteryControl, network_service: NetworkService
558
559
 
559
560
  regulating_control_to_cim(pb.rc, cim, network_service)
560
561
 
561
- return cim if network_service.add(cim) else None
562
-
563
-
564
- PBBatteryControl.to_cim = battery_control_to_cim
562
+ return cim
565
563
 
566
564
 
567
565
  #######################
@@ -569,14 +567,18 @@ PBBatteryControl.to_cim = battery_control_to_cim
569
567
  #######################
570
568
 
571
569
 
570
+ @bind_to_cim
571
+ @add_to_network_or_none
572
572
  def cable_info_to_cim(pb: PBCableInfo, network_service: NetworkService) -> Optional[CableInfo]:
573
573
  # noinspection PyUnresolvedReferences
574
574
  cim = CableInfo(mrid=pb.mrid())
575
575
 
576
576
  wire_info_to_cim(pb.wi, cim, network_service)
577
- return cim if network_service.add(cim) else None
577
+ return cim
578
578
 
579
579
 
580
+ @bind_to_cim
581
+ @add_to_network_or_none
580
582
  def no_load_test_to_cim(pb: PBNoLoadTest, network_service: NetworkService) -> Optional[NoLoadTest]:
581
583
  # noinspection PyUnresolvedReferences
582
584
  cim = NoLoadTest(
@@ -589,9 +591,11 @@ def no_load_test_to_cim(pb: PBNoLoadTest, network_service: NetworkService) -> Op
589
591
  )
590
592
 
591
593
  transformer_test_to_cim(pb.tt, cim, network_service)
592
- return cim if network_service.add(cim) else None
594
+ return cim
593
595
 
594
596
 
597
+ @bind_to_cim
598
+ @add_to_network_or_none
595
599
  def open_circuit_test_to_cim(pb: PBOpenCircuitTest, network_service: NetworkService) -> Optional[OpenCircuitTest]:
596
600
  # noinspection PyUnresolvedReferences
597
601
  cim = OpenCircuitTest(
@@ -604,17 +608,21 @@ def open_circuit_test_to_cim(pb: PBOpenCircuitTest, network_service: NetworkServ
604
608
  )
605
609
 
606
610
  transformer_test_to_cim(pb.tt, cim, network_service)
607
- return cim if network_service.add(cim) else None
611
+ return cim
608
612
 
609
613
 
614
+ @bind_to_cim
615
+ @add_to_network_or_none
610
616
  def overhead_wire_info_to_cim(pb: PBOverheadWireInfo, network_service: NetworkService) -> Optional[OverheadWireInfo]:
611
617
  # noinspection PyUnresolvedReferences
612
618
  cim = OverheadWireInfo(mrid=pb.mrid())
613
619
 
614
620
  wire_info_to_cim(pb.wi, cim, network_service)
615
- return cim if network_service.add(cim) else None
621
+ return cim
616
622
 
617
623
 
624
+ @bind_to_cim
625
+ @add_to_network_or_none
618
626
  def power_transformer_info_to_cim(pb: PBPowerTransformerInfo, network_service: NetworkService) -> Optional[PowerTransformerInfo]:
619
627
  # noinspection PyUnresolvedReferences
620
628
  cim = PowerTransformerInfo(mrid=pb.mrid())
@@ -623,9 +631,11 @@ def power_transformer_info_to_cim(pb: PBPowerTransformerInfo, network_service: N
623
631
  network_service.resolve_or_defer_reference(resolver.power_transformer_info_transformer_tank_info(cim), mrid)
624
632
 
625
633
  asset_info_to_cim(pb.ai, cim, network_service)
626
- return cim if network_service.add(cim) else None
634
+ return cim
627
635
 
628
636
 
637
+ @bind_to_cim
638
+ @add_to_network_or_none
629
639
  def short_circuit_test_to_cim(pb: PBShortCircuitTest, network_service: NetworkService) -> Optional[ShortCircuitTest]:
630
640
  # noinspection PyUnresolvedReferences
631
641
  cim = ShortCircuitTest(
@@ -643,9 +653,11 @@ def short_circuit_test_to_cim(pb: PBShortCircuitTest, network_service: NetworkSe
643
653
  )
644
654
 
645
655
  transformer_test_to_cim(pb.tt, cim, network_service)
646
- return cim if network_service.add(cim) else None
656
+ return cim
647
657
 
648
658
 
659
+ @bind_to_cim
660
+ @add_to_network_or_none
649
661
  def shunt_compensator_info_to_cim(pb: PBShuntCompensatorInfo, network_service: NetworkService) -> Optional[ShuntCompensatorInfo]:
650
662
  # noinspection PyUnresolvedReferences
651
663
  cim = ShuntCompensatorInfo(
@@ -657,9 +669,11 @@ def shunt_compensator_info_to_cim(pb: PBShuntCompensatorInfo, network_service: N
657
669
  )
658
670
 
659
671
  asset_info_to_cim(pb.ai, cim, network_service)
660
- return cim if network_service.add(cim) else None
672
+ return cim
661
673
 
662
674
 
675
+ @bind_to_cim
676
+ @add_to_network_or_none
663
677
  def switch_info_to_cim(pb: PBSwitchInfo, network_service: NetworkService) -> Optional[SwitchInfo]:
664
678
  # noinspection PyUnresolvedReferences
665
679
  cim = SwitchInfo(
@@ -668,9 +682,11 @@ def switch_info_to_cim(pb: PBSwitchInfo, network_service: NetworkService) -> Opt
668
682
  )
669
683
 
670
684
  asset_info_to_cim(pb.ai, cim, network_service)
671
- return cim if network_service.add(cim) else None
685
+ return cim
672
686
 
673
687
 
688
+ @bind_to_cim
689
+ @add_to_network_or_none
674
690
  def transformer_end_info_to_cim(pb: PBTransformerEndInfo, network_service: NetworkService) -> Optional[TransformerEndInfo]:
675
691
  # noinspection PyUnresolvedReferences
676
692
  cim = TransformerEndInfo(
@@ -695,9 +711,11 @@ def transformer_end_info_to_cim(pb: PBTransformerEndInfo, network_service: Netwo
695
711
  network_service.resolve_or_defer_reference(resolver.energised_end_open_circuit_tests(cim), pb.energisedEndOpenCircuitTestsMRID)
696
712
 
697
713
  asset_info_to_cim(pb.ai, cim, network_service)
698
- return cim if network_service.add(cim) else None
714
+ return cim
699
715
 
700
716
 
717
+ @bind_to_cim
718
+ @add_to_network_or_none
701
719
  def transformer_tank_info_to_cim(pb: PBTransformerTankInfo, network_service: NetworkService) -> Optional[TransformerTankInfo]:
702
720
  # noinspection PyUnresolvedReferences
703
721
  cim = TransformerTankInfo(mrid=pb.mrid())
@@ -706,7 +724,7 @@ def transformer_tank_info_to_cim(pb: PBTransformerTankInfo, network_service: Net
706
724
  network_service.resolve_or_defer_reference(resolver.transformer_end_info(cim), mrid)
707
725
 
708
726
  asset_info_to_cim(pb.ai, cim, network_service)
709
- return cim if network_service.add(cim) else None
727
+ return cim
710
728
 
711
729
 
712
730
  def transformer_test_to_cim(pb: PBTransformerTest, cim: TransformerTest, network_service: NetworkService):
@@ -723,18 +741,6 @@ def wire_info_to_cim(pb: PBWireInfo, cim: WireInfo, network_service: NetworkServ
723
741
  asset_info_to_cim(pb.ai, cim, network_service)
724
742
 
725
743
 
726
- PBCableInfo.to_cim = cable_info_to_cim
727
- PBNoLoadTest.to_cim = no_load_test_to_cim
728
- PBOpenCircuitTest.to_cim = open_circuit_test_to_cim
729
- PBOverheadWireInfo.to_cim = overhead_wire_info_to_cim
730
- PBPowerTransformerInfo.to_cim = power_transformer_info_to_cim
731
- PBShortCircuitTest.to_cim = short_circuit_test_to_cim
732
- PBShuntCompensatorInfo.to_cim = shunt_compensator_info_to_cim
733
- PBSwitchInfo.to_cim = switch_info_to_cim
734
- PBTransformerEndInfo.to_cim = transformer_end_info_to_cim
735
- PBTransformerTankInfo.to_cim = transformer_tank_info_to_cim
736
-
737
-
738
744
  ###################
739
745
  # IEC61968 Assets #
740
746
  ###################
@@ -775,14 +781,18 @@ def asset_organisation_role_to_cim(pb: PBAssetOrganisationRole, cim: AssetOrgani
775
781
  organisation_role_to_cim(getattr(pb, "or"), cim, network_service)
776
782
 
777
783
 
784
+ @bind_to_cim
785
+ @add_to_network_or_none
778
786
  def asset_owner_to_cim(pb: PBAssetOwner, network_service: NetworkService) -> Optional[AssetOwner]:
779
787
  # noinspection PyUnresolvedReferences
780
788
  cim = AssetOwner(mrid=pb.mrid())
781
789
 
782
790
  asset_organisation_role_to_cim(pb.aor, cim, network_service)
783
- return cim if network_service.add(cim) else None
791
+ return cim
784
792
 
785
793
 
794
+ @bind_to_cim
795
+ @add_to_network_or_none
786
796
  def streetlight_to_cim(pb: PBStreetlight, network_service: NetworkService) -> Optional[Streetlight]:
787
797
  # noinspection PyUnresolvedReferences
788
798
  cim = Streetlight(
@@ -794,21 +804,19 @@ def streetlight_to_cim(pb: PBStreetlight, network_service: NetworkService) -> Op
794
804
  network_service.resolve_or_defer_reference(resolver.pole(cim), pb.poleMRID)
795
805
 
796
806
  asset_to_cim(pb.at, cim, network_service)
797
- return cim if network_service.add(cim) else None
807
+ return cim
798
808
 
799
809
 
800
810
  def structure_to_cim(pb: PBStructure, cim: Structure, network_service: NetworkService):
801
811
  asset_container_to_cim(pb.ac, cim, network_service)
802
812
 
803
813
 
804
- PBAssetOwner.to_cim = asset_owner_to_cim
805
- PBStreetlight.to_cim = streetlight_to_cim
806
-
807
-
808
814
  ###################
809
815
  # IEC61968 Common #
810
816
  ###################
811
817
 
818
+ @bind_to_cim
819
+ @add_to_network_or_none
812
820
  def location_to_cim(pb: PBLocation, network_service: NetworkService) -> Optional[Location]:
813
821
  # noinspection PyUnresolvedReferences
814
822
  cim = Location(mrid=pb.mrid(), main_address=street_address_to_cim(pb.mainAddress) if pb.HasField("mainAddress") else None)
@@ -817,7 +825,7 @@ def location_to_cim(pb: PBLocation, network_service: NetworkService) -> Optional
817
825
  cim.add_point(position_point_to_cim(point))
818
826
 
819
827
  identified_object_to_cim(pb.io, cim, network_service)
820
- return cim if network_service.add(cim) else None
828
+ return cim
821
829
 
822
830
 
823
831
  def position_point_to_cim(pb: PBPositionPoint) -> Optional[PositionPoint]:
@@ -849,14 +857,12 @@ def town_detail_to_cim(pb: PBTownDetail) -> Optional[TownDetail]:
849
857
  return TownDetail(name=pb.name, state_or_province=pb.stateOrProvince)
850
858
 
851
859
 
852
- PBLocation.to_cim = location_to_cim
853
- PBPositionPoint.to_cim = position_point_to_cim
854
-
855
-
856
860
  #####################################
857
861
  # IEC61968 InfIEC61968 InfAssetInfo #
858
862
  #####################################
859
863
 
864
+ @bind_to_cim
865
+ @add_to_network_or_none
860
866
  def current_transformer_info_to_cim(pb: PBCurrentTransformerInfo, network_service: NetworkService) -> Optional[CurrentTransformerInfo]:
861
867
  # noinspection PyUnresolvedReferences
862
868
  cim = CurrentTransformerInfo(
@@ -876,9 +882,11 @@ def current_transformer_info_to_cim(pb: PBCurrentTransformerInfo, network_servic
876
882
  )
877
883
 
878
884
  asset_info_to_cim(pb.ai, cim, network_service)
879
- return cim if network_service.add(cim) else None
885
+ return cim
880
886
 
881
887
 
888
+ @bind_to_cim
889
+ @add_to_network_or_none
882
890
  def potential_transformer_info_to_cim(pb: PBPotentialTransformerInfo, network_service: NetworkService) -> Optional[PotentialTransformerInfo]:
883
891
  # noinspection PyUnresolvedReferences
884
892
  cim = PotentialTransformerInfo(
@@ -892,17 +900,15 @@ def potential_transformer_info_to_cim(pb: PBPotentialTransformerInfo, network_se
892
900
  )
893
901
 
894
902
  asset_info_to_cim(pb.ai, cim, network_service)
895
- return cim if network_service.add(cim) else None
896
-
897
-
898
- PBCurrentTransformerInfo.to_cim = current_transformer_info_to_cim
899
- PBPotentialTransformerInfo.to_cim = potential_transformer_info_to_cim
903
+ return cim
900
904
 
901
905
 
902
906
  ##################################
903
907
  # IEC61968 InfIEC61968 InfAssets #
904
908
  ##################################
905
909
 
910
+ @bind_to_cim
911
+ @add_to_network_or_none
906
912
  def pole_to_cim(pb: PBPole, network_service: NetworkService) -> Optional[Pole]:
907
913
  # noinspection PyUnresolvedReferences
908
914
  cim = Pole(mrid=pb.mrid(), classification=pb.classification)
@@ -911,23 +917,18 @@ def pole_to_cim(pb: PBPole, network_service: NetworkService) -> Optional[Pole]:
911
917
  network_service.resolve_or_defer_reference(resolver.streetlights(cim), mrid)
912
918
 
913
919
  structure_to_cim(pb.st, cim, network_service)
914
- return cim if network_service.add(cim) else None
915
-
916
-
917
- PBPole.to_cim = pole_to_cim
920
+ return cim
918
921
 
919
922
 
920
923
  ##################################
921
924
  # IEC61968 InfIEC61968 InfCommon #
922
925
  ##################################
923
926
 
927
+ @bind_to_cim
924
928
  def ratio_to_cim(pb: PBRatio) -> Ratio:
925
929
  return Ratio(pb.numerator, pb.denominator)
926
930
 
927
931
 
928
- PBRatio.to_cim = ratio_to_cim
929
-
930
-
931
932
  #####################
932
933
  # IEC61968 Metering #
933
934
  #####################
@@ -965,14 +966,18 @@ def end_device_function_to_cim(pb: PBEndDeviceFunction, cim: EndDeviceFunction,
965
966
  asset_function_to_cim(pb.af, cim, network_service)
966
967
 
967
968
 
969
+ @bind_to_cim
970
+ @add_to_network_or_none
968
971
  def meter_to_cim(pb: PBMeter, network_service: NetworkService) -> Optional[Meter]:
969
972
  # noinspection PyUnresolvedReferences
970
973
  cim = Meter(mrid=pb.mrid())
971
974
 
972
975
  end_device_to_cim(pb.ed, cim, network_service)
973
- return cim if network_service.add(cim) else None
976
+ return cim
974
977
 
975
978
 
979
+ @bind_to_cim
980
+ @add_to_network_or_none
976
981
  def usage_point_to_cim(pb: PBUsagePoint, network_service: NetworkService) -> Optional[UsagePoint]:
977
982
  # noinspection PyUnresolvedReferences
978
983
  cim = UsagePoint(mrid=pb.mrid())
@@ -990,25 +995,20 @@ def usage_point_to_cim(pb: PBUsagePoint, network_service: NetworkService) -> Opt
990
995
  network_service.resolve_or_defer_reference(resolver.end_devices(cim), mrid)
991
996
 
992
997
  identified_object_to_cim(pb.io, cim, network_service)
993
- return cim if network_service.add(cim) else None
994
-
995
-
996
- PBMeter.to_cim = meter_to_cim
997
- PBUsagePoint.to_cim = usage_point_to_cim
998
+ return cim
998
999
 
999
1000
 
1000
1001
  #######################
1001
1002
  # IEC61968 Operations #
1002
1003
  #######################
1003
1004
 
1005
+ @bind_to_cim
1006
+ @add_to_network_or_none
1004
1007
  def operational_restriction_to_cim(pb: PBOperationalRestriction, network_service: NetworkService) -> Optional[OperationalRestriction]:
1005
1008
  # noinspection PyUnresolvedReferences
1006
1009
  cim = OperationalRestriction(mrid=pb.mrid())
1007
1010
  document_to_cim(pb.doc, cim, network_service)
1008
- return cim if network_service.add(cim) else None
1009
-
1010
-
1011
- PBOperationalRestriction.to_cim = operational_restriction_to_cim
1011
+ return cim
1012
1012
 
1013
1013
 
1014
1014
  #####################################
@@ -1021,6 +1021,8 @@ def auxiliary_equipment_to_cim(pb: PBAuxiliaryEquipment, cim: AuxiliaryEquipment
1021
1021
  equipment_to_cim(pb.eq, cim, network_service)
1022
1022
 
1023
1023
 
1024
+ @bind_to_cim
1025
+ @add_to_network_or_none
1024
1026
  def current_transformer_to_cim(pb: PBCurrentTransformer, network_service: NetworkService) -> Optional[CurrentTransformer]:
1025
1027
  # noinspection PyUnresolvedReferences
1026
1028
  cim = CurrentTransformer(mrid=pb.mrid(), core_burden=int_or_none(pb.coreBurden))
@@ -1029,17 +1031,21 @@ def current_transformer_to_cim(pb: PBCurrentTransformer, network_service: Networ
1029
1031
  network_service.resolve_or_defer_reference(resolver.current_transformer_info(cim), pb.asset_info_mrid())
1030
1032
 
1031
1033
  sensor_to_cim(pb.sn, cim, network_service)
1032
- return cim if network_service.add(cim) else None
1034
+ return cim
1033
1035
 
1034
1036
 
1037
+ @bind_to_cim
1038
+ @add_to_network_or_none
1035
1039
  def fault_indicator_to_cim(pb: PBFaultIndicator, network_service: NetworkService) -> Optional[FaultIndicator]:
1036
1040
  # noinspection PyUnresolvedReferences
1037
1041
  cim = FaultIndicator(mrid=pb.mrid())
1038
1042
 
1039
1043
  auxiliary_equipment_to_cim(pb.ae, cim, network_service)
1040
- return cim if network_service.add(cim) else None
1044
+ return cim
1041
1045
 
1042
1046
 
1047
+ @bind_to_cim
1048
+ @add_to_network_or_none
1043
1049
  def potential_transformer_to_cim(pb: PBPotentialTransformer, network_service: NetworkService) -> Optional[PotentialTransformer]:
1044
1050
  # noinspection PyUnresolvedReferences
1045
1051
  cim = PotentialTransformer(mrid=pb.mrid(), type=PotentialTransformerKind(pb.type))
@@ -1048,7 +1054,7 @@ def potential_transformer_to_cim(pb: PBPotentialTransformer, network_service: Ne
1048
1054
  network_service.resolve_or_defer_reference(resolver.potential_transformer_info(cim), pb.asset_info_mrid())
1049
1055
 
1050
1056
  sensor_to_cim(pb.sn, cim, network_service)
1051
- return cim if network_service.add(cim) else None
1057
+ return cim
1052
1058
 
1053
1059
 
1054
1060
  def sensor_to_cim(pb: PBSensor, cim: Sensor, network_service: NetworkService):
@@ -1057,11 +1063,6 @@ def sensor_to_cim(pb: PBSensor, cim: Sensor, network_service: NetworkService):
1057
1063
  auxiliary_equipment_to_cim(pb.ae, cim, network_service)
1058
1064
 
1059
1065
 
1060
- PBCurrentTransformer.to_cim = current_transformer_to_cim
1061
- PBFaultIndicator.to_cim = fault_indicator_to_cim
1062
- PBPotentialTransformer.to_cim = potential_transformer_to_cim
1063
-
1064
-
1065
1066
  ######################
1066
1067
  # IEC61970 Base Core #
1067
1068
  ######################
@@ -1070,12 +1071,14 @@ def ac_dc_terminal_to_cim(pb: PBAcDcTerminal, cim: AcDcTerminal, network_service
1070
1071
  identified_object_to_cim(pb.io, cim, network_service)
1071
1072
 
1072
1073
 
1074
+ @bind_to_cim
1075
+ @add_to_network_or_none
1073
1076
  def base_voltage_to_cim(pb: PBBaseVoltage, network_service: NetworkService) -> Optional[BaseVoltage]:
1074
1077
  # noinspection PyUnresolvedReferences
1075
1078
  cim = BaseVoltage(mrid=pb.mrid(), nominal_voltage=pb.nominalVoltage)
1076
1079
 
1077
1080
  identified_object_to_cim(pb.io, cim, network_service)
1078
- return cim if network_service.add(cim) else None
1081
+ return cim
1079
1082
 
1080
1083
 
1081
1084
  def conducting_equipment_to_cim(pb: PBConductingEquipment, cim: ConductingEquipment, network_service: NetworkService):
@@ -1086,12 +1089,14 @@ def conducting_equipment_to_cim(pb: PBConductingEquipment, cim: ConductingEquipm
1086
1089
  equipment_to_cim(pb.eq, cim, network_service)
1087
1090
 
1088
1091
 
1092
+ @bind_to_cim
1093
+ @add_to_network_or_none
1089
1094
  def connectivity_node_to_cim(pb: PBConnectivityNode, network_service: NetworkService) -> Optional[ConnectivityNode]:
1090
1095
  # noinspection PyUnresolvedReferences
1091
1096
  cim = ConnectivityNode(mrid=pb.mrid())
1092
1097
 
1093
1098
  identified_object_to_cim(pb.io, cim, network_service)
1094
- return cim if network_service.add(cim) else None
1099
+ return cim
1095
1100
 
1096
1101
 
1097
1102
  def connectivity_node_container_to_cim(pb: PBConnectivityNodeContainer, cim: ConnectivityNodeContainer, network_service: NetworkService):
@@ -1130,6 +1135,8 @@ def equipment_container_to_cim(pb: PBEquipmentContainer, cim: EquipmentContainer
1130
1135
  connectivity_node_container_to_cim(pb.cnc, cim, network_service)
1131
1136
 
1132
1137
 
1138
+ @bind_to_cim
1139
+ @add_to_network_or_none
1133
1140
  def feeder_to_cim(pb: PBFeeder, network_service: NetworkService) -> Optional[Feeder]:
1134
1141
  # noinspection PyUnresolvedReferences
1135
1142
  cim = Feeder(mrid=pb.mrid())
@@ -1142,9 +1149,11 @@ def feeder_to_cim(pb: PBFeeder, network_service: NetworkService) -> Optional[Fee
1142
1149
  network_service.resolve_or_defer_reference(resolver.current_energized_lv_feeders(cim), mrid)
1143
1150
 
1144
1151
  equipment_container_to_cim(pb.ec, cim, network_service)
1145
- return cim if network_service.add(cim) else None
1152
+ return cim
1146
1153
 
1147
1154
 
1155
+ @bind_to_cim
1156
+ @add_to_network_or_none
1148
1157
  def geographical_region_to_cim(pb: PBGeographicalRegion, network_service: NetworkService) -> Optional[GeographicalRegion]:
1149
1158
  # noinspection PyUnresolvedReferences
1150
1159
  cim = GeographicalRegion(mrid=pb.mrid())
@@ -1153,7 +1162,7 @@ def geographical_region_to_cim(pb: PBGeographicalRegion, network_service: Networ
1153
1162
  network_service.resolve_or_defer_reference(resolver.sub_geographical_regions(cim), mrid)
1154
1163
 
1155
1164
  identified_object_to_cim(pb.io, cim, network_service)
1156
- return cim if network_service.add(cim) else None
1165
+ return cim
1157
1166
 
1158
1167
 
1159
1168
  def power_system_resource_to_cim(pb: PBPowerSystemResource, cim: PowerSystemResource, network_service: NetworkService):
@@ -1165,6 +1174,8 @@ def power_system_resource_to_cim(pb: PBPowerSystemResource, cim: PowerSystemReso
1165
1174
  identified_object_to_cim(pb.io, cim, network_service)
1166
1175
 
1167
1176
 
1177
+ @bind_to_cim
1178
+ @add_to_network_or_none
1168
1179
  def sub_geographical_region_to_cim(pb: PBSubGeographicalRegion, network_service: NetworkService) -> Optional[SubGeographicalRegion]:
1169
1180
  # noinspection PyUnresolvedReferences
1170
1181
  cim = SubGeographicalRegion(mrid=pb.mrid())
@@ -1174,9 +1185,11 @@ def sub_geographical_region_to_cim(pb: PBSubGeographicalRegion, network_service:
1174
1185
  network_service.resolve_or_defer_reference(resolver.substations(cim), mrid)
1175
1186
 
1176
1187
  identified_object_to_cim(pb.io, cim, network_service)
1177
- return cim if network_service.add(cim) else None
1188
+ return cim
1178
1189
 
1179
1190
 
1191
+ @bind_to_cim
1192
+ @add_to_network_or_none
1180
1193
  def substation_to_cim(pb: PBSubstation, network_service: NetworkService) -> Optional[Substation]:
1181
1194
  # noinspection PyUnresolvedReferences
1182
1195
  cim = Substation(mrid=pb.mrid())
@@ -1192,9 +1205,11 @@ def substation_to_cim(pb: PBSubstation, network_service: NetworkService) -> Opti
1192
1205
  network_service.resolve_or_defer_reference(resolver.circuits(cim), mrid)
1193
1206
 
1194
1207
  equipment_container_to_cim(pb.ec, cim, network_service)
1195
- return cim if network_service.add(cim) else None
1208
+ return cim
1196
1209
 
1197
1210
 
1211
+ @bind_to_cim
1212
+ @add_to_network_or_none
1198
1213
  def terminal_to_cim(pb: PBTerminal, network_service: NetworkService) -> Optional[Terminal]:
1199
1214
  # noinspection PyUnresolvedReferences
1200
1215
  cim = Terminal(
@@ -1209,22 +1224,15 @@ def terminal_to_cim(pb: PBTerminal, network_service: NetworkService) -> Optional
1209
1224
  network_service.resolve_or_defer_reference(resolver.connectivity_node(cim), pb.connectivityNodeMRID)
1210
1225
 
1211
1226
  ac_dc_terminal_to_cim(pb.ad, cim, network_service)
1212
- return cim if network_service.add(cim) else None
1213
-
1214
-
1215
- PBBaseVoltage.to_cim = base_voltage_to_cim
1216
- PBConnectivityNode.to_cim = connectivity_node_to_cim
1217
- PBFeeder.to_cim = feeder_to_cim
1218
- PBGeographicalRegion.to_cim = geographical_region_to_cim
1219
- PBSubGeographicalRegion.to_cim = sub_geographical_region_to_cim
1220
- PBSubstation.to_cim = substation_to_cim
1221
- PBTerminal.to_cim = terminal_to_cim
1227
+ return cim
1222
1228
 
1223
1229
 
1224
1230
  #############################
1225
1231
  # IEC61970 Base Equivalents #
1226
1232
  #############################
1227
1233
 
1234
+ @bind_to_cim
1235
+ @add_to_network_or_none
1228
1236
  def equivalent_branch_to_cim(pb: PBEquivalentBranch, network_service: NetworkService) -> Optional[EquivalentBranch]:
1229
1237
  # noinspection PyUnresolvedReferences
1230
1238
  cim = EquivalentBranch(
@@ -1248,20 +1256,19 @@ def equivalent_branch_to_cim(pb: PBEquivalentBranch, network_service: NetworkSer
1248
1256
  )
1249
1257
 
1250
1258
  equivalent_equipment_to_cim(pb.ee, cim, network_service)
1251
- return cim if network_service.add(cim) else None
1259
+ return cim
1252
1260
 
1253
1261
 
1254
1262
  def equivalent_equipment_to_cim(pb: PBEquivalentEquipment, cim: EquivalentEquipment, network_service: NetworkService):
1255
1263
  conducting_equipment_to_cim(pb.ce, cim, network_service)
1256
1264
 
1257
1265
 
1258
- PBEquivalentBranch.to_cim = equivalent_branch_to_cim
1259
-
1260
-
1261
1266
  #######################################
1262
1267
  # IEC61970 Base Generation Production #
1263
1268
  #######################################
1264
1269
 
1270
+ @bind_to_cim
1271
+ @add_to_network_or_none
1265
1272
  def battery_unit_to_cim(pb: PBBatteryUnit, network_service: NetworkService) -> Optional[BatteryUnit]:
1266
1273
  """
1267
1274
  Convert the protobuf :class:`PBBatteryUnit` into its CIM counterpart.
@@ -1281,15 +1288,17 @@ def battery_unit_to_cim(pb: PBBatteryUnit, network_service: NetworkService) -> O
1281
1288
  network_service.resolve_or_defer_reference(resolver.battery_controls(cim), mrid)
1282
1289
 
1283
1290
  power_electronics_unit_to_cim(pb.peu, cim, network_service)
1284
- return cim if network_service.add(cim) else None
1291
+ return cim
1285
1292
 
1286
1293
 
1294
+ @bind_to_cim
1295
+ @add_to_network_or_none
1287
1296
  def photo_voltaic_unit_to_cim(pb: PBPhotoVoltaicUnit, network_service: NetworkService) -> Optional[PhotoVoltaicUnit]:
1288
1297
  # noinspection PyUnresolvedReferences
1289
1298
  cim = PhotoVoltaicUnit(mrid=pb.mrid())
1290
1299
 
1291
1300
  power_electronics_unit_to_cim(pb.peu, cim, network_service)
1292
- return cim if network_service.add(cim) else None
1301
+ return cim
1293
1302
 
1294
1303
 
1295
1304
  def power_electronics_unit_to_cim(pb: PBPowerElectronicsUnit, cim: PowerElectronicsUnit, network_service: NetworkService):
@@ -1301,39 +1310,41 @@ def power_electronics_unit_to_cim(pb: PBPowerElectronicsUnit, cim: PowerElectron
1301
1310
  equipment_to_cim(pb.eq, cim, network_service)
1302
1311
 
1303
1312
 
1313
+ @bind_to_cim
1314
+ @add_to_network_or_none
1304
1315
  def power_electronics_wind_unit_to_cim(pb: PBPowerElectronicsWindUnit, network_service: NetworkService) -> Optional[PowerElectronicsWindUnit]:
1305
1316
  # noinspection PyUnresolvedReferences
1306
1317
  cim = PowerElectronicsWindUnit(mrid=pb.mrid())
1307
1318
 
1308
1319
  power_electronics_unit_to_cim(pb.peu, cim, network_service)
1309
- return cim if network_service.add(cim) else None
1310
-
1311
-
1312
- PBBatteryUnit.to_cim = battery_unit_to_cim
1313
- PBPhotoVoltaicUnit.to_cim = photo_voltaic_unit_to_cim
1314
- PBPowerElectronicsWindUnit.to_cim = power_electronics_wind_unit_to_cim
1320
+ return cim
1315
1321
 
1316
1322
 
1317
1323
  ######################
1318
1324
  # IEC61970 Base Meas #
1319
1325
  ######################
1320
1326
 
1327
+ @bind_to_cim
1328
+ @add_to_network_or_none
1321
1329
  def accumulator_to_cim(pb: PBAccumulator, network_service: NetworkService) -> Optional[Accumulator]:
1322
1330
  # noinspection PyUnresolvedReferences
1323
1331
  cim = Accumulator(mrid=pb.mrid())
1324
1332
 
1325
1333
  measurement_to_cim(pb.measurement, cim, network_service)
1326
- return cim if network_service.add(cim) else None
1334
+ return cim
1327
1335
 
1328
1336
 
1337
+ @bind_to_cim
1338
+ @add_to_network_or_none
1329
1339
  def analog_to_cim(pb: PBAnalog, network_service: NetworkService) -> Optional[Analog]:
1330
1340
  # noinspection PyUnresolvedReferences
1331
1341
  cim = Analog(mrid=pb.mrid(), positive_flow_in=pb.positiveFlowIn)
1332
1342
 
1333
1343
  measurement_to_cim(pb.measurement, cim, network_service)
1334
- return cim if network_service.add(cim) else None
1335
-
1344
+ return cim
1336
1345
 
1346
+ @bind_to_cim
1347
+ @add_to_network_or_none
1337
1348
  def control_to_cim(pb: PBControl, network_service: NetworkService) -> Optional[Control]:
1338
1349
  # noinspection PyUnresolvedReferences
1339
1350
  cim = Control(
@@ -1345,15 +1356,17 @@ def control_to_cim(pb: PBControl, network_service: NetworkService) -> Optional[C
1345
1356
  network_service.resolve_or_defer_reference(resolver.remote_control(cim), pb.remoteControlMRID)
1346
1357
 
1347
1358
  io_point_to_cim(pb.ip, cim, network_service)
1348
- return cim if network_service.add(cim) else None
1359
+ return cim
1349
1360
 
1350
1361
 
1362
+ @bind_to_cim
1363
+ @add_to_network_or_none
1351
1364
  def discrete_to_cim(pb: PBDiscrete, network_service: NetworkService) -> Optional[Discrete]:
1352
1365
  # noinspection PyUnresolvedReferences
1353
1366
  cim = Discrete(mrid=pb.mrid())
1354
1367
 
1355
1368
  measurement_to_cim(pb.measurement, cim, network_service)
1356
- return cim if network_service.add(cim) else None
1369
+ return cim
1357
1370
 
1358
1371
 
1359
1372
  def io_point_to_cim(pb: PBIoPoint, cim: IoPoint, service: NetworkService):
@@ -1371,16 +1384,12 @@ def measurement_to_cim(pb: PBMeasurement, cim: Measurement, service: NetworkServ
1371
1384
  identified_object_to_cim(pb.io, cim, service)
1372
1385
 
1373
1386
 
1374
- PBAccumulator.to_cim = accumulator_to_cim
1375
- PBAnalog.to_cim = analog_to_cim
1376
- PBControl.to_cim = control_to_cim
1377
- PBDiscrete.to_cim = discrete_to_cim
1378
-
1379
-
1380
1387
  ############################
1381
1388
  # IEC61970 Base Protection #
1382
1389
  ############################
1383
1390
 
1391
+ @bind_to_cim
1392
+ @add_to_network_or_none
1384
1393
  def current_relay_to_cim(pb: PBCurrentRelay, network_service: NetworkService) -> Optional[CurrentRelay]:
1385
1394
  # noinspection PyUnresolvedReferences
1386
1395
  cim = CurrentRelay(
@@ -1391,16 +1400,15 @@ def current_relay_to_cim(pb: PBCurrentRelay, network_service: NetworkService) ->
1391
1400
  )
1392
1401
 
1393
1402
  protection_relay_function_to_cim(pb.prf, cim, network_service)
1394
- return cim if network_service.add(cim) else None
1395
-
1396
-
1397
- PBCurrentRelay.to_cim = current_relay_to_cim
1403
+ return cim
1398
1404
 
1399
1405
 
1400
1406
  #######################
1401
1407
  # IEC61970 Base Scada #
1402
1408
  #######################
1403
1409
 
1410
+ @bind_to_cim
1411
+ @add_to_network_or_none
1404
1412
  def remote_control_to_cim(pb: PBRemoteControl, network_service: NetworkService) -> Optional[RemoteControl]:
1405
1413
  # noinspection PyUnresolvedReferences
1406
1414
  cim = RemoteControl(mrid=pb.mrid())
@@ -1408,13 +1416,15 @@ def remote_control_to_cim(pb: PBRemoteControl, network_service: NetworkService)
1408
1416
  network_service.resolve_or_defer_reference(resolver.control(cim), pb.controlMRID)
1409
1417
 
1410
1418
  remote_point_to_cim(pb.rp, cim, network_service)
1411
- return cim if network_service.add(cim) else None
1419
+ return cim
1412
1420
 
1413
1421
 
1414
1422
  def remote_point_to_cim(pb: PBRemotePoint, cim: RemotePoint, service: NetworkService):
1415
1423
  identified_object_to_cim(pb.io, cim, service)
1416
1424
 
1417
1425
 
1426
+ @bind_to_cim
1427
+ @add_to_network_or_none
1418
1428
  def remote_source_to_cim(pb: PBRemoteSource, network_service: NetworkService) -> Optional[RemoteSource]:
1419
1429
  # noinspection PyUnresolvedReferences
1420
1430
  cim = RemoteSource(mrid=pb.mrid())
@@ -1422,17 +1432,15 @@ def remote_source_to_cim(pb: PBRemoteSource, network_service: NetworkService) ->
1422
1432
  network_service.resolve_or_defer_reference(resolver.measurement(cim), pb.measurementMRID)
1423
1433
 
1424
1434
  remote_point_to_cim(pb.rp, cim, network_service)
1425
- return cim if network_service.add(cim) else None
1426
-
1427
-
1428
- PBRemoteControl.to_cim = remote_control_to_cim
1429
- PBRemoteSource.to_cim = remote_source_to_cim
1435
+ return cim
1430
1436
 
1431
1437
 
1432
1438
  #######################
1433
1439
  # IEC61970 Base Wires #
1434
1440
  #######################
1435
1441
 
1442
+ @bind_to_cim
1443
+ @add_to_network_or_none
1436
1444
  def ac_line_segment_to_cim(pb: PBAcLineSegment, network_service: NetworkService) -> Optional[AcLineSegment]:
1437
1445
  """
1438
1446
  Convert the protobuf :class:`PBAcLineSegment` into its CIM counterpart.
@@ -1450,9 +1458,11 @@ def ac_line_segment_to_cim(pb: PBAcLineSegment, network_service: NetworkService)
1450
1458
  network_service.resolve_or_defer_reference(resolver.clamps(cim), mrid)
1451
1459
 
1452
1460
  conductor_to_cim(pb.cd, cim, network_service)
1453
- return cim if network_service.add(cim) else None
1461
+ return cim
1454
1462
 
1455
1463
 
1464
+ @bind_to_cim
1465
+ @add_to_network_or_none
1456
1466
  def breaker_to_cim(pb: PBBreaker, network_service: NetworkService) -> Optional[Breaker]:
1457
1467
  # noinspection PyUnresolvedReferences
1458
1468
  cim = Breaker(
@@ -1461,17 +1471,21 @@ def breaker_to_cim(pb: PBBreaker, network_service: NetworkService) -> Optional[B
1461
1471
  )
1462
1472
 
1463
1473
  protected_switch_to_cim(pb.sw, cim, network_service)
1464
- return cim if network_service.add(cim) else None
1474
+ return cim
1465
1475
 
1466
1476
 
1477
+ @bind_to_cim
1478
+ @add_to_network_or_none
1467
1479
  def busbar_section_to_cim(pb: PBBusbarSection, network_service: NetworkService) -> Optional[BusbarSection]:
1468
1480
  # noinspection PyUnresolvedReferences
1469
1481
  cim = BusbarSection(mrid=pb.mrid())
1470
1482
 
1471
1483
  connector_to_cim(pb.cn, cim, network_service)
1472
- return cim if network_service.add(cim) else None
1484
+ return cim
1473
1485
 
1474
1486
 
1487
+ @bind_to_cim
1488
+ @add_to_network_or_none
1475
1489
  def clamp_to_cim(pb: PBClamp, network_service: NetworkService) -> Optional[Clamp]:
1476
1490
  # noinspection PyUnresolvedReferences
1477
1491
  cim = Clamp(mrid=pb.mrid())
@@ -1480,7 +1494,7 @@ def clamp_to_cim(pb: PBClamp, network_service: NetworkService) -> Optional[Clamp
1480
1494
  network_service.resolve_or_defer_reference(resolver.clamp_ac_line_segment(cim), pb.acLineSegmentMRID)
1481
1495
 
1482
1496
  conducting_equipment_to_cim(pb.ce, cim, network_service)
1483
- return cim if network_service.add(cim) else None
1497
+ return cim
1484
1498
 
1485
1499
 
1486
1500
  def conductor_to_cim(pb: PBConductor, cim: Conductor, network_service: NetworkService):
@@ -1498,6 +1512,8 @@ def connector_to_cim(pb: PBConnector, cim: Connector, network_service: NetworkSe
1498
1512
  conducting_equipment_to_cim(pb.ce, cim, network_service)
1499
1513
 
1500
1514
 
1515
+ @bind_to_cim
1516
+ @add_to_network_or_none
1501
1517
  def cut_to_cim(pb: PBCut, network_service: NetworkService) -> Optional[Cut]:
1502
1518
  # noinspection PyUnresolvedReferences
1503
1519
  cim = Cut(mrid=pb.mrid())
@@ -1506,15 +1522,17 @@ def cut_to_cim(pb: PBCut, network_service: NetworkService) -> Optional[Cut]:
1506
1522
  network_service.resolve_or_defer_reference(resolver.cut_ac_line_segment(cim), pb.acLineSegmentMRID)
1507
1523
 
1508
1524
  switch_to_cim(pb.sw, cim, network_service)
1509
- return cim if network_service.add(cim) else None
1525
+ return cim
1510
1526
 
1511
1527
 
1528
+ @bind_to_cim
1529
+ @add_to_network_or_none
1512
1530
  def disconnector_to_cim(pb: PBDisconnector, network_service: NetworkService) -> Optional[Disconnector]:
1513
1531
  # noinspection PyUnresolvedReferences
1514
1532
  cim = Disconnector(mrid=pb.mrid())
1515
1533
 
1516
1534
  switch_to_cim(pb.sw, cim, network_service)
1517
- return cim if network_service.add(cim) else None
1535
+ return cim
1518
1536
 
1519
1537
 
1520
1538
  def earth_fault_compensator_to_cim(pb: PBEarthFaultCompensator, cim: EarthFaultCompensator, network_service: NetworkService):
@@ -1527,6 +1545,8 @@ def energy_connection_to_cim(pb: PBEnergyConnection, cim: EnergyConnection, netw
1527
1545
  conducting_equipment_to_cim(pb.ce, cim, network_service)
1528
1546
 
1529
1547
 
1548
+ @bind_to_cim
1549
+ @add_to_network_or_none
1530
1550
  def energy_consumer_to_cim(pb: PBEnergyConsumer, network_service: NetworkService) -> Optional[EnergyConsumer]:
1531
1551
  # noinspection PyUnresolvedReferences
1532
1552
  cim = EnergyConsumer(
@@ -1544,9 +1564,11 @@ def energy_consumer_to_cim(pb: PBEnergyConsumer, network_service: NetworkService
1544
1564
  network_service.resolve_or_defer_reference(resolver.ec_phases(cim), mrid)
1545
1565
 
1546
1566
  energy_connection_to_cim(pb.ec, cim, network_service)
1547
- return cim if network_service.add(cim) else None
1567
+ return cim
1548
1568
 
1549
1569
 
1570
+ @bind_to_cim
1571
+ @add_to_network_or_none
1550
1572
  def energy_consumer_phase_to_cim(pb: PBEnergyConsumerPhase, network_service: NetworkService) -> Optional[EnergyConsumerPhase]:
1551
1573
  # noinspection PyUnresolvedReferences
1552
1574
  cim = EnergyConsumerPhase(
@@ -1561,9 +1583,11 @@ def energy_consumer_phase_to_cim(pb: PBEnergyConsumerPhase, network_service: Net
1561
1583
  network_service.resolve_or_defer_reference(resolver.energy_consumer(cim), pb.energyConsumerMRID)
1562
1584
 
1563
1585
  power_system_resource_to_cim(pb.psr, cim, network_service)
1564
- return cim if network_service.add(cim) else None
1586
+ return cim
1565
1587
 
1566
1588
 
1589
+ @bind_to_cim
1590
+ @add_to_network_or_none
1567
1591
  def energy_source_to_cim(pb: PBEnergySource, network_service: NetworkService) -> Optional[EnergySource]:
1568
1592
  # noinspection PyUnresolvedReferences
1569
1593
  cim = EnergySource(
@@ -1599,9 +1623,11 @@ def energy_source_to_cim(pb: PBEnergySource, network_service: NetworkService) ->
1599
1623
  network_service.resolve_or_defer_reference(resolver.es_phases(cim), mrid)
1600
1624
 
1601
1625
  energy_connection_to_cim(pb.ec, cim, network_service)
1602
- return cim if network_service.add(cim) else None
1626
+ return cim
1603
1627
 
1604
1628
 
1629
+ @bind_to_cim
1630
+ @add_to_network_or_none
1605
1631
  def energy_source_phase_to_cim(pb: PBEnergySourcePhase, network_service: NetworkService) -> Optional[EnergySourcePhase]:
1606
1632
  # noinspection PyUnresolvedReferences
1607
1633
  cim = EnergySourcePhase(mrid=pb.mrid(), phase=single_phase_kind_by_id(pb.phase))
@@ -1609,9 +1635,11 @@ def energy_source_phase_to_cim(pb: PBEnergySourcePhase, network_service: Network
1609
1635
  network_service.resolve_or_defer_reference(resolver.energy_source(cim), pb.energySourceMRID)
1610
1636
 
1611
1637
  power_system_resource_to_cim(pb.psr, cim, network_service)
1612
- return cim if network_service.add(cim) else None
1638
+ return cim
1613
1639
 
1614
1640
 
1641
+ @bind_to_cim
1642
+ @add_to_network_or_none
1615
1643
  def fuse_to_cim(pb: PBFuse, network_service: NetworkService) -> Optional[Fuse]:
1616
1644
  # noinspection PyUnresolvedReferences
1617
1645
  cim = Fuse(mrid=pb.mrid())
@@ -1619,53 +1647,65 @@ def fuse_to_cim(pb: PBFuse, network_service: NetworkService) -> Optional[Fuse]:
1619
1647
  network_service.resolve_or_defer_reference(resolver.fuse_function(cim), pb.functionMRID)
1620
1648
 
1621
1649
  switch_to_cim(pb.sw, cim, network_service)
1622
- return cim if network_service.add(cim) else None
1650
+ return cim
1623
1651
 
1624
1652
 
1653
+ @bind_to_cim
1654
+ @add_to_network_or_none
1625
1655
  def ground_to_cim(pb: PBGround, network_service: NetworkService) -> Optional[Ground]:
1626
1656
  # noinspection PyUnresolvedReferences
1627
1657
  cim = Ground(mrid=pb.mrid())
1628
1658
 
1629
1659
  conducting_equipment_to_cim(pb.ce, cim, network_service)
1630
- return cim if network_service.add(cim) else None
1660
+ return cim
1631
1661
 
1632
1662
 
1663
+ @bind_to_cim
1664
+ @add_to_network_or_none
1633
1665
  def ground_disconnector_to_cim(pb: PBGroundDisconnector, network_service: NetworkService) -> Optional[GroundDisconnector]:
1634
1666
  # noinspection PyUnresolvedReferences
1635
1667
  cim = GroundDisconnector(mrid=pb.mrid())
1636
1668
 
1637
1669
  switch_to_cim(pb.sw, cim, network_service)
1638
- return cim if network_service.add(cim) else None
1670
+ return cim
1639
1671
 
1640
1672
 
1673
+ @bind_to_cim
1674
+ @add_to_network_or_none
1641
1675
  def grounding_impedance_to_cim(pb: PBGroundingImpedance, network_service: NetworkService) -> Optional[GroundingImpedance]:
1642
1676
  # noinspection PyUnresolvedReferences
1643
1677
  cim = GroundingImpedance(mrid=pb.mrid(), x=float_or_none(pb.x))
1644
1678
 
1645
1679
  earth_fault_compensator_to_cim(pb.efc, cim, network_service)
1646
- return cim if network_service.add(cim) else None
1680
+ return cim
1647
1681
 
1648
1682
 
1683
+ @bind_to_cim
1684
+ @add_to_network_or_none
1649
1685
  def jumper_to_cim(pb: PBJumper, network_service: NetworkService) -> Optional[Jumper]:
1650
1686
  # noinspection PyUnresolvedReferences
1651
1687
  cim = Jumper(mrid=pb.mrid())
1652
1688
 
1653
1689
  switch_to_cim(pb.sw, cim, network_service)
1654
- return cim if network_service.add(cim) else None
1690
+ return cim
1655
1691
 
1656
1692
 
1693
+ @bind_to_cim
1694
+ @add_to_network_or_none
1657
1695
  def junction_to_cim(pb: PBJunction, network_service: NetworkService) -> Optional[Junction]:
1658
1696
  # noinspection PyUnresolvedReferences
1659
1697
  cim = Junction(mrid=pb.mrid())
1660
1698
 
1661
1699
  connector_to_cim(pb.cn, cim, network_service)
1662
- return cim if network_service.add(cim) else None
1700
+ return cim
1663
1701
 
1664
1702
 
1665
1703
  def line_to_cim(pb: PBLine, cim: Line, network_service: NetworkService):
1666
1704
  equipment_container_to_cim(pb.ec, cim, network_service)
1667
1705
 
1668
1706
 
1707
+ @bind_to_cim
1708
+ @add_to_network_or_none
1669
1709
  def linear_shunt_compensator_to_cim(pb: PBLinearShuntCompensator, network_service: NetworkService) -> Optional[LinearShuntCompensator]:
1670
1710
  # noinspection PyUnresolvedReferences
1671
1711
  cim = LinearShuntCompensator(
@@ -1677,15 +1717,17 @@ def linear_shunt_compensator_to_cim(pb: PBLinearShuntCompensator, network_servic
1677
1717
  )
1678
1718
 
1679
1719
  shunt_compensator_to_cim(pb.sc, cim, network_service)
1680
- return cim if network_service.add(cim) else None
1720
+ return cim
1681
1721
 
1682
1722
 
1723
+ @bind_to_cim
1724
+ @add_to_network_or_none
1683
1725
  def load_break_switch_to_cim(pb: PBLoadBreakSwitch, network_service: NetworkService) -> Optional[LoadBreakSwitch]:
1684
1726
  # noinspection PyUnresolvedReferences
1685
1727
  cim = LoadBreakSwitch(mrid=pb.mrid())
1686
1728
 
1687
1729
  protected_switch_to_cim(pb.ps, cim, network_service)
1688
- return cim if network_service.add(cim) else None
1730
+ return cim
1689
1731
 
1690
1732
 
1691
1733
  def per_length_line_parameter_to_cim(pb: PBPerLengthLineParameter, cim: PerLengthLineParameter, network_service: NetworkService):
@@ -1696,6 +1738,8 @@ def per_length_impedance_to_cim(pb: PBPerLengthImpedance, cim: PerLengthImpedanc
1696
1738
  per_length_line_parameter_to_cim(pb.lp, cim, network_service)
1697
1739
 
1698
1740
 
1741
+ @bind_to_cim
1742
+ @add_to_network_or_none
1699
1743
  def per_length_phase_impedance_to_cim(pb: PBPerLengthPhaseImpedance, network_service: NetworkService) -> Optional[PerLengthPhaseImpedance]:
1700
1744
  """
1701
1745
  Convert the protobuf :class:`PBPerLengthPhaseImpedance` into its CIM counterpart.
@@ -1710,9 +1754,11 @@ def per_length_phase_impedance_to_cim(pb: PBPerLengthPhaseImpedance, network_ser
1710
1754
  cim.add_data(phase_impedance_data_to_cim(phase_impedance_data))
1711
1755
 
1712
1756
  per_length_impedance_to_cim(pb.pli, cim, network_service)
1713
- return cim if network_service.add(cim) else None
1757
+ return cim
1714
1758
 
1715
1759
 
1760
+ @bind_to_cim
1761
+ @add_to_network_or_none
1716
1762
  def per_length_sequence_impedance_to_cim(pb: PBPerLengthSequenceImpedance, network_service: NetworkService) -> Optional[PerLengthSequenceImpedance]:
1717
1763
  # noinspection PyUnresolvedReferences
1718
1764
  cim = PerLengthSequenceImpedance(
@@ -1728,15 +1774,17 @@ def per_length_sequence_impedance_to_cim(pb: PBPerLengthSequenceImpedance, netwo
1728
1774
  )
1729
1775
 
1730
1776
  per_length_impedance_to_cim(pb.pli, cim, network_service)
1731
- return cim if network_service.add(cim) else None
1777
+ return cim
1732
1778
 
1733
1779
 
1780
+ @bind_to_cim
1781
+ @add_to_network_or_none
1734
1782
  def petersen_coil_to_cim(pb: PBPetersenCoil, network_service: NetworkService) -> Optional[PetersenCoil]:
1735
1783
  # noinspection PyUnresolvedReferences
1736
1784
  cim = PetersenCoil(mrid=pb.mrid(), x_ground_nominal=float_or_none(pb.xGroundNominal))
1737
1785
 
1738
1786
  earth_fault_compensator_to_cim(pb.efc, cim, network_service)
1739
- return cim if network_service.add(cim) else None
1787
+ return cim
1740
1788
 
1741
1789
 
1742
1790
  def phase_impedance_data_to_cim(pb: PBPhaseImpedanceData) -> Optional[PhaseImpedanceData]:
@@ -1755,6 +1803,8 @@ def phase_impedance_data_to_cim(pb: PBPhaseImpedanceData) -> Optional[PhaseImped
1755
1803
  )
1756
1804
 
1757
1805
 
1806
+ @bind_to_cim
1807
+ @add_to_network_or_none
1758
1808
  def power_electronics_connection_to_cim(pb: PBPowerElectronicsConnection, network_service: NetworkService) -> Optional[PowerElectronicsConnection]:
1759
1809
  # noinspection PyUnresolvedReferences
1760
1810
  cim = PowerElectronicsConnection(
@@ -1798,9 +1848,11 @@ def power_electronics_connection_to_cim(pb: PBPowerElectronicsConnection, networ
1798
1848
  network_service.resolve_or_defer_reference(resolver.power_electronics_connection_phase(cim), mrid)
1799
1849
 
1800
1850
  regulating_cond_eq_to_cim(pb.rce, cim, network_service)
1801
- return cim if network_service.add(cim) else None
1851
+ return cim
1802
1852
 
1803
1853
 
1854
+ @bind_to_cim
1855
+ @add_to_network_or_none
1804
1856
  def power_electronics_connection_phase_to_cim(
1805
1857
  pb: PBPowerElectronicsConnectionPhase,
1806
1858
  network_service: NetworkService
@@ -1816,9 +1868,11 @@ def power_electronics_connection_phase_to_cim(
1816
1868
  network_service.resolve_or_defer_reference(resolver.phase_power_electronics_connection(cim), pb.powerElectronicsConnectionMRID)
1817
1869
 
1818
1870
  power_system_resource_to_cim(pb.psr, cim, network_service)
1819
- return cim if network_service.add(cim) else None
1871
+ return cim
1820
1872
 
1821
1873
 
1874
+ @bind_to_cim
1875
+ @add_to_network_or_none
1822
1876
  def power_transformer_to_cim(pb: PBPowerTransformer, network_service: NetworkService) -> Optional[PowerTransformer]:
1823
1877
  # noinspection PyUnresolvedReferences
1824
1878
  cim = PowerTransformer(
@@ -1835,9 +1889,11 @@ def power_transformer_to_cim(pb: PBPowerTransformer, network_service: NetworkSer
1835
1889
  network_service.resolve_or_defer_reference(resolver.power_transformer_info(cim), pb.asset_info_mrid())
1836
1890
 
1837
1891
  conducting_equipment_to_cim(pb.ce, cim, network_service)
1838
- return cim if network_service.add(cim) else None
1892
+ return cim
1839
1893
 
1840
1894
 
1895
+ @bind_to_cim
1896
+ @add_to_network_or_none
1841
1897
  def power_transformer_end_to_cim(pb: PBPowerTransformerEnd, network_service: NetworkService) -> Optional[PowerTransformerEnd]:
1842
1898
  # noinspection PyUnresolvedReferences
1843
1899
  cim = PowerTransformerEnd(
@@ -1862,7 +1918,7 @@ def power_transformer_end_to_cim(pb: PBPowerTransformerEnd, network_service: Net
1862
1918
  transformer_end_to_cim(pb.te, cim, network_service)
1863
1919
 
1864
1920
  network_service.resolve_or_defer_reference(resolver.power_transformer(cim), pb.powerTransformerMRID)
1865
- return cim if network_service.add(cim) else None
1921
+ return cim
1866
1922
 
1867
1923
 
1868
1924
  def protected_switch_to_cim(pb: PBProtectedSwitch, cim: ProtectedSwitch, network_service: NetworkService):
@@ -1874,6 +1930,8 @@ def protected_switch_to_cim(pb: PBProtectedSwitch, cim: ProtectedSwitch, network
1874
1930
  switch_to_cim(pb.sw, cim, network_service)
1875
1931
 
1876
1932
 
1933
+ @bind_to_cim
1934
+ @add_to_network_or_none
1877
1935
  def ratio_tap_changer_to_cim(pb: PBRatioTapChanger, network_service: NetworkService) -> Optional[RatioTapChanger]:
1878
1936
  # noinspection PyUnresolvedReferences
1879
1937
  cim = RatioTapChanger(
@@ -1884,23 +1942,27 @@ def ratio_tap_changer_to_cim(pb: PBRatioTapChanger, network_service: NetworkServ
1884
1942
  network_service.resolve_or_defer_reference(resolver.transformer_end(cim), pb.transformerEndMRID)
1885
1943
 
1886
1944
  tap_changer_to_cim(pb.tc, cim, network_service)
1887
- return cim if network_service.add(cim) else None
1945
+ return cim
1888
1946
 
1889
1947
 
1948
+ @bind_to_cim
1949
+ @add_to_network_or_none
1890
1950
  def reactive_capability_curve_to_cim(pb: PBReactiveCapabilityCurve, network_service: NetworkService) -> Optional[ReactiveCapabilityCurve]:
1891
1951
  # noinspection PyUnresolvedReferences
1892
1952
  cim = ReactiveCapabilityCurve(mrid=pb.mrid())
1893
1953
 
1894
1954
  curve_to_cim(pb.c, cim, network_service)
1895
- return cim if network_service.add(cim) else None
1955
+ return cim
1896
1956
 
1897
1957
 
1958
+ @bind_to_cim
1959
+ @add_to_network_or_none
1898
1960
  def recloser_to_cim(pb: PBRecloser, network_service: NetworkService) -> Optional[Recloser]:
1899
1961
  # noinspection PyUnresolvedReferences
1900
1962
  cim = Recloser(mrid=pb.mrid())
1901
1963
 
1902
1964
  protected_switch_to_cim(pb.sw, cim, network_service)
1903
- return cim if network_service.add(cim) else None
1965
+ return cim
1904
1966
 
1905
1967
 
1906
1968
  def regulating_cond_eq_to_cim(pb: PBRegulatingCondEq, cim: RegulatingCondEq, network_service: NetworkService):
@@ -1939,6 +2001,8 @@ def rotating_machine_to_cim(pb: PBRotatingMachine, cim: RotatingMachine, network
1939
2001
  regulating_cond_eq_to_cim(pb.rce, cim, network_service)
1940
2002
 
1941
2003
 
2004
+ @bind_to_cim
2005
+ @add_to_network_or_none
1942
2006
  def series_compensator_to_cim(pb: PBSeriesCompensator, network_service: NetworkService) -> Optional[SeriesCompensator]:
1943
2007
  # noinspection PyUnresolvedReferences
1944
2008
  cim = SeriesCompensator(
@@ -1952,7 +2016,7 @@ def series_compensator_to_cim(pb: PBSeriesCompensator, network_service: NetworkS
1952
2016
  )
1953
2017
 
1954
2018
  conducting_equipment_to_cim(pb.ce, cim, network_service)
1955
- return cim if network_service.add(cim) else None
2019
+ return cim
1956
2020
 
1957
2021
 
1958
2022
  def shunt_compensator_to_cim(pb: PBShuntCompensator, cim: ShuntCompensator, network_service: NetworkService):
@@ -1966,6 +2030,8 @@ def shunt_compensator_to_cim(pb: PBShuntCompensator, cim: ShuntCompensator, netw
1966
2030
  regulating_cond_eq_to_cim(pb.rce, cim, network_service)
1967
2031
 
1968
2032
 
2033
+ @bind_to_cim
2034
+ @add_to_network_or_none
1969
2035
  def static_var_compensator_to_cim(pb: PBStaticVarCompensator, network_service: NetworkService):
1970
2036
  """
1971
2037
  Convert the protobuf :class:`PBStaticVarCompensator` into its CIM counterpart.
@@ -1984,7 +2050,7 @@ def static_var_compensator_to_cim(pb: PBStaticVarCompensator, network_service: N
1984
2050
  )
1985
2051
 
1986
2052
  regulating_cond_eq_to_cim(pb.rce, cim, network_service)
1987
- return cim if network_service.add(cim) else None
2053
+ return cim
1988
2054
 
1989
2055
 
1990
2056
  def switch_to_cim(pb: PBSwitch, cim: Switch, network_service: NetworkService):
@@ -1997,6 +2063,8 @@ def switch_to_cim(pb: PBSwitch, cim: Switch, network_service: NetworkService):
1997
2063
  conducting_equipment_to_cim(pb.ce, cim, network_service)
1998
2064
 
1999
2065
 
2066
+ @bind_to_cim
2067
+ @add_to_network_or_none
2000
2068
  def synchronous_machine_to_cim(pb: PBSynchronousMachine, network_service: NetworkService) -> Optional[SynchronousMachine]:
2001
2069
  # noinspection PyUnresolvedReferences
2002
2070
  cim = SynchronousMachine(
@@ -2028,7 +2096,7 @@ def synchronous_machine_to_cim(pb: PBSynchronousMachine, network_service: Networ
2028
2096
  network_service.resolve_or_defer_reference(resolver.reactive_capability_curve(cim), mrid)
2029
2097
 
2030
2098
  rotating_machine_to_cim(pb.rm, cim, network_service)
2031
- return cim if network_service.add(cim) else None
2099
+ return cim
2032
2100
 
2033
2101
 
2034
2102
  def tap_changer_to_cim(pb: PBTapChanger, cim: TapChanger, network_service: NetworkService):
@@ -2044,6 +2112,8 @@ def tap_changer_to_cim(pb: PBTapChanger, cim: TapChanger, network_service: Netwo
2044
2112
  power_system_resource_to_cim(pb.psr, cim, network_service)
2045
2113
 
2046
2114
 
2115
+ @bind_to_cim
2116
+ @add_to_network_or_none
2047
2117
  def tap_changer_control_to_cim(pb: PBTapChangerControl, network_service: NetworkService) -> Optional[TapChangerControl]:
2048
2118
  # noinspection PyUnresolvedReferences
2049
2119
  cim = TapChangerControl(
@@ -2060,7 +2130,7 @@ def tap_changer_control_to_cim(pb: PBTapChangerControl, network_service: Network
2060
2130
  )
2061
2131
 
2062
2132
  regulating_control_to_cim(pb.rc, cim, network_service)
2063
- return cim if network_service.add(cim) else None
2133
+ return cim
2064
2134
 
2065
2135
 
2066
2136
  def transformer_end_to_cim(pb: PBTransformerEnd, cim: TransformerEnd, network_service: NetworkService):
@@ -2081,6 +2151,8 @@ def transformer_end_rated_s_to_cim(pb: PBTransformerEndRatedS) -> Optional[Trans
2081
2151
  return TransformerEndRatedS(cooling_type=TransformerCoolingType(pb.coolingType), rated_s=pb.ratedS)
2082
2152
 
2083
2153
 
2154
+ @bind_to_cim
2155
+ @add_to_network_or_none
2084
2156
  def transformer_star_impedance_to_cim(pb: PBTransformerStarImpedance, network_service: NetworkService) -> Optional[TransformerStarImpedance]:
2085
2157
  # noinspection PyUnresolvedReferences
2086
2158
  cim = TransformerStarImpedance(mrid=pb.mrid(), r=pb.r, r0=pb.r0, x=pb.x, x0=pb.x0)
@@ -2088,48 +2160,15 @@ def transformer_star_impedance_to_cim(pb: PBTransformerStarImpedance, network_se
2088
2160
  network_service.resolve_or_defer_reference(resolver.star_impedance_transformer_end_info(cim), pb.transformerEndInfoMRID)
2089
2161
 
2090
2162
  identified_object_to_cim(pb.io, cim, network_service)
2091
- return cim if network_service.add(cim) else None
2092
-
2093
-
2094
- PBAcLineSegment.to_cim = ac_line_segment_to_cim
2095
- PBBreaker.to_cim = breaker_to_cim
2096
- PBBusbarSection.to_cim = busbar_section_to_cim
2097
- PBClamp.to_cim = clamp_to_cim
2098
- PBCut.to_cim = cut_to_cim
2099
- PBDisconnector.to_cim = disconnector_to_cim
2100
- PBEnergyConsumer.to_cim = energy_consumer_to_cim
2101
- PBEnergyConsumerPhase.to_cim = energy_consumer_phase_to_cim
2102
- PBEnergySource.to_cim = energy_source_to_cim
2103
- PBEnergySourcePhase.to_cim = energy_source_phase_to_cim
2104
- PBFuse.to_cim = fuse_to_cim
2105
- PBGround.to_cim = ground_to_cim
2106
- PBGroundDisconnector.to_cim = ground_disconnector_to_cim
2107
- PBGroundingImpedance.to_cim = grounding_impedance_to_cim
2108
- PBJumper.to_cim = jumper_to_cim
2109
- PBJunction.to_cim = junction_to_cim
2110
- PBLinearShuntCompensator.to_cim = linear_shunt_compensator_to_cim
2111
- PBLoadBreakSwitch.to_cim = load_break_switch_to_cim
2112
- PBPerLengthPhaseImpedance.to_cim = per_length_phase_impedance_to_cim
2113
- PBPerLengthSequenceImpedance.to_cim = per_length_sequence_impedance_to_cim
2114
- PBPetersenCoil.to_cim = petersen_coil_to_cim
2115
- PBPowerElectronicsConnection.to_cim = power_electronics_connection_to_cim
2116
- PBPowerElectronicsConnectionPhase.to_cim = power_electronics_connection_phase_to_cim
2117
- PBPowerTransformer.to_cim = power_transformer_to_cim
2118
- PBPowerTransformerEnd.to_cim = power_transformer_end_to_cim
2119
- PBRatioTapChanger.to_cim = ratio_tap_changer_to_cim
2120
- PBReactiveCapabilityCurve.to_cim = reactive_capability_curve_to_cim
2121
- PBRecloser.to_cim = recloser_to_cim
2122
- PBSeriesCompensator.to_cim = series_compensator_to_cim
2123
- PBStaticVarCompensator.to_cim = static_var_compensator_to_cim
2124
- PBSynchronousMachine.to_cim = synchronous_machine_to_cim
2125
- PBTapChangerControl.to_cim = tap_changer_control_to_cim
2126
- PBTransformerStarImpedance.to_cim = transformer_star_impedance_to_cim
2163
+ return cim
2127
2164
 
2128
2165
 
2129
2166
  ###############################
2130
2167
  # IEC61970 InfIEC61970 Feeder #
2131
2168
  ###############################
2132
2169
 
2170
+ @bind_to_cim
2171
+ @add_to_network_or_none
2133
2172
  def circuit_to_cim(pb: PBCircuit, network_service: NetworkService) -> Optional[Circuit]:
2134
2173
  # noinspection PyUnresolvedReferences
2135
2174
  cim = Circuit(mrid=pb.mrid())
@@ -2141,7 +2180,4 @@ def circuit_to_cim(pb: PBCircuit, network_service: NetworkService) -> Optional[C
2141
2180
  network_service.resolve_or_defer_reference(resolver.end_substation(cim), mrid)
2142
2181
 
2143
2182
  line_to_cim(pb.l, cim, network_service)
2144
- return cim if network_service.add(cim) else None
2145
-
2146
-
2147
- PBCircuit.to_cim = circuit_to_cim
2183
+ return cim