From 7c37ffcd36683963809b28fa401c722e007a5b84 Mon Sep 17 00:00:00 2001 From: Bob Mottram Date: Mon, 24 Feb 2020 22:34:54 +0000 Subject: [PATCH] Save blogs to their own box --- epicyon.py | 3 ++- posts.py | 41 +++++++++++++++++++++++++++-------------- tests.py | 29 ++++++++++++++++------------- 3 files changed, 45 insertions(+), 28 deletions(-) diff --git a/epicyon.py b/epicyon.py index 9d8b43a7e..909229dd8 100644 --- a/epicyon.py +++ b/epicyon.py @@ -627,6 +627,7 @@ if args.message: mediaType=getAttachmentMediaType(attach) replyTo=args.replyto followersOnly=False + isArticle=False print('Sending post to '+args.sendto) sendPostViaServer(__version__, \ @@ -636,7 +637,7 @@ if args.message: httpPrefix,sendMessage,followersOnly, \ attach,mediaType, \ attachedImageDescription,useBlurhash, \ - cachedWebfingers,personCache, \ + cachedWebfingers,personCache,isArticle, \ args.debug,replyTo,replyTo,subject) for i in range(10): # TODO detect send success/fail diff --git a/posts.py b/posts.py index 3ac94d645..75e0015fd 100644 --- a/posts.py +++ b/posts.py @@ -403,7 +403,7 @@ def getPosts(session,outboxUrl: str,maxPosts: int, \ def deleteAllPosts(baseDir: str,nickname: str, domain: str,boxname: str) -> None: """Deletes all posts for a person from inbox or outbox """ - if boxname!='inbox' and boxname!='outbox': + if boxname!='inbox' and boxname!='outbox' and boxname!='tlblogs': return boxDir = createPersonDir(nickname,domain,baseDir,boxname) for deleteFilename in os.scandir(boxDir): @@ -422,7 +422,8 @@ def savePostToBox(baseDir: str,httpPrefix: str,postId: str, \ """Saves the give json to the give box Returns the filename """ - if boxname!='inbox' and boxname!='outbox' and boxname!='scheduled': + if boxname!='inbox' and boxname!='outbox' and \ + boxname!='tlblogs' and boxname!='scheduled': return None originalDomain=domain if ':' in domain: @@ -507,7 +508,8 @@ def createPostBase(baseDir: str,nickname: str,domain: str,port: int, \ followersOnly: bool,saveToFile: bool,clientToServer: bool, \ attachImageFilename: str, \ mediaType: str,imageDescription: str, \ - useBlurhash: bool,isModerationReport: bool,inReplyTo=None, \ + useBlurhash: bool,isModerationReport: bool,isArticle: bool, \ + inReplyTo=None, \ inReplyToAtomUri=None,subject=None, \ schedulePost=False, \ eventDate=None,eventTime=None,location=None) -> {}: @@ -766,8 +768,12 @@ def createPostBase(baseDir: str,nickname: str,domain: str,port: int, \ print('Unable to create scheduled post without date and time values') return newPost elif saveToFile: - savePostToBox(baseDir,httpPrefix,newPostId, \ - nickname,domain,newPost,'outbox') + if not isArticle: + savePostToBox(baseDir,httpPrefix,newPostId, \ + nickname,domain,newPost,'outbox') + else: + savePostToBox(baseDir,httpPrefix,newPostId, \ + nickname,domain,newPost,'tlblogs') return newPost def outboxMessageCreateWrap(httpPrefix: str, \ @@ -889,7 +895,7 @@ def createPublicPost(baseDir: str, \ clientToServer, \ attachImageFilename,mediaType, \ imageDescription,useBlurhash, \ - False,inReplyTo,inReplyToAtomUri,subject, \ + False,False,inReplyTo,inReplyToAtomUri,subject, \ schedulePost,eventDate,eventTime,location) def createBlogPost(baseDir: str, \ @@ -938,7 +944,7 @@ def createQuestionPost(baseDir: str, clientToServer, \ attachImageFilename,mediaType, \ imageDescription,useBlurhash, \ - False,None,None,subject, \ + False,False,None,None,subject, \ False,None,None,None) messageJson['object']['type']='Question' messageJson['object']['oneOf']=[] @@ -982,7 +988,7 @@ def createUnlistedPost(baseDir: str, clientToServer, \ attachImageFilename,mediaType, \ imageDescription,useBlurhash, \ - False,inReplyTo, inReplyToAtomUri, subject, \ + False,False,inReplyTo,inReplyToAtomUri,subject, \ schedulePost,eventDate,eventTime,location) def createFollowersOnlyPost(baseDir: str, @@ -1008,7 +1014,7 @@ def createFollowersOnlyPost(baseDir: str, clientToServer, \ attachImageFilename,mediaType, \ imageDescription,useBlurhash, \ - False,inReplyTo, inReplyToAtomUri, subject, \ + False,False,inReplyTo,inReplyToAtomUri,subject, \ schedulePost,eventDate,eventTime,location) def getMentionedPeople(baseDir: str,httpPrefix: str, \ @@ -1071,7 +1077,7 @@ def createDirectMessagePost(baseDir: str, clientToServer, \ attachImageFilename,mediaType, \ imageDescription,useBlurhash, \ - False,inReplyTo,inReplyToAtomUri,subject, \ + False,False,inReplyTo,inReplyToAtomUri,subject, \ schedulePost,eventDate,eventTime,location) # mentioned recipients go into To rather than Cc messageJson['to']=messageJson['object']['cc'] @@ -1160,7 +1166,7 @@ def createReportPost(baseDir: str, clientToServer, \ attachImageFilename,mediaType, \ imageDescription,useBlurhash, \ - True,None,None,subject, \ + True,False,None,None,subject, \ False,None,None,None) if not postJsonObject: continue @@ -1246,6 +1252,7 @@ def sendPost(projectVersion: str, \ imageDescription: str,useBlurhash: bool, \ federationList: [],\ sendThreads: [], postLog: [], cachedWebfingers: {},personCache: {}, \ + isArticle: bool, \ debug=False,inReplyTo=None,inReplyToAtomUri=None,subject=None) -> int: """Post to another inbox """ @@ -1273,6 +1280,8 @@ def sendPost(projectVersion: str, \ postToBox='inbox' else: postToBox='outbox' + if isArticle: + postToBox='tlblogs' # get the actor inbox for the To handle inboxUrl,pubKeyId,pubKey,toPersonId,sharedInbox,capabilityAcquisition,avatarUrl,displayName = \ @@ -1294,14 +1303,14 @@ def sendPost(projectVersion: str, \ if not toPersonId: return 5 # sharedInbox and capabilities are optional - + postJsonObject = \ createPostBase(baseDir,nickname,domain,port, \ toPersonId,cc,httpPrefix,content, \ followersOnly,saveToFile,clientToServer, \ attachImageFilename,mediaType, \ imageDescription,useBlurhash, \ - False,inReplyTo,inReplyToAtomUri,subject, \ + False,isArticle,inReplyTo,inReplyToAtomUri,subject, \ False,None,None,None) # get the senders private key @@ -1350,6 +1359,7 @@ def sendPostViaServer(projectVersion: str, \ attachImageFilename: str,mediaType: str, \ imageDescription: str,useBlurhash: bool, \ cachedWebfingers: {},personCache: {}, \ + isArticle: bool, \ debug=False,inReplyTo=None, \ inReplyToAtomUri=None,subject=None) -> int: """Send a post via a proxy (c2s) @@ -1376,6 +1386,8 @@ def sendPostViaServer(projectVersion: str, \ return 1 postToBox='outbox' + if isArticle: + postToBox='tlblogs' # get the actor inbox for the To handle inboxUrl,pubKeyId,pubKey,fromPersonId,sharedInbox,capabilityAcquisition,avatarUrl,displayName = \ @@ -1417,6 +1429,7 @@ def sendPostViaServer(projectVersion: str, \ if ':' not in toDomain: toDomainFull=toDomain+':'+str(toPort) toPersonId=httpPrefix+'://'+toDomainFull+'/users/'+toNickname + postJsonObject = \ createPostBase(baseDir, \ fromNickname,fromDomain,fromPort, \ @@ -1424,7 +1437,7 @@ def sendPostViaServer(projectVersion: str, \ followersOnly,saveToFile,clientToServer, \ attachImageFilename,mediaType, \ imageDescription,useBlurhash, \ - False,inReplyTo,inReplyToAtomUri,subject, \ + False,isArticle,inReplyTo,inReplyToAtomUri,subject, \ False,None,None,None) authHeader=createBasicAuthHeader(fromNickname,password) diff --git a/tests.py b/tests.py index a180d6a75..2bae1cb1b 100644 --- a/tests.py +++ b/tests.py @@ -422,19 +422,20 @@ def testPostMessageBetweenServers(): mediaType=getAttachmentMediaType(attachedImageFilename) attachedImageDescription='Logo' useBlurhash=True + isArticle=False # nothing in Alice's outbox outboxPath=aliceDir+'/accounts/alice@'+aliceDomain+'/outbox' assert len([name for name in os.listdir(outboxPath) if os.path.isfile(os.path.join(outboxPath, name))])==0 sendResult = \ sendPost(__version__, \ - sessionAlice,aliceDir,'alice', aliceDomain, alicePort, \ - 'bob', bobDomain, bobPort, ccUrl, httpPrefix, \ - 'Why is a mouse when it spins? यह एक परीक्षण है #sillyquestion', followersOnly, \ - saveToFile, clientToServer,attachedImageFilename,mediaType, \ - attachedImageDescription,useBlurhash, federationList, \ - aliceSendThreads, alicePostLog, aliceCachedWebfingers, \ - alicePersonCache,inReplyTo, inReplyToAtomUri, subject) + sessionAlice,aliceDir,'alice',aliceDomain,alicePort, \ + 'bob',bobDomain,bobPort,ccUrl,httpPrefix, \ + 'Why is a mouse when it spins? यह एक परीक्षण है #sillyquestion',followersOnly, \ + saveToFile,clientToServer,attachedImageFilename,mediaType, \ + attachedImageDescription,useBlurhash,federationList, \ + aliceSendThreads,alicePostLog,aliceCachedWebfingers, \ + alicePersonCache,isArticle,inReplyTo,inReplyToAtomUri,subject) print('sendResult: '+str(sendResult)) queuePath=bobDir+'/accounts/bob@'+bobDomain+'/queue' @@ -669,14 +670,15 @@ def testFollowBetweenServers(): aliceCachedWebfingers={} alicePostLog=[] useBlurhash=False + isArticle=False sendResult = \ sendPost(__version__, \ - sessionAlice,aliceDir,'alice', aliceDomain, alicePort, \ - 'bob', bobDomain, bobPort, ccUrl, \ - httpPrefix, 'Alice message', followersOnly, saveToFile, \ + sessionAlice,aliceDir,'alice',aliceDomain,alicePort, \ + 'bob',bobDomain,bobPort,ccUrl, \ + httpPrefix,'Alice message',followersOnly,saveToFile, \ clientToServer,None,None,None,useBlurhash, federationList, \ - aliceSendThreads, alicePostLog, aliceCachedWebfingers, \ - alicePersonCache,inReplyTo, inReplyToAtomUri, subject) + aliceSendThreads,alicePostLog,aliceCachedWebfingers, \ + alicePersonCache,isArticle,inReplyTo,inReplyToAtomUri,subject) print('sendResult: '+str(sendResult)) queuePath=bobDir+'/accounts/bob@'+bobDomain+'/queue' @@ -1101,6 +1103,7 @@ def testClientToServer(): mediaType=getAttachmentMediaType(attachedImageFilename) attachedImageDescription='Logo' useBlurhash=False + isArticle=False cachedWebfingers={} personCache={} password='alicepass' @@ -1116,7 +1119,7 @@ def testClientToServer(): httpPrefix,'Sent from my ActivityPub client',followersOnly, \ attachedImageFilename,mediaType, \ attachedImageDescription,useBlurhash, \ - cachedWebfingers,personCache, \ + cachedWebfingers,personCache,isArticle, \ True,None,None,None) print('sendResult: '+str(sendResult))