Merge branch 'main' of ssh://code.freedombone.net:2222/bashrc/epicyon

main
Bob Mottram 2021-05-15 10:08:38 +01:00
commit 764f5a7804
8 changed files with 78 additions and 60 deletions

View File

@ -98,7 +98,7 @@ from follow import getFollowingFeed
from follow import sendFollowRequest
from follow import unfollowAccount
from follow import createInitialLastSeen
from skills import getSkillsFromString
from skills import getSkillsFromList
from skills import noOfActorSkills
from skills import actorHasSkill
from skills import actorSkillValue
@ -124,7 +124,6 @@ from blocking import isBlockedHashtag
from blocking import isBlockedDomain
from blocking import getDomainBlocklist
from roles import setRole
from roles import getRolesFromString
from roles import clearModeratorStatus
from roles import clearEditorStatus
from roles import clearCounselorStatus
@ -7397,8 +7396,9 @@ class PubServer(BaseHTTPRequestHandler):
rolesList = []
if actorJson.get('affiliation'):
actorRolesStr = actorJson['affiliation']['roleName']
rolesList = getRolesFromString(actorRolesStr)
if isinstance(actorJson['affiliation']['roleName'],
list):
rolesList = actorJson['affiliation']['roleName']
msg = \
htmlProfile(self.server.rssIconAtTop,
self.server.cssCache,
@ -7436,8 +7436,9 @@ class PubServer(BaseHTTPRequestHandler):
if self._fetchAuthenticated():
rolesList = []
if actorJson.get('affiliation'):
actorRolesStr = actorJson['affiliation']['roleName']
rolesList = getRolesFromString(actorRolesStr)
if isinstance(actorJson['affiliation']['roleName'],
list):
rolesList = actorJson['affiliation']['roleName']
msg = json.dumps(rolesList,
ensure_ascii=False)
@ -7497,9 +7498,9 @@ class PubServer(BaseHTTPRequestHandler):
if self.server.keyShortcuts.get(nickname):
accessKeys = \
self.server.keyShortcuts[nickname]
actorSkillsStr = \
actorSkillsList = \
actorJson['hasOccupation']['skills']
skills = getSkillsFromString(actorSkillsStr)
skills = getSkillsFromList(actorSkillsList)
msg = \
htmlProfile(self.server.rssIconAtTop,
self.server.cssCache,
@ -7536,9 +7537,9 @@ class PubServer(BaseHTTPRequestHandler):
'show skills')
else:
if self._fetchAuthenticated():
actorSkillsStr = \
actorSkillsList = \
actorJson['hasOccupation']['skills']
skills = getSkillsFromString(actorSkillsStr)
skills = getSkillsFromList(actorSkillsList)
msg = json.dumps(skills,
ensure_ascii=False)
msg = msg.encode('utf-8')

View File

@ -281,11 +281,11 @@ def _createPersonBase(baseDir: str, nickname: str, domain: str, port: int,
'hasOccupation': {
'@type': 'Occupation',
'name': "",
'skills': ""
'skills': []
},
"affiliation": {
"@type": "OrganizationRole",
"roleName": "",
"roleName": [],
"affiliation": {
"@type": "WebSite",
"url": httpPrefix + '://' + domain
@ -586,10 +586,15 @@ def personUpgradeActor(baseDir: str, personJson: {},
personJson['hasOccupation'] = {
'@type': 'Occupation',
'name': occupationName,
'skills': ""
'skills': []
}
updateActor = True
if isinstance(personJson['hasOccupation']['skills'], str):
skillsList = personJson['hasOccupation']['skills'].split(', ')
personJson['hasOccupation']['skills'] = skillsList
updateActor = True
# remove the old skills format
if personJson.get('skills'):
del personJson['skills']
@ -598,14 +603,14 @@ def personUpgradeActor(baseDir: str, personJson: {},
# if the older roles format is being used then switch
# to the new one
if not personJson.get('affiliation'):
rolesStr = ''
rolesList = []
adminName = getConfigParam(baseDir, 'admin')
if personJson['id'].endswith('/users/' + adminName):
rolesStr = 'admin, moderator, editor'
rolesList = ["admin", "moderator", "editor"]
statusNumber, published = getStatusNumber()
personJson['affiliation'] = {
"@type": "OrganizationRole",
"roleName": rolesStr,
"roleName": rolesList,
"affiliation": {
"@type": "WebSite",
"url": personJson['id'].split('/users/')[0]
@ -614,13 +619,18 @@ def personUpgradeActor(baseDir: str, personJson: {},
}
updateActor = True
if isinstance(personJson['affiliation']['roleName'], str):
rolesList = personJson['affiliation']['roleName'].split(', ')
personJson['affiliation']['roleName'] = rolesList
updateActor = True
# if no roles are defined then ensure that the admin
# roles are configured
if not personJson['affiliation']['roleName']:
adminName = getConfigParam(baseDir, 'admin')
if personJson['id'].endswith('/users/' + adminName):
personJson['affiliation']['roleName'] = \
'admin, moderator, editor'
["admin", "moderator", "editor"]
updateActor = True
# remove the old roles format

View File

@ -33,7 +33,7 @@ def _clearRoleStatus(baseDir: str, role: str) -> None:
if not actorJson.get('affiliation'):
continue
rolesList = \
getRolesFromString(actorJson['affiliation']['roleName'])
getRolesFromList(actorJson['affiliation']['roleName'])
if role in rolesList:
rolesList.remove(role)
saveJson(actorJson, filename)
@ -111,21 +111,19 @@ def _removeRole(baseDir: str, nickname: str, roleFilename: str) -> None:
def setRolesFromList(actorJson: {}, rolesList: []) -> None:
"""Sets roles from a list
"""
rolesStr = ''
for roleName in rolesList:
if rolesStr:
rolesStr += ', '
rolesStr += roleName.lower()
if actorJson.get('affiliation'):
actorJson['affiliation']['roleName'] = rolesStr
actorJson['affiliation']['roleName'] = rolesList.copy()
def getRolesFromString(rolesStr: str) -> []:
"""Returns a list of roles from a string
def getRolesFromList(rolesList: []) -> []:
"""Returns a list of roles from a list
"""
rolesList = rolesStr.split(',')
if isinstance(rolesList, list):
rolesList2 = rolesList
else:
rolesList2 = rolesList.split(',')
rolesResult = []
for roleName in rolesList:
for roleName in rolesList2:
rolesResult.append(roleName.strip().lower())
return rolesResult
@ -154,7 +152,7 @@ def setRole(baseDir: str, nickname: str, domain: str,
if not actorJson.get('affiliation'):
return False
rolesList = \
getRolesFromString(actorJson['affiliation']['roleName'])
getRolesFromList(actorJson['affiliation']['roleName'])
actorChanged = False
if role:
# add the role

View File

@ -17,25 +17,26 @@ from utils import getDomainFromActor
from utils import loadJson
def setSkillsFromDict(actorJson: {}, skillsDict: {}) -> str:
def setSkillsFromDict(actorJson: {}, skillsDict: {}) -> []:
"""Converts a dict containing skills to a string
Returns the string version of the dictionary
"""
skillsStr = ''
skillsList = []
for name, value in skillsDict.items():
if skillsStr:
skillsStr += ', '
skillsStr += name + ':' + str(value)
actorJson['hasOccupation']['skills'] = skillsStr
return skillsStr
skillsList.append(name + ':' + str(value))
actorJson['hasOccupation']['skills'] = skillsList
return skillsList
def getSkillsFromString(skillsStr: str) -> {}:
"""Returns a dict of skills from a string
def getSkillsFromList(skillsList: []) -> {}:
"""Returns a dict of skills from a list
"""
skillsList = skillsStr.split(',')
if isinstance(skillsList, list):
skillsList2 = skillsList
else:
skillsList2 = skillsList.split(',')
skillsDict = {}
for skill in skillsList:
for skill in skillsList2:
if ':' not in skill:
continue
name = skill.split(':')[0].strip().lower()
@ -50,7 +51,7 @@ def actorHasSkill(actorJson: {}, skillName: str) -> bool:
"""Returns true if the actor has the given skill
"""
skillsDict = \
getSkillsFromString(actorJson['hasOccupation']['skills'])
getSkillsFromList(actorJson['hasOccupation']['skills'])
if not skillsDict:
return False
return skillsDict.get(skillName.lower())
@ -60,7 +61,7 @@ def actorSkillValue(actorJson: {}, skillName: str) -> int:
"""Returns The skill level from an actor
"""
skillsDict = \
getSkillsFromString(actorJson['hasOccupation']['skills'])
getSkillsFromList(actorJson['hasOccupation']['skills'])
if not skillsDict:
return 0
skillName = skillName.lower()
@ -73,7 +74,11 @@ def noOfActorSkills(actorJson: {}) -> int:
"""Returns the number of skills that an actor has
"""
if actorJson.get('hasOccupation'):
skillsList = actorJson['hasOccupation']['skills'].split(',')
skillsStr = actorJson['hasOccupation']['skills']
if isinstance(skillsStr, list):
skillsList = skillsStr
else:
skillsList = skillsStr.split(',')
if skillsList:
return len(skillsList)
return 0
@ -96,7 +101,7 @@ def setActorSkillLevel(actorJson: {},
'skills': ''
}
skillsDict = \
getSkillsFromString(actorJson['hasOccupation']['skills'])
getSkillsFromList(actorJson['hasOccupation']['skills'])
if skillLevelPercent > 0:
skillsDict[skill] = skillLevelPercent
else:
@ -133,7 +138,7 @@ def getSkills(baseDir: str, nickname: str, domain: str) -> []:
if actorJson:
if not actorJson.get('hasOccupation'):
return None
return getSkillsFromString(actorJson['hasOccupation']['skills'])
return getSkillsFromList(actorJson['hasOccupation']['skills'])
return None

View File

@ -68,9 +68,9 @@ from person import setBio
# from person import generateRSAKey
from skills import setSkillLevel
from skills import setSkillsFromDict
from skills import getSkillsFromString
from skills import getSkillsFromList
from roles import setRolesFromList
from roles import getRolesFromString
from roles import getRolesFromList
from roles import setRole
from auth import constantTimeStringCheck
from auth import createBasicAuthHeader
@ -3664,7 +3664,7 @@ def testSkills() -> None:
'hasOccupation': {
'@type': 'Occupation',
'name': "",
'skills': ""
'skills': []
}
}
skillsDict = {
@ -3673,7 +3673,7 @@ def testSkills() -> None:
}
setSkillsFromDict(actorJson, skillsDict)
assert actorJson['hasOccupation']['skills']
skillsDict = getSkillsFromString(actorJson['hasOccupation']['skills'])
skillsDict = getSkillsFromList(actorJson['hasOccupation']['skills'])
assert skillsDict.get('bakery')
assert skillsDict.get('gardening')
assert skillsDict['bakery'] == 40
@ -3685,7 +3685,7 @@ def testRoles() -> None:
actorJson = {
'affiliation': {
"@type": "OrganizationRole",
"roleName": "",
"roleName": [],
"affiliation": {
"@type": "WebSite",
"url": "https://testinstance.org"
@ -3696,7 +3696,7 @@ def testRoles() -> None:
testRolesList = ["admin", "moderator"]
setRolesFromList(actorJson, testRolesList)
assert actorJson['affiliation']['roleName']
rolesList = getRolesFromString(actorJson['affiliation']['roleName'])
rolesList = getRolesFromList(actorJson['affiliation']['roleName'])
assert 'admin' in rolesList
assert 'moderator' in rolesList

View File

@ -21,7 +21,7 @@ from utils import isPublicPost
from utils import firstParagraphFromString
from utils import searchBoxPosts
from skills import noOfActorSkills
from skills import getSkillsFromString
from skills import getSkillsFromList
from categories import getHashtagCategory
from feeds import rss2TagHeader
from feeds import rss2TagFooter
@ -420,8 +420,8 @@ def htmlSkillsSearch(actor: str,
actorJson.get('name') and \
actorJson.get('icon'):
actor = actorJson['id']
actorSkillsStr = actorJson['hasOccupation']['skills']
skills = getSkillsFromString(actorSkillsStr)
actorSkillsList = actorJson['hasOccupation']['skills']
skills = getSkillsFromList(actorSkillsList)
for skillName, skillLevel in skills.items():
skillName = skillName.lower()
if not (skillName in skillsearch or
@ -461,9 +461,9 @@ def htmlSkillsSearch(actor: str,
actorJson.get('name') and \
actorJson.get('icon'):
actor = actorJson['id']
actorSkillsStr = \
actorSkillsList = \
actorJson['hasOccupation']['skills']
skills = getSkillsFromString(actorSkillsStr)
skills = getSkillsFromList(actorSkillsList)
for skillName, skillLevel in skills.items():
skillName = skillName.lower()
if not (skillName in skillsearch or

View File

@ -721,7 +721,7 @@ def htmlHeaderWithPersonMarkup(cssFilename: str, instanceTitle: str,
skillsMarkup = ''
if actorJson.get('hasOccupation'):
skillsStr = actorJson['hasOccupation']['skills']
skillsList = actorJson['hasOccupation']['skills']
if actorJson['hasOccupation'].get('name'):
occupationName = actorJson['hasOccupation']['name']
occupationStr = ' "name": "' + occupationName + '",\n'
@ -729,7 +729,7 @@ def htmlHeaderWithPersonMarkup(cssFilename: str, instanceTitle: str,
' "hasOccupation": {\n' + \
' "@type": "Occupation",\n' + \
occupationStr + \
' "skills": "' + skillsStr + '"\n' + \
' "skills": ' + str(skillsList) + '\n' + \
' "},\n'
personMarkup = \
@ -758,6 +758,10 @@ def htmlHeaderWithWebsiteMarkup(cssFilename: str, instanceTitle: str,
systemLanguage)
licenseUrl = 'https://www.gnu.org/licenses/agpl-3.0.en.html'
# social networking category
genreUrl = 'http://vocab.getty.edu/aat/300312270'
websiteMarkup = \
' <script type="application/ld+json">\n' + \
' {\n' + \
@ -768,7 +772,7 @@ def htmlHeaderWithWebsiteMarkup(cssFilename: str, instanceTitle: str,
' "license": "' + licenseUrl + '",\n' + \
' "inLanguage": "' + systemLanguage + '",\n' + \
' "isAccessibleForFree": true,\n' + \
' "genre": "https://en.wikipedia.org/wiki/Fediverse",\n' + \
' "genre": "' + genreUrl + '",\n' + \
' "accessMode": ["textual", "visual"],\n' + \
' "accessModeSufficient": ["textual"],\n' + \
' "accessibilityAPI" : ["ARIA"],\n' + \

View File

@ -14,7 +14,7 @@
"email": "bob@freedombone.net",
"url": "https://epicyon.freedombone.net/users/bob"
},
"applicationCategory" : "server, software, fediverse, activitypub, self-hosting",
"applicationCategory" : ["server", "software", "bash", "debian", "linux", "self-hosting"],
"downloadUrl" : "https://epicyon.net/epicyon.tar.gz"
}
</script>