Recursive delete

master
Bob Mottram 2019-07-14 17:37:01 +01:00
parent 655c03e6a1
commit 9fab084e20
3 changed files with 21 additions and 21 deletions

View File

@ -20,6 +20,7 @@ from utils import getDomainFromActor
from utils import getNicknameFromActor
from utils import domainPermitted
from utils import locatePost
from utils import deletePost
from httpsig import verifyPostHeaders
from session import createSession
from session import getJson
@ -489,23 +490,6 @@ def receiveUndoLike(session,handle: str,baseDir: str, \
undoLikesCollectionEntry(postFilename,messageJson['object'],messageJson['actor'],debug)
return True
def deletePost(baseDir: str,nickname: str,domain: str,postFilename: str,debug: bool):
"""
"""
repliesFilename=postFilename.replace('.json','.replies')
if os.path.isfile(repliesFilename):
if debug:
print('DEBUG: removing replies to '+postFilename)
with open(repliesFilename,'r') as f:
for replyId in f:
replyFile=locatePost(baseDir,nickname,domain,replyId)
if replyFile:
if os.path.isfile(replyFile):
os.remove(replyFile)
# remove the replies file itself
os.remove(repliesFilename)
os.remove(postFilename)
def receiveDelete(session,handle: str,baseDir: str, \
httpPrefix: str,domain :str,port: int, \
sendThreads: [],postLog: [],cachedWebfingers: {}, \

View File

@ -33,6 +33,7 @@ from utils import createPersonDir
from utils import urlPermitted
from utils import getNicknameFromActor
from utils import getDomainFromActor
from utils import deletePost
from capabilities import getOcapFilename
from capabilities import capabilitiesUpdate
from media import attachImage
@ -999,16 +1000,14 @@ def archivePostsForPerson(nickname: str,domain: str,baseDir: str, \
for postFilename in postsInBox:
filePath = os.path.join(boxDir, postFilename)
if os.path.isfile(filePath):
repliesPath=filePath.replace('.json','.replies')
if archiveDir:
repliesPath=filePath.replace('.json','.replies')
archivePath = os.path.join(archiveDir, postFilename)
os.rename(filePath,archivePath)
if os.path.isfile(repliesPath):
os.rename(repliesPath,archivePath)
else:
os.remove(filePath)
if os.path.isfile(repliesPath):
os.remove(repliesPath)
deletePost(baseDir,nickname,domain,filePath,False)
noOfPosts -= 1
if noOfPosts <= maxPostsInBox:
break

View File

@ -141,3 +141,20 @@ def locatePost(baseDir: str,nickname: str,domain: str,postUrl: str,replies=False
if not os.path.isfile(postFilename):
postFilename=None
return postFilename
def deletePost(baseDir: str,nickname: str,domain: str,postFilename: str,debug: bool):
"""Recursively deletes a post and its replies and attachments
"""
repliesFilename=postFilename.replace('.json','.replies')
if os.path.isfile(repliesFilename):
if debug:
print('DEBUG: removing replies to '+postFilename)
with open(repliesFilename,'r') as f:
for replyId in f:
replyFile=locatePost(baseDir,nickname,domain,replyId)
if replyFile:
if os.path.isfile(replyFile):
deletePost(baseDir,nickname,domain,replyFile,debug)
# remove the replies file itself
os.remove(repliesFilename)
os.remove(postFilename)