aboutsummaryrefslogtreecommitdiff
path: root/backend/server.py
diff options
context:
space:
mode:
authorTerry Truong <terry06890@gmail.com>2022-05-05 12:27:45 +1000
committerTerry Truong <terry06890@gmail.com>2022-05-05 12:27:45 +1000
commit6ff26ab72ec507698f43e86fd59188a3a3fbee54 (patch)
tree92c553f7100f6b12719ad144a0371e5be136f701 /backend/server.py
parentf7c43e02cadbca0546655187bd75eba274a481b7 (diff)
Make image copyright/link info retrieved upon info-modal open
Diffstat (limited to 'backend/server.py')
-rwxr-xr-xbackend/server.py59
1 files changed, 31 insertions, 28 deletions
diff --git a/backend/server.py b/backend/server.py
index 0e208c3..c1e5538 100755
--- a/backend/server.py
+++ b/backend/server.py
@@ -43,30 +43,23 @@ def lookupNodes(names):
# Check for image file
match = re.fullmatch(r"\[(.+) \+ (.+)]", name)
if match == None:
- nodeObj["img"] = nodeNameToFile(name)
+ nodeObj["imgName"] = getNodeImg(name)
else:
- nodeObj["img"] = nodeNameToFile(match.group(1))
- if nodeObj["img"] == None:
- nodeObj["img"] = nodeNameToFile(match.group(2))
+ nodeObj["imgName"] = getNodeImg(match.group(1))
+ if nodeObj["imgName"] == None:
+ nodeObj["imgName"] = getNodeImg(match.group(2))
# Add node object
nodeObjs[name] = nodeObj
return nodeObjs
-def nodeNameToFile(name):
+def getNodeImg(name):
cur = dbCon.cursor()
row = cur.execute("SELECT name, id FROM eol_ids WHERE name = ?", (name,)).fetchone()
- if row == None:
- return None
- eolId = row[1]
- filename = str(eolId) + ".jpg"
- if not os.path.exists(imgDir + filename):
- return None
- row = cur.execute(
- "SELECT eol_id, source_url, license, copyright_owner FROM images WHERE eol_id = ?", (eolId,)).fetchone()
- if row == None:
- print("ERROR: No 'images' entry for image file {}".format(imgDir + filename), file=sys.stderr)
- return None
- [eolId, sUrl, license, cOwner] = row
- return {"filename": filename, "eolId": eolId, "sourceUrl": sUrl, "license": license, "copyrightOwner": cOwner}
+ if row != None:
+ eolId = row[1]
+ filename = str(eolId) + ".jpg"
+ if os.path.exists(imgDir + filename):
+ return filename
+ return None
def lookupName(name):
cur = dbCon.cursor()
results = []
@@ -90,11 +83,21 @@ def lookupName(name):
if len(results) > SEARCH_SUGG_LIMIT:
hasMore = True
del results[-1]
- return json.dumps([results, hasMore])
-def lookupDesc(name):
+ return [results, hasMore]
+def lookupNodeInfo(name):
cur = dbCon.cursor()
+ # Get node desc
row = cur.execute("SELECT desc, redirected from descs WHERE descs.name = ?", (name,)).fetchone()
- return json.dumps([row[0], row[1] == 1] if row != None else None)
+ desc = {"text": row[0], "fromRedirect": row[1] == 1} if row != None else None
+ # Get img info
+ imgInfoQuery = "SELECT eol_id, source_url, license, copyright_owner FROM" \
+ " images INNER JOIN eol_ids ON images.eol_id = eol_ids.id WHERE eol_ids.name = ?"
+ row = cur.execute(imgInfoQuery, (name,)).fetchone()
+ imgInfo = None
+ if row != None:
+ imgInfo = {"eolId": row[0], "sourceUrl": row[1], "license": row[2], "copyrightOwner": row[3]}
+ #
+ return {"desc": desc, "imgInfo": imgInfo}
class DbServer(BaseHTTPRequestHandler):
def do_GET(self):
@@ -114,7 +117,7 @@ class DbServer(BaseHTTPRequestHandler):
nodeObj = nodeObjs[name]
childNodeObjs = lookupNodes(nodeObj["children"])
childNodeObjs[name] = nodeObj
- self.respondJson(json.dumps(childNodeObjs))
+ self.respondJson(childNodeObjs)
return
elif reqType == "chain":
results = {}
@@ -124,7 +127,7 @@ class DbServer(BaseHTTPRequestHandler):
nodeObjs = lookupNodes([name])
if len(nodeObjs) == 0:
if not ranOnce:
- self.respondJson(json.dumps(results))
+ self.respondJson(results)
return
print("ERROR: Parent-chain node {} not found".format(name), file=sys.stderr)
break
@@ -142,24 +145,24 @@ class DbServer(BaseHTTPRequestHandler):
results.update(childNodeObjs)
# Check if root
if nodeObj["parent"] == None:
- self.respondJson(json.dumps(results))
+ self.respondJson(results)
return
else:
name = nodeObj["parent"]
elif reqType == "search":
self.respondJson(lookupName(name))
return
- elif reqType == "desc":
- self.respondJson(lookupDesc(name))
+ elif reqType == "info":
+ self.respondJson(lookupNodeInfo(name))
return
self.send_response(404)
self.end_headers()
self.end_headers()
- def respondJson(self, jsonStr):
+ def respondJson(self, val):
self.send_response(200)
self.send_header("Content-type", "application/json")
self.end_headers()
- self.wfile.write(jsonStr.encode("utf-8"))
+ self.wfile.write(json.dumps(val).encode("utf-8"))
server = HTTPServer((hostname, port), DbServer)
print("Server started at http://{}:{}".format(hostname, port))