def get_scores(self, house, details=None): scores = {} total_score = 0.0 for k in self.default_fields: if k == "value": continue method = getattr(self, k, None) if method is None: continue result = method(house, details) scores[k] = dict(**result._asdict()) total_score += result.money if not result.accepted: scores["cutoff"] = ",".join( filter(None, [scores.get("cutoff"), k])) # value evaluation must be run last result = self.value(house, details, total_score) scores["value"] = dict(**result._asdict()) if not result.accepted: scores["cutoff"] = ",".join( filter(None, [scores.get("cutoff"), "value"])) scores["facts"] = { "build": house.get("year_built", -1), "full_address": RFAPI.house_address(house), "beds": house["beds"], "sqft": house["sqft"] if house.get("sqft") is not None else 0.0, "baths": house.get("baths", 0), "price": house["price"], "County": RFAPI.house_county(house, details), "photo": RFAPI.house_photo_url(house, details), "neighborhoods": RFAPI.house_neighborhoods(house, details) if details is not None else [] } return scores