def _find_relevant_testimonials(self, project: scoring_base.ScoringProject) \ -> Optional[testimonial_pb2.Testimonials]: """Find the testimonials relevant for the user's project.""" max_testimonial_num = 8 all_testimonials = self.testimonial_db.get_collection(project.database) if not all_testimonials: return None job_group_id = project.details.target_job.job_group.rome_id filtered_testimonials = list( scoring_base.filter_using_score(all_testimonials, lambda j: j.filters, project)) if not filtered_testimonials: return None same_job_testimonials = [ testimonial for testimonial in filtered_testimonials if _is_in_job_group( job_group_id, testimonial.preferred_job_group_ids) ] if not same_job_testimonials: return testimonial_pb2.Testimonials( testimonials=filtered_testimonials[:max_testimonial_num]) return testimonial_pb2.Testimonials( testimonials=same_job_testimonials[:max_testimonial_num])
def _get_relevant_salons(self, project: scoring_base.ScoringProject) \ -> list[online_salon_pb2.OnlineSalon]: today = project.now # TODO(cyrille): Test filters. filtered_salons = scoring_base.filter_using_score( self._salon_db.get_collection(project.database), lambda salon: salon.filters, project) kept_salons = [] for salon in filtered_salons: score = 0 if today >= salon.application_end_date.ToDatetime(): continue if salon.locations: # Do not show salon if we know user won't move to its location. if all( not _might_move_to(project.details, location) for location in salon.locations): continue score += 1 if salon.job_group_ids: # Do not show salon if we know user is not interested in its jobs. if not _is_in_job_group( project.details.target_job.job_group.rome_id, salon.job_group_ids): continue score += 1 kept_salons.append((salon, score)) return [salon for salon, score in sorted( kept_salons, key=lambda ks: (-ks[1], ks[0].start_date.ToDatetime()))]
def list_associations(self, project): """List all associations for a project.""" all_associations = self._db.get_collection(project.database) return list( scoring_base.filter_using_score(all_associations, lambda j: j.filters, project))
def list_jobboards(self, project): """List all job boards for this project.""" all_job_boards = self._db.get_collection(project.database) return list( scoring_base.filter_using_score(all_job_boards, lambda j: j.filters, project))
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 list_events( self, project: scoring_base.ScoringProject) -> List[event_pb2.Event]: """List all events close to the project's target.""" today = project.now.strftime('%Y-%m-%d') all_events = [ e for e in self._db.get_collection(project.database) if e.start_date >= today ] return list( scoring_base.filter_using_score(all_events, lambda e: e.filters, project))
def get_expanded_card_data(self, project): """Retrieve data for the expanded card.""" banks = _PARTNER_BANKS.get_collection(project.database) all_schools = _PARTNER_SCHOOLS.get_collection(project.database) relevant_schools = scoring_base.filter_using_score( all_schools, lambda s: s.filters, project) # TODO(cyrille): Replace this once importer gets schools, and not only lists. user_specific_list = next( (school.link for school in relevant_schools if school.link), None) one_euro_program = driving_license_pb2.OneEuroProgram( partner_banks=banks) if project.get_user_age() <= 18: one_euro_program.mission_locale.CopyFrom( project.mission_locale_data()) if user_specific_list: one_euro_program.school_list_link = user_specific_list return one_euro_program
def _list_contact_leads(self, project: scoring_base.ScoringProject) \ -> Iterator[network_pb2.ContactLeadTemplate]: return scoring_base.filter_using_score( self._db.get_collection(project.database), lambda l: l.filters, project)
def _list_contact_leads(self, project): return scoring_base.filter_using_score( self._db.get_collection(project.database), lambda l: l.filters, project)