Пример #1
0
class DistributionBucket(BaseEntity):
    """
    A single distribution bucket object, used for activity zones.
    """
    max = Attribute(int) #: Max datatpoint
    min = Attribute(int) #: Min datapoint
    time = Attribute(int, units=uh.seconds) #: Time in seconds (*not* a :class:`datetime.timedelta`)
Пример #2
0
class BaseActivityZone(LoadableEntity):
    """
    Base class for activity zones.

    A collection of :class:`stravalib.model.DistributionBucket` objects.
    """
    distribution_buckets = EntityCollection(DistributionBucket, (SUMMARY, DETAILED)) #: The collection of :class:`stravalib.model.DistributionBucket` objects
    type = Attribute(unicode, (SUMMARY, DETAILED)) #: Type of activity zone (heartrate, power, pace).
    sensor_based = Attribute(bool, (SUMMARY, DETAILED)) #: Whether zone data is sensor-based (as opposed to calculated)

    @classmethod
    def deserialize(cls, v, bind_client=None):
        """
        Creates a new object based on serialized (dict) struct.
        """
        if v is None:
            return None
        az_classes = {'heartrate': HeartrateActivityZone,
                      'power': PowerActivityZone,
                      'pace': PaceActivityZone}
        try:
            clazz = az_classes[v['type']]
        except KeyError:
            raise ValueError("Unsupported activity zone type: {0}".format(v['type']))
        else:
            o = clazz(bind_client=bind_client)
            o.from_dict(v)
            return o
Пример #3
0
class SegmentEfforAchievement(BaseEntity):
    """
    An undocumented structure being returned for segment efforts.
    """
    rank = Attribute(int)  #: Rank in segment (either overall leaderboard, or pr rank)
    type = Attribute(str)  #: The type of achievement -- e.g. 'year_pr' or 'overall'
    type_id = Attribute(int)  #: Numeric ID for type of achievement?  (6 = year_pr, 2 = overall ??? other?)
Пример #4
0
class Club(LoadableEntity):
    """
    Class to represent a club.

    Currently summary and detail resource states have the same attributes.
    """
    name = Attribute(unicode, (SUMMARY,DETAILED)) #: Name of the club.
    profile_medium = Attribute(unicode, (SUMMARY,DETAILED)) #: URL to a 62x62 pixel club picture
    profile = Attribute(unicode, (SUMMARY,DETAILED)) #: URL to a 124x124 pixel club picture

    @property
    def members(self):
        """ An iterator of :class:`stravalib.model.Athlete` members of this club. """
        if self._members is None:
            self.assert_bind_client()
            self._members = self.bind_client.get_club_members(self.id)
        return self._members

    @property
    def activities(self):
        """ An iterator of reverse-chronological :class:`stravalib.model.Activity` activities for this club. """
        if self._activities is None:
            self.assert_bind_client()
            self._activities = self.bind_client.get_club_activities(self.id)
        return self._activities
Пример #5
0
class PaceActivityZone(BaseActivityZone):
    """
    Activity zone for pace.
    """
    score = Attribute(int, (SUMMARY, DETAILED)) #: The score for this zone.
    sample_race_distance = Attribute(int, (SUMMARY, DETAILED), units=uh.meters) #: (Not sure?)
    sample_race_time = TimeIntervalAttribute((SUMMARY, DETAILED)) #: (Not sure?)
Пример #6
0
class ActivityComment(LoadableEntity):
    """
    Comments attached to an activity.
    """
    activity_id = Attribute(int, (META,SUMMARY,DETAILED)) #: ID of activity
    text = Attribute(unicode, (META,SUMMARY,DETAILED)) #: Text of comment
    created_at = TimestampAttribute((SUMMARY,DETAILED)) #: :class:`datetime.datetime` when was coment created
    athlete = EntityAttribute(Athlete, (SUMMARY,DETAILED)) #: Associated :class:`stravalib.model.Athlete` (summary-level representation)
Пример #7
0
class HeartrateActivityZone(BaseActivityZone):
    """
    Activity zone for heart rate.
    """
    score = Attribute(int, (SUMMARY, DETAILED)) #: The score (suffer score) for this HR zone.
    points = Attribute(int, (SUMMARY, DETAILED)) #: The points for this HR zone.
    custom_zones = Attribute(bool, (SUMMARY, DETAILED)) #: Whether athlete has setup custom zones.
    max = Attribute(int, (SUMMARY, DETAILED)) #: The max heartrate
