API - do not return elevation in chart data when no elevation in file
This commit is contained in:
		| @@ -1721,7 +1721,65 @@ class TestPostAndGetWorkoutWithGpx(ApiTestCaseMixin): | |||||||
|         assert response.status_code == 200 |         assert response.status_code == 200 | ||||||
|         assert 'success' in data['status'] |         assert 'success' in data['status'] | ||||||
|         assert data['message'] == '' |         assert data['message'] == '' | ||||||
|         assert data['data']['chart_data'] != '' |         assert len(data['data']['chart_data']) == gpx_file.count("</trkpt>") | ||||||
|  |         assert data['data']['chart_data'][0] == { | ||||||
|  |             'distance': 0.0, | ||||||
|  |             'duration': 0, | ||||||
|  |             'elevation': 998.0, | ||||||
|  |             'latitude': 44.68095, | ||||||
|  |             'longitude': 6.07367, | ||||||
|  |             'speed': 3.21, | ||||||
|  |             'time': 'Tue, 13 Mar 2018 12:44:45 GMT', | ||||||
|  |         } | ||||||
|  |  | ||||||
|  |     def test_it_gets_chart_data_for_a_workout_created_with_gpx_without_elevation(  # noqa | ||||||
|  |         self, | ||||||
|  |         app: Flask, | ||||||
|  |         user_1: User, | ||||||
|  |         sport_1_cycling: Sport, | ||||||
|  |         gpx_file_without_elevation: str, | ||||||
|  |     ) -> None: | ||||||
|  |         client, auth_token = self.get_test_client_and_auth_token( | ||||||
|  |             app, user_1.email | ||||||
|  |         ) | ||||||
|  |  | ||||||
|  |         response = client.post( | ||||||
|  |             '/api/workouts', | ||||||
|  |             data=dict( | ||||||
|  |                 file=( | ||||||
|  |                     BytesIO(str.encode(gpx_file_without_elevation)), | ||||||
|  |                     'example.gpx', | ||||||
|  |                 ), | ||||||
|  |                 data='{"sport_id": 1}', | ||||||
|  |             ), | ||||||
|  |             headers=dict( | ||||||
|  |                 content_type='multipart/form-data', | ||||||
|  |                 Authorization=f'Bearer {auth_token}', | ||||||
|  |             ), | ||||||
|  |         ) | ||||||
|  |         data = json.loads(response.data.decode()) | ||||||
|  |         workout_short_id = data['data']['workouts'][0]['id'] | ||||||
|  |         response = client.get( | ||||||
|  |             f'/api/workouts/{workout_short_id}/chart_data', | ||||||
|  |             headers=dict(Authorization=f'Bearer {auth_token}'), | ||||||
|  |         ) | ||||||
|  |  | ||||||
|  |         data = json.loads(response.data.decode()) | ||||||
|  |         assert response.status_code == 200 | ||||||
|  |         assert 'success' in data['status'] | ||||||
|  |         assert data['message'] == '' | ||||||
|  |         assert len( | ||||||
|  |             data['data']['chart_data'] | ||||||
|  |         ) == gpx_file_without_elevation.count("</trkpt>") | ||||||
|  |         # no 'elevation' key in data | ||||||
|  |         assert data['data']['chart_data'][0] == { | ||||||
|  |             'distance': 0.0, | ||||||
|  |             'duration': 0, | ||||||
|  |             'latitude': 44.68095, | ||||||
|  |             'longitude': 6.07367, | ||||||
|  |             'speed': 3.21, | ||||||
|  |             'time': 'Tue, 13 Mar 2018 12:44:45 GMT', | ||||||
|  |         } | ||||||
|  |  | ||||||
|     def test_it_gets_segment_chart_data_for_a_workout_created_with_gpx( |     def test_it_gets_segment_chart_data_for_a_workout_created_with_gpx( | ||||||
|         self, app: Flask, user_1: User, sport_1_cycling: Sport, gpx_file: str |         self, app: Flask, user_1: User, sport_1_cycling: Sport, gpx_file: str | ||||||
| @@ -1753,6 +1811,16 @@ class TestPostAndGetWorkoutWithGpx(ApiTestCaseMixin): | |||||||
|         assert 'success' in data['status'] |         assert 'success' in data['status'] | ||||||
|         assert data['message'] == '' |         assert data['message'] == '' | ||||||
|         assert data['data']['chart_data'] != '' |         assert data['data']['chart_data'] != '' | ||||||
|  |         assert len(data['data']['chart_data']) == gpx_file.count("</trkpt>") | ||||||
|  |         assert data['data']['chart_data'][0] == { | ||||||
|  |             'distance': 0.0, | ||||||
|  |             'duration': 0, | ||||||
|  |             'elevation': 998.0, | ||||||
|  |             'latitude': 44.68095, | ||||||
|  |             'longitude': 6.07367, | ||||||
|  |             'speed': 3.21, | ||||||
|  |             'time': 'Tue, 13 Mar 2018 12:44:45 GMT', | ||||||
|  |         } | ||||||
|  |  | ||||||
|     def test_it_returns_403_on_getting_chart_data_if_workout_belongs_to_another_user(  # noqa |     def test_it_returns_403_on_getting_chart_data_if_workout_belongs_to_another_user(  # noqa | ||||||
|         self, |         self, | ||||||
|   | |||||||
| @@ -42,7 +42,7 @@ def get_gpx_data( | |||||||
|     gpx_data['elevation_max'] = ele.maximum |     gpx_data['elevation_max'] = ele.maximum | ||||||
|     gpx_data['elevation_min'] = ele.minimum |     gpx_data['elevation_min'] = ele.minimum | ||||||
|  |  | ||||||
|     # gpx file contains elevation datat (<ele> element) |     # gpx file contains elevation data (<ele> element) | ||||||
|     if ele.maximum is not None: |     if ele.maximum is not None: | ||||||
|         hill = parsed_gpx.get_uphill_downhill() |         hill = parsed_gpx.get_uphill_downhill() | ||||||
|         gpx_data['uphill'] = hill.uphill |         gpx_data['uphill'] = hill.uphill | ||||||
| @@ -242,29 +242,23 @@ def get_chart_data( | |||||||
|                 if segment.get_speed(point_idx) is not None |                 if segment.get_speed(point_idx) is not None | ||||||
|                 else 0 |                 else 0 | ||||||
|             ) |             ) | ||||||
|             chart_data.append( |             data = { | ||||||
|                 { |                 'distance': ( | ||||||
|                     'distance': ( |                     round(distance / 1000, 2) if distance is not None else 0 | ||||||
|                         round(distance / 1000, 2) |                 ), | ||||||
|                         if distance is not None |                 'duration': point.time_difference(first_point), | ||||||
|                         else 0 |                 'latitude': point.latitude, | ||||||
|                     ), |                 'longitude': point.longitude, | ||||||
|                     'duration': point.time_difference(first_point), |                 'speed': speed, | ||||||
|                     'elevation': ( |                 # workaround | ||||||
|                         round(point.elevation, 1) |                 # https://github.com/tkrajina/gpxpy/issues/209 | ||||||
|                         if point.elevation is not None |                 'time': point.time.replace( | ||||||
|                         else 0 |                     tzinfo=timezone(point.time.utcoffset()) | ||||||
|                     ), |                 ), | ||||||
|                     'latitude': point.latitude, |             } | ||||||
|                     'longitude': point.longitude, |             if point.elevation: | ||||||
|                     'speed': speed, |                 data['elevation'] = round(point.elevation, 1) | ||||||
|                     # workaround |             chart_data.append(data) | ||||||
|                     # https://github.com/tkrajina/gpxpy/issues/209 |  | ||||||
|                     'time': point.time.replace( |  | ||||||
|                         tzinfo=timezone(point.time.utcoffset()) |  | ||||||
|                     ), |  | ||||||
|                 } |  | ||||||
|             ) |  | ||||||
|             previous_point = point |             previous_point = point | ||||||
|             previous_distance = distance |             previous_distance = distance | ||||||
|  |  | ||||||
|   | |||||||
		Reference in New Issue
	
	Block a user