aboutsummaryrefslogtreecommitdiff
path: root/backend/data/genLinkedImgs.py
diff options
context:
space:
mode:
Diffstat (limited to 'backend/data/genLinkedImgs.py')
-rwxr-xr-xbackend/data/genLinkedImgs.py55
1 files changed, 48 insertions, 7 deletions
diff --git a/backend/data/genLinkedImgs.py b/backend/data/genLinkedImgs.py
index 5f49ffc..d32196e 100755
--- a/backend/data/genLinkedImgs.py
+++ b/backend/data/genLinkedImgs.py
@@ -1,6 +1,6 @@
#!/usr/bin/python3
-import sys
+import sys, re
import sqlite3
usageInfo = f"usage: {sys.argv[0]}\n"
@@ -11,11 +11,14 @@ if len(sys.argv) > 1:
sys.exit(1)
dbFile = "data.db"
+compoundNameRegex = re.compile(r"\[(.+) \+ (.+)]")
+upPropagateCompoundImgs = False
# Open db
dbCon = sqlite3.connect(dbFile)
dbCur = dbCon.cursor()
-dbCur.execute("CREATE TABLE linked_imgs (name TEXT PRIMARY KEY, eol_id INT)")
+dbCur.execute("CREATE TABLE linked_imgs (name TEXT PRIMARY KEY, eol_id INT, eol_id2 INT)")
+ # The eol_id2 column is used to provide the second part of a compound-image
# Get nodes with images
print("Getting nodes with images")
resolvedNodes = {} # Will map node names to eol IDs with a usable image
@@ -28,7 +31,8 @@ print("Got {} nodes".format(len(resolvedNodes)))
# Iterate through resolved nodes, resolving ancestors where able
print("Resolving ancestor nodes")
nodesToResolve = {}
-processedNodes = set()
+processedNodes = {}
+parentToChosenTips = {}
iterNum = 0
while len(resolvedNodes) > 0:
iterNum += 1
@@ -36,7 +40,7 @@ while len(resolvedNodes) > 0:
print("At iteration {}".format(iterNum))
# Get next node
(nodeName, eolId) = resolvedNodes.popitem()
- processedNodes.add(nodeName)
+ processedNodes[nodeName] = eolId
# Traverse upwards, resolving ancestors if able
while True:
# Get parent
@@ -56,9 +60,10 @@ while len(resolvedNodes) > 0:
# Check if highest-tips child
if (childObjs[0]["name"] == nodeName):
# Resolve parent, and continue from it
- dbCur.execute("INSERT INTO linked_imgs VALUES (?, ?)", (parent, eolId))
+ dbCur.execute("INSERT INTO linked_imgs VALUES (?, ?, ?)", (parent, eolId, None))
del nodesToResolve[parent]
- processedNodes.add(parent)
+ processedNodes[parent] = eolId
+ parentToChosenTips[parent] = childObjs[0]["tips"]
nodeName = parent
continue
else:
@@ -71,8 +76,44 @@ while len(resolvedNodes) > 0:
for (name, childObjs) in nodesToResolve.items():
childObj = next(c for c in childObjs if c["eolId"] != None)
resolvedNodes[name] = childObj["eolId"]
- dbCur.execute("INSERT INTO linked_imgs VALUES (?, ?)", (name, childObj["eolId"]))
+ parentToChosenTips[name] = childObj["tips"]
+ dbCur.execute("INSERT INTO linked_imgs VALUES (?, ?, ?)", (name, childObj["eolId"], None))
nodesToResolve.clear()
+# Iterate through processed nodes with compound names
+print("Replacing images for compound-name nodes")
+iterNum = 0
+for nodeName in processedNodes.keys():
+ iterNum += 1
+ if iterNum % 1e3 == 0:
+ print("At iteration {}".format(iterNum))
+ #
+ match = compoundNameRegex.fullmatch(nodeName)
+ if match != None:
+ # Replace associated image with subname images
+ (subName1, subName2) = match.group(1,2)
+ eolIdPair = [0, 0]
+ if subName1 in processedNodes:
+ eolIdPair[0] = processedNodes[subName1]
+ if subName2 in processedNodes:
+ eolIdPair[1] = processedNodes[subName2]
+ dbCur.execute("UPDATE linked_imgs SET eol_id = ?, eol_id2 = ? WHERE name = ?",
+ (eolIdPair[0], eolIdPair[1], nodeName,))
+ if upPropagateCompoundImgs:
+ # Repeat operation for parents, where needed
+ while True:
+ # Get parent
+ row = dbCur.execute("SELECT node FROM edges WHERE child = ?", (nodeName,)).fetchone()
+ if row != None:
+ parent = row[0]
+ # Check num tips
+ (numTips,) = dbCur.execute("SELECT tips from nodes WHERE name = ?", (nodeName,)).fetchone()
+ if parent in parentToChosenTips and parentToChosenTips[parent] <= numTips:
+ # Replace associated image
+ dbCur.execute("UPDATE linked_imgs SET eol_id = ?, eol_id2 = ? WHERE name = ?",
+ (eolIdPair[0], eolIdPair[1], parent))
+ nodeName = parent
+ continue
+ break
# Close db
dbCon.commit()
dbCon.close()