Skip to content

Commit bd6dff3

Browse files
committed
change to DFS and add cycle detection
1 parent 1831280 commit bd6dff3

File tree

2 files changed

+59
-28
lines changed

2 files changed

+59
-28
lines changed

backend/endpoints/logfile.txt

+13
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,13 @@
1+
sorted_list begin
2+
Document A
3+
Document D
4+
Document E
5+
Document C
6+
Document B
7+
Document F
8+
sorted_list end
9+
10+
updated_references begin
11+
0
12+
updated_references end
13+

backend/endpoints/references.py

+46-28
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,19 @@
11
from hmac import new
2-
from math import log
2+
from math import e, log
33
from typing import Iterable
44
import flask
55
from requests import get
66

77
from backend.common.backend_exceptions import require_permissions
88

99
from backend.common import connect, database
10-
from backend.endpoints.linked_documents import LinkType, db_id_to_path, get_linked_documents, make_document, path_to_db_id
10+
from backend.endpoints.linked_documents import (
11+
LinkType,
12+
db_id_to_path,
13+
get_linked_documents,
14+
make_document,
15+
path_to_db_id,
16+
)
1117
from onshape_api.api.api_base import Api
1218
from onshape_api.endpoints.permissions import Permission
1319

@@ -163,47 +169,59 @@ def get_linked_parents(db, instance):
163169

164170
return linked_parents
165171

166-
unvisited_nodes = [curr_instance]
172+
unvisited_nodes = []
167173

168174
sorted_list = []
169175

170-
while unvisited_nodes:
171-
curr_node = unvisited_nodes.pop(0)
172-
sorted_list.append(curr_node)
173-
curr_node_parents = get_linked_parents(db, curr_node)
176+
route = []
177+
route.append(curr_instance)
174178

175-
for parent in curr_node_parents:
176-
if parent not in unvisited_nodes:
177-
unvisited_nodes.append(parent)
178-
179-
trimmed_list = [] #remove duplicates
179+
curr_parents = []
180180

181-
for instance in reversed(sorted_list):
182-
if instance not in trimmed_list:
183-
trimmed_list.insert(0,instance)
181+
while route:
182+
print(f"Route: {route}")
183+
print(f"Unvisited Nodes: {unvisited_nodes}")
184184

185-
with open("backend/endpoints/logfile.txt", "a") as log_file:
185+
curr_parents = get_linked_parents(db, route[-1])
186+
187+
for parent in sorted_list:
188+
if parent in curr_parents:
189+
curr_parents.remove(parent)
190+
191+
if not curr_parents:
192+
sorted_list.append(route.pop())
193+
194+
for parent in curr_parents:
195+
if parent in unvisited_nodes:
196+
unvisited_nodes.remove(parent)
186197

187-
log_file.write("curr_instance begin\n")
188-
log_file.write(f"{curr_instance}\n")
189-
log_file.write("curr_instance end\n\n")
198+
unvisited_nodes.extend(curr_parents)
190199

191-
log_file.write("trimmed_list begin\n")
192-
for node in trimmed_list:
193-
log_file.write(f"{documents.get_document(api, node)["name"]}\n")
194-
log_file.write("trimmed_list end\n\n")
200+
if curr_parents:
201+
if unvisited_nodes:
202+
if unvisited_nodes[-1] in route:
203+
raise Exception("Cycle detected")
204+
route.append(unvisited_nodes.pop())
195205

206+
sorted_list.reverse()
196207

197-
for instance in trimmed_list:
198-
require_permissions(api, instance, Permission.WRITE , Permission.LINK)
208+
with open("backend/endpoints/logfile.txt", "a") as log_file:
209+
210+
log_file.write("sorted_list begin\n")
211+
for node in sorted_list:
212+
log_file.write(f"{documents.get_document(api, node)['name']}\n")
213+
log_file.write("sorted_list end\n\n")
214+
215+
for instance in sorted_list:
216+
require_permissions(api, instance, Permission.WRITE, Permission.LINK)
199217

200218
versions.create_version(api, curr_instance, name, description)
201219

202220
updated_references = 0
203-
for update_instance in trimmed_list:
221+
for update_instance in sorted_list:
204222

205223
updated_references += do_update_references(
206-
api, update_instance, [doc.document_id for doc in trimmed_list]
224+
api, update_instance, [doc.document_id for doc in sorted_list]
207225
)
208226
versions.create_version(api, update_instance, name, description)
209227

@@ -213,4 +231,4 @@ def get_linked_parents(db, instance):
213231
log_file.write(f"{updated_references}\n")
214232
log_file.write("updated_references end\n\n")
215233

216-
return {"updatedReferences": updated_references}
234+
return {"updatedReferences": updated_references}

0 commit comments

Comments
 (0)