From 30e11be0b0049ff3c8716229fc83834eb6b68736 Mon Sep 17 00:00:00 2001 From: Bob Mottram Date: Wed, 3 Mar 2021 20:34:55 +0000 Subject: [PATCH] Split camelcase display names for speaker clarity --- speaker.py | 2 ++ tests.py | 11 +++++++++++ utils.py | 14 ++++++++++++++ 3 files changed, 27 insertions(+) diff --git a/speaker.py b/speaker.py index 7232d16cb..bb2055530 100644 --- a/speaker.py +++ b/speaker.py @@ -12,6 +12,7 @@ import random import urllib.parse from auth import createBasicAuthHeader from session import getJson +from utils import camelCaseSplit from utils import getDomainFromActor from utils import getNicknameFromActor from utils import getGenderFromBio @@ -378,6 +379,7 @@ def updateSpeaker(baseDir: str, nickname: str, domain: str, return speakerName = _removeEmojiFromText(speakerName) speakerName = speakerName.replace('_', ' ') + speakerName = camelCaseSplit(speakerName) gender = getGenderFromBio(baseDir, postJsonObject['actor'], personCache, translate) if announcingActor: diff --git a/tests.py b/tests.py index d41eede67..b99b65ff9 100644 --- a/tests.py +++ b/tests.py @@ -34,6 +34,7 @@ from follow import clearFollows from follow import clearFollowers from follow import sendFollowRequestViaServer from follow import sendUnfollowRequestViaServer +from utils import camelCaseSplit from utils import decodedHost from utils import getFullDomain from utils import validNickname @@ -3389,9 +3390,19 @@ def testSpeakerReplaceLinks(): assert 'Web link support.torproject.org' in result +def testCamelCaseSplit(): + print('testCamelCaseSplit') + testStr = 'ThisIsCamelCase' + assert camelCaseSplit(testStr) == 'This Is Camel Case' + + testStr = 'Notcamelcase test' + assert camelCaseSplit(testStr) == 'Notcamelcase test' + + def runAllTests(): print('Running tests...') testFunctions() + testCamelCaseSplit() testSpeakerReplaceLinks() testExtractTextFieldsInPOST() testMarkdownToHtml() diff --git a/utils.py b/utils.py index 6c0c48595..cad02295d 100644 --- a/utils.py +++ b/utils.py @@ -7,6 +7,7 @@ __email__ = "bob@freedombone.net" __status__ = "Production" import os +import re import time import shutil import datetime @@ -2020,3 +2021,16 @@ def isRecentPost(postJsonObject: {}, maxDays=3) -> bool: if publishedDaysSinceEpoch < recently: return False return True + + +def camelCaseSplit(text: str) -> str: + """ Splits CamelCase into "Camel Case" + """ + matches = re.finditer('.+?(?:(?<=[a-z])(?=[A-Z])|' + + '(?<=[A-Z])(?=[A-Z][a-z])|$)', text) + if not matches: + return text + resultStr = '' + for word in matches: + resultStr += word.group(0) + ' ' + return resultStr.strip()