def create_skill_opportunity(skill_id, skill_description): """Creates a SkillOpportunityModel entity in the datastore. Args: skill_id: str. The skill_id of the opportunity. skill_description: str. The skill_description of the opportunity. Raises: Exception. If a SkillOpportunityModel corresponding to the supplied skill_id already exists. """ skill_opportunity_model = ( opportunity_models.SkillOpportunityModel.get_by_id(skill_id)) if skill_opportunity_model is not None: raise Exception( 'SkillOpportunity corresponding to skill ID %s already exists.' % (skill_id)) questions, _, _ = ( question_fetchers.get_questions_and_skill_descriptions_by_skill_ids( constants.MAX_QUESTIONS_PER_SKILL, [skill_id], '')) skill_opportunity = opportunity_domain.SkillOpportunity( skill_id=skill_id, skill_description=skill_description, question_count=len(questions)) _save_skill_opportunities([skill_opportunity])
def _create_skill_opportunity_model( skill: skill_models.SkillModel, question_skill_links: List[question_models.QuestionSkillLinkModel] ) -> result.Result[opportunity_models.SkillOpportunityModel, Exception]: """Transforms a skill object and a list of QuestionSkillLink objects into a skill opportunity model. Args: skill: skill_models.SkillModel. The skill to create the opportunity for. question_skill_links: list(question_models.QuestionSkillLinkModel). The list of QuestionSkillLinkModel for the given skill. Returns: Result[opportunity_models.SkillOpportunityModel, Exception]. Result object that contains SkillOpportunityModel when the operation is successful and Exception when an exception occurs. """ try: skill_opportunity = opportunity_domain.SkillOpportunity( skill_id=skill.id, skill_description=skill.description, question_count=( GenerateSkillOpportunityModelJob. _count_unique_question_ids(question_skill_links))) skill_opportunity.validate() with datastore_services.get_ndb_context(): opportunity_model = opportunity_models.SkillOpportunityModel( id=skill_opportunity.id, skill_description=skill_opportunity.skill_description, question_count=skill_opportunity.question_count) opportunity_model.update_timestamps() return result.Ok(opportunity_model) except Exception as e: return result.Err(e)
def get_skill_opportunity_from_model(model): """Returns a SkillOpportunity domain object from a SkillOpportunityModel. Args: model: SkillOpportunityModel. The skill opportunity model. Returns: SkillOpportunity. The corresponding SkillOpportunity object. """ return opportunity_domain.SkillOpportunity( model.id, model.skill_description, model.question_count)