diff --git a/person.py b/person.py index ea7b228b2..84d0af727 100644 --- a/person.py +++ b/person.py @@ -288,6 +288,10 @@ def _createPersonBase(baseDir: str, nickname: str, domain: str, port: int, { '@type': 'Occupation', 'name': "", + "occupationLocation": { + "@type": "City", + "name": "Fediverse" + }, 'skills': [] } ], @@ -588,6 +592,10 @@ def personUpgradeActor(baseDir: str, personJson: {}, { '@type': 'Occupation', 'name': occupationName, + "occupationLocation": { + "@type": "City", + "name": "Fediverse" + }, 'skills': [] } ] @@ -609,10 +617,36 @@ def personUpgradeActor(baseDir: str, personJson: {}, { '@type': 'Occupation', 'name': occupationName, + 'occupationLocation': { + '@type': 'City', + 'name': 'Fediverse' + }, 'skills': [] } ] updateActor = True + else: + # add location if it is missing + for index in range(len(personJson['hasOccupation'])): + ocItem = personJson['hasOccupation'][index] + if ocItem.get('hasOccupation'): + ocItem = ocItem['hasOccupation'] + if ocItem.get('location'): + del ocItem['location'] + updateActor = True + if not ocItem.get('occupationLocation'): + ocItem['occupationLocation'] = { + "@type": "City", + "name": "Fediverse" + } + updateActor = True + else: + if ocItem['occupationLocation']['@type'] != 'City': + ocItem['occupationLocation'] = { + "@type": "City", + "name": "Fediverse" + } + updateActor = True # if no roles are defined then ensure that the admin # roles are configured diff --git a/roles.py b/roles.py index 3655c99e9..9e2672af2 100644 --- a/roles.py +++ b/roles.py @@ -145,6 +145,11 @@ def _setActorRole(actorJson: {}, roleName: str) -> bool: "hasOccupation": { "@type": "Occupation", "name": roleName, + "description": "Fediverse instance role", + "occupationLocation": { + "@type": "City", + "url": "Fediverse" + }, "occupationalCategory": { "@type": "CategoryCode", "inCodeSet": { diff --git a/skills.py b/skills.py index c97c678fd..1a4fec44c 100644 --- a/skills.py +++ b/skills.py @@ -86,6 +86,10 @@ def setActorSkillLevel(actorJson: {}, { '@type': 'Occupation', 'name': '', + "occupationLocation": { + "@type": "City", + "name": "Fediverse" + }, 'skills': [] } ] diff --git a/tests.py b/tests.py index 5b22e7860..6155b42eb 100644 --- a/tests.py +++ b/tests.py @@ -3666,6 +3666,10 @@ def testSkills() -> None: { '@type': 'Occupation', 'name': "Sysop", + "occupationLocation": { + "@type": "City", + "name": "Fediverse" + }, 'skills': [] } ] @@ -3688,6 +3692,10 @@ def testRoles() -> None: { '@type': 'Occupation', 'name': "Sysop", + 'occupationLocation': { + '@type': 'City', + 'name': 'Fediverse' + }, 'skills': [] } ] diff --git a/webapp_utils.py b/webapp_utils.py index b84c128ff..953f74837 100644 --- a/webapp_utils.py +++ b/webapp_utils.py @@ -720,6 +720,24 @@ def htmlHeaderWithPersonMarkup(cssFilename: str, instanceTitle: str, if not actorJson: return htmlStr + cityMarkup = '' + if city: + city = city.lower().title() + addComma = '' + countryMarkup = '' + if ',' in city: + country = city.split(',', 1)[1].strip().title() + city = city.split(',', 1)[0] + countryMarkup = \ + ' "addressCountry": "' + country + '"\n' + addComma = ',' + cityMarkup = \ + ' "address": {\n' + \ + ' "@type": "PostalAddress",\n' + \ + ' "addressLocality": "' + city + '"' + addComma + '\n' + \ + countryMarkup + \ + ' },\n' + skillsMarkup = '' if actorJson.get('hasOccupation'): if isinstance(actorJson['hasOccupation'], list): @@ -742,6 +760,14 @@ def htmlHeaderWithPersonMarkup(cssFilename: str, instanceTitle: str, skillsMarkup += ' "hasOccupation": {\n' skillsMarkup += ' "@type": "Occupation",\n' skillsMarkup += ' "name": "' + roleName + '",\n' + skillsMarkup += ' "description": ' + \ + '"Fediverse instance role",\n' + skillsMarkup += ' "occupationLocation": {\n' + skillsMarkup += \ + ' "@type": "City",\n' + skillsMarkup += \ + ' "name": "' + city + '"\n' + skillsMarkup += ' },\n' skillsMarkup += ' "occupationalCategory": {\n' skillsMarkup += ' "@type": "CategoryCode",\n' skillsMarkup += ' "inCodeSet": {\n' @@ -776,29 +802,19 @@ def htmlHeaderWithPersonMarkup(cssFilename: str, instanceTitle: str, skillsMarkup += ' {\n' skillsMarkup += ' "@type": "Occupation",\n' skillsMarkup += ' "name": "' + ocName + '",\n' + skillsMarkup += ' "description": ' + \ + '"Fediverse instance occupation",\n' + skillsMarkup += ' "occupationLocation": {\n' + skillsMarkup += ' "@type": "City",\n' + skillsMarkup += \ + ' "name": "' + city + '"\n' + skillsMarkup += ' },\n' skillsMarkup += \ ' "skills": ' + skillsListStr + '\n' skillsMarkup += ' }' firstEntry = False skillsMarkup += '\n ],\n' - cityMarkup = '' - if city: - city = city.lower().title() - addComma = '' - countryMarkup = '' - if ',' in city: - country = city.split(',', 1)[1].strip().title() - city = city.split(',', 1)[0] - countryMarkup = \ - ' "addressCountry": "' + country + '"\n' - addComma = ',' - cityMarkup = \ - ' "address": {\n' + \ - ' "@type": "PostalAddress",\n' + \ - ' "addressLocality": "' + city + '"' + addComma + '\n' + \ - countryMarkup + \ - ' },\n' description = removeHtml(actorJson['summary']) nameStr = removeHtml(actorJson['name']) personMarkup = \ @@ -872,6 +888,11 @@ def htmlHeaderWithBlogMarkup(cssFilename: str, instanceTitle: str, authorUrl = httpPrefix + '://' + domain + '/users/' + nickname aboutUrl = httpPrefix + '://' + domain + '/about.html' + + # license for content on the site may be different from + # the software license + contentLicenseUrl = 'https://creativecommons.org/licenses/by/3.0' + blogMarkup = \ ' \n'