Пример #8
0
class PowerActivityZone(BaseActivityZone):
    """
    Activity zone for power.
    """
    # these 2 below were removed according to June 3, 2014 update @
    #    http://strava.github.io/api/v3/changelog/
    bike_weight = Attribute(float, (SUMMARY, DETAILED), units=uh.kgs) #: Weight of bike being used (factored into power calculations)
    athlete_weight = Attribute(float, (SUMMARY, DETAILED), units=uh.kgs) #: Weight of athlete (factored into power calculations)
Пример #9
0
class ActivityPhotoPrimary(LoadableEntity):
    """
    A primary photo attached to an activity (different structure from full photo record)
    """
    id = Attribute(int, (META, SUMMARY, DETAILED))  #: ID of photo, if external.
    unique_id = Attribute(str, (META, SUMMARY, DETAILED))  #: ID of photo, if internal.
    urls = Attribute(dict, (META, SUMMARY, DETAILED))
    source = Attribute(int, (META, SUMMARY, DETAILED))  #: 1=internal, 2=instagram
    use_primary_photo = Attribute(bool,(META, SUMMARY, DETAILED))  #: (undocumented)
Пример #10
0
class ActivityTotals(BaseEntity):
    """
    Represent ytd/recent/all run/ride totals.
    """
    achievement_count = Attribute(int) #: How many achievements
    count = Attribute(int) #: How many activities
    distance = Attribute(float, units=uh.meters) #: Total distance travelled
    elapsed_time = TimeIntervalAttribute() #: :class:`datetime.timedelta` of total elapsed time
    elevation_gain = Attribute(float, units=uh.meters) #: Total elevation gain
    moving_time = TimeIntervalAttribute() #: :class:`datetime.timedelta` of total moving time
Пример #11
0
class Split(BaseEntity):
    """
    A split -- may be metric or standard units (which has no bearing
    on the units used in this object, just the binning of values).
    """
    distance = Attribute(float, units=uh.meters) #: Distance for this split
    elapsed_time = TimeIntervalAttribute() #: :class:`datetime.timedelta` of elapsed time for split
    elevation_difference = Attribute(float, units=uh.meters)  #: Elevation difference for split
    moving_time = TimeIntervalAttribute() #: :class:`datetime.timedelta` of moving time for split
    split = Attribute(int) #: Which split number
Пример #12
0
class ActivityPhotoMeta(BaseEntity):
    """
    The photos structure returned with the activity, not to be confused with the full loaded photos for an activity.
    """
    count = Attribute(int, (META, SUMMARY, DETAILED))
    primary = EntityAttribute(ActivityPhotoPrimary, (META, SUMMARY, DETAILED))
    use_primary_photo = Attribute(bool, (META, SUMMARY, DETAILED))

    def __repr__(self):
        return '<{0} count={1}>'.format(self.__class__.__name__, self.count)
Пример #13
0
class SegmentLeaderboardEntry(BoundEntity):
    """
    Represents a single entry on a segment leaderboard.

    The :class:`stravalib.model.SegmentLeaderboard` object is essentially a collection
    of instances of this class.
    """
    _athlete = None
    _activity = None
    _effort = None

    effort_id = Attribute(int) #: The numeric ID for the segment effort.
    athlete_id = Attribute(int) #: The numeric ID for the athlete.
    athlete_name = Attribute(unicode) #: The athlete's name.
    athlete_gender = Attribute(unicode) #: The athlete's sex (M/F)
    athlete_profile = Attribute(unicode) #: Link to athlete profile photo
    average_hr = Attribute(float) #: The athlete's average HR for this effort
    average_watts = Attribute(float) #: The athlete's average power for this effort
    distance = Attribute(float, units=uh.meters) #: The distance for this effort.
    elapsed_time = TimeIntervalAttribute() #: The elapsed time for this effort
    moving_time = TimeIntervalAttribute() #: The moving time for this effort
    start_date = TimestampAttribute((SUMMARY,DETAILED)) #: :class:`datetime.datetime` when this effot was started in GMT
    start_date_local = TimestampAttribute((SUMMARY,DETAILED), tzinfo=None)  #: :class:`datetime.datetime` when this effort was started in activity timezone
    activity_id = Attribute(int) #: The numeric ID of the associated activity for this effort.
    rank = Attribute(int) #: The rank on the leaderboard.

    def __repr__(self):
        return '<SegmentLeaderboardEntry rank={0} athlete_name={1!r}>'.format(self.rank, self.athlete_name)

    @property
    def athlete(self):
        """ The related :class:`stravalib.model.Athlete` (performs additional server fetch). """
        if self._athlete is None:
            self.assert_bind_client()
            if self.athlete_id is not None:
                self._athlete = self.bind_client.get_athlete(self.athlete_id)
        return self._athlete

    @property
    def activity(self):
        """ The related :class:`stravalib.model.Activity` (performs additional server fetch). """
        if self._activity is None:
            self.assert_bind_client()
            if self.activity_id is not None:
                self._activity = self.bind_client.get_activity(self.activity_id)
        return self._activity

    @property
    def effort(self):
        """ The related :class:`stravalib.model.SegmentEffort` (performs additional server fetch). """
        if self._effort is None:
            self.assert_bind_client()
            if self.effort_id is not None:
                self._effort = self.bind_client.get_segment_effort(self.effort_id)
        return self._effort
