Merge pull request #22 from dlenski/fix_and_improve_upload
Fix and improve upload (round 2)
This commit is contained in:
		
						commit
						186fa4ac7b
					
				| @ -393,21 +393,17 @@ class GarminClient(object): | ||||
|         activity_id = j["successes"][0]["internalId"] | ||||
| 
 | ||||
|         # add optional fields | ||||
|         fields = ( ('name',name,("display","value")), | ||||
|                    ('description',description,("display","value")), | ||||
|                    ('type',activity_type,("activityType","key")), | ||||
|                    ('privacy','private' if private else None,("definition","key")) ) | ||||
|         for endpoint, value, path in fields: | ||||
|             if value is not None: | ||||
|                 response = self.session.post("https://connect.garmin.com/proxy/activity-service-1.2/json/{}/{}".format(endpoint, activity_id), | ||||
|                                              data={'value':value}) | ||||
|                 if response.status_code != 200: | ||||
|                     raise Exception(u"failed to set {} for activity {}: {}\n{}".format( | ||||
|                         endpoint, activity_id, response.status_code, response.text)) | ||||
| 
 | ||||
|                 j = response.json() | ||||
|                 p0, p1 = path | ||||
|                 if p0 not in j or j[p0][p1] != value: | ||||
|                     raise Exception(u"failed to set {} for activity {}\n".format(endpoint, activity_id)) | ||||
|         data = {} | ||||
|         if name is not None: data['activityName'] = name | ||||
|         if description is not None: data['description'] = name | ||||
|         if activity_type is not None: data['activityTypeDTO'] = {"typeKey": activity_type} | ||||
|         if private: data['privacy'] = {"typeKey": "private"} | ||||
|         if data: | ||||
|             data['activityId'] = activity_id | ||||
|             encoding_headers = {"Content-Type": "application/json; charset=UTF-8"} # see Tapiriik | ||||
|             response = self.session.put("https://connect.garmin.com/proxy/activity-service/activity/{}".format(activity_id), data=json.dumps(data), headers=encoding_headers) | ||||
|             if response.status_code != 204: | ||||
|                 raise Exception(u"failed to set metadata for activity {}: {}\n{}".format( | ||||
|                     activity_id, response.status_code, response.text)) | ||||
| 
 | ||||
|         return activity_id | ||||
|  | ||||
| @ -41,6 +41,8 @@ if __name__ == "__main__": | ||||
|         '-D', '--description', help="Activity description on Garmin Connect.") | ||||
|     parser.add_argument( | ||||
|         '-P', '--private', action='store_true', help="Make activity private on Garmin Connect.") | ||||
|     parser.add_argument( | ||||
|         '-T', '--type', help="Override activity type (running, cycling, walking, hiking, strength_training, etc.)") | ||||
|     parser.add_argument( | ||||
|         "--log-level", metavar="LEVEL", type=str, | ||||
|         help=("Desired log output level (DEBUG, INFO, WARNING, ERROR). " | ||||
| @ -61,9 +63,9 @@ if __name__ == "__main__": | ||||
|             for activity in args.activity: | ||||
|                 log.info("uploading activity file {} ...".format(activity.name)) | ||||
|                 try: | ||||
|                     id = client.upload_activity(activity, name=args.name, description=args.description, private=args.private) | ||||
|                     id = client.upload_activity(activity, name=args.name, description=args.description, private=args.private, activity_type=args.type) | ||||
|                 except Exception as e: | ||||
|                     log.error("upload failed: {}".format(e)) | ||||
|                     log.error("upload failed: {!r}".format(e)) | ||||
|                 else: | ||||
|                     log.info("upload successful: https://connect.garmin.com/modern/activity/{}".format(id)) | ||||
|     except Exception as e: | ||||
|  | ||||
		Loading…
	
		Reference in New Issue
	
	Block a user