1+ from os import write
12from numpy import True_
23import pandas as pd
34from typing import Tuple
@@ -27,74 +28,26 @@ def add_cards_to_registry(
2728 out_df = input_df
2829
2930 for card , filename in card_file_list :
30- card_dict = card .__dict__
31- if "project" in card_dict :
32- project_name = card_dict .get ("project" , "Missing" )
33- if project_name not in input_df ["project_added" ].values :
34- if "changes" in card_dict :
35- card_needs_updating = False
36- for change_index , change_dict in enumerate (card_dict ["changes" ]):
37- if "nodes" in change_dict :
38- (
39- node_df ,
40- node_update ,
41- updated_change_dict ,
42- ) = _update_registry (
43- "nodes" ,
44- out_df ,
45- change_dict ,
46- project_name ,
47- nodes_in_use ,
48- )
49- else :
50- node_df = None
51- node_update = False
52-
53- link_df , link_update , updated_change_dict = _update_registry (
54- "links" ,
55- out_df ,
56- change_dict ,
57- project_name ,
58- links_in_use ,
59- )
60-
61- if node_df is not None :
62- out_df = out_df .append (node_df , ignore_index = True )
63-
64- out_df = (
65- out_df .append (link_df , ignore_index = True )
66- .drop_duplicates ()
67- .reset_index (drop = True )
68- )
69-
70- if node_update or link_update :
71- card_needs_updating = True
72- change_dict .update (updated_change_dict )
73- card_dict [change_index ] = updated_change_dict
74-
75- if card_needs_updating :
76- card .__dict__ .update (card_dict )
77- if write_to_disk :
78- card .write (filename = filename )
79-
80- if "category" in card_dict :
81- if "nodes" in card_dict :
82- node_df , node_update , updated_card_dict = _update_registry (
31+ if card .project not in input_df ["project_added" ].values :
32+ for change_index , change_dict in enumerate (card .changes ):
33+ if change_dict .get ("category" , "Missing" ) == "Add New Roadway" :
34+ if "nodes" in change_dict :
35+ node_df , node_update , card = _update_registry (
8336 "nodes" ,
8437 out_df ,
85- card_dict ,
86- project_name ,
38+ card ,
39+ change_index ,
8740 nodes_in_use ,
8841 )
8942 else :
9043 node_df = None
9144 node_update = False
9245
93- link_df , link_update , updated_card_dict = _update_registry (
46+ link_df , link_update , card = _update_registry (
9447 "links" ,
9548 out_df ,
96- card_dict ,
97- project_name ,
49+ card ,
50+ change_index ,
9851 links_in_use ,
9952 )
10053
@@ -107,9 +60,10 @@ def add_cards_to_registry(
10760 .reset_index (drop = True )
10861 )
10962
110- if link_update or node_update :
111- card .__dict__ .update (updated_card_dict )
63+ if node_update or link_update :
11264 if write_to_disk :
65+ card .__dict__ .pop ("file" )
66+ card .__dict__ .pop ("valid" )
11367 card .write (filename = filename )
11468
11569 return out_df
@@ -252,8 +206,8 @@ def _find_available_id(
252206def _update_registry (
253207 nodes_or_links : str ,
254208 input_df : pd .DataFrame ,
255- change_dict : dict ,
256- project_name : str ,
209+ card : ProjectCard ,
210+ change_index : int ,
257211 range_in_use : dict ,
258212) -> Tuple [pd .DataFrame , bool , dict ]:
259213 """
@@ -262,8 +216,8 @@ def _update_registry(
262216 Args:
263217 nodes_or_links: input string, 'nodes' or 'links'
264218 input_df: input registry DataFrame
265- change_dict: input dictionary of a project card change
266- project_name: string name of the project
219+ card: ProjectCard with new entry
220+ change_index: The index of the ProjectCard changes list being assessed
267221 start: largest node number in the existing network
268222
269223 Returns:
@@ -282,46 +236,45 @@ def _update_registry(
282236
283237 subject_df = input_df [input_df ["type" ] == subject_word ]
284238
285- if change_dict ["category" ] == "Add New Roadway" :
286- for subject_index , subject in enumerate (change_dict [nodes_or_links ]):
287- new_id = subject [subject_id_word ]
288-
289- _is_id_in_allowable_range (subject_word , project_name , new_id , range_in_use )
290- _is_id_used_in_base_network (
291- subject_word , project_name , new_id , range_in_use
239+ for subject_index , subject in enumerate (card .changes [change_index ][nodes_or_links ]):
240+ new_id = subject [subject_id_word ]
241+
242+ _is_id_in_allowable_range (subject_word , card .project , new_id , range_in_use )
243+ _is_id_used_in_base_network (subject_word , card .project , new_id , range_in_use )
244+ if new_id not in subject_df ["id" ].values :
245+ updates_df = pd .DataFrame (
246+ {
247+ "type" : subject_word ,
248+ "id" : [new_id ],
249+ "project_added" : [card .project ],
250+ }
292251 )
293- if new_id not in subject_df ["id" ].values :
294- updates_df = pd .DataFrame (
295- {
296- "type" : subject_word ,
297- "id" : [new_id ],
298- "project_added" : [project_name ],
299- }
300- )
301- subject_df = subject_df .append (updates_df )
302- else :
303- number = _find_available_id (
304- subject_word ,
305- project_name ,
306- new_id ,
307- range_in_use ,
308- subject_df ,
309- )
310- change_dict [nodes_or_links ][subject_index ][subject_id_word ] = number
311- if nodes_or_links == "nodes" :
312- for i in range (0 , len (change_dict ["links" ])):
313- if change_dict ["links" ][i ]["A" ] == new_id :
314- change_dict ["links" ][i ]["A" ] = number
315- if change_dict ["links" ][i ]["B" ] == new_id :
316- change_dict ["links" ][i ]["B" ] = number
317- updates_df = pd .DataFrame (
318- {
319- "type" : subject_word ,
320- "id" : [number ],
321- "project_added" : [project_name ],
322- }
323- )
324- subject_df = subject_df .append (updates_df )
325- write_updated_card = True
252+ subject_df = subject_df .append (updates_df )
253+ else :
254+ number = _find_available_id (
255+ subject_word ,
256+ card .project ,
257+ new_id ,
258+ range_in_use ,
259+ subject_df ,
260+ )
261+ card .changes [change_index ][nodes_or_links ][subject_index ][
262+ subject_id_word
263+ ] = number
264+ if nodes_or_links == "nodes" :
265+ for i in range (0 , len (card .changes [change_index ]["links" ])):
266+ if card .changes [change_index ]["links" ][i ]["A" ] == new_id :
267+ card .changes [change_index ]["links" ][i ]["A" ] = number
268+ if card .changes [change_index ]["links" ][i ]["B" ] == new_id :
269+ card .changes [change_index ]["links" ][i ]["B" ] = number
270+ updates_df = pd .DataFrame (
271+ {
272+ "type" : subject_word ,
273+ "id" : [number ],
274+ "project_added" : [card .project ],
275+ }
276+ )
277+ subject_df = subject_df .append (updates_df )
278+ write_updated_card = True
326279
327- return subject_df , write_updated_card , change_dict
280+ return subject_df , write_updated_card , card
0 commit comments