@@ -39,12 +39,12 @@ def _get_client():
3939 return NetworkConsumerClient (channel )
4040
4141
42- async def get_feeders (_client = None ) -> Dict [str , Feeder ]:
42+ async def get_feeders (_client = None ) -> Dict [str , Feeder ]:
4343 _feeders = (await (_client or _get_client ()).get_network_hierarchy ()).result .feeders
4444 return _feeders
4545
4646
47- async def get_feeder_equipmet (client : NetworkConsumerClient , feeder_mrid : str ) -> None :
47+ async def get_feeder_equipment (client : NetworkConsumerClient , feeder_mrid : str ) -> None :
4848 """Get all objects under the feeder, including LV Feeders"""
4949 (await client .get_equipment_container (
5050 feeder_mrid ,
@@ -59,7 +59,7 @@ async def trace_from_energy_consumers(feeder_mrid: str, client=None):
5959 Trace upstream from every EnergyConsumer.
6060 """
6161 client = client or _get_client ()
62- await get_feeder_equipmet (client , feeder_mrid )
62+ await get_feeder_equipment (client , feeder_mrid )
6363
6464 def _get_equipment_tree_trace (up_data : dict ) -> NetworkTrace :
6565 def step_action (step : NetworkTraceStep , _ : StepContext ):
@@ -104,6 +104,7 @@ async def trace_from_feeder_downstream(feeder_mrid: str, client=None):
104104 Build an equipment tree of everything downstream of the feeder.
105105 Use the Equipment tree to recurse through parent equipment of all EC's and get the equipment we are interested in.
106106 """
107+
107108 def process_leaf (up_data : dict , leaf : TreeNode ):
108109 to_equip : IdentifiedObject = leaf .identified_object
109110
@@ -119,8 +120,8 @@ def process_leaf(up_data: dict, leaf: TreeNode):
119120 elif not up_data .get ('regulator' ) and to_equip .function == TransformerFunctionKind .voltageRegulator :
120121 up_data ['regulator' ] = to_equip
121122
122- client = client or _get_client ()
123- await get_feeder_equipmet (client , feeder_mrid )
123+ client = client or _get_client ()
124+ await get_feeder_equipment (client , feeder_mrid )
124125
125126 builder = EquipmentTreeBuilder ()
126127
@@ -135,10 +136,12 @@ def process_leaf(up_data: dict, leaf: TreeNode):
135136
136137 for leaf in (l for l in builder .leaves if isinstance ((ec := l .identified_object ), EnergyConsumer )):
137138 ec_data = {'feeder' : feeder .mrid , 'energy_consumer_mrid' : ec .mrid }
139+
138140 def _process (_leaf ):
139141 process_leaf (ec_data , _leaf )
140142 if _leaf .parent :
141143 _process (_leaf .parent )
144+
142145 _process (leaf )
143146
144147 row = _build_row (ec_data )
@@ -154,7 +157,7 @@ async def trace_from_feeder_context(feeder_mrid: str, client=None):
154157 """
155158 client = client or _get_client ()
156159 # Get all objects under the feeder, including Substations and LV Feeders
157- await get_feeder_equipmet (client , feeder_mrid )
160+ await get_feeder_equipment (client , feeder_mrid )
158161
159162 energy_consumers = []
160163
@@ -210,15 +213,15 @@ class NullEquipment:
210213
211214def _build_row (up_data : dict [str , IdentifiedObject | str ]) -> EnergyConsumerDeviceHierarchy :
212215 return EnergyConsumerDeviceHierarchy (
213- energy_consumer_mrid = up_data ['energy_consumer_mrid' ],
214- upstream_switch_mrid = (up_data .get ('upstream_switch' ) or NullEquipment ).mrid ,
215- lv_circuit_name = (up_data .get ('upstream_switch' ) or NullEquipment ).name ,
216- upstream_switch_class = type (up_data .get ('upstream_switch' )).__name__ ,
217- distribution_power_transformer_mrid = (up_data .get ('distribution_power_transformer' ) or NullEquipment ).mrid ,
218- distribution_power_transformer_name = (up_data .get ('distribution_power_transformer' ) or NullEquipment ).name ,
219- regulator_mrid = (up_data .get ('regulator' ) or NullEquipment ).mrid ,
220- breaker_mrid = (up_data .get ('breaker' ) or NullEquipment ).mrid ,
221- feeder_mrid = up_data .get ('feeder' ),
216+ energy_consumer_mrid = up_data ['energy_consumer_mrid' ],
217+ upstream_switch_mrid = (up_data .get ('upstream_switch' ) or NullEquipment ).mrid ,
218+ lv_circuit_name = (up_data .get ('upstream_switch' ) or NullEquipment ).name ,
219+ upstream_switch_class = type (up_data .get ('upstream_switch' )).__name__ ,
220+ distribution_power_transformer_mrid = (up_data .get ('distribution_power_transformer' ) or NullEquipment ).mrid ,
221+ distribution_power_transformer_name = (up_data .get ('distribution_power_transformer' ) or NullEquipment ).name ,
222+ regulator_mrid = (up_data .get ('regulator' ) or NullEquipment ).mrid ,
223+ breaker_mrid = (up_data .get ('breaker' ) or NullEquipment ).mrid ,
224+ feeder_mrid = up_data .get ('feeder' ),
222225 )
223226
224227
@@ -236,22 +239,23 @@ async def main_async(trace_type: Callable):
236239 """
237240 from tqdm import tqdm
238241 client = _get_client ()
239- feeders = list (await get_feeders (client ))
242+ feeders = ["<FEEDER_ID>" ]
243+ # feeders = list(await get_feeders(client)) # Uncomment to process all feeders
240244 for _feeder in tqdm (feeders ):
241245 await trace_type (_feeder , client )
242246
243247 # Uncomment to run other trace functions
244248 asyncio .run (main_async (trace_from_feeder_context ))
245- #asyncio.run(main_async(trace_from_feeder_downstream))
246- #asyncio.run(main_async(trace_from_energy_consumers))
249+ # asyncio.run(main_async(trace_from_feeder_downstream))
250+ # asyncio.run(main_async(trace_from_energy_consumers))
247251
248252
249253def process_feeders_concurrently ():
250254 def multi_proc (_feeder ):
251255 # Uncomment to run other trace functions
252256 asyncio .run (trace_from_feeder_context (_feeder ))
253- #asyncio.run(trace_from_feeder_downstream(_feeder))
254- #asyncio.run(trace_from_energy_consumers(_feeder))
257+ # asyncio.run(trace_from_feeder_downstream(_feeder))
258+ # asyncio.run(trace_from_energy_consumers(_feeder))
255259
256260 # Get a list of feeders before entering main compute section of script.
257261 feeders = list (asyncio .run (get_feeders ()))
@@ -262,3 +266,4 @@ def multi_proc(_feeder):
262266
263267if __name__ == "__main__" :
264268 process_feeders_sequentially ()
269+ # process_feeders_concurrently() # Uncomment and comment sequentially above to multi-process, note this is resource intensive and may cause issues.
0 commit comments