forked from indymedia/epicyon
				
			Test for moderated feed
							parent
							
								
									aa1017b3a8
								
							
						
					
					
						commit
						f934f54528
					
				|  | @ -73,7 +73,7 @@ def removeControlCharacters(content: str) -> str: | |||
|     return content | ||||
| 
 | ||||
| 
 | ||||
| def hashtagRuleResolve(tree: [], hashtags: []) -> bool: | ||||
| def hashtagRuleResolve(tree: [], hashtags: [], moderated: bool) -> bool: | ||||
|     """Returns whether the tree for a hashtag rule evaluates to true or false | ||||
|     """ | ||||
|     if not tree: | ||||
|  | @ -84,7 +84,7 @@ def hashtagRuleResolve(tree: [], hashtags: []) -> bool: | |||
|             if isinstance(tree[1], str): | ||||
|                 return tree[1] not in hashtags | ||||
|             elif isinstance(tree[1], list): | ||||
|                 return not hashtagRuleResolve(tree[1], hashtags) | ||||
|                 return not hashtagRuleResolve(tree[1], hashtags, moderated) | ||||
|     elif tree[0] == 'and': | ||||
|         if len(tree) == 3: | ||||
| 
 | ||||
|  | @ -92,13 +92,13 @@ def hashtagRuleResolve(tree: [], hashtags: []) -> bool: | |||
|             if isinstance(tree[1], str): | ||||
|                 firstArg = (tree[1] in hashtags) | ||||
|             elif isinstance(tree[1], list): | ||||
|                 firstArg = (hashtagRuleResolve(tree[1], hashtags)) | ||||
|                 firstArg = (hashtagRuleResolve(tree[1], hashtags, moderated)) | ||||
| 
 | ||||
|             secondArg = False | ||||
|             if isinstance(tree[2], str): | ||||
|                 secondArg = (tree[2] in hashtags) | ||||
|             elif isinstance(tree[2], list): | ||||
|                 secondArg = (hashtagRuleResolve(tree[2], hashtags)) | ||||
|                 secondArg = (hashtagRuleResolve(tree[2], hashtags, moderated)) | ||||
|             return firstArg and secondArg | ||||
|     elif tree[0] == 'or': | ||||
|         if len(tree) == 3: | ||||
|  | @ -107,28 +107,33 @@ def hashtagRuleResolve(tree: [], hashtags: []) -> bool: | |||
|             if isinstance(tree[1], str): | ||||
|                 firstArg = (tree[1] in hashtags) | ||||
|             elif isinstance(tree[1], list): | ||||
|                 firstArg = (hashtagRuleResolve(tree[1], hashtags)) | ||||
|                 firstArg = (hashtagRuleResolve(tree[1], hashtags, moderated)) | ||||
| 
 | ||||
|             secondArg = False | ||||
|             if isinstance(tree[2], str): | ||||
|                 secondArg = (tree[2] in hashtags) | ||||
|             elif isinstance(tree[2], list): | ||||
|                 secondArg = (hashtagRuleResolve(tree[2], hashtags)) | ||||
|                 secondArg = (hashtagRuleResolve(tree[2], hashtags, moderated)) | ||||
|             return firstArg or secondArg | ||||
|     elif tree[0].startswith('#') and len(tree) == 1: | ||||
|         return tree[0] in hashtags | ||||
|     elif tree[0].startswith('moderated'): | ||||
|         return moderated | ||||
| 
 | ||||
|     return False | ||||
| 
 | ||||
| 
 | ||||
