def filter_by_parameters(self, parameters, base_track, target_track): pattern = list(filter(lambda p: p.name == "pattern", parameters)) if len(pattern) > 0: cp = CriticizePattern(pattern[0].value) return cp.is_fit_pattern(base_track, target_track) else: return self.is_fit_track(base_track, target_track)
def request_to_parameters(self, criticize_type, track, request_parameters): if criticize_type != TrackCriticizeType.Parameter and not track: raise Exception("Target track is None") parameters = [] if criticize_type == TrackCriticizeType.Parameter: if "bpm" in request_parameters: parameters.append(Parameter("bpm", request_parameters["bpm"])) elif criticize_type == TrackCriticizeType.Pattern: criticize = CriticizePattern(pattern=request_parameters["pattern"]) direction = criticize.get_direction() parameters.append(Parameter("pattern", criticize.pattern)) for c in criticize.get_targets(): parameters.append(Parameter(c.name, vector_utils.to_value(getattr(track, c.name)), direction)) elif criticize_type == TrackCriticizeType.Like: for c in self.__get_criticizables(): parameters.append(Parameter(c, vector_utils.to_value(getattr(track, c)))) if "q" in request_parameters and request_parameters["q"]: parameters.append(Parameter("q", request_parameters["q"])) if Parameter.first_or_default("genre", parameters) and not Parameter.first_or_default("genre_score", parameters): genre = Parameter.first_or_default("genre", parameters) if Track.genre_to_score(genre): g_score = Track.genre_to_score(genre) parameters.append(Parameter("genre_score", g_score)) return parameters