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 sendFollowRequest
|
||||||
from follow import unfollowAccount
|
from follow import unfollowAccount
|
||||||
from follow import createInitialLastSeen
|
from follow import createInitialLastSeen
|
||||||
from skills import getSkillsFromString
|
from skills import getSkillsFromList
|
||||||
from skills import noOfActorSkills
|
from skills import noOfActorSkills
|
||||||
from skills import actorHasSkill
|
from skills import actorHasSkill
|
||||||
from skills import actorSkillValue
|
from skills import actorSkillValue
|
||||||
|
|
@ -124,7 +124,6 @@ from blocking import isBlockedHashtag
|
||||||
from blocking import isBlockedDomain
|
from blocking import isBlockedDomain
|
||||||
from blocking import getDomainBlocklist
|
from blocking import getDomainBlocklist
|
||||||
from roles import setRole
|
from roles import setRole
|
||||||
from roles import getRolesFromString
|
|
||||||
from roles import clearModeratorStatus
|
from roles import clearModeratorStatus
|
||||||
from roles import clearEditorStatus
|
from roles import clearEditorStatus
|
||||||
from roles import clearCounselorStatus
|
from roles import clearCounselorStatus
|
||||||
|
|
@ -7397,8 +7396,9 @@ class PubServer(BaseHTTPRequestHandler):
|
||||||
|
|
||||||
rolesList = []
|
rolesList = []
|
||||||
if actorJson.get('affiliation'):
|
if actorJson.get('affiliation'):
|
||||||
actorRolesStr = actorJson['affiliation']['roleName']
|
if isinstance(actorJson['affiliation']['roleName'],
|
||||||
rolesList = getRolesFromString(actorRolesStr)
|
list):
|
||||||
|
rolesList = actorJson['affiliation']['roleName']
|
||||||
msg = \
|
msg = \
|
||||||
htmlProfile(self.server.rssIconAtTop,
|
htmlProfile(self.server.rssIconAtTop,
|
||||||
self.server.cssCache,
|
self.server.cssCache,
|
||||||
|
|
@ -7436,8 +7436,9 @@ class PubServer(BaseHTTPRequestHandler):
|
||||||
if self._fetchAuthenticated():
|
if self._fetchAuthenticated():
|
||||||
rolesList = []
|
rolesList = []
|
||||||
if actorJson.get('affiliation'):
|
if actorJson.get('affiliation'):
|
||||||
actorRolesStr = actorJson['affiliation']['roleName']
|
if isinstance(actorJson['affiliation']['roleName'],
|
||||||
rolesList = getRolesFromString(actorRolesStr)
|
list):
|
||||||
|
rolesList = actorJson['affiliation']['roleName']
|
||||||
|
|
||||||
msg = json.dumps(rolesList,
|
msg = json.dumps(rolesList,
|
||||||
ensure_ascii=False)
|
ensure_ascii=False)
|
||||||
|
|
@ -7497,9 +7498,9 @@ class PubServer(BaseHTTPRequestHandler):
|
||||||
if self.server.keyShortcuts.get(nickname):
|
if self.server.keyShortcuts.get(nickname):
|
||||||
accessKeys = \
|
accessKeys = \
|
||||||
self.server.keyShortcuts[nickname]
|
self.server.keyShortcuts[nickname]
|
||||||
actorSkillsStr = \
|
actorSkillsList = \
|
||||||
actorJson['hasOccupation']['skills']
|
actorJson['hasOccupation']['skills']
|
||||||
skills = getSkillsFromString(actorSkillsStr)
|
skills = getSkillsFromList(actorSkillsList)
|
||||||
msg = \
|
msg = \
|
||||||
htmlProfile(self.server.rssIconAtTop,
|
htmlProfile(self.server.rssIconAtTop,
|
||||||
self.server.cssCache,
|
self.server.cssCache,
|
||||||
|
|
@ -7536,9 +7537,9 @@ class PubServer(BaseHTTPRequestHandler):
|
||||||
'show skills')
|
'show skills')
|
||||||
else:
|
else:
|
||||||
if self._fetchAuthenticated():
|
if self._fetchAuthenticated():
|
||||||
actorSkillsStr = \
|
actorSkillsList = \
|
||||||
actorJson['hasOccupation']['skills']
|
actorJson['hasOccupation']['skills']
|
||||||
skills = getSkillsFromString(actorSkillsStr)
|
skills = getSkillsFromList(actorSkillsList)
|
||||||
msg = json.dumps(skills,
|
msg = json.dumps(skills,
|
||||||
ensure_ascii=False)
|
ensure_ascii=False)
|
||||||
msg = msg.encode('utf-8')
|
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': {
|
'hasOccupation': {
|
||||||
'@type': 'Occupation',
|
'@type': 'Occupation',
|
||||||
'name': "",
|
'name': "",
|
||||||
'skills': ""
|
'skills': []
|
||||||
},
|
},
|
||||||
"affiliation": {
|
"affiliation": {
|
||||||
"@type": "OrganizationRole",
|
"@type": "OrganizationRole",
|
||||||
"roleName": "",
|
"roleName": [],
|
||||||
"affiliation": {
|
"affiliation": {
|
||||||
"@type": "WebSite",
|
"@type": "WebSite",
|
||||||
"url": httpPrefix + '://' + domain
|
"url": httpPrefix + '://' + domain
|
||||||
|
|
@ -586,10 +586,15 @@ def personUpgradeActor(baseDir: str, personJson: {},
|
||||||
personJson['hasOccupation'] = {
|
personJson['hasOccupation'] = {
|
||||||
'@type': 'Occupation',
|
'@type': 'Occupation',
|
||||||
'name': occupationName,
|
'name': occupationName,
|
||||||
'skills': ""
|
'skills': []
|
||||||
}
|
}
|
||||||
updateActor = True
|
updateActor = True
|
||||||
|
|
||||||
|
if isinstance(personJson['hasOccupation']['skills'], str):
|
||||||
|
skillsList = personJson['hasOccupation']['skills'].split(', ')
|
||||||
|
personJson['hasOccupation']['skills'] = skillsList
|
||||||
|
updateActor = True
|
||||||
|
|
||||||
# remove the old skills format
|
# remove the old skills format
|
||||||
if personJson.get('skills'):
|
if personJson.get('skills'):
|
||||||
del personJson['skills']
|
del personJson['skills']
|
||||||
|
|
@ -598,14 +603,14 @@ def personUpgradeActor(baseDir: str, personJson: {},
|
||||||
# if the older roles format is being used then switch
|
# if the older roles format is being used then switch
|
||||||
# to the new one
|
# to the new one
|
||||||
if not personJson.get('affiliation'):
|
if not personJson.get('affiliation'):
|
||||||
rolesStr = ''
|
rolesList = []
|
||||||
adminName = getConfigParam(baseDir, 'admin')
|
adminName = getConfigParam(baseDir, 'admin')
|
||||||
if personJson['id'].endswith('/users/' + adminName):
|
if personJson['id'].endswith('/users/' + adminName):
|
||||||
rolesStr = 'admin, moderator, editor'
|
rolesList = ["admin", "moderator", "editor"]
|
||||||
statusNumber, published = getStatusNumber()
|
statusNumber, published = getStatusNumber()
|
||||||
personJson['affiliation'] = {
|
personJson['affiliation'] = {
|
||||||
"@type": "OrganizationRole",
|
"@type": "OrganizationRole",
|
||||||
"roleName": rolesStr,
|
"roleName": rolesList,
|
||||||
"affiliation": {
|
"affiliation": {
|
||||||
"@type": "WebSite",
|
"@type": "WebSite",
|
||||||
"url": personJson['id'].split('/users/')[0]
|
"url": personJson['id'].split('/users/')[0]
|
||||||
|
|
@ -614,13 +619,18 @@ def personUpgradeActor(baseDir: str, personJson: {},
|
||||||
}
|
}
|
||||||
updateActor = True
|
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
|
# if no roles are defined then ensure that the admin
|
||||||
# roles are configured
|
# roles are configured
|
||||||
if not personJson['affiliation']['roleName']:
|
if not personJson['affiliation']['roleName']:
|
||||||
adminName = getConfigParam(baseDir, 'admin')
|
adminName = getConfigParam(baseDir, 'admin')
|
||||||
if personJson['id'].endswith('/users/' + adminName):
|
if personJson['id'].endswith('/users/' + adminName):
|
||||||
personJson['affiliation']['roleName'] = \
|
personJson['affiliation']['roleName'] = \
|
||||||
'admin, moderator, editor'
|
["admin", "moderator", "editor"]
|
||||||
updateActor = True
|
updateActor = True
|
||||||
|
|
||||||
# remove the old roles format
|
# 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'):
|
if not actorJson.get('affiliation'):
|
||||||
continue
|
continue
|
||||||
rolesList = \
|
rolesList = \
|
||||||
getRolesFromString(actorJson['affiliation']['roleName'])
|
getRolesFromList(actorJson['affiliation']['roleName'])
|
||||||
if role in rolesList:
|
if role in rolesList:
|
||||||
rolesList.remove(role)
|
rolesList.remove(role)
|
||||||
saveJson(actorJson, filename)
|
saveJson(actorJson, filename)
|
||||||
|
|
@ -111,21 +111,19 @@ def _removeRole(baseDir: str, nickname: str, roleFilename: str) -> None:
|
||||||
def setRolesFromList(actorJson: {}, rolesList: []) -> None:
|
def setRolesFromList(actorJson: {}, rolesList: []) -> None:
|
||||||
"""Sets roles from a list
|
"""Sets roles from a list
|
||||||
"""
|
"""
|
||||||
rolesStr = ''
|
|
||||||
for roleName in rolesList:
|
|
||||||
if rolesStr:
|
|
||||||
rolesStr += ', '
|
|
||||||
rolesStr += roleName.lower()
|
|
||||||
if actorJson.get('affiliation'):
|
if actorJson.get('affiliation'):
|
||||||
actorJson['affiliation']['roleName'] = rolesStr
|
actorJson['affiliation']['roleName'] = rolesList.copy()
|
||||||
|
|
||||||
|
|
||||||
def getRolesFromString(rolesStr: str) -> []:
|
def getRolesFromList(rolesList: []) -> []:
|
||||||
"""Returns a list of roles from a string
|
"""Returns a list of roles from a list
|
||||||
"""
|
"""
|
||||||
rolesList = rolesStr.split(',')
|
if isinstance(rolesList, list):
|
||||||
|
rolesList2 = rolesList
|
||||||
|
else:
|
||||||
|
rolesList2 = rolesList.split(',')
|
||||||
rolesResult = []
|
rolesResult = []
|
||||||
for roleName in rolesList:
|
for roleName in rolesList2:
|
||||||
rolesResult.append(roleName.strip().lower())
|
rolesResult.append(roleName.strip().lower())
|
||||||
return rolesResult
|
return rolesResult
|
||||||
|
|
||||||
|
|
@ -154,7 +152,7 @@ def setRole(baseDir: str, nickname: str, domain: str,
|
||||||
if not actorJson.get('affiliation'):
|
if not actorJson.get('affiliation'):
|
||||||
return False
|
return False
|
||||||
rolesList = \
|
rolesList = \
|
||||||
getRolesFromString(actorJson['affiliation']['roleName'])
|
getRolesFromList(actorJson['affiliation']['roleName'])
|
||||||
actorChanged = False
|
actorChanged = False
|
||||||
if role:
|
if role:
|
||||||
# add the role
|
# add the role
|
||||||
|
|
|
||||||
37
skills.py
37
skills.py
|
|
@ -17,25 +17,26 @@ from utils import getDomainFromActor
|
||||||
from utils import loadJson
|
from utils import loadJson
|
||||||
|
|
||||||
|
|
||||||
def setSkillsFromDict(actorJson: {}, skillsDict: {}) -> str:
|
def setSkillsFromDict(actorJson: {}, skillsDict: {}) -> []:
|
||||||
"""Converts a dict containing skills to a string
|
"""Converts a dict containing skills to a string
|
||||||
Returns the string version of the dictionary
|
Returns the string version of the dictionary
|
||||||
"""
|
"""
|
||||||
skillsStr = ''
|
skillsList = []
|
||||||
for name, value in skillsDict.items():
|
for name, value in skillsDict.items():
|
||||||
if skillsStr:
|
skillsList.append(name + ':' + str(value))
|
||||||
skillsStr += ', '
|
actorJson['hasOccupation']['skills'] = skillsList
|
||||||
skillsStr += name + ':' + str(value)
|
return skillsList
|
||||||
actorJson['hasOccupation']['skills'] = skillsStr
|
|
||||||
return skillsStr
|
|
||||||
|
|
||||||
|
|
||||||
def getSkillsFromString(skillsStr: str) -> {}:
|
def getSkillsFromList(skillsList: []) -> {}:
|
||||||
"""Returns a dict of skills from a string
|
"""Returns a dict of skills from a list
|
||||||
"""
|
"""
|
||||||
skillsList = skillsStr.split(',')
|
if isinstance(skillsList, list):
|
||||||
|
skillsList2 = skillsList
|
||||||
|
else:
|
||||||
|
skillsList2 = skillsList.split(',')
|
||||||
skillsDict = {}
|
skillsDict = {}
|
||||||
for skill in skillsList:
|
for skill in skillsList2:
|
||||||
if ':' not in skill:
|
if ':' not in skill:
|
||||||
continue
|
continue
|
||||||
name = skill.split(':')[0].strip().lower()
|
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
|
"""Returns true if the actor has the given skill
|
||||||
"""
|
"""
|
||||||
skillsDict = \
|
skillsDict = \
|
||||||
getSkillsFromString(actorJson['hasOccupation']['skills'])
|
getSkillsFromList(actorJson['hasOccupation']['skills'])
|
||||||
if not skillsDict:
|
if not skillsDict:
|
||||||
return False
|
return False
|
||||||
return skillsDict.get(skillName.lower())
|
return skillsDict.get(skillName.lower())
|
||||||
|
|
@ -60,7 +61,7 @@ def actorSkillValue(actorJson: {}, skillName: str) -> int:
|
||||||
"""Returns The skill level from an actor
|
"""Returns The skill level from an actor
|
||||||
"""
|
"""
|
||||||
skillsDict = \
|
skillsDict = \
|
||||||
getSkillsFromString(actorJson['hasOccupation']['skills'])
|
getSkillsFromList(actorJson['hasOccupation']['skills'])
|
||||||
if not skillsDict:
|
if not skillsDict:
|
||||||
return 0
|
return 0
|
||||||
skillName = skillName.lower()
|
skillName = skillName.lower()
|
||||||
|
|
@ -73,7 +74,11 @@ def noOfActorSkills(actorJson: {}) -> int:
|
||||||
"""Returns the number of skills that an actor has
|
"""Returns the number of skills that an actor has
|
||||||
"""
|
"""
|
||||||
if actorJson.get('hasOccupation'):
|
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:
|
if skillsList:
|
||||||
return len(skillsList)
|
return len(skillsList)
|
||||||
return 0
|
return 0
|
||||||
|
|
@ -96,7 +101,7 @@ def setActorSkillLevel(actorJson: {},
|
||||||
'skills': ''
|
'skills': ''
|
||||||
}
|
}
|
||||||
skillsDict = \
|
skillsDict = \
|
||||||
getSkillsFromString(actorJson['hasOccupation']['skills'])
|
getSkillsFromList(actorJson['hasOccupation']['skills'])
|
||||||
if skillLevelPercent > 0:
|
if skillLevelPercent > 0:
|
||||||
skillsDict[skill] = skillLevelPercent
|
skillsDict[skill] = skillLevelPercent
|
||||||
else:
|
else:
|
||||||
|
|
@ -133,7 +138,7 @@ def getSkills(baseDir: str, nickname: str, domain: str) -> []:
|
||||||
if actorJson:
|
if actorJson:
|
||||||
if not actorJson.get('hasOccupation'):
|
if not actorJson.get('hasOccupation'):
|
||||||
return None
|
return None
|
||||||
return getSkillsFromString(actorJson['hasOccupation']['skills'])
|
return getSkillsFromList(actorJson['hasOccupation']['skills'])
|
||||||
return None
|
return None
|
||||||
|
|
||||||
|
|
||||||
|
|
|
||||||
12
tests.py
12
tests.py
|
|
@ -68,9 +68,9 @@ from person import setBio
|
||||||
# from person import generateRSAKey
|
# from person import generateRSAKey
|
||||||
from skills import setSkillLevel
|
from skills import setSkillLevel
|
||||||
from skills import setSkillsFromDict
|
from skills import setSkillsFromDict
|
||||||
from skills import getSkillsFromString
|
from skills import getSkillsFromList
|
||||||
from roles import setRolesFromList
|
from roles import setRolesFromList
|
||||||
from roles import getRolesFromString
|
from roles import getRolesFromList
|
||||||
from roles import setRole
|
from roles import setRole
|
||||||
from auth import constantTimeStringCheck
|
from auth import constantTimeStringCheck
|
||||||
from auth import createBasicAuthHeader
|
from auth import createBasicAuthHeader
|
||||||
|
|
@ -3664,7 +3664,7 @@ def testSkills() -> None:
|
||||||
'hasOccupation': {
|
'hasOccupation': {
|
||||||
'@type': 'Occupation',
|
'@type': 'Occupation',
|
||||||
'name': "",
|
'name': "",
|
||||||
'skills': ""
|
'skills': []
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
skillsDict = {
|
skillsDict = {
|
||||||
|
|
@ -3673,7 +3673,7 @@ def testSkills() -> None:
|
||||||
}
|
}
|
||||||
setSkillsFromDict(actorJson, skillsDict)
|
setSkillsFromDict(actorJson, skillsDict)
|
||||||
assert actorJson['hasOccupation']['skills']
|
assert actorJson['hasOccupation']['skills']
|
||||||
skillsDict = getSkillsFromString(actorJson['hasOccupation']['skills'])
|
skillsDict = getSkillsFromList(actorJson['hasOccupation']['skills'])
|
||||||
assert skillsDict.get('bakery')
|
assert skillsDict.get('bakery')
|
||||||
assert skillsDict.get('gardening')
|
assert skillsDict.get('gardening')
|
||||||
assert skillsDict['bakery'] == 40
|
assert skillsDict['bakery'] == 40
|
||||||
|
|
@ -3685,7 +3685,7 @@ def testRoles() -> None:
|
||||||
actorJson = {
|
actorJson = {
|
||||||
'affiliation': {
|
'affiliation': {
|
||||||
"@type": "OrganizationRole",
|
"@type": "OrganizationRole",
|
||||||
"roleName": "",
|
"roleName": [],
|
||||||
"affiliation": {
|
"affiliation": {
|
||||||
"@type": "WebSite",
|
"@type": "WebSite",
|
||||||
"url": "https://testinstance.org"
|
"url": "https://testinstance.org"
|
||||||
|
|
@ -3696,7 +3696,7 @@ def testRoles() -> None:
|
||||||
testRolesList = ["admin", "moderator"]
|
testRolesList = ["admin", "moderator"]
|
||||||
setRolesFromList(actorJson, testRolesList)
|
setRolesFromList(actorJson, testRolesList)
|
||||||
assert actorJson['affiliation']['roleName']
|
assert actorJson['affiliation']['roleName']
|
||||||
rolesList = getRolesFromString(actorJson['affiliation']['roleName'])
|
rolesList = getRolesFromList(actorJson['affiliation']['roleName'])
|
||||||
assert 'admin' in rolesList
|
assert 'admin' in rolesList
|
||||||
assert 'moderator' in rolesList
|
assert 'moderator' in rolesList
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -21,7 +21,7 @@ from utils import isPublicPost
|
||||||
from utils import firstParagraphFromString
|
from utils import firstParagraphFromString
|
||||||
from utils import searchBoxPosts
|
from utils import searchBoxPosts
|
||||||
from skills import noOfActorSkills
|
from skills import noOfActorSkills
|
||||||
from skills import getSkillsFromString
|
from skills import getSkillsFromList
|
||||||
from categories import getHashtagCategory
|
from categories import getHashtagCategory
|
||||||
from feeds import rss2TagHeader
|
from feeds import rss2TagHeader
|
||||||
from feeds import rss2TagFooter
|
from feeds import rss2TagFooter
|
||||||
|
|
@ -420,8 +420,8 @@ def htmlSkillsSearch(actor: str,
|
||||||
actorJson.get('name') and \
|
actorJson.get('name') and \
|
||||||
actorJson.get('icon'):
|
actorJson.get('icon'):
|
||||||
actor = actorJson['id']
|
actor = actorJson['id']
|
||||||
actorSkillsStr = actorJson['hasOccupation']['skills']
|
actorSkillsList = actorJson['hasOccupation']['skills']
|
||||||
skills = getSkillsFromString(actorSkillsStr)
|
skills = getSkillsFromList(actorSkillsList)
|
||||||
for skillName, skillLevel in skills.items():
|
for skillName, skillLevel in skills.items():
|
||||||
skillName = skillName.lower()
|
skillName = skillName.lower()
|
||||||
if not (skillName in skillsearch or
|
if not (skillName in skillsearch or
|
||||||
|
|
@ -461,9 +461,9 @@ def htmlSkillsSearch(actor: str,
|
||||||
actorJson.get('name') and \
|
actorJson.get('name') and \
|
||||||
actorJson.get('icon'):
|
actorJson.get('icon'):
|
||||||
actor = actorJson['id']
|
actor = actorJson['id']
|
||||||
actorSkillsStr = \
|
actorSkillsList = \
|
||||||
actorJson['hasOccupation']['skills']
|
actorJson['hasOccupation']['skills']
|
||||||
skills = getSkillsFromString(actorSkillsStr)
|
skills = getSkillsFromList(actorSkillsList)
|
||||||
for skillName, skillLevel in skills.items():
|
for skillName, skillLevel in skills.items():
|
||||||
skillName = skillName.lower()
|
skillName = skillName.lower()
|
||||||
if not (skillName in skillsearch or
|
if not (skillName in skillsearch or
|
||||||
|
|
|
||||||
|
|
@ -721,7 +721,7 @@ def htmlHeaderWithPersonMarkup(cssFilename: str, instanceTitle: str,
|
||||||
|
|
||||||
skillsMarkup = ''
|
skillsMarkup = ''
|
||||||
if actorJson.get('hasOccupation'):
|
if actorJson.get('hasOccupation'):
|
||||||
skillsStr = actorJson['hasOccupation']['skills']
|
skillsList = actorJson['hasOccupation']['skills']
|
||||||
if actorJson['hasOccupation'].get('name'):
|
if actorJson['hasOccupation'].get('name'):
|
||||||
occupationName = actorJson['hasOccupation']['name']
|
occupationName = actorJson['hasOccupation']['name']
|
||||||
occupationStr = ' "name": "' + occupationName + '",\n'
|
occupationStr = ' "name": "' + occupationName + '",\n'
|
||||||
|
|
@ -729,7 +729,7 @@ def htmlHeaderWithPersonMarkup(cssFilename: str, instanceTitle: str,
|
||||||
' "hasOccupation": {\n' + \
|
' "hasOccupation": {\n' + \
|
||||||
' "@type": "Occupation",\n' + \
|
' "@type": "Occupation",\n' + \
|
||||||
occupationStr + \
|
occupationStr + \
|
||||||
' "skills": "' + skillsStr + '"\n' + \
|
' "skills": ' + str(skillsList) + '\n' + \
|
||||||
' "},\n'
|
' "},\n'
|
||||||
|
|
||||||
personMarkup = \
|
personMarkup = \
|
||||||
|
|
@ -758,6 +758,10 @@ def htmlHeaderWithWebsiteMarkup(cssFilename: str, instanceTitle: str,
|
||||||
systemLanguage)
|
systemLanguage)
|
||||||
|
|
||||||
licenseUrl = 'https://www.gnu.org/licenses/agpl-3.0.en.html'
|
licenseUrl = 'https://www.gnu.org/licenses/agpl-3.0.en.html'
|
||||||
|
|
||||||
|
# social networking category
|
||||||
|
genreUrl = 'http://vocab.getty.edu/aat/300312270'
|
||||||
|
|
||||||
websiteMarkup = \
|
websiteMarkup = \
|
||||||
' <script type="application/ld+json">\n' + \
|
' <script type="application/ld+json">\n' + \
|
||||||
' {\n' + \
|
' {\n' + \
|
||||||
|
|
@ -768,7 +772,7 @@ def htmlHeaderWithWebsiteMarkup(cssFilename: str, instanceTitle: str,
|
||||||
' "license": "' + licenseUrl + '",\n' + \
|
' "license": "' + licenseUrl + '",\n' + \
|
||||||
' "inLanguage": "' + systemLanguage + '",\n' + \
|
' "inLanguage": "' + systemLanguage + '",\n' + \
|
||||||
' "isAccessibleForFree": true,\n' + \
|
' "isAccessibleForFree": true,\n' + \
|
||||||
' "genre": "https://en.wikipedia.org/wiki/Fediverse",\n' + \
|
' "genre": "' + genreUrl + '",\n' + \
|
||||||
' "accessMode": ["textual", "visual"],\n' + \
|
' "accessMode": ["textual", "visual"],\n' + \
|
||||||
' "accessModeSufficient": ["textual"],\n' + \
|
' "accessModeSufficient": ["textual"],\n' + \
|
||||||
' "accessibilityAPI" : ["ARIA"],\n' + \
|
' "accessibilityAPI" : ["ARIA"],\n' + \
|
||||||
|
|
|
||||||
|
|
@ -14,7 +14,7 @@
|
||||||
"email": "bob@freedombone.net",
|
"email": "bob@freedombone.net",
|
||||||
"url": "https://epicyon.freedombone.net/users/bob"
|
"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"
|
"downloadUrl" : "https://epicyon.net/epicyon.tar.gz"
|
||||||
}
|
}
|
||||||
</script>
|
</script>
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue