Blorg-Backend/orgHandler.py

59 lines
2.0 KiB
Python

from orgparse import loads
blogDir: str = "./blogs"
debug: bool = True
def debugPrint(msg: str) -> None:
if debug:
print("(ORG HANDLER) PRINT: " + msg)
def checkAndRetrieveMetadata(fileData: str, metadataName: str):
line = fileData.readline()
metadataFullName = "#+" + metadataName + ":"
if metadataFullName in line:
linetoarray = line.split()
return " ".join(linetoarray[1:])
else:
debugPrint("Could not find " + metadataFullName + " metadata field of document!")
return False
def getOrgTitle(blogID: int) -> str:
try:
fileData = open(blogDir + "/" + str(blogID) + "/" + str(blogID) + ".org", 'r')
title = checkAndRetrieveMetadata(fileData, "TITLE")
if title:
return title
except Exception as error:
debugPrint("Error getting blog title! " + repr(error))
def getOrgDescription(blogID: str) -> str:
try:
fileData = open(blogDir + "/" + str(blogID) + "/" + str(blogID) + ".org", 'r')
orgRoot = loads(fileData.read())
fileData.readline()
shortDescription = checkAndRetrieveMetadata(fileData, "DESCRIPTION")
if not shortDescription:
debugPrint("No valid description found, will generate a placeholder from the text itself...")
firstText = orgRoot[1].body
shortDescription = (firstText[:60] + "...") if len(firstText) > 60 else firstText
return shortDescription
except Exception as error:
debugPrint("Error getting org title! " + repr(error))
def orgToHTML(orgData: str) -> str:
try:
orgRoot = loads(orgData)
parsedHTML = ""
for node in orgRoot[1:]:
if node.heading:
headingLevel = str(node.level)
parsedHTML += "<h" + headingLevel + ">" + node.heading + "</h" + headingLevel + ">" + "\n"
if node.body:
parsedHTML += node.body + "\n"
return parsedHTML
except Exception as error:
debugPrint("Error parsing org! " + repr(error))