mirror of https://gitlab.com/bashrc2/epicyon
				
				
				
			Snake case
							parent
							
								
									f5bafebcdd
								
							
						
					
					
						commit
						fdf8e24a6f
					
				| 
						 | 
				
			
			@ -119,5 +119,4 @@ def site_is_active(url: str, timeout: int) -> bool:
 | 
			
		|||
 | 
			
		||||
    except BaseException:
 | 
			
		||||
        print('EX: site_is_active ' + str(loc))
 | 
			
		||||
        pass
 | 
			
		||||
    return False
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
							
								
								
									
										176
									
								
								skills.py
								
								
								
								
							
							
						
						
									
										176
									
								
								skills.py
								
								
								
								
							| 
						 | 
				
			
			@ -24,46 +24,46 @@ from utils import local_actor_url
 | 
			
		|||
from utils import has_actor
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
def set_skills_from_dict(actor_json: {}, skillsDict: {}) -> []:
 | 
			
		||||
def set_skills_from_dict(actor_json: {}, skills_dict: {}) -> []:
 | 
			
		||||
    """Converts a dict containing skills to a list
 | 
			
		||||
    Returns the string version of the dictionary
 | 
			
		||||
    """
 | 
			
		||||
    skillsList = []
 | 
			
		||||
    for name, value in skillsDict.items():
 | 
			
		||||
        skillsList.append(name + ':' + str(value))
 | 
			
		||||
    set_occupation_skills_list(actor_json, skillsList)
 | 
			
		||||
    return skillsList
 | 
			
		||||
    skills_list = []
 | 
			
		||||
    for name, value in skills_dict.items():
 | 
			
		||||
        skills_list.append(name + ':' + str(value))
 | 
			
		||||
    set_occupation_skills_list(actor_json, skills_list)
 | 
			
		||||
    return skills_list
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
def get_skills_from_list(skillsList: []) -> {}:
 | 
			
		||||
def get_skills_from_list(skills_list: []) -> {}:
 | 
			
		||||
    """Returns a dict of skills from a list
 | 
			
		||||
    """
 | 
			
		||||
    if isinstance(skillsList, list):
 | 
			
		||||
        skillsList2 = skillsList
 | 
			
		||||
    if isinstance(skills_list, list):
 | 
			
		||||
        skills_list2 = skills_list
 | 
			
		||||
    else:
 | 
			
		||||
        skillsList2 = skillsList.split(',')
 | 
			
		||||
    skillsDict = {}
 | 
			
		||||
    for skill in skillsList2:
 | 
			
		||||
        skills_list2 = skills_list.split(',')
 | 
			
		||||
    skills_dict = {}
 | 
			
		||||
    for skill in skills_list2:
 | 
			
		||||
        if ':' not in skill:
 | 
			
		||||
            continue
 | 
			
		||||
        name = skill.split(':')[0].strip().lower()
 | 
			
		||||
        valueStr = skill.split(':')[1]
 | 
			
		||||
        if not valueStr.isdigit():
 | 
			
		||||
        value_str = skill.split(':')[1]
 | 
			
		||||
        if not value_str.isdigit():
 | 
			
		||||
            continue
 | 
			
		||||
        skillsDict[name] = int(valueStr)
 | 
			
		||||
    return skillsDict
 | 
			
		||||
        skills_dict[name] = int(value_str)
 | 
			
		||||
    return skills_dict
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
def actor_skill_value(actor_json: {}, skillName: str) -> int:
 | 
			
		||||
def actor_skill_value(actor_json: {}, skill_name: str) -> int:
 | 
			
		||||
    """Returns The skill level from an actor
 | 
			
		||||
    """
 | 
			
		||||
    ocSkillsList = get_occupation_skills(actor_json)
 | 
			
		||||
    skillsDict = get_skills_from_list(ocSkillsList)
 | 
			
		||||
    if not skillsDict:
 | 
			
		||||
    oc_skills_list = get_occupation_skills(actor_json)
 | 
			
		||||
    skills_dict = get_skills_from_list(oc_skills_list)
 | 
			
		||||
    if not skills_dict:
 | 
			
		||||
        return 0
 | 
			
		||||
    skillName = skillName.lower()
 | 
			
		||||
    if skillsDict.get(skillName):
 | 
			
		||||
        return skillsDict[skillName]
 | 
			
		||||
    skill_name = skill_name.lower()
 | 
			
		||||
    if skills_dict.get(skill_name):
 | 
			
		||||
        return skills_dict[skill_name]
 | 
			
		||||
    return 0
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -71,17 +71,17 @@ def no_of_actor_skills(actor_json: {}) -> int:
 | 
			
		|||
    """Returns the number of skills that an actor has
 | 
			
		||||
    """
 | 
			
		||||
    if actor_json.get('hasOccupation'):
 | 
			
		||||
        skillsList = get_occupation_skills(actor_json)
 | 
			
		||||
        return len(skillsList)
 | 
			
		||||
        skills_list = get_occupation_skills(actor_json)
 | 
			
		||||
        return len(skills_list)
 | 
			
		||||
    return 0
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
def set_actor_skill_level(actor_json: {},
 | 
			
		||||
                          skill: str, skillLevelPercent: int) -> bool:
 | 
			
		||||
                          skill: str, skill_level_percent: int) -> bool:
 | 
			
		||||
    """Set a skill level for a person
 | 
			
		||||
    Setting skill level to zero removes it
 | 
			
		||||
    """
 | 
			
		||||
    if skillLevelPercent < 0 or skillLevelPercent > 100:
 | 
			
		||||
    if skill_level_percent < 0 or skill_level_percent > 100:
 | 
			
		||||
        return False
 | 
			
		||||
 | 
			
		||||
    if not actor_json:
 | 
			
		||||
