示例#1
0
    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()
示例#2
0
    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))