Пример #14
0
class ActivityPhoto(LoadableEntity):
    """
    Information about photos attached to an activity.
    """
    activity_id = Attribute(int, (META,SUMMARY,DETAILED)) #: ID of activity
    ref = Attribute(unicode, (META,SUMMARY,DETAILED)) #: ref eg. "http://instagram.com/p/eAvA-tir85/"
    uid = Attribute(unicode, (META,SUMMARY,DETAILED)) #: unique id
    caption = Attribute(unicode, (META,SUMMARY,DETAILED)) #: caption on photo
    type = Attribute(unicode, (META,SUMMARY,DETAILED)) #: type of photo #left this off to prevent name clash
    uploaded_at = TimestampAttribute((SUMMARY,DETAILED)) #: :class:`datetime.datetime` when was phto uploaded
    created_at = TimestampAttribute((SUMMARY,DETAILED)) #: :class:`datetime.datetime` when was phto created
    location = LocationAttribute() #: Start lat/lon of photo
Пример #15
0
class AthleteStats(BaseEntity):
    """
    Represents a combined set of an Athlete's statistics.
    """
    biggest_ride_distance = Attribute(float, units=uh.meters)  #: Longest ride for athlete.
    biggest_climb_elevation_gain = Attribute(float, units=uh.meters)  #: Greatest single elevation gain for athlete.
    recent_ride_totals = EntityAttribute(ActivityTotals)  #: Recent totals for rides. (:class:`stravalib.model.ActivityTotals`)
    recent_run_totals = EntityAttribute(ActivityTotals)  #: Recent totals for runs. (:class:`stravalib.model.ActivityTotals`)
    ytd_ride_totals = EntityAttribute(ActivityTotals)  #: Year-to-date totals for rides. (:class:`stravalib.model.ActivityTotals`)
    ytd_run_totals = EntityAttribute(ActivityTotals)  #: Year-to-date totals for runs. (:class:`stravalib.model.ActivityTotals`)
    all_ride_totals = EntityAttribute(ActivityTotals)  #: All-time totals for rides. (:class:`stravalib.model.ActivityTotals`)
    all_run_totals = EntityAttribute(ActivityTotals)  #: All-time totals for runs. (:class:`stravalib.model.ActivityTotals`)
Пример #16
0
class Stream(LoadableEntity):
    """
    Stream of readings from the activity, effort or segment.
    """
    type = Attribute(unicode)
    data = Attribute(list,)            #: array of values
    series_type = Attribute(unicode, ) #: type of stream: time, latlng, distance, altitude, velocity_smooth, heartrate, cadence, watts, temp, moving, grade_smooth
    original_size = Attribute(int, )   #: the size of the complete stream (when not reduced with resolution)
    resolution = Attribute(unicode, )  #: (optional, default is 'all') the desired number of data points. 'low' (100), 'medium' (1000), 'high' (10000) or 'all'
    def __repr__(self):
        return '<Stream type={} resolution={} original_size={}>'.format(self.type,
                                                                        self.resolution,
                                                                        self.original_size,)
