Skip to content

Commit 490c478

Browse files
authored
Merge pull request #19 from wsp-sag/staging
Refactor to assume all Project Cards have `changes` key
2 parents 642e29a + 4693565 commit 490c478

File tree

12 files changed

+284
-340
lines changed

12 files changed

+284
-340
lines changed
Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
project: Project E
1+
project: Project B
22
tags:
33
- registry_example
44
dependencies: ''
@@ -34,3 +34,5 @@ changes:
3434
transit_node: 0
3535
walk_node: 0
3636
model_node_id: 1002
37+
file: ./projects/project_B.yml
38+
valid: false

delete_me.csv

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
type,id,project_added
2+
node,1001,Project B
3+
node,1002,Project B
4+
link,501,Project B
5+
node,1003,Project A
6+
node,1004,Project A
7+
link,502,Project A

methods_add_cards.py

Lines changed: 58 additions & 105 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,4 @@
1+
from os import write
12
from numpy import True_
23
import pandas as pd
34
from 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(
252206
def _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

Comments
 (0)