| def hashtagRuleTree(operators: [], | ||||
|                     conditionsStr: str, | ||||
|                     tagsInConditions: []) -> []: | ||||
|                     tagsInConditions: [], | ||||
|                     moderated: bool) -> []: | ||||
|     """Walks the tree | ||||
|     """ | ||||
|     if not operators and conditionsStr: | ||||
|         conditionsStr = conditionsStr.strip() | ||||
|         if conditionsStr.startswith('#') or conditionsStr in operators: | ||||
|         if conditionsStr.startswith('#') or \ | ||||
|            conditionsStr in operators or \ | ||||
|            conditionsStr == 'moderated': | ||||
|             if conditionsStr.startswith('#'): | ||||
|                 if conditionsStr not in tagsInConditions: | ||||
|                     if ' ' not in conditionsStr: | ||||
|  | @ -140,7 +145,9 @@ def hashtagRuleTree(operators: [], | |||
|         return None | ||||
|     tree = None | ||||
|     conditionsStr = conditionsStr.strip() | ||||
|     if conditionsStr.startswith('#') or conditionsStr in operators: | ||||
|     if conditionsStr.startswith('#') or \ | ||||
|        conditionsStr in operators or \ | ||||
|        conditionsStr == 'moderated': | ||||
|         if conditionsStr.startswith('#'): | ||||
|             if conditionsStr not in tagsInConditions: | ||||
|                 if ' ' not in conditionsStr: | ||||
|  | @ -157,7 +164,7 @@ def hashtagRuleTree(operators: [], | |||
|             sections = conditionsStr.split(op) | ||||
|             for subConditionStr in sections: | ||||
|                 result = hashtagRuleTree(operators[ctr + 1:], subConditionStr, | ||||
|                                          tagsInConditions) | ||||
|                                          tagsInConditions, moderated) | ||||
|                 if result: | ||||
|                     tree.append(result) | ||||
|             break | ||||
|  | @ -170,7 +177,8 @@ def newswireHashtagProcessing(session, baseDir: str, postJsonObject: {}, | |||
|                               personCache: {}, | ||||
|                               cachedWebfingers: {}, | ||||
|                               federationList: [], | ||||
|                               sendThreads: [], postLog: []) -> bool: | ||||
|                               sendThreads: [], postLog: [], | ||||
|                               moderated: bool) -> bool: | ||||
|     """Applies hashtag rules to a news post. | ||||
|     Returns true if the post should be saved to the news timeline | ||||
|     of this instance | ||||
|  | @ -199,11 +207,12 @@ def newswireHashtagProcessing(session, baseDir: str, postJsonObject: {}, | |||
|         conditionsStr = ruleStr.split('if ', 1)[1] | ||||
|         conditionsStr = conditionsStr.split(' then ')[0] | ||||
|         tagsInConditions = [] | ||||
|         tree = hashtagRuleTree(operators, conditionsStr, tagsInConditions) | ||||
|         tree = hashtagRuleTree(operators, conditionsStr, | ||||
|                                tagsInConditions, moderated) | ||||
|         # does the rule contain any hashtags? | ||||
|         if not tagsInConditions: | ||||
|             continue | ||||
|         if not hashtagRuleResolve(tree, hashtags): | ||||
|         if not hashtagRuleResolve(tree, hashtags, moderated): | ||||
|             continue | ||||
|         # the condition matches, so do something | ||||
|         actionStr = ruleStr.split(' then ')[1].strip() | ||||
|  | @ -413,7 +422,7 @@ def convertRSStoActivityPub(baseDir: str, httpPrefix: str, | |||
|                                              httpPrefix, domain, port, | ||||
|                                              personCache, cachedWebfingers, | ||||
|                                              federationList, | ||||
|                                              sendThreads, postLog) | ||||
|                                              sendThreads, postLog, moderated) | ||||
| 
 | ||||
|         # save the post and update the index | ||||
|         if savePost: | ||||
|  |  | |||
							
								
								
									
										64
									
								
								tests.py
								
								
								
								
							
							
						
						
									
										64
									
								
								tests.py
								
								
								
								
							|  | @ -83,7 +83,7 @@ from theme import setCSSparam | |||
| from jsonldsig import testSignJsonld | ||||
| from jsonldsig import jsonldVerify | ||||
| from newsdaemon import hashtagRuleTree | ||||
| from newsdaemon import hasttagRuleResolve | ||||
| from newsdaemon import hashtagRuleResolve | ||||
| 
 | ||||
| testServerAliceRunning = False | ||||
| testServerBobRunning = False | ||||
|  | @ -2179,55 +2179,87 @@ def testHashtagRuleTree(): | |||
|     print('testHashtagRuleTree') | ||||
|     operators = ('not', 'and', 'or') | ||||
| 
 | ||||
|     moderated = True | ||||
|     conditionsStr = '#foo or #bar' | ||||
|     tagsInConditions = [] | ||||
|     tree = hashtagRuleTree(operators, conditionsStr, tagsInConditions) | ||||
|     tree = hashtagRuleTree(operators, conditionsStr, | ||||
|                            tagsInConditions, moderated) | ||||
|     assert str(tree) == str(['or', ['#foo'], ['#bar']]) | ||||
|     assert str(tagsInConditions) == str(['#foo', '#bar']) | ||||
|     hashtags = ['#foo'] | ||||
|     assert hasttagRuleResolve(tree, hashtags) | ||||
|     assert hashtagRuleResolve(tree, hashtags, moderated) | ||||
|     hashtags = ['#carrot', '#stick'] | ||||
|     assert not hasttagRuleResolve(tree, hashtags) | ||||
|     assert not hashtagRuleResolve(tree, hashtags, moderated) | ||||
| 
 | ||||
|     moderated = False | ||||
|     conditionsStr = 'not moderated and #foo or #bar' | ||||
|     tagsInConditions = [] | ||||
|     tree = hashtagRuleTree(operators, conditionsStr, | ||||
|                            tagsInConditions, moderated) | ||||
|     assert str(tree) == \ | ||||
|         str(['not', ['and', ['moderated'], ['or', ['#foo'], ['#bar']]]]) | ||||
|     assert str(tagsInConditions) == str(['#foo', '#bar']) | ||||
|     hashtags = ['#foo'] | ||||
|     assert hashtagRuleResolve(tree, hashtags, moderated) | ||||
|     hashtags = ['#carrot', '#stick'] | ||||
|     assert hashtagRuleResolve(tree, hashtags, moderated) | ||||
| 
 | ||||
|     moderated = True | ||||
|     conditionsStr = 'moderated and #foo or #bar' | ||||
|     tagsInConditions = [] | ||||
|     tree = hashtagRuleTree(operators, conditionsStr, | ||||
|                            tagsInConditions, moderated) | ||||
|     assert str(tree) == \ | ||||
|         str(['and', ['moderated'], ['or', ['#foo'], ['#bar']]]) | ||||
|     assert str(tagsInConditions) == str(['#foo', '#bar']) | ||||
|     hashtags = ['#foo'] | ||||
|     assert hashtagRuleResolve(tree, hashtags, moderated) | ||||
|     hashtags = ['#carrot', '#stick'] | ||||
|     assert not hashtagRuleResolve(tree, hashtags, moderated) | ||||
| 
 | ||||
|     conditionsStr = 'x' | ||||
|     tagsInConditions = [] | ||||
|     tree = hashtagRuleTree(operators, conditionsStr, tagsInConditions) | ||||
|     tree = hashtagRuleTree(operators, conditionsStr, | ||||
|                            tagsInConditions, moderated) | ||||
|     assert tree is None | ||||
|     assert tagsInConditions == [] | ||||
|     hashtags = ['#foo'] | ||||
|     assert not hasttagRuleResolve(tree, hashtags) | ||||
|     assert not hashtagRuleResolve(tree, hashtags, moderated) | ||||
| 
 | ||||
|     conditionsStr = '#x' | ||||
|     tagsInConditions = [] | ||||
|     tree = hashtagRuleTree(operators, conditionsStr, tagsInConditions) | ||||
|     tree = hashtagRuleTree(operators, conditionsStr, | ||||
|                            tagsInConditions, moderated) | ||||
|     assert str(tree) == str(['#x']) | ||||
|     assert str(tagsInConditions) == str(['#x']) | ||||
|     hashtags = ['#x'] | ||||
|     assert hasttagRuleResolve(tree, hashtags) | ||||
|     assert hashtagRuleResolve(tree, hashtags, moderated) | ||||
|     hashtags = ['#y', '#z'] | ||||
|     assert not hasttagRuleResolve(tree, hashtags) | ||||
|     assert not hashtagRuleResolve(tree, hashtags, moderated) | ||||
| 
 | ||||
|     conditionsStr = 'not #b' | ||||
|     tagsInConditions = [] | ||||
|     tree = hashtagRuleTree(operators, conditionsStr, tagsInConditions) | ||||
|     tree = hashtagRuleTree(operators, conditionsStr, | ||||
|                            tagsInConditions, moderated) | ||||
|     assert str(tree) == str(['not', ['#b']]) | ||||
|     assert str(tagsInConditions) == str(['#b']) | ||||
|     hashtags = ['#y', '#z'] | ||||
|     assert hasttagRuleResolve(tree, hashtags) | ||||
|     assert hashtagRuleResolve(tree, hashtags, moderated) | ||||
|     hashtags = ['#a', '#b', '#c'] | ||||
|     assert not hasttagRuleResolve(tree, hashtags) | ||||
|     assert not hashtagRuleResolve(tree, hashtags, moderated) | ||||
| 
 | ||||
|     conditionsStr = '#foo or #bar and #a' | ||||
|     tagsInConditions = [] | ||||
|     tree = hashtagRuleTree(operators, conditionsStr, tagsInConditions) | ||||
|     tree = hashtagRuleTree(operators, conditionsStr, | ||||
|                            tagsInConditions, moderated) | ||||
|     assert str(tree) == str(['and', ['or', ['#foo'], ['#bar']], ['#a']]) | ||||
|     assert str(tagsInConditions) == str(['#foo', '#bar', '#a']) | ||||
|     hashtags = ['#bar', '#a'] | ||||
|     assert hasttagRuleResolve(tree, hashtags) | ||||
|     assert hashtagRuleResolve(tree, hashtags, moderated) | ||||
|     hashtags = ['#foo', '#a'] | ||||
|     assert hasttagRuleResolve(tree, hashtags) | ||||
|     assert hashtagRuleResolve(tree, hashtags, moderated) | ||||
|     hashtags = ['#x', '#a'] | ||||
|     assert not hasttagRuleResolve(tree, hashtags) | ||||
|     assert not hashtagRuleResolve(tree, hashtags, moderated) | ||||
| 
 | ||||
| 
 | ||||
| def runAllTests(): | ||||
|  |  | |||
		Loading…
	
		Reference in New Issue