mirror of https://gitlab.com/bashrc2/epicyon
Merge branch 'main' of ssh://code.freedombone.net:2222/bashrc/epicyon
commit
764f5a7804
21
daemon.py
21
daemon.py
|
|
@ -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')
|
||||
|
|
|
|||
24
person.py
24
person.py
|
|
@ -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
|
||||
|
|
|
|||
22
roles.py
22
roles.py
|
|
@ -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
|
||||
|
|
|
|||
37
skills.py
37
skills.py
|
|
@ -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
|
||||
|
||||
|
||||
|
|
|
|||
12
tests.py
12
tests.py
|
|
@ -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
|
||||
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
|
|
|||
|
|
@ -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' + \
|
||||
|
|
|
|||
|
|
@ -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>
|
||||
|
|
|
|||
Loading…
Reference in New Issue