| 
						 | 
				
			
			@ -96,51 +96,51 @@ def set_actor_skill_level(actor_json: {},
 | 
			
		|||
            },
 | 
			
		||||
            'skills': []
 | 
			
		||||
        }]
 | 
			
		||||
    ocSkillsList = get_occupation_skills(actor_json)
 | 
			
		||||
    skillsDict = get_skills_from_list(ocSkillsList)
 | 
			
		||||
    if not skillsDict.get(skill):
 | 
			
		||||
        if len(skillsDict.items()) >= 32:
 | 
			
		||||
    oc_skills_list = get_occupation_skills(actor_json)
 | 
			
		||||
    skills_dict = get_skills_from_list(oc_skills_list)
 | 
			
		||||
    if not skills_dict.get(skill):
 | 
			
		||||
        if len(skills_dict.items()) >= 32:
 | 
			
		||||
            print('WARN: Maximum number of skills reached for ' +
 | 
			
		||||
                  actor_json['id'])
 | 
			
		||||
            return False
 | 
			
		||||
    if skillLevelPercent > 0:
 | 
			
		||||
        skillsDict[skill] = skillLevelPercent
 | 
			
		||||
    if skill_level_percent > 0:
 | 
			
		||||
        skills_dict[skill] = skill_level_percent
 | 
			
		||||
    else:
 | 
			
		||||
        if skillsDict.get(skill):
 | 
			
		||||
            del skillsDict[skill]
 | 
			
		||||
    set_skills_from_dict(actor_json, skillsDict)
 | 
			
		||||
        if skills_dict.get(skill):
 | 
			
		||||
            del skills_dict[skill]
 | 
			
		||||
    set_skills_from_dict(actor_json, skills_dict)
 | 
			
		||||
    return True
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
def set_skill_level(base_dir: str, nickname: str, domain: str,
 | 
			
		||||
                    skill: str, skillLevelPercent: int) -> bool:
 | 
			
		||||
                    skill: str, skill_level_percent: int) -> bool:
 | 
			
		||||
    """Set a skill level for a person
 | 
			
		||||
    Setting skill level to zero removes it
 | 
			
		||||
    """
 | 
			
		||||
    if skillLevelPercent < 0 or skillLevelPercent > 100:
 | 
			
		||||
    if skill_level_percent < 0 or skill_level_percent > 100:
 | 
			
		||||
        return False
 | 
			
		||||
    actorFilename = acct_dir(base_dir, nickname, domain) + '.json'
 | 
			
		||||
    if not os.path.isfile(actorFilename):
 | 
			
		||||
    actor_filename = acct_dir(base_dir, nickname, domain) + '.json'
 | 
			
		||||
    if not os.path.isfile(actor_filename):
 | 
			
		||||
        return False
 | 
			
		||||
 | 
			
		||||
    actor_json = load_json(actorFilename)
 | 
			
		||||
    actor_json = load_json(actor_filename)
 | 
			
		||||
    return set_actor_skill_level(actor_json,
 | 
			
		||||
                                 skill, skillLevelPercent)
 | 
			
		||||
                                 skill, skill_level_percent)
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
def get_skills(base_dir: str, nickname: str, domain: str) -> []:
 | 
			
		||||
    """Returns the skills for a given person
 | 
			
		||||
    """
 | 
			
		||||
    actorFilename = acct_dir(base_dir, nickname, domain) + '.json'
 | 
			
		||||
    if not os.path.isfile(actorFilename):
 | 
			
		||||
    actor_filename = acct_dir(base_dir, nickname, domain) + '.json'
 | 
			
		||||
    if not os.path.isfile(actor_filename):
 | 
			
		||||
        return False
 | 
			
		||||
 | 
			
		||||
    actor_json = load_json(actorFilename)
 | 
			
		||||
    actor_json = load_json(actor_filename)
 | 
			
		||||
    if actor_json:
 | 
			
		||||
        if not actor_json.get('hasOccupation'):
 | 
			
		||||
            return None
 | 
			
		||||
        ocSkillsList = get_occupation_skills(actor_json)
 | 
			
		||||
        return get_skills_from_list(ocSkillsList)
 | 
			
		||||
        oc_skills_list = get_occupation_skills(actor_json)
 | 
			
		||||
        return get_skills_from_list(oc_skills_list)
 | 
			
		||||
    return None
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -157,25 +157,25 @@ def outbox_skills(base_dir: str, nickname: str, message_json: {},
 | 
			
		|||
    if not has_object_string(message_json, debug):
 | 
			
		||||
        return False
 | 
			
		||||
 | 
			
		||||
    actorNickname = get_nickname_from_actor(message_json['actor'])
 | 
			
		||||
    if actorNickname != nickname:
 | 
			
		||||
    actor_nickname = get_nickname_from_actor(message_json['actor'])
 | 
			
		||||
    if actor_nickname != nickname:
 | 
			
		||||
        return False
 | 
			
		||||
    domain, port = get_domain_from_actor(message_json['actor'])
 | 
			
		||||
    domain, _ = get_domain_from_actor(message_json['actor'])
 | 
			
		||||
    skill = message_json['object'].replace('"', '').split(';')[0].strip()
 | 
			
		||||
    skillLevelPercentStr = \
 | 
			
		||||
    skill_level_percent_str = \
 | 
			
		||||
        message_json['object'].replace('"', '').split(';')[1].strip()
 | 
			
		||||
    skillLevelPercent = 50
 | 
			
		||||
    if skillLevelPercentStr.isdigit():
 | 
			
		||||
        skillLevelPercent = int(skillLevelPercentStr)
 | 
			
		||||
    skill_level_percent = 50
 | 
			
		||||
    if skill_level_percent_str.isdigit():
 | 
			
		||||
        skill_level_percent = int(skill_level_percent_str)
 | 
			
		||||
 | 
			
		||||
    return set_skill_level(base_dir, nickname, domain,
 | 
			
		||||
                           skill, skillLevelPercent)
 | 
			
		||||
                           skill, skill_level_percent)
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
def send_skill_via_server(base_dir: str, session, nickname: str, password: str,
 | 
			
		||||
                          domain: str, port: int,
 | 
			
		||||
                          http_prefix: str,
 | 
			
		||||
                          skill: str, skillLevelPercent: int,
 | 
			
		||||
                          skill: str, skill_level_percent: int,
 | 
			
		||||
                          cached_webfingers: {}, person_cache: {},
 | 
			
		||||
                          debug: bool, project_version: str,
 | 
			
		||||
                          signing_priv_key_pem: str) -> {}:
 | 
			
		||||
