in microservices/skill_service/src/services/ingest_csv.py [0:0]
def import_skills(skills_json_array):
"""extracts and saves the skills as per skill fireo model"""
skill_competency_mapping = {}
inserted_skills = []
for skill in skills_json_array:
comp_code = skill.get("CompetencyAlignment")
skill_code = skill.get("SkillCode")
if skill_competency_mapping.get(skill_code):
if comp_code not in skill_competency_mapping.get(skill_code).get(
"parent_nodes")["competencies"]:
skill_competency_mapping[skill_code]["parent_nodes"][
"competencies"].append(comp_code)
else:
if skill.get("Keyword"):
keywords = skill.get("Keyword").split(",")
for i, item in enumerate(keywords):
item = item.lstrip()
keywords[i] = item.rstrip()
else:
keywords = []
# adding id and score to the sme aligned skill
# TODO: Istead of hardcoding skill_source("emsi")
# somehow get it from the csv
aligned_skill = skill.get("ExternalSkillAlignment")
skill_alignment = {"emsi": {"aligned": [], "suggested": []}}
if aligned_skill:
skill_alignment["emsi"]["aligned"].append({
"id": "",
"name": aligned_skill,
"score": 1.0 # since human aligned this skill
})
aligned_skill_doc = Skill.collection.filter("name", "==",
aligned_skill).get()
if aligned_skill_doc:
skill_alignment["emsi"]["aligned"][0]["id"] = aligned_skill_doc.id
occupations_major_group = []
if skill.get("OccupationsMajorGroup"):
occupations_major_group.append(skill.get("OccupationsMajorGroup"))
occupations_minor_group = []
if skill.get("OccupationsMinorGroup"):
occupations_minor_group.append(skill.get("OccupationsMinorGroup"))
broad_occupation = []
if skill.get("BroadOccupation"):
broad_occupation.append(skill.get("BroadOccupation"))
detailed_occupation = []
if skill.get("DetailedOccupation"):
detailed_occupation.append(skill.get("DetailedOccupation"))
skill_competency_mapping[skill_code] = {
"name": skill.get("Skill"),
"description": skill.get("SkillStatement"),
"parent_nodes": {"competencies": [comp_code]},
"reference_id": skill.get("SkillCode"),
"keywords": keywords,
"occupations": {
"occupations_major_group": occupations_major_group,
"occupations_minor_group": occupations_minor_group,
"broad_occupation": broad_occupation,
"detailed_occupation": detailed_occupation
},
"onet_job": skill.get("ONETJob"),
"alignments": {
"standard_alignment": skill.get("StandardAlignment"),
"credential_alignment": skill.get("CredentialAlignment"),
"skill_alignment": {
"emsi": {
"aligned": [{
"id": "",
"name": skill_alignment,
"score": 1.0
}],
"suggested": []
}
},
"knowledge_alignment": {},
"role_alignment": {},
"organizational_alignment": skill.get("OrganizationalAlignment"),
},
"author": "",
"creator": "",
"organizations": [],
"certifications": [],
"type": {
"id": "",
"name": ""
},
"source_uri": "snhu",
"source_name": "snhu",
}
for skill in skill_competency_mapping.values():
skill_obj = Skill()
skill_obj = skill_obj.from_dict(skill)
skill_obj.uuid = ""
skill_obj.save()
skill_obj.uuid = skill_obj.id
skill_obj.update()
inserted_skills.append(skill_obj.to_dict())
# Insert/Update doc in data_sources collection after ingestion:
_ = upsert_data_source_doc("skill", "snhu")
return inserted_skills