Пример #17
0
class SegmentExplorerResult(LoadableEntity):
    """
    Represents a segment result from the segment explorer feature.

    (These are not full segment objects, but the segment object can be fetched
    via the 'segment' property of this object.)
    """
    _segment = None
    id = Attribute(int) #: ID of the segment.
    name = Attribute(unicode) #: Name of the segment
    climb_category = Attribute(int) #: Climb category for the segment (0 is higher)
    climb_category_desc = Attribute(unicode) #: Climb category text
    avg_grade = Attribute(float) #: Average grade for segment.
    start_latlng = LocationAttribute() #: Start lat/lon for segment
    end_latlng = LocationAttribute() #: End lat/lon for segment
    elev_difference = Attribute(float, units=uh.meters) #: Total elevation difference over segment.
    distance = Attribute(float, units=uh.meters) #: Distance of segment.
    points = Attribute(str) #: Encoded Google polyline of points in segment

    @property
    def segment(self):
        """ Associated (full) :class:`stravalib.model.Segment` object. """
        if self._segment is None:
            self.assert_bind_client()
            if self.id is not None:
                self._segment = self.bind_client.get_segment(self.id)
        return self._segment
Пример #18
0
class BaseEffort(LoadableEntity):
    """
    Base class for a best effort or segment effort.
    """
    name = Attribute(unicode, (SUMMARY,DETAILED)) #: The name of the segment
    segment = EntityAttribute(Segment, (SUMMARY,DETAILED)) #: The associated :class:`stravalib.model.Segment` for this effort 
    activity = EntityAttribute("Activity", (SUMMARY,DETAILED)) #: The associated :class:`stravalib.model.Activity`
    athlete = EntityAttribute(Athlete, (SUMMARY,DETAILED)) #: The associated :class:`stravalib.model.Athlete` 
    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. 
Пример #19
0
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 :)
Пример #20
0
class Gear(IdentifiableEntity):
    """
    Information about Gear (bike or shoes) used during activity.
    """
    id = Attribute(unicode, (META,SUMMARY,DETAILED)) #: Alpha-numeric gear ID.
    name = Attribute(unicode, (SUMMARY,DETAILED)) #: Name athlete entered for bike (does not apply to shoes)
    distance = Attribute(float, (SUMMARY,DETAILED), units=uh.meters) #: Distance for this bike/shoes.
    primary = Attribute(bool, (SUMMARY,DETAILED)) #: athlete's default bike/shoes
    brand_name = Attribute(unicode, (DETAILED,)) #: Brand name of bike/shoes.
    model_name = Attribute(unicode, (DETAILED,)) #: Modelname of bike/shoes.
    description = Attribute(unicode, (DETAILED,)) #: Description of bike/shoe item.

    @classmethod
    def deserialize(cls, v):
        """
        Creates a new object based on serialized (dict) struct.
        """
        if v is None:
            return None
        if cls == Gear and v.get('resource_state') == 3:
            if 'frame_type' in v:
                o = Bike()
            else:
                o = Shoe()
        else:
            o = cls()
        o.from_dict(v)
        return o
Пример #21
0
class SegmentLeaderboard(Sequence, BoundEntity):
    """
    The ranked leaderboard for a segment.

    This class is effectively a collection of :class:`stravalib.model.SegmentLeaderboardEntry` objects.
    """
    effort_count = Attribute(int)
    entry_count = Attribute(int)
    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]
