def get_expanded_card_data(self, project: scoring_base.ScoringProject) \ -> network_pb2.ContactLeads: """Retrieve data for the expanded card.""" contact_leads = self._list_contact_leads(project) sorted_leads = sorted(contact_leads, key=lambda l: (-len(l.filters), random.random())) return network_pb2.ContactLeads(leads=[ network_pb2.ContactLead( name=project.populate_template( project.translate_string(template.name)), email_example=project.populate_template( project.translate_string(template.email_template)), contact_tip=project.translate_string(template.contact_tip)) for template in sorted_leads ])
def list_jobboards( project: scoring_base.ScoringProject ) -> Iterator[jobboard_pb2.JobBoard]: """List all job boards for this project.""" all_job_boards = _JOBBOARDS.get_collection(project.database) for job_board_template in scoring_base.filter_using_score( all_job_boards, lambda j: j.filters, project): job_board = jobboard_pb2.JobBoard() job_board.CopyFrom(job_board_template) job_board.link = project.populate_template(job_board.link) yield job_board
def score_and_explain(self, project: scoring_base.ScoringProject) \ -> scoring_base.ExplainedScore: """Compute a score for the given ScoringProject.""" reasons = [] if project.details.area_type < geo_pb2.COUNTRY: return scoring_base.NULL_EXPLAINED_SCORE reasons.append( project.populate_template( project.translate_static_string( 'vous nous avez dit être prêt%eFeminine à déménager'))) local_stats = project.local_diagnosis() if local_stats.imt.yearly_avg_offers_per_10_candidates and \ local_stats.num_less_stressful_departements: reasons.append( project.translate_static_string( "il y a beaucoup plus d'offres par habitants dans d'autres villes" )) return scoring_base.ExplainedScore(2, reasons) return scoring_base.NULL_EXPLAINED_SCORE
def score_and_explain(self, project: scoring_base.ScoringProject) \ -> scoring_base.ExplainedScore: """Compute a score for the given ScoringProject.""" close_jobs = self.get_close_jobs(project) search_since_nb_months = round(project.get_search_length_now()) score_modifier = 0 reasons: list[str] = [] if len(close_jobs.close_jobs) + len(close_jobs.evolution_jobs) < 2: return scoring_base.NULL_EXPLAINED_SCORE # TODO(cyrille): Make this more robust. force_in_stuck_market = None # TODO(cyrille): Rather use market_stress to avoid depending on diagnostic to be computed. if project.details.diagnostic.category_id == 'stuck-market': force_in_stuck_market = scoring_base.ExplainedScore(1, reasons) if project.get_user_age() >= 45: return force_in_stuck_market or scoring_base.NULL_EXPLAINED_SCORE if project.details.passionate_level >= project_pb2.PASSIONATING_JOB: score_modifier = -1 else: reasons.append( project.populate_template( project.translate_static_string( "vous n'êtes pas trop attaché%eFeminine à votre métier" ))) if project.details.job_search_has_not_started or search_since_nb_months <= 1: return scoring_base.ExplainedScore(2 + score_modifier, reasons) reasons = [ project.translate_static_string( 'vous cherchez depuis {} mois').format(search_since_nb_months) ] if search_since_nb_months >= 12: return scoring_base.ExplainedScore(3, reasons) if search_since_nb_months >= 9: return scoring_base.ExplainedScore(2, reasons) if search_since_nb_months >= 6: return scoring_base.ExplainedScore(1, reasons) return force_in_stuck_market or scoring_base.NULL_EXPLAINED_SCORE