Secure your code as it's written. Use Snyk Code to scan source code in minutes - no build needed - and fix issues immediately.
STANDUPPADDLING, SURFING, VIRTUALRIDE, WEIGHTTRAINING, WINDSURF, WORKOUT, YOGA)
guid = Attribute(six.text_type, (SUMMARY, DETAILED)) #: (undocumented)
external_id = Attribute(six.text_type, (SUMMARY, DETAILED)) #: An external ID for the activity (relevant when specified during upload).
upload_id = Attribute(six.text_type, (SUMMARY, DETAILED)) #: The upload ID for an activit.
athlete = EntityAttribute(Athlete, (SUMMARY, DETAILED)) #: The associated :class:`stravalib.model.Athlete` that performed this activity.
name = Attribute(six.text_type, (SUMMARY, DETAILED)) #: The name of the activity.
distance = Attribute(float, (SUMMARY, DETAILED), units=uh.meters) #: The distance for the activity.
moving_time = TimeIntervalAttribute((SUMMARY, DETAILED)) #: The moving time duration for this activity.
elapsed_time = TimeIntervalAttribute((SUMMARY, DETAILED)) #: The total elapsed time (including stopped time) for this activity.
total_elevation_gain = Attribute(float, (SUMMARY, DETAILED), units=uh.meters) #: Total elevation gain for activity.
elev_high = Attribute(float, (SUMMARY, DETAILED))
elev_low = Attribute(float, (SUMMARY, DETAILED))
type = Attribute(six.text_type, (SUMMARY, DETAILED)) #: The activity type.
start_date = TimestampAttribute((SUMMARY, DETAILED)) #: :class:`datetime.datetime` when activity was started in GMT
start_date_local = TimestampAttribute((SUMMARY, DETAILED), tzinfo=None) #: :class:`datetime.datetime` when activity was started in activity timezone
timezone = TimezoneAttribute((SUMMARY, DETAILED)) #: The timezone for activity.
utc_offset = Attribute(float, (SUMMARY, DETAILED)) #: The UTC offset for activity
start_latlng = LocationAttribute((SUMMARY, DETAILED)) #: The start location (lat/lon :class:`tuple`)
end_latlng = LocationAttribute((SUMMARY, DETAILED)) #: The end location (lat/lon :class:`tuple`)
location_city = Attribute(six.text_type, (SUMMARY, DETAILED)) #: The activity location city
location_state = Attribute(six.text_type, (SUMMARY, DETAILED)) #: The activity location state
location_country = Attribute(six.text_type, (SUMMARY, DETAILED)) #: The activity location state
start_latitude = Attribute(float, (SUMMARY, DETAILED)) #: The start latitude
start_longitude = Attribute(float, (SUMMARY, DETAILED)) #: The start longitude
achievement_count = Attribute(int, (SUMMARY, DETAILED)) #: How many achievements earned for the activity
pr_count = Attribute(int, (SUMMARY, DETAILED)) #: How many new personal records earned for the activity
kudos_count = Attribute(int, (SUMMARY, DETAILED)) #: How many kudos received for activity
comment_count = Attribute(int, (SUMMARY, DETAILED)) #: How many comments for activity.
"""
Represents a Webhook Event Subscription.
http://strava.github.io/api/partner/v3/events/
"""
OBJECT_TYPE_ACTIVITY = 'activity'
ASPECT_TYPE_CREATE = 'create'
VERIFY_TOKEN_DEFAULT = 'STRAVA'
application_id = Attribute(int)
object_type = Attribute(six.text_type)
aspect_type = Attribute(six.text_type)
callback_url = Attribute(six.text_type)
created_at = TimestampAttribute()
updated_at = TimestampAttribute()
class SubscriptionCallback(LoadableEntity):
"""
Represents a Webhook Event Subscription Callback.
"""
hub_mode = Attribute(six.text_type)
hub_verify_token = Attribute(six.text_type)
hub_challenge = Attribute(six.text_type)
def validate(self, verify_token=Subscription.VERIFY_TOKEN_DEFAULT):
assert self.hub_verify_token == verify_token
class SubscriptionUpdate(LoadableEntity):
"""
class AthleteSegmentStats(BaseEntity):
"""
An undocumented structure being returned for segment stats for current athlete.
"""
effort_count = Attribute(int) #: (UNDOCUMENTED) Presumably how many efforts current athlete has on segment.
pr_elapsed_time = TimeIntervalAttribute() #: (UNDOCUMENTED) Presumably PR elapsed time for segment.
pr_date = DateAttribute() #: (UNDOCUMENTED) Presumably date of PR :)
class AthletePrEffort(IdentifiableEntity):
"""
An undocumented structure being returned for segment Athlete Pr Effort.
"""
distance = Attribute(float, (SUMMARY, DETAILED), units=uh.meters)
elapsed_time = TimeIntervalAttribute((SUMMARY, DETAILED))
start_date = TimestampAttribute((SUMMARY, DETAILED))
start_date_local = TimestampAttribute((SUMMARY, DETAILED))
is_kom = Attribute(bool, (SUMMARY, DETAILED))
class Segment(LoadableEntity):
"""
Represents a single Strava segment.
"""
_leaderboard = None
name = Attribute(six.text_type, (SUMMARY, DETAILED)) #: Name of the segment.
activity_type = Attribute(six.text_type, (SUMMARY, DETAILED)) #: Activity type of segment ('Ride' or 'Run')
distance = Attribute(float, (SUMMARY, DETAILED), units=uh.meters) #: Distance of segment
average_grade = Attribute(float, (SUMMARY, DETAILED)) #: Average grade (%) for segment
maximum_grade = Attribute(float, (SUMMARY, DETAILED)) #: Maximum grade (%) for segment
elevation_high = Attribute(float, (SUMMARY, DETAILED), units=uh.meters) #: The highest point of the segment.
elevation_low = Attribute(float, (SUMMARY, DETAILED), units=uh.meters) #: The lowest point of the segment.
start_latlng = LocationAttribute((SUMMARY, DETAILED)) #: The start lat/lon (:class:`tuple`)
def __init__(self, resource_states=None, tzinfo=pytz.utc):
super(TimestampAttribute, self).__init__(datetime, resource_states=resource_states)
self.tzinfo = tzinfo
hub_challenge = Attribute(six.text_type)
def validate(self, verify_token=Subscription.VERIFY_TOKEN_DEFAULT):
assert self.hub_verify_token == verify_token
class SubscriptionUpdate(LoadableEntity):
"""
Represents a Webhook Event Subscription Update.
"""
subscription_id = Attribute(int)
owner_id = Attribute(int)
object_id = Attribute(int)
object_type = Attribute(six.text_type)
aspect_type = Attribute(six.text_type)
event_time = TimestampAttribute()
updates = Attribute(dict)
"""
A full photo record attached to an activity.
"""
athlete_id = Attribute(int, (META, SUMMARY, DETAILED)) #: ID of athlete
activity_id = Attribute(int, (META, SUMMARY, DETAILED)) #: ID of activity
activity_name = Attribute(six.text_type, (META, SUMMARY, DETAILED)) #: Name of activity.
ref = Attribute(six.text_type, (META, SUMMARY, DETAILED)) #: ref eg. "http://instagram.com/p/eAvA-tir85/"
uid = Attribute(six.text_type, (META, SUMMARY, DETAILED)) #: unique id for instagram photo
unique_id = Attribute(six.text_type, (META, SUMMARY, DETAILED)) #: unique id for strava photos
caption = Attribute(six.text_type, (META, SUMMARY, DETAILED)) #: caption on photo
type = Attribute(six.text_type, (META, SUMMARY, DETAILED)) #: type of photo (currently only InstagramPhoto)
uploaded_at = TimestampAttribute((SUMMARY, DETAILED)) #: :class:`datetime.datetime` when was photo uploaded
created_at = TimestampAttribute((SUMMARY, DETAILED)) #: :class:`datetime.datetime` when was photo created
created_at_local = TimestampAttribute((SUMMARY, DETAILED)) #: :class:`datetime.datetime` when was photo created
location = LocationAttribute() #: Start lat/lon of photo
urls = Attribute(dict, (META, SUMMARY, DETAILED))
sizes = Attribute(dict, (SUMMARY, DETAILED))
post_id = Attribute(int, (SUMMARY, DETAILED))
default_photo = Attribute(bool, (SUMMARY, DETAILED))
source = Attribute(int, (META, SUMMARY, DETAILED))
def __repr__(self):
if self.source == 1:
photo_type = 'native'
idfield = 'unique_id'
idval = self.unique_id
elif self.source == 2:
photo_type = 'instagram'
idfield = 'uid'
idval = self.uid
"""
Activity kudos are a subset of athlete properties.
"""
firstname = Attribute(six.text_type, (SUMMARY, DETAILED)) #: Athlete's first name.
lastname = Attribute(six.text_type, (SUMMARY, DETAILED)) #: Athlete's last name.
profile_medium = Attribute(six.text_type, (SUMMARY, DETAILED)) #: URL to a 62x62 pixel profile picture
profile = Attribute(six.text_type, (SUMMARY, DETAILED)) #: URL to a 124x124 pixel profile picture
city = Attribute(six.text_type, (SUMMARY, DETAILED)) #: Athlete's home city
state = Attribute(six.text_type, (SUMMARY, DETAILED)) #: Athlete's home state
country = Attribute(six.text_type, (SUMMARY, DETAILED)) #: Athlete's home country
sex = Attribute(six.text_type, (SUMMARY, DETAILED)) #: Athlete's sex ('M', 'F' or null)
friend = Attribute(six.text_type, (SUMMARY, DETAILED)) #: 'pending', 'accepted', 'blocked' or 'null' the authenticated athlete's following status of this athlete
follower = Attribute(six.text_type, (SUMMARY, DETAILED)) #: 'pending', 'accepted', 'blocked' or 'null' this athlete's following status of the authenticated athlete
premium = Attribute(bool, (SUMMARY, DETAILED)) #: Whether athlete is a premium member (true/false)
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
class ActivityLap(LoadableEntity):
name = Attribute(six.text_type, (SUMMARY, DETAILED)) #: Name of lap
activity = EntityAttribute("Activity", (SUMMARY, DETAILED)) #: The associated :class:`stravalib.model.Activity`
athlete = EntityAttribute(Athlete, (SUMMARY, DETAILED)) #: The associated :class:`stravalib.model.Athlete`
elapsed_time = TimeIntervalAttribute((SUMMARY, DETAILED)) #: :class:`datetime.timedelta` of elapsed time for lap
moving_time = TimeIntervalAttribute((SUMMARY, DETAILED)) #: :class:`datetime.timedelta` of moving time for lap
start_date = TimestampAttribute((SUMMARY, DETAILED)) #: :class:`datetime.datetime` when lap was started in GMT
start_date_local = TimestampAttribute((SUMMARY, DETAILED), tzinfo=None) #: :class:`datetime.datetime` when lap was started local
distance = Attribute(float, (SUMMARY, DETAILED), units=uh.meters) #: The distance for this lap.
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
class ActivityLap(LoadableEntity):
name = Attribute(six.text_type, (SUMMARY, DETAILED)) #: Name of lap
activity = EntityAttribute("Activity", (SUMMARY, DETAILED)) #: The associated :class:`stravalib.model.Activity`
athlete = EntityAttribute(Athlete, (SUMMARY, DETAILED)) #: The associated :class:`stravalib.model.Athlete`
elapsed_time = TimeIntervalAttribute((SUMMARY, DETAILED)) #: :class:`datetime.timedelta` of elapsed time for lap
moving_time = TimeIntervalAttribute((SUMMARY, DETAILED)) #: :class:`datetime.timedelta` of moving time for lap
start_date = TimestampAttribute((SUMMARY, DETAILED)) #: :class:`datetime.datetime` when lap was started in GMT
start_date_local = TimestampAttribute((SUMMARY, DETAILED), tzinfo=None) #: :class:`datetime.datetime` when lap was started local
distance = Attribute(float, (SUMMARY, DETAILED), units=uh.meters) #: The distance for this lap.
start_index = Attribute(int, (SUMMARY, DETAILED)) #:
end_index = Attribute(int, (SUMMARY, DETAILED)) #:
total_elevation_gain = Attribute(float, (SUMMARY, DETAILED,), units=uh.meters) #: What is total elevation gain for lap
average_speed = Attribute(float, (SUMMARY, DETAILED,), units=uh.meters_per_second) #: Average speed for lap
max_speed = Attribute(float, (SUMMARY, DETAILED,), units=uh.meters_per_second) #: Max speed for lap
average_cadence = Attribute(float, (SUMMARY, DETAILED,)) #: Average cadence for lap
average_watts = Attribute(float, (SUMMARY, DETAILED,)) #: Average watts for lap
average_heartrate = Attribute(float, (SUMMARY, DETAILED,)) #: Average heartrate for lap
max_heartrate = Attribute(float, (SUMMARY, DETAILED,)) #: Max heartrate for lap
lap_index = Attribute(int, (SUMMARY, DETAILED)) #: Index of lap
device_watts = Attribute(bool, (SUMMARY, DETAILED)) # true if the watts are from a power meter, false if estimated
pace_zone = Attribute(int, (SUMMARY, DETAILED)) #: (undocumented)
split = Attribute(int, (SUMMARY, DETAILED)) #: Split number
class ActivityPhoto(LoadableEntity):
"""
A full photo record attached to an activity.
"""
athlete_id = Attribute(int, (META, SUMMARY, DETAILED)) #: ID of athlete
activity_id = Attribute(int, (META, SUMMARY, DETAILED)) #: ID of activity
activity_name = Attribute(six.text_type, (META, SUMMARY, DETAILED)) #: Name of activity.
ref = Attribute(six.text_type, (META, SUMMARY, DETAILED)) #: ref eg. "http://instagram.com/p/eAvA-tir85/"
uid = Attribute(six.text_type, (META, SUMMARY, DETAILED)) #: unique id for instagram photo
unique_id = Attribute(six.text_type, (META, SUMMARY, DETAILED)) #: unique id for strava photos
caption = Attribute(six.text_type, (META, SUMMARY, DETAILED)) #: caption on photo
type = Attribute(six.text_type, (META, SUMMARY, DETAILED)) #: type of photo (currently only InstagramPhoto)
uploaded_at = TimestampAttribute((SUMMARY, DETAILED)) #: :class:`datetime.datetime` when was photo uploaded
created_at = TimestampAttribute((SUMMARY, DETAILED)) #: :class:`datetime.datetime` when was photo created
created_at_local = TimestampAttribute((SUMMARY, DETAILED)) #: :class:`datetime.datetime` when was photo created
location = LocationAttribute() #: Start lat/lon of photo
urls = Attribute(dict, (META, SUMMARY, DETAILED))
sizes = Attribute(dict, (SUMMARY, DETAILED))
post_id = Attribute(int, (SUMMARY, DETAILED))
default_photo = Attribute(bool, (SUMMARY, DETAILED))
source = Attribute(int, (META, SUMMARY, DETAILED))
def __repr__(self):
if self.source == 1:
photo_type = 'native'
idfield = 'unique_id'
idval = self.unique_id
elif self.source == 2:
photo_type = 'instagram'
private = Attribute(bool, (SUMMARY, DETAILED)) #: Whether this is a private segment.
starred = Attribute(bool, (SUMMARY, DETAILED)) #: Whether this segment is starred by authenticated athlete
athlete_segment_stats = EntityAttribute(AthleteSegmentStats, (DETAILED,)) #: Undocumented attrib holding stats for current athlete.
# detailed attribs
created_at = TimestampAttribute((DETAILED,)) #: :class:`datetime.datetime` when was segment created.
updated_at = TimestampAttribute((DETAILED,)) #: :class:`datetime.datetime` when was segment last updated.
total_elevation_gain = Attribute(float, (DETAILED,), units=uh.meters) #: What is total elevation gain for segment.
map = EntityAttribute(Map, (DETAILED,)) #: :class:`stravalib.model.Map` object for segment.
effort_count = Attribute(int, (DETAILED,)) #: How many times has this segment been ridden.
athlete_count = Attribute(int, (DETAILED,)) #: How many athletes have ridden this segment
hazardous = Attribute(bool, (DETAILED,)) #: Whether this segment has been flagged as hazardous
star_count = Attribute(int, (DETAILED,)) #: number of stars on this segment.
pr_time = Attribute(int, (DETAILED,)) #: pr time for athlete
starred_date = TimestampAttribute((DETAILED, )) #: datetime when be starred
athlete_pr_effort = EntityAttribute(AthletePrEffort, (DETAILED,))
@property
def leaderboard(self):
"""
The :class:`stravalib.model.SegmentLeaderboard` object for this segment.
"""
if self._leaderboard is None:
self.assert_bind_client()
if self.id is not None:
self._leaderboard = self.bind_client.get_segment_leaderboard(self.id)
return self._leaderboard
class SegmentEfforAchievement(BaseEntity):
"""