Пример #22
0
class ActivityPhoto(LoadableEntity):
    """
    A full photo record attached to an activity.
    """
    activity_id = Attribute(int, (META, SUMMARY, DETAILED))  #: ID of activity
    ref = Attribute(str, (META, SUMMARY, DETAILED))  #: ref eg. "http://instagram.com/p/eAvA-tir85/"
    uid = Attribute(str, (META, SUMMARY, DETAILED))  #: unique id
    caption = Attribute(str, (META, SUMMARY, DETAILED))  #: caption on photo
    type = Attribute(str, (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
    location = LocationAttribute()  #: Start lat/lon of photo
    urls = Attribute(dict, (META, SUMMARY, DETAILED))
Пример #23
0
class Map(IdentifiableEntity):
    id = Attribute(unicode, (SUMMARY,DETAILED)) #: Alpha-numeric identifier
    polyline = Attribute(str, (SUMMARY,DETAILED)) #: Google polyline encoding
    summary_polyline = Attribute(str, (SUMMARY,DETAILED)) #: Google polyline encoding for summary shape
Пример #24
0
class ActivityKudos(LoadableEntity):
    """
    Activity kudos are a subset of athlete properties.
    """
    firstname = Attribute(unicode, (SUMMARY,DETAILED)) #: Athlete's first name.
    lastname = Attribute(unicode, (SUMMARY,DETAILED)) #: Athlete's last name.
    profile_medium = Attribute(unicode, (SUMMARY,DETAILED)) #: URL to a 62x62 pixel profile picture
    profile = Attribute(unicode, (SUMMARY,DETAILED)) #: URL to a 124x124 pixel profile picture
    city = Attribute(unicode, (SUMMARY,DETAILED)) #: Athlete's home city
    state = Attribute(unicode, (SUMMARY,DETAILED)) #: Athlete's home state
    country = Attribute(unicode, (SUMMARY,DETAILED)) #: Athlete's home country
    sex = Attribute(unicode, (SUMMARY,DETAILED)) #: Athlete's sex ('M', 'F' or null)
    friend = Attribute(unicode, (SUMMARY,DETAILED)) #: 'pending', 'accepted', 'blocked' or 'null' the authenticated athlete's following status of this athlete
    follower = Attribute(unicode, (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
Пример #25
0
class IdentifiableEntity(ResourceStateEntity):
    """
    Mixin for entities that include an ID attribute.
    """
    id = Attribute(int, (META,SUMMARY,DETAILED)) #: The numeric ID for this entity.
Пример #26
0
class ActivityLap(LoadableEntity):

    name = Attribute(unicode, (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
Пример #27
0
class ResourceStateEntity(BaseEntity):
    """
    Mixin for entities that include the resource_state attribute.
    """
    resource_state = Attribute(int, (META,SUMMARY,DETAILED)) #: The detail-level for this entity.
Пример #28
0
class Activity(LoadableEntity):
    """
    Represents an activity (ride, run, etc.).
    """
    # "Constants" for types of activities
    RIDE                = "Ride"
    RUN                 = "Run"
    SWIM                = "Swim"
    WALK                = "Walk"

    ALPINESKI           = "AlpineSki"
    BACKCOUNTRYSKI      = "BackcountrySki"
    CANOEING            = "Canoeing"
    CROSSCOUNTRYSKIING  = "CrossCountrySkiing"
    CROSSFIT            = "Crossfit"
    ELLIPTICAL          = "Elliptical"
    HIKE                = "Hike"
    ICESKATE            = "IceSkate"
    INLINESKATE         = "InlineSkate"
    KAYAKING            = "Kayaking"
    KITESURF            = "Kitesurf"
    NORDICSKI           = "NordicSki"
    ROCKCLIMBING        = "RockClimbing"
    ROLLERSKI           = "RollerSki"
    ROWING              = "Rowing"
    SNOWBOARD           = "Snowboard"
    SNOWSHOE            = "Snowshoe"
    STAIRSTEPPER        = "StairStepper"
    STANDUPPADDLING     = "StandUpPaddling"
    SURFING             = "Surfing"
    WEIGHTTRAINING      = "WeightTraining"
    WINDSURF            = "Windsurf"
    WORKOUT             = "Workout"
    YOGA                = "Yoga"

    _comments = None
    _zones = None
    _kudos = None
    _photos = None
    #_gear = None
    _laps = None

    TYPES = ( RIDE, RUN, SWIM, WALK, ALPINESKI, BACKCOUNTRYSKI, CANOEING,
              CROSSCOUNTRYSKIING, CROSSFIT, ELLIPTICAL, HIKE, ICESKATE,
              INLINESKATE, KAYAKING, KITESURF, NORDICSKI, ROCKCLIMBING,
              ROLLERSKI, ROWING, SNOWBOARD, SNOWSHOE, STAIRSTEPPER,
              STANDUPPADDLING, SURFING, WEIGHTTRAINING, WINDSURF, WORKOUT, YOGA)

    guid = Attribute(unicode, (SUMMARY,DETAILED)) #: (undocumented)

    external_id = Attribute(unicode, (SUMMARY,DETAILED)) #: An external ID for the activity (relevant when specified during upload).
    upload_id = Attribute(unicode, (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(unicode, (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.
    type = Attribute(unicode, (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.
    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(unicode, (SUMMARY,DETAILED)) #: The activity location city
    location_state = Attribute(unicode, (SUMMARY,DETAILED)) #: The activity location state
    location_country = Attribute(unicode, (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
    kudos_count = Attribute(int, (SUMMARY,DETAILED)) #: How many kudos received for activity
    comment_count = Attribute(int, (SUMMARY,DETAILED)) #: How many comments  for activity.
    athlete_count = Attribute(int, (SUMMARY,DETAILED)) #: How many other athlete's participated in activity
    photo_count = Attribute(int, (SUMMARY,DETAILED)) #: How many photos linked to activity
    map = EntityAttribute(Map, (SUMMARY,DETAILED)) #: :class:`stravavlib.model.Map` of activity.

    trainer = Attribute(bool, (SUMMARY,DETAILED)) #: Whether activity was performed on a stationary trainer.
    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(unicode, (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

    truncated = Attribute(int, (SUMMARY,DETAILED)) #: Only present if activity is owned by authenticated athlete, set to 0 if not truncated by privacy zones
    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)

    # Undocumented attributes
    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
    average_heartrate = Attribute(float, (SUMMARY,DETAILED))  #: (undocumented) Average HR during activity
    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
    device_watts = Attribute(bool, (SUMMARY,DETAILED)) # true if the watts are from a power meter, false if estimated
    average_temp = Attribute(int, (SUMMARY,DETAILED)) #: (undocumented) Average temperature (when available from device) during activity.

    calories = Attribute(float, (DETAILED,))  #: Calculation of how many calories burned on activity
    description = Attribute(unicode, (DETAILED,))  #: (undocumented) Description of activity.
    workout_type = Attribute(unicode, (DETAILED,))  #: (undocumented)

    @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 laps(self):
        """
        Iterator of :class:`stravalib.model.ActivityLap` objects for this activity.
        """
        if self._laps is None:
            self.assert_bind_client()
            self._laps = self.bind_client.get_activity_laps(self.id)
        return self._laps

    @property
    def zones(self):
        """
        :class:`list` of :class:`stravalib.model.ActivityZone` objects for this activity.
        """
        if self._zones is None:
            self.assert_bind_client()
            self._zones = self.bind_client.get_activity_zones(self.id)
        return self._zones

    @property
    def kudos(self):
        """
        :class:`list` of :class:`stravalib.model.ActivityKudos` objects for this activity.
        """
        if self._kudos is None:
            self.assert_bind_client()
            self._kudos = self.bind_client.get_activity_kudos(self.id)
        return self._kudos

    @property
    def photos(self):
        """
        :class:`list` of :class:`stravalib.model.ActivityPhoto` objects for this activity.
        """
        if self._photos is None:
            if self.photo_count > 0:
                self.assert_bind_client()
                self._photos = self.bind_client.get_activity_photos(self.id)
            else:
                self._photos = []
        return self._photos
Пример #29
0
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.
Пример #30
0
class Segment(LoadableEntity):
    """
    Represents a single Strava segment.
    """
    _leaderboard = None

    name = Attribute(unicode, (SUMMARY,DETAILED)) #: Name of the segment.
    activity_type = Attribute(unicode, (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`)
    end_latlng = LocationAttribute((SUMMARY,DETAILED)) #: The end lat/lon (:class:`tuple`)
    start_latitude = Attribute(float, (SUMMARY,DETAILED)) #: The start latitude (:class:`float`)
    end_latitude = Attribute(float, (SUMMARY,DETAILED)) #: The end latitude (:class:`float`)
    start_longitude = Attribute(float, (SUMMARY,DETAILED)) #: The start longitude (:class:`float`)
    end_longitude = Attribute(float, (SUMMARY,DETAILED)) #: The end longitude (:class:`float`)
    climb_category = Attribute(int, (SUMMARY,DETAILED)) # 0-5, lower is harder
    city = Attribute(unicode, (SUMMARY,DETAILED)) #: The city this segment is in.
    state = Attribute(unicode, (SUMMARY,DETAILED)) #: The state this segment is in.
    country = Attribute(unicode, (SUMMARY,DETAILED)) #: The country this segment is in.
    private = Attribute(bool, (SUMMARY,DETAILED)) #: Whether this is a private segment.
    starred = Attribute(bool, (SUMMARY,DETAILED)) #: Whether this segment is starred by authenticated 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.

    @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