def resolve_query(self, query_str): """Parse query and get corresponding stats.""" params = self.parse_query(query_str) # Get activities. activities = Strava.get_activities(self.auth, params) if len(activities) == 0: logging.warning( "There are no activites that matched your query: %s\n", query_str) return print() aggregate = params.get('total') if aggregate: print('Total stats:') for agg in aggregate: print(f"{agg.capitalize()}: ", end='') if agg == 'count': print(f"{len(activities)}") elif agg == 'distance': print( f"{Strava.format_distance(Strava.get_total_distance(activities))}" ) elif agg == 'time': print( f"{Strava.format_time(Strava.get_total_time(activities))}" ) else: # Total elevation. print( f"{round(Strava.get_total_elevation(activities), 2)}m") if params.get('stats'): for dist in Stats.milestones[params['type']]: params['distance'] = dist * 1000 activities = Strava.get_activities(self.auth, params) if len(activities ): # Print the count only if there are activities. print(f"{dist}k: {len(activities)}") print() else: # Print activity information. for act in activities: Strava.print_activity(act) print()
def get(self): if not self.get_current_user(): raise tornado.web.HTTPError(401, "Access denied") year = datetime.date.today().year month = datetime.date.today().month after = datetime.datetime(year, month, 01, 0, 0).strftime("%s") mongo = MongoClient("mongo") user_settings = mongo.strava.settings.find_one({"_id": self.get_current_user()}) strava = Strava() strava.access_token(self.get_current_token()) athlete = strava.get_athlete() activities = strava.get_activities(per_page=200, after=after) results = dict() results["count"] = 0 results["count_total"] = len(activities) results["kudos"] = 0 results["achievement"] = 0 for r in activities: if r['type'] == 'Ride' and r['commute']: results["count"] = results.get("count", 0) + 1 results["distance"] = results.get("distance", 0) + r["distance"] results["kudos"] = results.get("kudos", 0) + r['kudos_count'] results["achievement"] = results.get("achievement", 0) + r['achievement_count'] results["moving_time"] = results.get("moving_time", 0) + r['moving_time'] results["elevation"] = results.get("elevation", 0) + r['total_elevation_gain'] results['money_saved'] = "%s %.2f" % (user_settings.get("currency", "USD"), (results.get("count", 0) * float(user_settings["cost_per_commute"]))) results["distance"] = "%.2f" % round(utils.distance(athlete['measurement_preference'], results.get("distance", 0)) / 1000, 2) results["elevation"] = utils.elevation(athlete['measurement_preference'], results.get("elevation", 0)) results["moving_time"] = utils.moving_time(results.get("moving_time", 0)) results["commutes_percentage"] = utils.commutes_percentage(results["count"], results["count_total"]) self.write(json.dumps(results))