Stravalib V2 Migration Guide#
Stravalib V2 includes several breaking changes. The sections below provide a guide to help you migrate your code to this latest release.
Pydantic V2#
Stravalib now uses Pydantic V2. If your code uses extensions of Stravalib model
classes or uses Pydantic’s (de-)
serialization mechanisms such as parse_obj(), dict(), or json(), please
consider going
through Pydantic’s V2 migration guide
first.
Legacy (de-)Serialization#
The already deprecated (de-)serialization
methods deserialize(), from_dict(), and to_dict() are no longer
supported. Instead, please
use Pydantic’s serialization mechanisms.
Strava Meta/Summary/Detailed Type Hierarchy#
Many model classes were changed to reflect the type hierarchy defined in the
Strava API. This means that classes such
as Activity are now split into MetaActivity, SummaryActivity,
and DetailedActivity.
As MetaActivity has fewer attributes than the former Activity class,
this may lead to AttributeErrors.
However, these missing attributes would have a None value, as the Strava API
never returned them. Code that uses
checks on resource_state attributes or checks attributes on being None to
determine the detail level of a response
object should now rely on the type itself.
Since many class names from Stravalib V1 have been replaced, any isinstance()
checks on Stravalib model types may
now (silently) fail.
Unit Conversion#
The former unithelper module is renamed to unit_helper for naming
consistency. The deprecated compatibility with
the units package is no longer supported. The helper functions
in unit_helper such as feet() or miles() now
return a Pint Quantity object.
Custom Types#
Stravalib V2 introduces new types for distances, velocities, durations, and time
zones. When accessed from a model
object. For example, activity.distance now returns a Distance type, which is an
extension of float. The “plain”
distance (in meters, the Strava default) can now be retrieved as a float
by activity.distance. However, this distance
can also be received as a Quantity with an explicit unit
using activity.distance.quantity.
This behavior differs from Stravalib V1, where activity.distance would
immediately return a Quantity-like object.
Detailed documentation about these new custom types can be
found here.
Other#
The remaining unrelated breaking changes are:
The
ActivityKudosclass has been removed. Stravalib now uses the newSummaryAthleteclass in its place.Athlete.is_authenticated_athlete()is removed.The
BikeandShoesubtypes ofGearare replaced bystrava_model.SummaryGear.