本文整理汇总了Python中tapiriik.services.interchange.UploadedActivity.Waypoints方法的典型用法代码示例。如果您正苦于以下问题:Python UploadedActivity.Waypoints方法的具体用法?Python UploadedActivity.Waypoints怎么用?Python UploadedActivity.Waypoints使用的例子?那么恭喜您, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类tapiriik.services.interchange.UploadedActivity
的用法示例。
在下文中一共展示了UploadedActivity.Waypoints方法的3个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的Python代码示例。
示例1: DownloadActivityList
# 需要导入模块: from tapiriik.services.interchange import UploadedActivity [as 别名]
# 或者: from tapiriik.services.interchange.UploadedActivity import Waypoints [as 别名]
def DownloadActivityList(self, svcRec, exhaustive=False):
dbcl = self._getClient(svcRec)
if not svcRec.Authorization["Full"]:
syncRoot = "/"
else:
syncRoot = svcRec.Config["SyncRoot"]
cache = cachedb.dropbox_cache.find_one({"ExternalID": svcRec.ExternalID})
if cache is None:
cache = {"ExternalID": svcRec.ExternalID, "Structure": [], "Activities": {}}
if "Structure" not in cache:
cache["Structure"] = []
self._folderRecurse(cache["Structure"], dbcl, syncRoot)
activities = []
exclusions = []
for dir in cache["Structure"]:
for file in dir["Files"]:
path = file["Path"]
if svcRec.Authorization["Full"]:
relPath = path.replace(syncRoot, "", 1)
else:
relPath = path.replace("/Apps/tapiriik/", "", 1) # dropbox api is meh api
existing = [(k, x) for k, x in cache["Activities"].items() if x["Path"] == relPath] # path is relative to syncroot to reduce churn if they relocate it
existing = existing[0] if existing else None
if existing is not None:
existUID, existing = existing
if existing and existing["Rev"] == file["Rev"]:
# don't need entire activity loaded here, just UID
act = UploadedActivity()
act.UID = existUID
act.StartTime = datetime.strptime(existing["StartTime"], "%H:%M:%S %d %m %Y %z")
if "EndTime" in existing: # some cached activities may not have this, it is not essential
act.EndTime = datetime.strptime(existing["EndTime"], "%H:%M:%S %d %m %Y %z")
else:
# get the full activity
try:
act, rev = self._getActivity(svcRec, dbcl, path)
except APIExcludeActivity as e:
logger.info("Encountered APIExcludeActivity %s" % str(e))
exclusions.append(e)
continue
del act.Waypoints
act.Waypoints = [] # Yeah, I'll process the activity twice, but at this point CPU time is more plentiful than RAM.
cache["Activities"][act.UID] = {"Rev": rev, "Path": relPath, "StartTime": act.StartTime.strftime("%H:%M:%S %d %m %Y %z"), "EndTime": act.EndTime.strftime("%H:%M:%S %d %m %Y %z")}
tagRes = self._tagActivity(relPath)
act.UploadedTo = [{"Connection": svcRec, "Path": path, "Tagged":tagRes is not None}]
act.Type = tagRes if tagRes is not None else ActivityType.Other
logger.debug("Activity s/t %s" % act.StartTime)
activities.append(act)
cachedb.dropbox_cache.update({"ExternalID": svcRec.ExternalID}, cache, upsert=True)
return activities, exclusions
示例2: DownloadActivityList
# 需要导入模块: from tapiriik.services.interchange import UploadedActivity [as 别名]
# 或者: from tapiriik.services.interchange.UploadedActivity import Waypoints [as 别名]
def DownloadActivityList(self, serviceRecord, exhaustive=False):
activities = []
exclusions = []
earliestDate = None
earliestFirstPageDate = None
paged = False
while True:
before = "" if earliestDate is None else earliestDate.astimezone(pytz.utc).strftime("%Y-%m-%d %H:%M:%S UTC")
params = {"authToken": serviceRecord.Authorization["AuthToken"], "maxResults": 45, "before": before}
logger.debug("Req with " + str(params))
response = requests.get("http://api.mobile.endomondo.com/mobile/api/workout/list", params=params)
if response.status_code != 200:
if response.status_code == 401 or response.status_code == 403:
raise APIAuthorizationException("No authorization to retrieve activity list")
raise APIException("Unable to retrieve activity list " + str(response))
data = response.json()
for act in data["data"]:
startTime = pytz.utc.localize(datetime.strptime(act["start_time"], "%Y-%m-%d %H:%M:%S UTC"))
if earliestDate is None or startTime < earliestDate: # probably redundant, I would assume it works out the TZes...
earliestDate = startTime
logger.debug("activity pre")
if not act["has_points"]:
logger.warning("\t no pts")
exclusions.append(APIExcludeActivity("No points", activityId=act["id"]))
continue # it'll break strava, which needs waypoints to find TZ. Meh
if "tracking" in act and act["tracking"]:
logger.warning("\t tracking")
exclusions.append(APIExcludeActivity("In progress", activityId=act["id"], permanent=False))
continue # come back once they've completed the activity
activity = UploadedActivity()
activity.StartTime = startTime
activity.EndTime = activity.StartTime + timedelta(0, round(act["duration_sec"]))
logger.debug("\tActivity s/t " + str(activity.StartTime))
# attn service makers: why #(*%$ can't you all agree to use naive local time. So much simpler.
cachedTrackData = cachedb.endomondo_activity_cache.find_one({"TrackID": act["id"]})
if cachedTrackData is None:
data = self._downloadRawTrackRecord(serviceRecord, act["id"])
self._populateActivityFromTrackRecord(activity, data, minimumWaypoints=True)
cachedTrackData = {"Owner": serviceRecord.ExternalID, "TrackID": act["id"], "Data": data, "StartTime": activity.StartTime}
if not paged or AGGRESSIVE_CACHE: # Don't cache stuff that we won't need in the immediate future.
cachedb.endomondo_activity_cache.insert(cachedTrackData)
else:
self._populateActivityFromTrackRecord(activity, cachedTrackData["Data"], minimumWaypoints=True)
activity.Waypoints = []
if int(act["sport"]) in self._activityMappings:
activity.Type = self._activityMappings[int(act["sport"])]
activity.UploadedTo = [{"Connection": serviceRecord, "ActivityID": act["id"], "ActivityData": cachedTrackData["Data"]}]
activity.CalculateUID()
activities.append(activity)
if not paged:
earliestFirstPageDate = earliestDate
if not exhaustive or ("more" in data and data["more"] is False):
break
else:
paged = True
if not AGGRESSIVE_CACHE:
cachedb.endomondo_activity_cache.remove({"Owner": serviceRecord.ExternalID, "$or":[{"StartTime":{"$lt": earliestFirstPageDate}}, {"StartTime":{"$exists": False}}]})
return activities, exclusions
示例3: DownloadActivityList
# 需要导入模块: from tapiriik.services.interchange import UploadedActivity [as 别名]
# 或者: from tapiriik.services.interchange.UploadedActivity import Waypoints [as 别名]
def DownloadActivityList(self, serviceRecord, exhaustive=False):
activities = []
exclusions = []
earliestDate = None
earliestFirstPageDate = None
paged = False
while True:
before = "" if earliestDate is None else earliestDate.astimezone(pytz.utc).strftime("%Y-%m-%d %H:%M:%S UTC")
params = {"authToken": serviceRecord.Authorization["AuthToken"], "maxResults": 45, "before": before}
logger.debug("Req with " + str(params))
response = requests.get("http://api.mobile.endomondo.com/mobile/api/workout/list", params=params)
if response.status_code != 200:
if response.status_code == 401 or response.status_code == 403:
raise APIException("No authorization to retrieve activity list", block=True, user_exception=UserException(UserExceptionType.Authorization, intervention_required=True))
raise APIException("Unable to retrieve activity list " + str(response))
data = response.json()
if "error" in data and data["error"]["type"] == "AUTH_FAILED":
raise APIException("No authorization to retrieve activity list", block=True, user_exception=UserException(UserExceptionType.Authorization, intervention_required=True))
track_ids = []
this_page_activities = []
for act in data["data"]:
startTime = pytz.utc.localize(datetime.strptime(act["start_time"], "%Y-%m-%d %H:%M:%S UTC"))
if earliestDate is None or startTime < earliestDate: # probably redundant, I would assume it works out the TZes...
earliestDate = startTime
logger.debug("activity pre")
if not act["has_points"]:
logger.warning("\t no pts")
exclusions.append(APIExcludeActivity("No points", activityId=act["id"]))
continue # it'll break strava, which needs waypoints to find TZ. Meh
if "tracking" in act and act["tracking"]:
logger.warning("\t tracking")
exclusions.append(APIExcludeActivity("In progress", activityId=act["id"], permanent=False))
continue # come back once they've completed the activity
track_ids.append(act["id"])
activity = UploadedActivity()
activity.StartTime = startTime
activity.EndTime = activity.StartTime + timedelta(0, round(act["duration_sec"]))
logger.debug("\tActivity s/t " + str(activity.StartTime))
if int(act["sport"]) in self._activityMappings:
activity.Type = self._activityMappings[int(act["sport"])]
activity.UploadedTo = [{"Connection": serviceRecord, "ActivityID": act["id"]}]
this_page_activities.append(activity)
cached_track_tzs = cachedb.endomondo_activity_cache.find({"TrackID":{"$in": track_ids}})
cached_track_tzs = dict([(x["TrackID"], x) for x in cached_track_tzs])
logger.debug("Have" + str(len(cached_track_tzs.keys())) + "/" + str(len(track_ids)) + " cached TZ records")
for activity in this_page_activities:
# attn service makers: why #(*%$ can't you all agree to use naive local time. So much simpler.
cachedTrackData = None
track_id = activity.UploadedTo[0]["ActivityID"]
if track_id not in cached_track_tzs:
logger.debug("\t Resolving TZ for %s" % activity.StartTime)
cachedTrackData = self._downloadRawTrackRecord(serviceRecord, track_id)
try:
self._populateActivityFromTrackData(activity, cachedTrackData, minimumWaypoints=True)
except APIExcludeActivity as e:
e.ExternalActivityID = track_id
logger.info("Encountered APIExcludeActivity %s" % str(e))
exclusions.append(e)
continue
if not activity.TZ:
logger.info("Couldn't determine TZ")
exclusions.append(APIExcludeActivity("Couldn't determine TZ", activityId=track_id))
continue
cachedTrackRecord = {"Owner": serviceRecord.ExternalID, "TrackID": track_id, "TZ": pickle.dumps(activity.TZ), "StartTime": activity.StartTime}
cachedb.endomondo_activity_cache.insert(cachedTrackRecord)
else:
activity.TZ = pickle.loads(cached_track_tzs[track_id]["TZ"])
activity.AdjustTZ() # Everything returned is in UTC
activity.UploadedTo[0]["ActivityData"] = cachedTrackData
activity.Waypoints = []
activity.CalculateUID()
activities.append(activity)
if not paged:
earliestFirstPageDate = earliestDate
if not exhaustive or ("more" in data and data["more"] is False):
break
else:
paged = True
return activities, exclusions