Secure your code as it's written. Use Snyk Code to scan source code in minutes - no build needed - and fix issues immediately.
kom_rank = Attribute(int, (SUMMARY, DETAILED)) #: 1-10 segment KOM ranking for athlete at time of upload
pr_rank = Attribute(int, (SUMMARY, DETAILED)) #: 1-3 personal record ranking for athlete at time of upload
moving_time = TimeIntervalAttribute((SUMMARY, DETAILED)) #: :class:`datetime.timedelta`
elapsed_time = TimeIntervalAttribute((SUMMARY, DETAILED)) #: :class:`datetime.timedelta`
start_date = TimestampAttribute((SUMMARY, DETAILED)) #: :class:`datetime.datetime` when effort was started in GMT
start_date_local = TimestampAttribute((SUMMARY, DETAILED), tzinfo=None) #: :class:`datetime.datetime` when effort was started in activity timezone for this effort
distance = Attribute(int, (SUMMARY, DETAILED), units=uh.meters) #: The distance for this effort.
average_watts = Attribute(float, (SUMMARY, DETAILED)) #: Average power during effort
device_watts = Attribute(bool, (SUMMARY, DETAILED)) #: True if the watts are from a power meter, false if estimated
average_heartrate = Attribute(float, (SUMMARY, DETAILED)) #: Average HR during effort
max_heartrate = Attribute(float, (SUMMARY, DETAILED)) #: Max HR during effort
average_cadence = Attribute(float, (SUMMARY, DETAILED)) #: Average cadence during effort
start_index = Attribute(int, (SUMMARY, DETAILED)) #: The activity stream index of the start of this effort
end_index = Attribute(int, (SUMMARY, DETAILED)) #: The activity stream index of the end of this effort
achievements = EntityCollection(SegmentEfforAchievement, (SUMMARY, DETAILED)) #: Undocumented attribute includes list of achievements for this effort.
class BestEffort(BaseEffort):
"""
Class representing a best effort (e.g. best time for 5k)
"""
class SegmentEffort(BaseEffort):
"""
Class representing a best effort on a particular segment.
"""
hidden = Attribute(bool, (SUMMARY, DETAILED,)) # indicates a hidden/non-important effort when returned as part of an activity, value may change over time.
device_watts = Attribute(bool, (SUMMARY, DETAILED)) #: True if the watts are from a power meter, false if estimated
def unmarshal(self, values, bind_client=None):
"""
Cast the list.
"""
if values is not None:
return [super(EntityCollection, self).unmarshal(v, bind_client=bind_client) for v in values]
flagged = Attribute(bool, (SUMMARY, DETAILED)) #: Whether activity was flagged.
gear_id = Attribute(six.text_type, (SUMMARY, DETAILED)) #: Which bike/shoes were used on activity.
gear = EntityAttribute(Gear, (DETAILED,))
average_speed = Attribute(float, (SUMMARY, DETAILED), units=uh.meters_per_second) #: Average speed for activity.
max_speed = Attribute(float, (SUMMARY, DETAILED), units=uh.meters_per_second) #: Max speed for activity
device_watts = Attribute(bool, (SUMMARY, DETAILED)) #: True if the watts are from a power meter, false if estimated
has_kudoed = Attribute(bool, (SUMMARY, DETAILED)) #: If authenticated user has kudoed this activity
best_efforts = EntityCollection(BestEffort, (DETAILED,)) #: :class:`list` of metric :class:`stravalib.model.BestEffort` summaries
segment_efforts = EntityCollection(SegmentEffort, (DETAILED,)) #: :class:`list` of :class:`stravalib.model.SegmentEffort` efforts for activity.
splits_metric = EntityCollection(Split, (DETAILED,)) #: :class:`list` of metric :class:`stravalib.model.Split` summaries (running activities only)
splits_standard = EntityCollection(Split, (DETAILED,)) #: :class:`list` of standard/imperial :class:`stravalib.model.Split` summaries (running activities only)
average_watts = Attribute(float, (SUMMARY, DETAILED)) #: (undocumented) Average power during activity
weighted_average_watts = Attribute(int, (SUMMARY, DETAILED)) # rides with power meter data only similar to xPower or Normalized Power
max_watts = Attribute(int, (SUMMARY, DETAILED)) #: rides with power meter data only
suffer_score = Attribute(int, (SUMMARY, DETAILED)) #: a measure of heartrate intensity, available on premium users' activities only
has_heartrate = Attribute(bool, (SUMMARY, DETAILED)) #: true if recorded with heartrate
average_heartrate = Attribute(float, (SUMMARY, DETAILED)) #: only if recorded with heartrate average over moving portion
max_heartrate = Attribute(int, (SUMMARY, DETAILED)) #: (undocumented) Max HR during activity
average_cadence = Attribute(float, (SUMMARY, DETAILED)) #: (undocumented) Average cadence during activity
kilojoules = Attribute(float, (SUMMARY, DETAILED)) #: (undocumented) Kilojoules of energy used during activity
average_temp = Attribute(int, (SUMMARY, DETAILED)) #: (undocumented) Average temperature (when available from device) during activity.
device_name = Attribute(six.text_type, (SUMMARY, DETAILED)) #: the name of the device used to record the activity.
embed_token = Attribute(six.text_type, (DETAILED,)) #: the token used to embed a Strava activity in the form www.strava.com/activities/[activity_id]/embed/[embed_token]. Only included if requesting athlete is activity owner.
calories = Attribute(float, (DETAILED,)) #: Calculation of how many calories burned on activity
approve_followers = Attribute(bool, (SUMMARY, DETAILED)) #: Whether athlete has elected to approve followers
badge_type_id = Attribute(int, (SUMMARY, DETAILED)) #: (undocumented)
follower_count = Attribute(int, (DETAILED,)) #: (detailed-only) How many people are following this athlete
friend_count = Attribute(int, (DETAILED,)) #: (detailed-only) How many people is this athlete following
mutual_friend_count = Attribute(int, (DETAILED,)) #: (detailed-only) How many people are both following and being followed by this athlete
athlete_type = ChoicesAttribute(six.text_type, (DETAILED,), choices={0: "cyclist", 1: "runner"}) #: athlete's default sport: 0 is cyclist, 1 is runner
date_preference = Attribute(six.text_type, (DETAILED,)) #: (detailed-only) Athlete's preferred date representation (e.g. "%m/%d/%Y")
measurement_preference = Attribute(six.text_type, (DETAILED,)) #: (detailed-only) How athlete prefers to see measurements (i.e. "feet" (or what "meters"?))
email = Attribute(six.text_type, (DETAILED,)) #: (detailed-only) Athlete's email address
clubs = EntityCollection(Club, (DETAILED,)) #: (detailed-only) Which clubs athlete belongs to. (:class:`list` of :class:`stravalib.model.Club`)
bikes = EntityCollection(Bike, (DETAILED,)) #: (detailed-only) Which bikes this athlete owns. (:class:`list` of :class:`stravalib.model.Bike`)
shoes = EntityCollection(Shoe, (DETAILED,)) #: (detailed-only) Which shoes this athlete owns. (:class:`list` of :class:`stravalib.model.Shoe`)
super_user = Attribute(bool, (SUMMARY, DETAILED)) #: (undocumented) Whether athlete is a super user (not
email_language = Attribute(six.text_type, (SUMMARY, DETAILED)) #: The user's preferred lang/locale (e.g. en-US)
# A bunch of undocumented detailed-resolution attribs
weight = Attribute(float, (DETAILED,), units=uh.kg) #: (undocumented, detailed-only) Athlete's configured weight.
max_heartrate = Attribute(float, (DETAILED,)) #: (undocumented, detailed-only) Athlete's configured max HR
username = Attribute(six.text_type, (DETAILED)) #: (undocumented, detailed-only) Athlete's username.
description = Attribute(six.text_type, (DETAILED,)) #: (undocumented, detailed-only) Athlete's personal description
instagram_username = Attribute(six.text_type, (DETAILED,)) #: (undocumented, detailed-only) Associated instagram username
offer_in_app_payment = Attribute(bool, (DETAILED,)) #: (undocumented, detailed-only)
global_privacy = Attribute(bool, (DETAILED,)) #: (undocumented, detailed-only) Whether athlete has global privacy enabled.
receive_newsletter = Attribute(bool, (DETAILED,)) #: (undocumented, detailed-only) Whether athlete has elected to receive newsletter
manual = Attribute(bool, (SUMMARY, DETAILED)) #: Whether activity was manually entered.
private = Attribute(bool, (SUMMARY, DETAILED)) #: Whether activity is private
flagged = Attribute(bool, (SUMMARY, DETAILED)) #: Whether activity was flagged.
gear_id = Attribute(six.text_type, (SUMMARY, DETAILED)) #: Which bike/shoes were used on activity.
gear = EntityAttribute(Gear, (DETAILED,))
average_speed = Attribute(float, (SUMMARY, DETAILED), units=uh.meters_per_second) #: Average speed for activity.
max_speed = Attribute(float, (SUMMARY, DETAILED), units=uh.meters_per_second) #: Max speed for activity
device_watts = Attribute(bool, (SUMMARY, DETAILED)) #: True if the watts are from a power meter, false if estimated
has_kudoed = Attribute(bool, (SUMMARY, DETAILED)) #: If authenticated user has kudoed this activity
best_efforts = EntityCollection(BestEffort, (DETAILED,)) #: :class:`list` of metric :class:`stravalib.model.BestEffort` summaries
segment_efforts = EntityCollection(SegmentEffort, (DETAILED,)) #: :class:`list` of :class:`stravalib.model.SegmentEffort` efforts for activity.
splits_metric = EntityCollection(Split, (DETAILED,)) #: :class:`list` of metric :class:`stravalib.model.Split` summaries (running activities only)
splits_standard = EntityCollection(Split, (DETAILED,)) #: :class:`list` of standard/imperial :class:`stravalib.model.Split` summaries (running activities only)
average_watts = Attribute(float, (SUMMARY, DETAILED)) #: (undocumented) Average power during activity
weighted_average_watts = Attribute(int, (SUMMARY, DETAILED)) # rides with power meter data only similar to xPower or Normalized Power
max_watts = Attribute(int, (SUMMARY, DETAILED)) #: rides with power meter data only
suffer_score = Attribute(int, (SUMMARY, DETAILED)) #: a measure of heartrate intensity, available on premium users' activities only
has_heartrate = Attribute(bool, (SUMMARY, DETAILED)) #: true if recorded with heartrate
average_heartrate = Attribute(float, (SUMMARY, DETAILED)) #: only if recorded with heartrate average over moving portion
max_heartrate = Attribute(int, (SUMMARY, DETAILED)) #: (undocumented) Max HR during activity
average_cadence = Attribute(float, (SUMMARY, DETAILED)) #: (undocumented) Average cadence during activity
kilojoules = Attribute(float, (SUMMARY, DETAILED)) #: (undocumented) Kilojoules of energy used during activity
average_temp = Attribute(int, (SUMMARY, DETAILED)) #: (undocumented) Average temperature (when available from device) during activity.
device_name = Attribute(six.text_type, (SUMMARY, DETAILED)) #: the name of the device used to record the activity.
created_at = TimestampAttribute((SUMMARY, DETAILED)) #: :class:`datetime.datetime` when athlete record was created.
updated_at = TimestampAttribute((SUMMARY, DETAILED)) #: :class:`datetime.datetime` when athlete record was last updated.
approve_followers = Attribute(bool, (SUMMARY, DETAILED)) #: Whether athlete has elected to approve followers
badge_type_id = Attribute(int, (SUMMARY, DETAILED)) #: (undocumented)
follower_count = Attribute(int, (DETAILED,)) #: (detailed-only) How many people are following this athlete
friend_count = Attribute(int, (DETAILED,)) #: (detailed-only) How many people is this athlete following
mutual_friend_count = Attribute(int, (DETAILED,)) #: (detailed-only) How many people are both following and being followed by this athlete
athlete_type = ChoicesAttribute(six.text_type, (DETAILED,), choices={0: "cyclist", 1: "runner"}) #: athlete's default sport: 0 is cyclist, 1 is runner
date_preference = Attribute(six.text_type, (DETAILED,)) #: (detailed-only) Athlete's preferred date representation (e.g. "%m/%d/%Y")
measurement_preference = Attribute(six.text_type, (DETAILED,)) #: (detailed-only) How athlete prefers to see measurements (i.e. "feet" (or what "meters"?))
email = Attribute(six.text_type, (DETAILED,)) #: (detailed-only) Athlete's email address
clubs = EntityCollection(Club, (DETAILED,)) #: (detailed-only) Which clubs athlete belongs to. (:class:`list` of :class:`stravalib.model.Club`)
bikes = EntityCollection(Bike, (DETAILED,)) #: (detailed-only) Which bikes this athlete owns. (:class:`list` of :class:`stravalib.model.Bike`)
shoes = EntityCollection(Shoe, (DETAILED,)) #: (detailed-only) Which shoes this athlete owns. (:class:`list` of :class:`stravalib.model.Shoe`)
super_user = Attribute(bool, (SUMMARY, DETAILED)) #: (undocumented) Whether athlete is a super user (not
email_language = Attribute(six.text_type, (SUMMARY, DETAILED)) #: The user's preferred lang/locale (e.g. en-US)
# A bunch of undocumented detailed-resolution attribs
weight = Attribute(float, (DETAILED,), units=uh.kg) #: (undocumented, detailed-only) Athlete's configured weight.
max_heartrate = Attribute(float, (DETAILED,)) #: (undocumented, detailed-only) Athlete's configured max HR
username = Attribute(six.text_type, (DETAILED)) #: (undocumented, detailed-only) Athlete's username.
description = Attribute(six.text_type, (DETAILED,)) #: (undocumented, detailed-only) Athlete's personal description
instagram_username = Attribute(six.text_type, (DETAILED,)) #: (undocumented, detailed-only) Associated instagram username
offer_in_app_payment = Attribute(bool, (DETAILED,)) #: (undocumented, detailed-only)
embed_token = Attribute(six.text_type, (DETAILED,)) #: the token used to embed a Strava activity in the form www.strava.com/activities/[activity_id]/embed/[embed_token]. Only included if requesting athlete is activity owner.
calories = Attribute(float, (DETAILED,)) #: Calculation of how many calories burned on activity
description = Attribute(six.text_type, (DETAILED,)) #: Description of activity.
workout_type = Attribute(six.text_type, (DETAILED,)) #: (undocumented)
photos = EntityAttribute(ActivityPhotoMeta, (DETAILED,)) #: A new photo metadata structure.
instagram_primary_photo = Attribute(six.text_type, (DETAILED,)) #: (undocumented) Appears to be the ref to first associated instagram photo
partner_logo_url = Attribute(six.text_type, (DETAILED,)) #: (undocumented)
partner_brand_tag = Attribute(six.text_type, (DETAILED,)) #: (undocumented)
from_accepted_tag = Attribute(bool, (SUMMARY, DETAILED)) #: (undocumented)
segment_leaderboard_opt_out = Attribute(bool, (DETAILED,)) #: (undocumented)
highlighted_kudosers = Attribute(bool, (DETAILED,)) #: (undocumented)
laps = EntityCollection(ActivityLap, (SUMMARY, DETAILED)) #: :class:`list` of :class:`stravalib.model.ActivityLap` objects.
@property
def comments(self):
"""
Iterator of :class:`stravalib.model.ActivityComment` objects for this activity.
"""
if self._comments is None:
self.assert_bind_client()
if self.comment_count > 0:
self._comments = self.bind_client.get_activity_comments(self.id)
else:
# Shortcut if we know there aren't any
self._comments = []
return self._comments
# @property
def __repr__(self):
return ''.format(self.rank, self.athlete_name)
class SegmentLeaderboard(Sequence, BoundEntity):
"""
The ranked leaderboard for a segment.
This class is effectively a collection of :class:`stravalib.model.SegmentLeaderboardEntry` objects.
"""
entry_count = Attribute(int)
effort_count = Attribute(int)
kom_type = Attribute(six.text_type)
entries = EntityCollection(SegmentLeaderboardEntry)
def __iter__(self):
return iter(self.entries)
def __len__(self):
return len(self.entries)
def __contains__(self, k):
return k in self.entries
def __getitem__(self, k):
return self.entries[k]
class DistributionBucket(BaseEntity):
"""
commute = Attribute(bool, (SUMMARY, DETAILED)) #: Whether activity is a commute.
manual = Attribute(bool, (SUMMARY, DETAILED)) #: Whether activity was manually entered.
private = Attribute(bool, (SUMMARY, DETAILED)) #: Whether activity is private
flagged = Attribute(bool, (SUMMARY, DETAILED)) #: Whether activity was flagged.
gear_id = Attribute(six.text_type, (SUMMARY, DETAILED)) #: Which bike/shoes were used on activity.
gear = EntityAttribute(Gear, (DETAILED,))
average_speed = Attribute(float, (SUMMARY, DETAILED), units=uh.meters_per_second) #: Average speed for activity.
max_speed = Attribute(float, (SUMMARY, DETAILED), units=uh.meters_per_second) #: Max speed for activity
device_watts = Attribute(bool, (SUMMARY, DETAILED)) #: True if the watts are from a power meter, false if estimated
has_kudoed = Attribute(bool, (SUMMARY, DETAILED)) #: If authenticated user has kudoed this activity
best_efforts = EntityCollection(BestEffort, (DETAILED,)) #: :class:`list` of metric :class:`stravalib.model.BestEffort` summaries
segment_efforts = EntityCollection(SegmentEffort, (DETAILED,)) #: :class:`list` of :class:`stravalib.model.SegmentEffort` efforts for activity.
splits_metric = EntityCollection(Split, (DETAILED,)) #: :class:`list` of metric :class:`stravalib.model.Split` summaries (running activities only)
splits_standard = EntityCollection(Split, (DETAILED,)) #: :class:`list` of standard/imperial :class:`stravalib.model.Split` summaries (running activities only)
average_watts = Attribute(float, (SUMMARY, DETAILED)) #: (undocumented) Average power during activity
weighted_average_watts = Attribute(int, (SUMMARY, DETAILED)) # rides with power meter data only similar to xPower or Normalized Power
max_watts = Attribute(int, (SUMMARY, DETAILED)) #: rides with power meter data only
suffer_score = Attribute(int, (SUMMARY, DETAILED)) #: a measure of heartrate intensity, available on premium users' activities only
has_heartrate = Attribute(bool, (SUMMARY, DETAILED)) #: true if recorded with heartrate
average_heartrate = Attribute(float, (SUMMARY, DETAILED)) #: only if recorded with heartrate average over moving portion
max_heartrate = Attribute(int, (SUMMARY, DETAILED)) #: (undocumented) Max HR during activity
average_cadence = Attribute(float, (SUMMARY, DETAILED)) #: (undocumented) Average cadence during activity
kilojoules = Attribute(float, (SUMMARY, DETAILED)) #: (undocumented) Kilojoules of energy used during activity
average_temp = Attribute(int, (SUMMARY, DETAILED)) #: (undocumented) Average temperature (when available from device) during activity.
private = Attribute(bool, (SUMMARY, DETAILED)) #: Whether activity is private
flagged = Attribute(bool, (SUMMARY, DETAILED)) #: Whether activity was flagged.
gear_id = Attribute(six.text_type, (SUMMARY, DETAILED)) #: Which bike/shoes were used on activity.
gear = EntityAttribute(Gear, (DETAILED,))
average_speed = Attribute(float, (SUMMARY, DETAILED), units=uh.meters_per_second) #: Average speed for activity.
max_speed = Attribute(float, (SUMMARY, DETAILED), units=uh.meters_per_second) #: Max speed for activity
device_watts = Attribute(bool, (SUMMARY, DETAILED)) #: True if the watts are from a power meter, false if estimated
has_kudoed = Attribute(bool, (SUMMARY, DETAILED)) #: If authenticated user has kudoed this activity
best_efforts = EntityCollection(BestEffort, (DETAILED,)) #: :class:`list` of metric :class:`stravalib.model.BestEffort` summaries
segment_efforts = EntityCollection(SegmentEffort, (DETAILED,)) #: :class:`list` of :class:`stravalib.model.SegmentEffort` efforts for activity.
splits_metric = EntityCollection(Split, (DETAILED,)) #: :class:`list` of metric :class:`stravalib.model.Split` summaries (running activities only)
splits_standard = EntityCollection(Split, (DETAILED,)) #: :class:`list` of standard/imperial :class:`stravalib.model.Split` summaries (running activities only)
average_watts = Attribute(float, (SUMMARY, DETAILED)) #: (undocumented) Average power during activity
weighted_average_watts = Attribute(int, (SUMMARY, DETAILED)) # rides with power meter data only similar to xPower or Normalized Power
max_watts = Attribute(int, (SUMMARY, DETAILED)) #: rides with power meter data only
suffer_score = Attribute(int, (SUMMARY, DETAILED)) #: a measure of heartrate intensity, available on premium users' activities only
has_heartrate = Attribute(bool, (SUMMARY, DETAILED)) #: true if recorded with heartrate
average_heartrate = Attribute(float, (SUMMARY, DETAILED)) #: only if recorded with heartrate average over moving portion
max_heartrate = Attribute(int, (SUMMARY, DETAILED)) #: (undocumented) Max HR during activity
average_cadence = Attribute(float, (SUMMARY, DETAILED)) #: (undocumented) Average cadence during activity
kilojoules = Attribute(float, (SUMMARY, DETAILED)) #: (undocumented) Kilojoules of energy used during activity
average_temp = Attribute(int, (SUMMARY, DETAILED)) #: (undocumented) Average temperature (when available from device) during activity.
device_name = Attribute(six.text_type, (SUMMARY, DETAILED)) #: the name of the device used to record the activity.
embed_token = Attribute(six.text_type, (DETAILED,)) #: the token used to embed a Strava activity in the form www.strava.com/activities/[activity_id]/embed/[embed_token]. Only included if requesting athlete is activity owner.