| 
						 | 
				
			
			@ -188,20 +188,20 @@ def send_skill_via_server(base_dir: str, session, nickname: str, password: str,
 | 
			
		|||
    domain_full = get_full_domain(domain, port)
 | 
			
		||||
 | 
			
		||||
    actor = local_actor_url(http_prefix, nickname, domain_full)
 | 
			
		||||
    toUrl = actor
 | 
			
		||||
    ccUrl = actor + '/followers'
 | 
			
		||||
    to_url = actor
 | 
			
		||||
    cc_url = actor + '/followers'
 | 
			
		||||
 | 
			
		||||
    if skillLevelPercent:
 | 
			
		||||
        skillStr = skill + ';' + str(skillLevelPercent)
 | 
			
		||||
    if skill_level_percent:
 | 
			
		||||
        skill_str = skill + ';' + str(skill_level_percent)
 | 
			
		||||
    else:
 | 
			
		||||
        skillStr = skill + ';0'
 | 
			
		||||
        skill_str = skill + ';0'
 | 
			
		||||
 | 
			
		||||
    newSkillJson = {
 | 
			
		||||
    new_skill_json = {
 | 
			
		||||
        'type': 'Skill',
 | 
			
		||||
        'actor': actor,
 | 
			
		||||
        'object': '"' + skillStr + '"',
 | 
			
		||||
        'to': [toUrl],
 | 
			
		||||
        'cc': [ccUrl]
 | 
			
		||||
        'object': '"' + skill_str + '"',
 | 
			
		||||
        'to': [to_url],
 | 
			
		||||
        'cc': [cc_url]
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    handle = http_prefix + '://' + domain_full + '/@' + nickname
 | 
			
		||||
| 
						 | 
				
			
			@ -221,55 +221,55 @@ def send_skill_via_server(base_dir: str, session, nickname: str, password: str,
 | 
			
		|||
              ' did not return a dict. ' + str(wf_request))
 | 
			
		||||
        return 1
 | 
			
		||||
 | 
			
		||||
    postToBox = 'outbox'
 | 
			
		||||
    post_to_box = 'outbox'
 | 
			
		||||
 | 
			
		||||
    # get the actor inbox for the To handle
 | 
			
		||||
    originDomain = domain
 | 
			
		||||
    (inboxUrl, pubKeyId, pubKey, fromPersonId, sharedInbox, avatarUrl,
 | 
			
		||||
     displayName, _) = get_person_box(signing_priv_key_pem,
 | 
			
		||||
                                      originDomain,
 | 
			
		||||
                                      base_dir, session, wf_request,
 | 
			
		||||
                                      person_cache, project_version,
 | 
			
		||||
                                      http_prefix, nickname, domain,
 | 
			
		||||
                                      postToBox, 76121)
 | 
			
		||||
    origin_domain = domain
 | 
			
		||||
    (inbox_url, _, _, from_person_id, _, _,
 | 
			
		||||
     _, _) = get_person_box(signing_priv_key_pem,
 | 
			
		||||
                            origin_domain,
 | 
			
		||||
                            base_dir, session, wf_request,
 | 
			
		||||
                            person_cache, project_version,
 | 
			
		||||
                            http_prefix, nickname, domain,
 | 
			
		||||
                            post_to_box, 76121)
 | 
			
		||||
 | 
			
		||||
    if not inboxUrl:
 | 
			
		||||
    if not inbox_url:
 | 
			
		||||
        if debug:
 | 
			
		||||
            print('DEBUG: skill no ' + postToBox +
 | 
			
		||||
            print('DEBUG: skill no ' + post_to_box +
 | 
			
		||||
                  ' was found for ' + handle)
 | 
			
		||||
        return 3
 | 
			
		||||
    if not fromPersonId:
 | 
			
		||||
    if not from_person_id:
 | 
			
		||||
        if debug:
 | 
			
		||||
            print('DEBUG: skill no actor was found for ' + handle)
 | 
			
		||||
        return 4
 | 
			
		||||
 | 
			
		||||
    authHeader = create_basic_auth_header(nickname, password)
 | 
			
		||||
    auth_header = create_basic_auth_header(nickname, password)
 | 
			
		||||
 | 
			
		||||
    headers = {
 | 
			
		||||
        'host': domain,
 | 
			
		||||
        'Content-type': 'application/json',
 | 
			
		||||
        'Authorization': authHeader
 | 
			
		||||
        'Authorization': auth_header
 | 
			
		||||
    }
 | 
			
		||||
    postResult = \
 | 
			
		||||
    post_result = \
 | 
			
		||||
        post_json(http_prefix, domain_full,
 | 
			
		||||
                  session, newSkillJson, [], inboxUrl,
 | 
			
		||||
                  session, new_skill_json, [], inbox_url,
 | 
			
		||||
                  headers, 30, True)
 | 
			
		||||
    if not postResult:
 | 
			
		||||
    if not post_result:
 | 
			
		||||
        if debug:
 | 
			
		||||
            print('DEBUG: POST skill failed for c2s to ' + inboxUrl)
 | 
			
		||||
            print('DEBUG: POST skill failed for c2s to ' + inbox_url)
 | 
			
		||||
#        return 5
 | 
			
		||||
 | 
			
		||||
    if debug:
 | 
			
		||||
        print('DEBUG: c2s POST skill success')
 | 
			
		||||
 | 
			
		||||
    return newSkillJson
 | 
			
		||||
    return new_skill_json
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
def actor_has_skill(actor_json: {}, skillName: str) -> bool:
 | 
			
		||||
def actor_has_skill(actor_json: {}, skill_name: str) -> bool:
 | 
			
		||||
    """Returns true if the given actor has the given skill
 | 
			
		||||
    """
 | 
			
		||||
    ocSkillsList = get_occupation_skills(actor_json)
 | 
			
		||||
    for skillStr in ocSkillsList:
 | 
			
		||||
        if skillName + ':' in skillStr:
 | 
			
		||||
    oc_skills_list = get_occupation_skills(actor_json)
 | 
			
		||||
    for skill_str in oc_skills_list:
 | 
			
		||||
        if skill_name + ':' in skill_str:
 | 
			
		||||
            return True
 | 
			
		||||
    return False
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
		Loading…
	
		Reference in New Issue