Implement uploading blog in Base32 encoding, fix metadata retrieval functionality. Ensure title, author and optional description field is including in the HTML blog generation
This commit is contained in:
parent
ee7592f0fb
commit
3776666639
|
|
@ -45,24 +45,27 @@ def getBlogTitle(blogID: int) -> str:
|
|||
try:
|
||||
fileData = open(blogDir + "/" + str(blogID) + "/" + str(blogID) + ".org", 'r')
|
||||
title = orgHandler.checkAndRetrieveMetadata(fileData, "TITLE")
|
||||
fileData.close()
|
||||
if title:
|
||||
return title
|
||||
except Exception as error:
|
||||
debugPrint("Error getting blog title! " + repr(error))
|
||||
|
||||
def getBlogDescription(blogID: int) -> str:
|
||||
def getBlogDescription(blogID: int) -> tuple:
|
||||
debugPrint("Attempting to retrieve blog description of blog ID " + str(blogID))
|
||||
try:
|
||||
fileData = open(blogDir + "/" + str(blogID) + "/" + str(blogID) + ".org", 'r')
|
||||
orgRoot = loads(fileData.read())
|
||||
|
||||
fileData.readline()
|
||||
shortDescription = orgHandler.checkAndRetrieveMetadata(fileData, "DESCRIPTION")
|
||||
fileData.close()
|
||||
fileData = open(blogDir + "/" + str(blogID) + "/" + str(blogID) + ".org", 'r')
|
||||
orgRoot = loads(fileData.read())
|
||||
fileData.close()
|
||||
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
|
||||
return (shortDescription, False)
|
||||
return (shortDescription, True)
|
||||
except Exception as error:
|
||||
debugPrint("Error getting blog description! Unexpected error: " + repr(error) + ".")
|
||||
|
||||
|
|
@ -94,7 +97,16 @@ def generateBlogTitle(dbConnection: psycopg2.extensions.connection, blogID: int)
|
|||
return dbHandler.changeFieldValueByID(dbConnection, "blogs", blogID, "title", getBlogTitle(blogID))
|
||||
|
||||
def generateBlogDescription(dbConnection: psycopg2.extensions.connection, blogID: int) -> tuple:
|
||||
return dbHandler.changeFieldValueByID(dbConnection, "blogs", blogID, "description", getBlogDescription(blogID))
|
||||
return dbHandler.changeFieldValueByID(dbConnection, "blogs", blogID, "description", getBlogDescription(blogID)[0])
|
||||
|
||||
def generateBlogHTMLContents(dbConnection: psycopg2.extensions.connection, orgParsed: str, userID: int, blogID: int) -> str:
|
||||
generatedHTML = orgParsed
|
||||
shortDescription = getBlogDescription(blogID)
|
||||
if shortDescription[1]:
|
||||
generatedHTML = "<p>" + shortDescription[0] + "</p>\n" + generatedHTML
|
||||
generatedHTML = "<h2>" + userHandler.getUserInfoByID(dbConnection, userID, "username") + "</h2>\n" + generatedHTML
|
||||
generatedHTML = "<h1>" + getBlogTitle(blogID) + "</h1>\n" + generatedHTML
|
||||
return generatedHTML
|
||||
|
||||
def uploadBlog(dbConnection: psycopg2.extensions.connection, userID: int, orgRawIn: str):
|
||||
try:
|
||||
|
|
@ -113,8 +125,10 @@ def uploadBlog(dbConnection: psycopg2.extensions.connection, userID: int, orgRaw
|
|||
|
||||
debugPrint("Attempting to write new blog file " + blogDir + "/" + str(blogID) + "/" + str(blogID) + ".html...")
|
||||
HTMLFileData = open(newBlogDir + "/" + str(blogID) + ".html", 'w')
|
||||
HTMLFileData.write(orgParsedOut)
|
||||
orgFileData = open(newBlogDir + "/" + str(blogID) + ".org", 'r')
|
||||
HTMLFileData.write(generateBlogHTMLContents(dbConnection, orgParsedOut, userID, blogID))
|
||||
HTMLFileData.close()
|
||||
orgFileData.close()
|
||||
|
||||
generateBlogTitle(dbConnection, blogID)
|
||||
generateBlogDescription(dbConnection, blogID)
|
||||
|
|
|
|||
4
main.py
4
main.py
|
|
@ -2,6 +2,7 @@ import os
|
|||
import sys
|
||||
import atexit
|
||||
import signal
|
||||
import base64
|
||||
from typing import Union, Annotated
|
||||
|
||||
from contextlib import asynccontextmanager
|
||||
|
|
@ -284,8 +285,9 @@ class postblogCreateBody(BaseModel):
|
|||
def postblogCreate(body: postblogCreateBody):
|
||||
try:
|
||||
if tokenHandler.validateTokenExistence(dbConnection, body.authToken):
|
||||
decodedOrgContents = base64.b32decode(body.orgContents).decode()
|
||||
userID = userHandler.getIDByAuthToken(dbConnection, body.authToken)
|
||||
newBlog = blogHandler.uploadBlog(dbConnection, userID, body.orgContents)
|
||||
newBlog = blogHandler.uploadBlog(dbConnection, userID, decodedOrgContents)
|
||||
if newBlog:
|
||||
return {
|
||||
"success": True,
|
||||
|
|
|
|||
|
|
@ -1,3 +1,5 @@
|
|||
import os
|
||||
|
||||
from orgparse import loads
|
||||
|
||||
blogDir: str = "./blogs"
|
||||
|
|
@ -7,15 +9,14 @@ def debugPrint(msg: str) -> None:
|
|||
if debug:
|
||||
print("(ORG HANDLER) PRINT: " + msg)
|
||||
|
||||
def checkAndRetrieveMetadata(fileData: str, metadataName: str):
|
||||
line = fileData.readline()
|
||||
def checkAndRetrieveMetadata(fileData, metadataName: str):
|
||||
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
|
||||
for line in fileData:
|
||||
if metadataFullName in line:
|
||||
linetoarray = line.split()
|
||||
return " ".join(linetoarray[1:])
|
||||
debugPrint("Could not find " + metadataFullName + " metadata field of document!")
|
||||
return False
|
||||
|
||||
def orgToHTML(orgData: str) -> str:
|
||||
try:
|
||||
|
|
@ -24,8 +25,9 @@ def orgToHTML(orgData: str) -> str:
|
|||
|
||||
for node in orgRoot[1:]:
|
||||
if node.heading:
|
||||
headingLevel = str(node.level if node.level <= 6 else 6)
|
||||
parsedHTML += "<h" + headingLevel + ">" + node.heading + "</h" + headingLevel + ">" + "\n"
|
||||
headingLevel = node.level if node.level <= 6 else 6
|
||||
headingLevel += 2
|
||||
parsedHTML += "<h" + str(headingLevel) + ">" + node.heading + "</h" + str(headingLevel) + ">" + "\n"
|
||||
if node.body:
|
||||
parsedHTML += node.body + "\n"
|
||||
return parsedHTML
|
||||
|
|
|
|||
Loading…
Reference in New Issue